aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2011-03-23 17:08:58 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2011-03-23 17:08:58 +0300
commit689855e2bb5a1c911bab1f71da9aa963a8da62a2 (patch)
treebe0ceaeb9aa5107ef8807625a06a1ff400e54994 /src/plugins
parent4aa3b704739e3398402fbbef1216ae588ff9be2e (diff)
downloadrspamd-689855e2bb5a1c911bab1f71da9aa963a8da62a2.tar.gz
rspamd-689855e2bb5a1c911bab1f71da9aa963a8da62a2.zip
* Add throttling detection mechanic for dns resolver
* Improve phishing module adding ability to define 'strict' phishing domains
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/lua/phishing.lua55
1 files changed, 49 insertions, 6 deletions
diff --git a/src/plugins/lua/phishing.lua b/src/plugins/lua/phishing.lua
index 115688750..1e648768a 100644
--- a/src/plugins/lua/phishing.lua
+++ b/src/plugins/lua/phishing.lua
@@ -3,6 +3,7 @@
--
local symbol = 'PHISHED_URL'
local domains = nil
+local strict_domains = {}
function phishing_cb (task)
local urls = task:get_urls();
@@ -10,17 +11,31 @@ function phishing_cb (task)
if urls then
for _,url in ipairs(urls) do
if url:is_phished() then
+ local purl = url:get_phished()
+ if table.maxn(strict_domains) > 0 then
+ local _,_,tld = string.find(purl:get_host(), '([a-zA-Z0-9%-]+\.[a-zA-Z0-9%-]+)$')
+ local found = false
+ if tld then
+ for _,rule in ipairs(strict_domains) do
+ if rule['map']:get_key(tld) then
+ task:insert_result(rule['symbol'], 1, purl:get_host())
+ found = true
+ end
+ end
+ if found then
+ return
+ end
+ end
+ end
if domains then
- local _,_,tld = string.find(url:get_phished():get_host(), '([a-zA-Z0-9%-]+\.[a-zA-Z0-9%-]+)$')
+ local _,_,tld = string.find(purl:get_host(), '([a-zA-Z0-9%-]+\.[a-zA-Z0-9%-]+)$')
if tld then
if domains:get_key(tld) then
- if url:is_phished() then
- task:insert_result(symbol, 1, url:get_host())
- end
+ task:insert_result(symbol, 1, purl:get_host())
end
end
else
- task:insert_result(symbol, 1, url:get_phished():get_host())
+ task:insert_result(symbol, 1, purl:get_host())
end
end
end
@@ -32,6 +47,7 @@ if type(rspamd_config.get_api_version) ~= 'nil' then
if rspamd_config:get_api_version() >= 1 then
rspamd_config:register_module_option('phishing', 'symbol', 'string')
rspamd_config:register_module_option('phishing', 'domains', 'map')
+ rspamd_config:register_module_option('phishing', 'strict_domains', 'string')
end
end
@@ -43,8 +59,35 @@ if opts then
-- Register symbol's callback
rspamd_config:register_symbol(symbol, 1.0, 'phishing_cb')
end
- if opts['domains'] then
+ if opts['domains'] and type(opt['domains']) == 'string' then
domains = rspamd_config:add_hash_map (opts['domains'])
end
+ if opts['strict_domains'] then
+ local sd = {}
+ if type(opts['strict_domains']) == 'table' then
+ sd = opts['strict_domains']
+ else
+ sd[1] = opts['strict_domains']
+ end
+ for _,d in ipairs(sd) do
+ local s, _ = string.find(d, ':')
+ if s then
+ local sym = string.sub(d, s + 1, -1)
+ local map = string.sub(d, 1, s - 1)
+ if type(rspamd_config.get_api_version) ~= 'nil' then
+ rspamd_config:register_virtual_symbol(sym, 1)
+ end
+ local rmap = rspamd_config:add_hash_map (map)
+ if rmap then
+ local rule = {symbol = sym, map = rmap}
+ table.insert(strict_domains, rule)
+ else
+ rspamd_logger.info('cannot add map: ' .. map .. ' for symbol: ' .. sym)
+ end
+ else
+ rspamd_logger.info('strict_domains option must be in format <map>:<symbol>')
+ end
+ end
+ end
-- If no symbol defined, do not register this module
end