commit 7b5d029: [Fix] Improve duplicate settings error reporting
Vsevolod Stakhov
vsevolod at highsecure.ru
Thu Nov 18 11:49:04 UTC 2021
Author: Vsevolod Stakhov
Date: 2021-11-18 11:47:27 +0000
URL: https://github.com/rspamd/rspamd/commit/7b5d0291784f4c372dd29dd4730bbccad6620120
[Fix] Improve duplicate settings error reporting
Issue: #3957
---
src/plugins/lua/settings.lua | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/plugins/lua/settings.lua b/src/plugins/lua/settings.lua
index 831eb1bea..dcb1124bb 100644
--- a/src/plugins/lua/settings.lua
+++ b/src/plugins/lua/settings.lua
@@ -41,9 +41,19 @@ local settings_initialized = false
local max_pri = 0
local module_sym_id -- Main module symbol
-local function apply_settings(task, to_apply, id)
+local function apply_settings(task, to_apply, id, name)
+ local cached_name = task:cache_get('settings_name')
+ if cached_name then
+ local cached_settings = task:cache_get('settings')
+ rspamd_logger.warnx(task, "cannot apply settings rule %s (id=%s):" ..
+ " settings has been already applied by rule %s (id=%s)",
+ name, id, cached_name, cached_settings.id)
+ return false
+ end
+
task:set_settings(to_apply)
task:cache_set('settings', to_apply)
+ task:cache_set('settings_name', name or 'unknown')
if id then
task:set_settings_id(id)
@@ -93,6 +103,8 @@ local function apply_settings(task, to_apply, id)
task:append_message(message, category)
end, to_apply.messages)
end
+
+ return true
end
-- Checks for overridden settings within query params and returns 3 values:
@@ -311,11 +323,11 @@ local function check_settings(task)
local function maybe_apply_query_settings()
if query_apply then
if id_elt then
- apply_settings(task, query_apply, id_elt.id)
+ apply_settings(task, query_apply, id_elt.id, id_elt.name)
rspamd_logger.infox(task, "applied settings id %s(%s); priority %s",
id_elt.name, id_elt.id, priority_to_string(priority))
else
- apply_settings(task, query_apply, nil)
+ apply_settings(task, query_apply, nil, 'HTTP query')
rspamd_logger.infox(task, "applied settings from query; priority %s",
priority_to_string(priority))
end
@@ -369,14 +381,14 @@ local function check_settings(task)
cached.name, s.rule.id,
table.concat(matched, ','),
priority_to_string(pri))
- apply_settings(task, cached.settings.apply, s.rule.id)
+ apply_settings(task, cached.settings.apply, s.rule.id, s.name)
end
else
-- Dynamic settings
rspamd_logger.infox(task, "<%s> apply settings according to rule %s (%s matched)",
task:get_message_id(), s.name, table.concat(matched, ','))
- apply_settings(task, s.rule.apply, nil)
+ apply_settings(task, s.rule.apply, nil, s.name)
end
applied = true
@@ -1082,7 +1094,7 @@ local function process_settings_table(tbl, allow_ids, mempool, is_static)
nrules = nrules + 1
end
end, ft)
- -- sort settings with equal priopities in alphabetical order
+ -- sort settings with equal priorities in alphabetical order
for pri,_ in pairs(settings) do
table.sort(settings[pri], function(a,b) return a.name < b.name end)
end
@@ -1144,7 +1156,7 @@ local function gen_redis_callback(handler, id)
local obj = parser:get_object()
rspamd_logger.infox(task, "<%1> apply settings according to redis rule %2",
task:get_message_id(), id)
- apply_settings(task, obj, nil)
+ apply_settings(task, obj, nil, 'redis')
break
end
end
More information about the Commits
mailing list