]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Settings: header: deal with multiple settings (#1988) 1989/head
authorAndrew Lewis <nerf@judo.za.org>
Tue, 16 Jan 2018 13:03:55 +0000 (15:03 +0200)
committerAndrew Lewis <nerf@judo.za.org>
Tue, 16 Jan 2018 13:03:55 +0000 (15:03 +0200)
src/plugins/lua/settings.lua

index 7789d980c0f6fb49f0e21cb996d131c817f9d634..1963f9d70ce92436ecf8aa11cbfcb6fde514349b 100644 (file)
@@ -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