]> source.dussan.org Git - rspamd.git/commitdiff
[Rework] Reiterate on priorities
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 10 Sep 2022 13:43:36 +0000 (14:43 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 10 Sep 2022 13:43:36 +0000 (14:43 +0100)
14 files changed:
lualib/lua_util.lua
rules/misc.lua
src/plugins/lua/antivirus.lua
src/plugins/lua/asn.lua
src/plugins/lua/aws_s3.lua
src/plugins/lua/external_relay.lua
src/plugins/lua/external_services.lua
src/plugins/lua/force_actions.lua
src/plugins/lua/greylist.lua
src/plugins/lua/neural.lua
src/plugins/lua/p0f.lua
src/plugins/lua/ratelimit.lua
src/plugins/lua/replies.lua
src/plugins/lua/settings.lua

index 454629bbae0395573cf97acee7e442b5b7a5bab1..b4707c4bd62383a85e528eb9a1d3cb3472d0e2de 100644 (file)
@@ -1532,4 +1532,12 @@ end
 
 exports.dns_timeout_augmentation = dns_timeout_augmentation
 
+-- Defines symbols priorities for common usage in prefilters/postfilters
+exports.symbols_priorities = {
+  top = 10, -- Symbols must be executed first (or last), such as settings
+  high = 9, -- Example: asn
+  medium = 5, -- Everything should use this as default
+  low = 0,
+}
+
 return exports
index 1b2f3fa7b80e8e27dff227dd6b98c5cffe7be889..eff49864fbc344d3f248d26a8b0dd58e1ec0f624 100644 (file)
@@ -18,10 +18,10 @@ limitations under the License.
 
 local E = {}
 local fun = require "fun"
-local util = require "rspamd_util"
+local rspamd_util = require "rspamd_util"
 local rspamd_parsers = require "rspamd_parsers"
 local rspamd_regexp = require "rspamd_regexp"
-local rspamd_lua_utils = require "lua_util"
+local lua_util = require "lua_util"
 local bit = require "bit"
 local rspamd_url = require "rspamd_url"
 local url_flags_tab = rspamd_url.flags
@@ -409,7 +409,7 @@ rspamd_config.OMOGRAPH_URL = {
           end
           if h1 and h2 then
             local selt = string.format('%s->%s', h1, h2)
-            if not seen[selt] and util.is_utf_spoofed(h1, h2) then
+            if not seen[selt] and rspamd_util.is_utf_spoofed(h1, h2) then
               bad_urls[#bad_urls + 1] = selt
               bad_omographs = bad_omographs + 1
             end
@@ -420,7 +420,7 @@ rspamd_config.OMOGRAPH_URL = {
           local h = u:get_tld()
 
           if h then
-            if not seen[h] and util.is_utf_spoofed(h) then
+            if not seen[h] and rspamd_util.is_utf_spoofed(h) then
               bad_urls[#bad_urls + 1] = h
               single_bad_omograps = single_bad_omograps + 1
             end
@@ -482,7 +482,7 @@ local aliases_id = rspamd_config:register_symbol{
     local function check_from(type)
       if task:has_from(type) then
         local addr = task:get_from(type)[1]
-        local na,tags = rspamd_lua_utils.remove_email_aliases(addr)
+        local na,tags = lua_util.remove_email_aliases(addr)
         if na then
           task:set_from(type, addr, 'alias')
           task:insert_result('TAGGED_FROM', 1.0, fun.totable(
@@ -501,7 +501,7 @@ local aliases_id = rspamd_config:register_symbol{
         local addrs = task:get_recipients(type)
 
         for _, addr in ipairs(addrs) do
-          local na,tags = rspamd_lua_utils.remove_email_aliases(addr)
+          local na,tags = lua_util.remove_email_aliases(addr)
           if na then
             modified = true
             fun.each(function(t) table.insert(all_tags, t) end,
@@ -519,7 +519,7 @@ local aliases_id = rspamd_config:register_symbol{
     check_rcpt('smtp')
     check_rcpt('mime')
   end,
-  priority = 150,
+  priority = lua_util.symbols_priorities.top + 1,
   description = 'Removes plus aliases from the email',
   group = 'headers',
 }
@@ -554,13 +554,13 @@ local check_from_display_name = rspamd_config:register_symbol{
     -- Make sure we did not mistake e.g. <something>@<name> for an email address
     if not parsed[1]['domain'] or not parsed[1]['domain']:find('%.') then return false end
     -- See if the parsed domains differ
-    if not util.strequal_caseless(from[1]['domain'], parsed[1]['domain']) then
+    if not rspamd_util.strequal_caseless(from[1]['domain'], parsed[1]['domain']) then
       -- See if the destination domain is the same as the spoof
       local mto = task:get_recipients(2)
       local sto = task:get_recipients(1)
       if mto then
         for _, to in ipairs(mto) do
-          if to['domain'] ~= '' and util.strequal_caseless(to['domain'], parsed[1]['domain']) then
+          if to['domain'] ~= '' and rspamd_util.strequal_caseless(to['domain'], parsed[1]['domain']) then
             task:insert_result('SPOOF_DISPLAY_NAME', 1.0, from[1]['domain'], parsed[1]['domain'])
             return false
           end
@@ -568,7 +568,7 @@ local check_from_display_name = rspamd_config:register_symbol{
       end
       if sto then
         for _, to in ipairs(sto) do
-          if to['domain'] ~= '' and util.strequal_caseless(to['domain'], parsed[1]['domain']) then
+          if to['domain'] ~= '' and rspamd_util.strequal_caseless(to['domain'], parsed[1]['domain']) then
             task:insert_result('SPOOF_DISPLAY_NAME', 1.0, from[1]['domain'], parsed[1]['domain'])
             return false
           end
@@ -611,7 +611,7 @@ rspamd_config.SPOOF_REPLYTO = {
     if not (from and from[1] and from[1].addr) then return false end
     if (to and to[1] and to[1].addr) then
       -- Handle common case for Web Contact forms of From = To
-      if util.strequal_caseless(from[1].addr, to[1].addr) then
+      if rspamd_util.strequal_caseless(from[1].addr, to[1].addr) then
         return false
       end
     end
@@ -619,10 +619,10 @@ rspamd_config.SPOOF_REPLYTO = {
     to = task:get_recipients(1)
     if not to then return false end
     -- Try mitigate some possible FPs on mailing list posts
-    if #to == 1 and util.strequal_caseless(to[1].addr, from[1].addr) then return false end
+    if #to == 1 and rspamd_util.strequal_caseless(to[1].addr, from[1].addr) then return false end
     local found_fromdom = false
     for _, t in ipairs(to) do
-      if util.strequal_caseless(t.domain, from[1].domain) then
+      if rspamd_util.strequal_caseless(t.domain, from[1].domain) then
         found_fromdom = true
         break
       end
@@ -632,7 +632,7 @@ rspamd_config.SPOOF_REPLYTO = {
     local parsed = ((rspamd_parsers.parse_mail_address(rt, task:get_mempool()) or E)[1] or E).domain
     if not parsed then return false end
     -- Reply-To domain must be different to From domain
-    if not util.strequal_caseless(parsed, from[1].domain) then
+    if not rspamd_util.strequal_caseless(parsed, from[1].domain) then
       return true, from[1].domain, parsed
     end
     return false
@@ -649,14 +649,14 @@ rspamd_config.INFO_TO_INFO_LU = {
       return false
     end
     local from = task:get_from('mime')
-    if not (from and from[1] and util.strequal_caseless(from[1].user, 'info')) then
+    if not (from and from[1] and rspamd_util.strequal_caseless(from[1].user, 'info')) then
       return false
     end
     local to = task:get_recipients('smtp')
     if not to then return false end
     local found = false
     for _,r in ipairs(to) do
-      if util.strequal_caseless(r['user'], 'info') then
+      if rspamd_util.strequal_caseless(r['user'], 'info') then
         found = true
       end
     end
index dba472c5003abf762318e04f961e3a6ebe78e05b..968b24adc83002c19ed7bde714c467f88056164b 100644 (file)
@@ -192,7 +192,7 @@ if opts and type(opts) == 'table' then
 
         if m.symbol_type == 'postfilter' then
           t.type = 'postfilter'
-          t.priority = 3
+          t.priority = lua_util.symbols_priorities.medium
         else
           t.type = 'normal'
         end
index 7f2bfea6b379b3fd1a4f4c547a4444c1753dfbf7..e870fdb3b88b3fa19ee679c366d0ffc06a48d0c7 100644 (file)
@@ -143,7 +143,7 @@ if configure_asn_module() then
     name = 'ASN_CHECK',
     type = 'prefilter',
     callback = asn_check,
-    priority = 8,
+    priority = lua_util.symbols_priorities.high,
     flags = 'empty,nostat',
     augmentations = {lua_util.dns_timeout_augmentation(rspamd_config)},
   })
index a1b30e4ed581b4f6abe52de98d1058fc4590ddc0..bd53dac50da2dc424081e298ca1979f8c9c89f5d 100644 (file)
@@ -261,6 +261,6 @@ rspamd_config:register_symbol({
   name = 'EXPORT_AWS_S3',
   type = settings.fail_action and 'postfilter' or 'idempotent',
   callback = s3_aws_callback,
-  priority = settings.fail_action and 10 or nil,
+  priority = settings.fail_action and lua_util.symbols_priorities.high or nil,
   flags = 'empty,explicit_disable,ignore_passthrough,nostat',
 })
\ No newline at end of file
index 5c0084bc9cfd50ef32f6150065b824d9f0a1e127..841eca32fb74c2fa65b91ec4ec56d71e213bd89b 100644 (file)
@@ -229,7 +229,7 @@ if opts then
       rspamd_config:register_symbol({
         name = rule.symbol,
         type = 'prefilter',
-        priority = rule.priority or 20,
+        priority = rule.priority or lua_util.symbols_priorities.top + 1,
         group = N,
         callback = cb,
       })
index 96e6b9e9444e6b5f5e8215e87c0bbdf43465cf38..d6fedeece58a99777e29e84772d7b3026d62ed90 100644 (file)
@@ -222,7 +222,7 @@ if opts and type(opts) == 'table' then
 
         if m.symbol_type == 'postfilter' then
           t.type = 'postfilter'
-          t.priority = 3
+          t.priority = lua_util.symbols_priorities.medium
         else
           t.type = 'normal'
         end
index c0c023faed64aff463b1db02ffd237c20b263c83..5f4620e6d0873a3dfdcca55aedfbad1995eee1e1 100644 (file)
@@ -192,7 +192,7 @@ local function configure_module()
           local t = {}
           if (raction or honor) then
             t.type = 'postfilter'
-            t.priority = 10
+            t.priority = lua_util.symbols_priorities.high
           else
             t.type = 'normal'
             if not sett.least then
index 04e003a1b879515ca723b5fcc3bd42d318d4db1d..db1afeed728574451dbaa527c83286036b617b0d 100644 (file)
@@ -514,14 +514,14 @@ if opts then
       name = 'GREYLIST_SAVE',
       type = 'postfilter',
       callback = greylist_set,
-      priority = 6,
+      priority = lua_util.symbols_priorities.medium,
       augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)},
     })
     local id = rspamd_config:register_symbol({
       name = 'GREYLIST_CHECK',
       type = 'prefilter',
       callback = greylist_check,
-      priority = 6,
+      priority = lua_util.symbols_priorities.medium,
       augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)}
     })
     rspamd_config:register_symbol({
index 85894389eda87cbbb48e627790fd30b89b9db740..33361b7dffd2022512acf67e664cab2a49b876fb 100644 (file)
@@ -894,7 +894,7 @@ local id = rspamd_config:register_symbol({
   name = 'NEURAL_CHECK',
   type = 'postfilter,callback',
   flags = 'nostat',
-  priority = 6,
+  priority = lua_util.symbols_priorities.medium,
   callback = ann_scores_filter
 })
 
index a07b1ee00db08d609af470150fdfdc5d2f6b1b27..d597ee25d8080bbae7d3653a3ec7b4f54f377474 100644 (file)
@@ -87,7 +87,7 @@ if rule then
     name = 'P0F_CHECK',
     type = 'prefilter',
     callback = check_p0f,
-    priority = 8,
+    priority = lua_util.symbols_priorities.medium,
     flags = 'empty,nostat',
     group = N,
     augmentations = {string.format("timeout=%f", rule.timeout or 0.0)},
index 2b61b606f26726821cf92e44df4ed8b28a67dcfa..34d6788c9321e744353f067c55716680f52ffc54 100644 (file)
@@ -868,7 +868,7 @@ if opts then
     local s = {
       type = settings.prefilter and 'prefilter' or 'callback',
       name = 'RATELIMIT_CHECK',
-      priority = 7,
+      priority = lua_util.symbols_priorities.medium,
       callback = ratelimit_cb,
       flags = 'empty,nostat',
       augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)},
index ef3643f66a6aaaa02ba166c28951a9b1bc5b932f..8debe3271579447094cf97ef1e6b2f4b21976760 100644 (file)
@@ -286,7 +286,7 @@ if opts then
         type = 'prefilter',
         callback = replies_check_cookie,
         flags = 'nostat',
-        priority = 10,
+        priority = lua_util.symbols_priorities.medium,
         group = "replies"
       })
       rspamd_config:register_symbol({
@@ -310,7 +310,7 @@ if opts then
       type = 'prefilter',
       flags = 'nostat',
       callback = replies_check,
-      priority = 9,
+      priority = lua_util.symbols_priorities.medium,
       group = "replies"
     })
     rspamd_config:register_symbol({
index d8f0997f1083663587c6f4ad0b0072e151281d18..a00bc32ef96e4b6f1a5b08bef80f46d3a7a1724c 100644 (file)
@@ -1228,7 +1228,7 @@ if redis_section then
       name = 'REDIS_SETTINGS' .. tostring(id),
       type = 'prefilter',
       callback = gen_redis_callback(h, id),
-      priority = 10,
+      priority = lua_util.symbols_priorities.top,
       flags = 'empty,nostat',
       augmentations = {string.format("timeout=%f", redis_params.timeout or 0.0)},
     })
@@ -1239,7 +1239,7 @@ module_sym_id = rspamd_config:register_symbol({
   name = 'SETTINGS_CHECK',
   type = 'prefilter',
   callback = check_settings,
-  priority = 10,
+  priority = lua_util.symbols_priorities.top,
   flags = 'empty,nostat,explicit_disable,ignore_passthrough',
 })