From 2f3be59570f855bc786a6524f5b08c0761cd4221 Mon Sep 17 00:00:00 2001 From: Andrew Lewis Date: Thu, 28 Sep 2017 16:36:01 +0200 Subject: [PATCH] [Fix] Milter headers: X-Spamd-Result header if X-Virus ran first - Fixes: #1851 - Reported by: @iflyhigh - MFH: rspamd-1.6 --- src/plugins/lua/milter_headers.lua | 32 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/plugins/lua/milter_headers.lua b/src/plugins/lua/milter_headers.lua index 9a0eb23a0..bd2afe22c 100644 --- a/src/plugins/lua/milter_headers.lua +++ b/src/plugins/lua/milter_headers.lua @@ -170,7 +170,11 @@ local function milter_headers(task) if skip_wanted('x-spamd-result') then return end if not common.symbols then common.symbols = task:get_symbols_all() + end + if not common['metric_score'] then common['metric_score'] = task:get_metric_score('default') + end + if not common['metric_action'] then common['metric_action'] = task:get_metric_action('default') end if settings.routines['x-spamd-result'].remove then @@ -293,26 +297,26 @@ local function milter_headers(task) routines['x-virus'] = function() if skip_wanted('x-virus') then return end - if not common.symbols then - common.symbols = {} + if not common.symbols_hash then + if not common.symbols then + common.symbols = task:get_symbols_all() + end + local h = {} + for _, s in ipairs(common.symbols) do + h[s.name] = s + end + common.symbols_hash = h end if settings.routines['x-virus'].remove then remove[settings.routines['x-virus'].header] = settings.routines['x-virus'].remove end local virii = {} for _, sym in ipairs(settings.routines['x-virus'].symbols) do - if not (common.symbols[sym] == false) then - local s = task:get_symbol(sym) - if not s then - common.symbols[sym] = false - else - common.symbols[sym] = s - if (((s or E)[1] or E).options or E)[1] then - table.insert(virii, s[1].options[1]) - else - table.insert(virii, 'unknown') - end - end + local s = common.symbols_hash[sym] + if ((s or E).options or E)[1] then + table.insert(virii, table.concat(s.options, ',')) + elseif s then + table.insert(virii, 'unknown') end end if #virii > 0 then -- 2.39.5