diff options
author | Andrew Lewis <nerf@judo.za.org> | 2017-09-28 16:36:01 +0200 |
---|---|---|
committer | Andrew Lewis <nerf@judo.za.org> | 2017-10-18 00:26:15 +0200 |
commit | 6b0a0a31e1193ed2692e7452c4be2956286c64fe (patch) | |
tree | f96bdcd091c8c3f866dfa208d5b1312274393abd /src/plugins | |
parent | 0906f42dfd4c2293967a40a96be44cea39cc31e0 (diff) | |
download | rspamd-6b0a0a31e1193ed2692e7452c4be2956286c64fe.tar.gz rspamd-6b0a0a31e1193ed2692e7452c4be2956286c64fe.zip |
[Fix] Milter headers: X-Spamd-Result header if X-Virus ran first
- Fixes: #1851
- Reported by: @iflyhigh
- MFH: rspamd-1.6
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/lua/milter_headers.lua | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/plugins/lua/milter_headers.lua b/src/plugins/lua/milter_headers.lua index d193e29aa..a60eeb7ed 100644 --- a/src/plugins/lua/milter_headers.lua +++ b/src/plugins/lua/milter_headers.lua @@ -165,7 +165,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 @@ -288,26 +292,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 |