From: Andrew Lewis Date: Thu, 28 Sep 2017 14:36:01 +0000 (+0200) Subject: [Fix] Milter headers: X-Spamd-Result header if X-Virus ran first X-Git-Tag: 1.7.0~606 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2f3be59570f855bc786a6524f5b08c0761cd4221;p=rspamd.git [Fix] Milter headers: X-Spamd-Result header if X-Virus ran first - Fixes: #1851 - Reported by: @iflyhigh - MFH: rspamd-1.6 --- 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