aboutsummaryrefslogtreecommitdiffstats
path: root/lualib/lua_fuzzy.lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-11-06 16:18:54 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-11-06 16:18:54 +0000
commit5194734bd3b441451dbd64c076df953f30248922 (patch)
treea36bf0f11b762e4d1515cb04af35381e51bc5889 /lualib/lua_fuzzy.lua
parentea49db2b8ba4294377c93bed0a903c7b99af4904 (diff)
downloadrspamd-5194734bd3b441451dbd64c076df953f30248922.tar.gz
rspamd-5194734bd3b441451dbd64c076df953f30248922.zip
[Minor] Fix various issues with lua_fuzzy
Diffstat (limited to 'lualib/lua_fuzzy.lua')
-rw-r--r--lualib/lua_fuzzy.lua56
1 files changed, 40 insertions, 16 deletions
diff --git a/lualib/lua_fuzzy.lua b/lualib/lua_fuzzy.lua
index ee5a84e62..f34946c92 100644
--- a/lualib/lua_fuzzy.lua
+++ b/lualib/lua_fuzzy.lua
@@ -96,12 +96,12 @@ exports.process_rule = function(rule)
if processed_rule.policy then
policy = policies[processed_rule.policy]
+ end
- if policy then
- processed_rule = lua_util.override_defaults(policy, processed_rule)
- else
- rspamd_logger.warnx(rspamd_config, "unknown policy %s", processed_rule.policy)
- end
+ if policy then
+ processed_rule = lua_util.override_defaults(policy, processed_rule)
+ else
+ rspamd_logger.warnx(rspamd_config, "unknown policy %s", processed_rule.policy)
end
if processed_rule.mime_types then
@@ -110,13 +110,6 @@ exports.process_rule = function(rule)
end, processed_rule.mime_types))
end
- if processed_rule.extensions then
- processed_rule.mime_types = fun.totable(fun.map(function(gl)
- return rspamd_regexp.import_glob(gl, 'i')
- end, processed_rule.extensions))
- end
-
-
table.insert(rules, processed_rule)
return #rules
end
@@ -124,6 +117,9 @@ end
local function check_length(task, part, rule)
local length_ok = true
+ local id = part:get_id()
+ lua_util.debugm(N, task, 'check size of part %s', id)
+
if rule.min_bytes then
local bytes = part:get_length()
local adjusted_bytes = bytes
@@ -139,7 +135,12 @@ local function check_length(task, part, rule)
'as it has less than %s bytes',
bytes, adjusted_bytes, rule.min_bytes)
length_ok = false
+ else
+ lua_util.debugm(N, task, 'allow part of length %s (%s adjusted)',
+ bytes, adjusted_bytes, rule.min_bytes)
end
+ else
+ lua_util.debugm(N, task, 'allow part %s, no length limits', id)
end
return length_ok
@@ -148,24 +149,36 @@ end
local function check_text_part(task, part, rule, text)
local allow_direct,allow_shingles = false,false
+ local id = part:get_id()
+ lua_util.debugm(N, task, 'check text part %s', id)
+
if rule.text_shingles then
-- Check number of words
local wcnt = text:get_words_count()
if rule.min_length and wcnt < rule.min_length then
- lua_util.debugm(N, task, 'text has less than %s words: %s',
+ lua_util.debugm(N, task, 'text has less than %s words: %s; disable shingles',
rule.min_length, wcnt)
allow_shingles = false
else
+ lua_util.debugm(N, task, 'allow shingles in text %s, %s words',
+ id, wcnt)
allow_shingles = true
end
if not rule.short_text_direct_hash and not allow_shingles then
allow_direct = false
else
- allow_direct = check_length(task, part, rule)
+ if not allow_shingles then
+ lua_util.debugm(N, task,
+ 'allow direct hash for short text %s, %s words',
+ id, wcnt)
+ allow_direct = check_length(task, part, rule)
+ end
end
else
+ lua_util.debugm(N, task,
+ 'disable shingles in text %s', id)
allow_direct = check_length(task, part, rule)
end
@@ -178,6 +191,9 @@ local function check_image_part(task, part, rule, image)
return false,false
end
+ local id = part:get_id()
+ lua_util.debugm(N, task, 'check image part %s', id)
+
if rule.min_width or rule.min_height then
-- Check dimensions
local min_width = rule.min_width or rule.min_height
@@ -187,10 +203,13 @@ local function check_image_part(task, part, rule, image)
if height and width then
if height < min_height or width < min_width then
- lua_util.debugm(N, task, 'skip image part as it does not meet minimum sizes: %sx%s < %sx%s',
- width, height, min_width, min_height)
+ lua_util.debugm(N, task, 'skip image part %s as it does not meet minimum sizes: %sx%s < %sx%s',
+ id, width, height, min_width, min_height)
return false, false
+ else
+ lua_util.debugm(N, task, 'allow image part %s: %sx%s',
+ id, width, height)
end
end
end
@@ -205,6 +224,7 @@ local function mime_types_check(task, part, rule)
local ct = string.format('%s/%s', t, st)
local id = part:get_id()
+ lua_util.debugm(N, task, 'check binary part %s: %s', id, ct)
-- For bad mime mime parts we implicitly enable fuzzy check
local mime_trace = task:get_symbol('MIME_TRACE')
@@ -219,6 +239,7 @@ local function mime_types_check(task, part, rule)
end, opts))
if opts[id] and opts[id] == '-' then
+ lua_util.debugm(N, task, 'explicitly check binary part %s: bad mime type %s', id, ct)
return check_length(task, part, rule),false
end
@@ -226,6 +247,7 @@ local function mime_types_check(task, part, rule)
if fun.any(function(gl_re)
if gl_re:match(ct) then return true else return false end
end, rule.mime_types) then
+ lua_util.debugm(N, task, 'found mime type match for part %s: %s', id, ct)
return check_length(task, part, rule),false
end
@@ -254,6 +276,8 @@ exports.check_mime_part = function(task, part, rule_id)
if part:is_archive() and rule.scan_archives then
-- Always send archives
+ lua_util.debugm(N, task, 'check archive part %s', part:get_id())
+
return true,false
end