Selaa lähdekoodia

* Improve maillist plugin to detect majordomo, cgp and google groups

tags/0.3.13
Vsevolod Stakhov 13 vuotta sitten
vanhempi
commit
d99a26fd10
1 muutettua tiedostoa jossa 87 lisäystä ja 2 poistoa
  1. 87
    2
      src/plugins/lua/maillist.lua

+ 87
- 2
src/plugins/lua/maillist.lua Näytä tiedosto

@@ -153,6 +153,86 @@ function check_ml_subscriberu(task)

end

-- RFC 2369 headers
function check_rfc2369(task)
local message = task:get_message()
local header = message:get_header('List-Id')
if not header then
return false
end
header = message:get_header('List-Unsubscribe')
if not header or not string.find(header[1], '^^<.+>$') then
return false
end
header = message:get_header('List-Subscribe')
if not header or not string.find(header[1], '^^<.+>$') then
return false
end
return true
end

-- RFC 2919 headers
function check_rfc2919(task)
local message = task:get_message()
local header = message:get_header('List-Id')
if not header or not string.find(header[1], '^<.+>$') then
return false
end
return check_rfc2369(task)
end

-- Google groups detector
-- header exists X-Google-Loop
-- RFC 2919 headers exist
--
function check_ml_googlegroup(task)
local message = task:get_message()
local header = message:get_header('X-Google-Loop')
if not header then
return false
end

return check_rfc2919(task)
end

-- Majordomo detector
-- Check Sender for owner- or -owner
-- Check Precendence for 'Bulk' or 'List'
--
-- And nothing more can be extracted :(
function check_ml_majordomo(task)
local message = task:get_message()
local header = message:get_header('Sender')
if not header or (not string.find(header[1], '^owner-.*$') and not string.find(header[1], '^.*-owner$')) then
return false
end
local header = message:get_header('Precedence')
if not header or (header[1] ~= 'list' and header[1] ~= 'bulk') then
return false
end

return true
end

-- CGP detector
-- X-Listserver = CommuniGate Pro LIST
-- RFC 2919 headers exist
--
function check_ml_cgp(task)
local message = task:get_message()
local header = message:get_header('X-Listserver')
if not header or header ~= 'CommuniGate Pro LIST' then
return false
end

return check_rfc2919(task)
end

function check_maillist(task)
if check_ml_ezmlm(task) then
task:insert_result(symbol, 1, 'ezmlm')
@@ -160,6 +240,12 @@ function check_maillist(task)
task:insert_result(symbol, 1, 'mailman')
elseif check_ml_subscriberu(task) then
task:insert_result(symbol, 1, 'subscribe.ru')
elseif check_ml_googlegroup(task) then
task:insert_result(symbol, 1, 'googlegroups')
elseif check_ml_majordomo(task) then
task:insert_result(symbol, 1, 'majordomo')
elseif check_ml_cgp(task) then
task:insert_result(symbol, 1, 'cgp')
end
end
-- Registration
@@ -169,8 +255,7 @@ if type(rspamd_config.get_api_version) ~= 'nil' then
end
end
-- Configuration
local opts = rspamd_config:get_all_opt('maillist')
if opts then
local opts = rspamd_config:get_all_opt('maillist')if opts then
if opts['symbol'] then
symbol = opts['symbol']
rspamd_config:register_symbol(symbol, 1.0, 'check_maillist')

Loading…
Peruuta
Tallenna