From 5b42006524420618b37d12be747d3799e47768d5 Mon Sep 17 00:00:00 2001 From: Andrew Lewis Date: Tue, 16 Jan 2018 15:03:55 +0200 Subject: [PATCH] [Fix] Settings: header: deal with multiple settings (#1988) --- src/plugins/lua/settings.lua | 50 +++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/src/plugins/lua/settings.lua b/src/plugins/lua/settings.lua index 7789d980c..1963f9d70 100644 --- a/src/plugins/lua/settings.lua +++ b/src/plugins/lua/settings.lua @@ -262,9 +262,19 @@ local function check_settings(task) end if rule['header'] then - for k, v in pairs(rule['header']) do - local h = task:get_header(k) - res = (h and v:match(h)) + for _, e in ipairs(rule['header']) do + for k, v in pairs(e) do + for _, p in ipairs(v) do + local h = task:get_header(k) + res = (h and p:match(h)) + if res then + break + end + end + if res then + break + end + end if res then break end @@ -514,17 +524,33 @@ local function process_settings_table(tbl) out['request_header'] = rho end if elt['header'] then - local rho = {} - for k, v in pairs(elt['header']) do - local re = rspamd_regexp.get_cached(v) - if not re then - re = rspamd_regexp.create_cached(v) - end - if re then - rho[k] = re + if not elt['header'][1] and next(elt['header']) then + elt['header'] = {elt['header']} + end + for _, e in ipairs(elt['header']) do + local rho = {} + for k, v in pairs(e) do + if type(v) ~= 'table' then + v = {v} + end + for _, r in ipairs(v) do + local re = rspamd_regexp.get_cached(r) + if not re then + re = rspamd_regexp.create_cached(r) + end + if re then + if not out['header'] then out['header'] = {} end + if rho[k] then + table.insert(rho[k], re) + else + rho[k] = {re} + end + end + end end + if not out['header'] then out['header'] = {} end + table.insert(out['header'], rho) end - out['header'] = rho end -- Now we must process actions -- 2.39.5