]> source.dussan.org Git - rspamd.git/commitdiff
* Improve logic of lua plugins:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 9 Oct 2009 14:26:46 +0000 (18:26 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 9 Oct 2009 14:26:46 +0000 (18:26 +0400)
 - fix once received plugin to configure properly (pointy hat to: dmx)
 - add additional functionality to once_received plugin for strict checking of received
 - make all things local

src/plugins/lua/once_received.lua
src/plugins/lua/received_rbl.lua

index 409ec4aff50997916d19de9973afe094c9fda6f5..88432d873b509d65c3a9a04efef73fb692e1c40a 100644 (file)
@@ -2,14 +2,63 @@
 
 local metric = 'default'
 local symbol = 'ONCE_RECEIVED'
+-- Symbol for strict checks
+local symbol_strict = nil
+local bad_hosts = {}
+local good_hosts = {}
 
 function check_quantity_received (task)
        local recvh = task:get_received_headers()
+       print (symbol)
        if table.maxn(recvh) <= 1 then
                task:insert_result(metric, symbol, 1)
        end
+       -- Strict checks
+       if symbol_strict then
+               local r = recvh[1]
+               -- Unresolved host
+               if not r['real_hostname'] or r['real_hostname'] == 'unknown' or string.match(r['real_hostname'], '(%d+)\.(%d+)\.(%d+)\.(%d+)') then
+                       task:insert_result(metric, symbol_strict, 1)
+               end
+               local i = true
+               for _,h in ipairs(bad_hosts) do
+                       if string.find(r['real_hostname'], h) then
+                               -- Check for good hostname
+                               for _,gh in ipairs(good_hosts) do
+                                       if string.find(r['real_hostname'], gh) then
+                                               i = false
+                                               break
+                                       end
+                               end
+                               if i then
+                                       task:insert_result(metric, symbol_strict, 1, h)
+                                       return
+                               end
+                       end
+               end
+       end
 end
 
--- Register symbol's callback
-local m = rspamd_config:get_metric(metric)
-m:register_symbol(symbol, 1.0, 'check_quantity_received')
+-- Configuration
+local opts =  rspamd_config:get_all_opt('once_received')
+if opts then
+    if opts['symbol'] then
+        symbol = opts['symbol']
+
+           for n,v in pairs(opts) do
+                       if n == 'symbol_strict' then
+                               symbol_strict = v
+                       elseif n == 'bad_host' then
+                           table.insert(bad_hosts, v)
+                       elseif n == 'good_host' then
+                           table.insert(good_hosts, v)
+                   elseif n == 'metric' then
+                           metric = v
+                   end
+           end
+
+               -- Register symbol's callback
+               local m = rspamd_config:get_metric(metric)
+               m:register_symbol(symbol, 1.0, 'check_quantity_received')
+       end
+end
index fa29cabc8059d4a1dcb1b62441dfe264f3dc98fe..9165d219d84c515ee1b03cedc473a2288d4c33a1 100644 (file)
@@ -7,7 +7,6 @@
 --      symbol = "RECEIVED_RBL";
 -- };
 
-
 local metric = 'default'
 local symbol = 'RECEIVED_RBL'
 local rbls = {}
@@ -37,17 +36,19 @@ end
 -- Configuration
 local opts =  rspamd_config:get_all_opt('received_rbl')
 if opts then
-       for n,v in pairs(opts) do
-               if n == 'rbl' then
-                       table.insert(rbls, v)
-               elseif n == 'metric' then
-                       metric = v
-               elseif n == 'symbol' then
-                       symbol = v
-               end
-       end
-end
+    if opts['symbol'] then
+        symbol = opts['symbol']
 
--- Register symbol's callback
-local m = rspamd_config:get_metric(metric)
-m:register_symbol(symbol, 1.0, 'received_cb')
+           for n,v in pairs(opts) do
+                   if n == 'rbl' then
+                           table.insert(rbls, v)
+                   elseif n == 'metric' then
+                           metric = v
+                   end
+           end
+        -- Register symbol's callback
+        local m = rspamd_config:get_metric(metric)
+        m:register_symbol(symbol, 1.0, 'received_cb')
+    end
+    -- If no symbol defined, do not register this module
+end