]> source.dussan.org Git - rspamd.git/commitdiff
Fix settings priorities.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 19 Aug 2014 14:01:30 +0000 (15:01 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 19 Aug 2014 14:01:30 +0000 (15:01 +0100)
src/plugins/lua/settings.lua

index 07fb2d3de0ebbab84b4e2176f799f1379cdb3b23..a79157e3bf8a18472fc83e7c6b886572ab899f42 100644 (file)
@@ -5,6 +5,7 @@
 local set_section = rspamd_config:get_key("settings")
 local settings = {}
 local settings_initialized = false
+local max_pri = 0
 
 -- Functional utilities
 local function filter(func, tbl)
@@ -117,13 +118,15 @@ local function check_settings(task)
   local from = task:get_from()
   local rcpt = task:get_recipients()
   -- Match rules according their order
-  for i,v in pairs(settings) do
-    for name, rule in pairs(v) do
-      local rule = check_specific_setting(name, rule, ip, from, rcpt)
-      if rule then
-        rspamd_logger.info(string.format("<%s> apply settings according to rule %s",
-          task:get_message_id(), name))
-        task:set_settings(rule)
+  for pri = max_pri,1,-1 do
+    if settings[pri] then
+      for name, rule in pairs(settings[pri]) do
+        local rule = check_specific_setting(name, rule, ip, from, rcpt)
+        if rule then
+          rspamd_logger.info(string.format("<%s> apply settings according to rule %s",
+            task:get_message_id(), name))
+          task:set_settings(rule)
+        end
       end
     end
   end
@@ -288,10 +291,12 @@ local function process_settings_table(tbl)
     end, tbl)
   -- clear all settings
   
+  max_pri = 0
   for k,v in pairs(settings) do settings[k]=nil end
   -- fill new settings by priority
   for k,v in pairs(ft) do
     local pri = get_priority(v)
+    if pri > max_pri then max_pri = pri end
     if not settings[pri] then
       settings[pri] = {}
     end
@@ -300,6 +305,7 @@ local function process_settings_table(tbl)
       settings[pri][k] = s
     end
   end
+  
   settings_initialized = true
   --local dumper = require 'pl.pretty'.dump
   --dumper(settings)