From 104e9476a61286ea9a55e3a975d5049f6a129e60 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 14 Aug 2019 16:03:24 +0100 Subject: [PATCH] [Feature] Use `scores` in apply section --- lualib/lua_settings.lua | 8 ++++---- src/libmime/scan_result.c | 10 +++++++++- src/plugins/lua/settings.lua | 36 ++++++++++++++++++++++-------------- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/lualib/lua_settings.lua b/lualib/lua_settings.lua index 1c121147c..d03e63e7d 100644 --- a/lualib/lua_settings.lua +++ b/lualib/lua_settings.lua @@ -183,13 +183,13 @@ local function transform_settings_maybe(settings, name) if not senabled[1] then -- Transform map to a list local nlist = {} - if not settings.symbols then - settings.symbols = {} + if not apply.scores then + apply.scores = {} end for k,v in pairs(senabled) do if tonumber(v) then -- Move to symbols as well - settings.symbols[k] = tonumber(v) + apply.scores[k] = tonumber(v) lua_util.debugm('settings', rspamd_config, 'set symbol %s -> %s for settings %s', k, v, name) end @@ -203,7 +203,7 @@ local function transform_settings_maybe(settings, name) if apply.symbols then -- Check if added symbols are enabled - for _,s in ipairs(apply.symbols) do + for _,s in pairs(apply.symbols) do if not symhash[s] then lua_util.debugm('settings', rspamd_config, 'added symbol %s to symbols_enabled for %s', s, name) diff --git a/src/libmime/scan_result.c b/src/libmime/scan_result.c index 428a2da71..6e6b30826 100644 --- a/src/libmime/scan_result.c +++ b/src/libmime/scan_result.c @@ -247,8 +247,16 @@ insert_metric_result (struct rspamd_task *task, } if (task->settings) { - mobj = task->settings; gdouble corr; + mobj = ucl_object_lookup (task->settings, "scores"); + + if (!mobj) { + /* Legacy */ + mobj = task->settings; + } + else { + msg_debug_metric ("found scores in the settings"); + } sobj = ucl_object_lookup (mobj, symbol); if (sobj != NULL && ucl_object_todouble_safe (sobj, &corr)) { diff --git a/src/plugins/lua/settings.lua b/src/plugins/lua/settings.lua index f8b12b086..b1d7b5b0c 100644 --- a/src/plugins/lua/settings.lua +++ b/src/plugins/lua/settings.lua @@ -65,18 +65,19 @@ local function apply_settings(task, to_apply, id) if to_apply.symbols then -- Add symbols, specified in the settings if #to_apply.symbols > 0 then - fun.each(function(val) + -- Array like symbols + for _,val in ipairs(to_apply.symbols) do task:insert_result(val, 1.0) - end, - fun.filter(function(elt) return type(elt) == 'string' end, - to_apply.symbols)) + end else -- Object like symbols - fun.each(function(k, val) - task:insert_result(k, val.score or 1.0, val.options or {}) - end, - fun.filter(function(_, elt) return type(elt) == 'table' end, - to_apply.symbols)) + for k,v in pairs(to_apply.symbols) do + if type(v) == 'table' then + task:insert_result(k, v.score or 1.0, v.options or {}) + elseif tonumber(v) then + task:insert_result(k, tonumber(v)) + end + end end end @@ -919,11 +920,18 @@ local function process_settings_table(tbl, allow_ids, mempool) if elt.apply.symbols then -- Register virtual symbols - for _,sym in ipairs(elt.apply.symbols) do - rspamd_config:register_symbol{ - name = sym, - type = 'virtual,ghost', - } + for k,v in pairs(elt.apply.symbols) do + if type(k) == 'number' and type(v) == 'string' then + rspamd_config:register_symbol{ + name = v, + type = 'virtual,ghost', + } + elseif type(k) == 'string' then + rspamd_config:register_symbol{ + name = k, + type = 'virtual,ghost', + } + end end end else -- 2.39.5