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
-- symbol = "RECEIVED_RBL";
-- };
-
local metric = 'default'
local symbol = 'RECEIVED_RBL'
local rbls = {}
-- 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