From: Vsevolod Stakhov Date: Fri, 12 Feb 2016 15:33:59 +0000 (+0000) Subject: Implement regexp filters for URL multimap X-Git-Tag: 1.2.0~253 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc248c371b6b67d336a36947cd75a421e89be68a;p=thirdparty%2Frspamd.git Implement regexp filters for URL multimap --- diff --git a/src/plugins/lua/multimap.lua b/src/plugins/lua/multimap.lua index 760c5c1d09..44240f195a 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()