|
|
|
@ -88,19 +88,6 @@ local function handle_header_def(hline, cur_rule) |
|
|
|
end |
|
|
|
end, fun.tail(args)) |
|
|
|
|
|
|
|
local function split_hdr_param(param, headers) |
|
|
|
for _,hh in ipairs(headers) do |
|
|
|
local nparam = {} |
|
|
|
for k,v in pairs(param) do |
|
|
|
if k ~= 'header' then |
|
|
|
nparam[k] = v |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
nparam['header'] = hh |
|
|
|
table.insert(hdr_params, nparam) |
|
|
|
end |
|
|
|
end |
|
|
|
-- Some header rules require splitting to check of multiple headers |
|
|
|
if cur_param['header'] == 'MESSAGEID' then |
|
|
|
-- Special case for spamassassin |
|
|
|
@ -112,7 +99,7 @@ local function handle_header_def(hline, cur_rule) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
cur_rule['ordinary'] = ordinary |
|
|
|
cur_rule['ordinary'] = ordinary and (not (#hdr_params > 1)) |
|
|
|
cur_rule['header'] = hdr_params |
|
|
|
end |
|
|
|
end |
|
|
|
@ -151,12 +138,10 @@ local function process_sa_conf(f) |
|
|
|
local function parse_score(words) |
|
|
|
if #words == 3 then |
|
|
|
-- score rule <x> |
|
|
|
lua_util.debugm(N, rspamd_config, 'found score for %1: %2', words[2], words[3]) |
|
|
|
return tonumber(words[3]) |
|
|
|
elseif #words == 6 then |
|
|
|
-- score rule <x1> <x2> <x3> <x4> |
|
|
|
-- we assume here that bayes and network are enabled and select <x4> |
|
|
|
lua_util.debugm(N, rspamd_config, 'found score for %1: %2', words[2], words[6]) |
|
|
|
return tonumber(words[6]) |
|
|
|
else |
|
|
|
rspamd_logger.errx(rspamd_config, 'invalid score for %1', words[2]) |
|
|
|
@ -196,13 +181,10 @@ local function process_sa_conf(f) |
|
|
|
return |
|
|
|
else |
|
|
|
if string.match(l, '^ifplugin') then |
|
|
|
local ls = split(l) |
|
|
|
|
|
|
|
skip_to_endif = true |
|
|
|
if_nested = if_nested + 1 |
|
|
|
table.insert(complicated, l) |
|
|
|
elseif string.match(l, '^if !plugin%(') then |
|
|
|
local pname = string.match(l, '^if !plugin%(([A-Za-z:]+)%)') |
|
|
|
skip_to_endif = true |
|
|
|
if_nested = if_nested + 1 |
|
|
|
table.insert(complicated, l) |
|
|
|
@ -383,6 +365,7 @@ local function handle_rule(what, syms, hdr) |
|
|
|
local mtype |
|
|
|
local filter |
|
|
|
local fname |
|
|
|
local header |
|
|
|
local sym = what:upper() |
|
|
|
if what == 'sabody' then |
|
|
|
mtype = 'content' |
|
|
|
@ -418,7 +401,6 @@ local function handle_rule(what, syms, hdr) |
|
|
|
header = header, |
|
|
|
symbols = {} |
|
|
|
} |
|
|
|
|
|
|
|
local re_file = io.open(fname, 'w') |
|
|
|
|
|
|
|
for k,r in pairs(syms) do |
|
|
|
@ -455,6 +437,7 @@ rspamd_logger.messagex('stored multimap conf in %s', 'auto_multimap.conf') |
|
|
|
local sa_remain = io.open('auto_sa.conf', 'w') |
|
|
|
fun.each(function(l) |
|
|
|
sa_remain:write(l) |
|
|
|
sa_remain:write('\n') |
|
|
|
end, fun.filter(function(l) return not string.match(l, '^%s+$') end, complicated)) |
|
|
|
sa_remain:close() |
|
|
|
rspamd_logger.messagex('stored sa remains conf in %s', 'auto_sa.conf') |