diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-10-09 18:26:46 +0400 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-10-09 18:26:46 +0400 |
commit | 45c8c827b5136d873d27dce9a91a3b48b1ce1fca (patch) | |
tree | 53a1f8bb702749e825c8ececb41db8931fd71cb3 /src | |
parent | 79f25c80c34fe4d92ad584b5c37806bcdd6b2eef (diff) | |
download | rspamd-45c8c827b5136d873d27dce9a91a3b48b1ce1fca.tar.gz rspamd-45c8c827b5136d873d27dce9a91a3b48b1ce1fca.zip |
* Improve logic of lua plugins:
- 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
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/lua/once_received.lua | 55 | ||||
-rw-r--r-- | src/plugins/lua/received_rbl.lua | 29 |
2 files changed, 67 insertions, 17 deletions
diff --git a/src/plugins/lua/once_received.lua b/src/plugins/lua/once_received.lua index 409ec4aff..88432d873 100644 --- a/src/plugins/lua/once_received.lua +++ b/src/plugins/lua/once_received.lua @@ -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 diff --git a/src/plugins/lua/received_rbl.lua b/src/plugins/lua/received_rbl.lua index fa29cabc8..9165d219d 100644 --- a/src/plugins/lua/received_rbl.lua +++ b/src/plugins/lua/received_rbl.lua @@ -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 |