From fc248c371b6b67d336a36947cd75a421e89be68a Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 12 Feb 2016 15:33:59 +0000 Subject: [PATCH] Implement regexp filters for URL multimap --- src/plugins/lua/multimap.lua | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/plugins/lua/multimap.lua b/src/plugins/lua/multimap.lua index 760c5c1d0..44240f195 100644 --- a/src/plugins/lua/multimap.lua +++ b/src/plugins/lua/multimap.lua @@ -163,6 +163,60 @@ local function multimap_callback(task, pre_filter) else return nil end + elseif string.find(filter, 'tld:regexp:') then + if not r['regexp'] then + local type,pat = string.match(filter, '(regexp:)(.+)') + if type and pat then + r['regexp'] = regexp.create(pat) + end + end + + if not r['regexp'] then + rspamd_logger.errx(task, 'bad search filter: %s', filter) + else + local results = r['regexp']:search(url:get_tld()) + if results then + return results[1] + else + return nil + end + end + elseif string.find(filter, 'full:regexp:') then + if not r['regexp'] then + local type,pat = string.match(filter, '(regexp:)(.+)') + if type and pat then + r['regexp'] = regexp.create(pat) + end + end + + if not r['regexp'] then + rspamd_logger.errx(task, 'bad search filter: %s', filter) + else + local results = r['regexp']:search(url:get_text()) + if results then + return results[1] + else + return nil + end + end + elseif string.find(filter, 'regexp:') then + if not r['regexp'] then + local type,pat = string.match(filter, '(regexp:)(.+)') + if type and pat then + r['regexp'] = regexp.create(pat) + end + end + + if not r['regexp'] then + rspamd_logger.errx(task, 'bad search filter: %s', filter) + else + local results = r['regexp']:search(url:get_host()) + if results then + return results[1] + else + return nil + end + end end return url:get_host() -- 2.39.5