From fb13363c7c6f0be6ad9818e0cd32a75f907edd37 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 7 Aug 2015 16:03:07 +0100 Subject: Move misclenaous rules to a separate file. --- rules/misc.lua | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ rules/rspamd.lua | 88 +++++++++-------------------------------------------- 2 files changed, 106 insertions(+), 74 deletions(-) create mode 100644 rules/misc.lua (limited to 'rules') diff --git a/rules/misc.lua b/rules/misc.lua new file mode 100644 index 000000000..cbcdff0fc --- /dev/null +++ b/rules/misc.lua @@ -0,0 +1,92 @@ +--[[ +Copyright (c) 2011-2015, Vsevolod Stakhov +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]]-- + +-- This is main lua config file for rspamd + +local util = require "rspamd_util" + +local reconf = config['regexp'] + + +-- Uncategorized rules + +-- Local rules +local r_bgcolor = '/BGCOLOR=/iP' +local r_font_color = '/font color=[\\"\']?\\#FFFFFF[\\"\']?/iP' +reconf['R_WHITE_ON_WHITE'] = string.format('(!(%s) & (%s))', r_bgcolor, r_font_color) +reconf['R_FLASH_REDIR_IMGSHACK'] = '/^(?:http:\\/\\/)?img\\d{1,5}\\.imageshack\\.us\\/\\S+\\.swf/U' + +-- Different text parts +rspamd_config.R_PARTS_DIFFER = function(task) + local distance = task:get_mempool():get_variable('parts_distance', 'int') + + if distance then + local nd = tonumber(distance) + + if nd < 50 then + local score = 1 - util.tanh(nd / 100.0) + + task:insert_result('R_PARTS_DIFFER', score, tostring(nd) .. '%') + end + end + + return false +end + +-- Date issues +rspamd_config.MISSING_DATE = function(task) + if rspamd_config:get_api_version() >= 5 then + if not task:get_header_raw('Date') then + return true + end + end + + return false +end +rspamd_config.DATE_IN_FUTURE = function(task) + if rspamd_config:get_api_version() >= 5 then + local dm = task:get_date{format = 'message'} + local dt = task:get_date{format = 'connect'} + -- An 2 hour + if dm > 0 and dm - dt > 7200 then + return true + end + end + + return false +end +rspamd_config.DATE_IN_PAST = function(task) + if rspamd_config:get_api_version() >= 5 then + local dm = task:get_date{format = 'message', gmt = true} + local dt = task:get_date{format = 'connect', gmt = true} + -- A day + if dm > 0 and dt - dm > 86400 then + return true + end + end + + return false +end diff --git a/rules/rspamd.lua b/rules/rspamd.lua index ce2edd2b3..b96ef5e02 100644 --- a/rules/rspamd.lua +++ b/rules/rspamd.lua @@ -26,76 +26,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- This is main lua config file for rspamd -config['regexp'] = {} - -dofile('regexp/headers.lua') -dofile('regexp/lotto.lua') -dofile('regexp/fraud.lua') -dofile('regexp/drugs.lua') -dofile('html.lua') - -local reconf = config['regexp'] local util = require "rspamd_util" --- Uncategorized rules - --- Local rules -local r_bgcolor = '/BGCOLOR=/iP' -local r_font_color = '/font color=[\\"\']?\\#FFFFFF[\\"\']?/iP' -reconf['R_WHITE_ON_WHITE'] = string.format('(!(%s) & (%s))', r_bgcolor, r_font_color) -reconf['R_FLASH_REDIR_IMGSHACK'] = '/^(?:http:\\/\\/)?img\\d{1,5}\\.imageshack\\.us\\/\\S+\\.swf/U' +config['regexp'] = {} +local reconf = config['regexp'] --- Different text parts -rspamd_config.R_PARTS_DIFFER = function(task) - local distance = task:get_mempool():get_variable('parts_distance', 'int') - - if distance then - local nd = tonumber(distance) - - if nd < 50 then - local score = 1 - util.tanh(nd / 100.0) - - task:insert_result('R_PARTS_DIFFER', score, tostring(nd) .. '%') - end - end - - return false -end +local local_conf = rspamd_paths['CONFDIR'] +local local_rules = rspamd_paths['RULESDIR'] --- Date issues -rspamd_config.MISSING_DATE = function(task) - if rspamd_config:get_api_version() >= 5 then - if not task:get_header_raw('Date') then - return true - end - end - - return false -end -rspamd_config.DATE_IN_FUTURE = function(task) - if rspamd_config:get_api_version() >= 5 then - local dm = task:get_date{format = 'message'} - local dt = task:get_date{format = 'connect'} - -- An 2 hour - if dm > 0 and dm - dt > 7200 then - return true - end - end - - return false -end -rspamd_config.DATE_IN_PAST = function(task) - if rspamd_config:get_api_version() >= 5 then - local dm = task:get_date{format = 'message', gmt = true} - local dt = task:get_date{format = 'connect', gmt = true} - -- A day - if dm > 0 and dt - dm > 86400 then - return true - end - end - - return false -end +dofile(local_rules .. '/regexp/headers.lua') +dofile(local_rules .. '/regexp/lotto.lua') +dofile(local_rules .. '/regexp/fraud.lua') +dofile(local_rules .. '/regexp/drugs.lua') +dofile(local_rules .. '/html.lua') +dofile(local_rules .. '/misc.lua') local function file_exists(filename) local file = io.open(filename) @@ -107,14 +51,10 @@ local function file_exists(filename) end end -if file_exists('hfilter.lua') then - dofile('hfilter.lua') -end - -if file_exists('rspamd.local.lua') then - dofile('rspamd.local.lua') +if file_exists(local_conf .. 'rspamd.local.lua') then + dofile(local_conf .. 'rspamd.local.lua') end -if file_exists('rspamd.classifiers.lua') then - dofile('rspamd.classifiers.lua') +if file_exists(local_rules .. 'rspamd.classifiers.lua') then + dofile(local_rules .. 'rspamd.classifiers.lua') end -- cgit v1.2.3