Browse Source

[Minor] Settings: Use numeric settings id

tags/2.0
Vsevolod Stakhov 5 years ago
parent
commit
2cd0ba2983
1 changed files with 48 additions and 9 deletions
  1. 48
    9
      src/plugins/lua/settings.lua

+ 48
- 9
src/plugins/lua/settings.lua View File

@@ -26,6 +26,7 @@ local rspamd_logger = require "rspamd_logger"
local rspamd_maps = require "lua_maps"
local lua_squeeze = require "lua_squeeze_rules"
local lua_util = require "lua_util"
local rspamd_util = require "rspamd_util"
local rspamd_ip = require "rspamd_ip"
local rspamd_regexp = require "rspamd_regexp"
local lua_selectors = require "lua_selectors"
@@ -111,7 +112,7 @@ local function check_query_settings(task)
end

local query_maxscore = task:get_request_header('maxscore')
local settings_id = task:get_request_header('settings-id')
local settings_id = task:get_settings_id()
local nset

if query_maxscore then
@@ -145,8 +146,7 @@ local function check_query_settings(task)

if settings_id and settings_initialized then
-- settings_id is rspamd text, so need to convert it to string for lua
local id_str = tostring(settings_id)
local elt = settings_ids[id_str]
local elt = settings_ids[settings_id]

if elt then
if elt['whitelist'] then
@@ -158,11 +158,11 @@ local function check_query_settings(task)
elt.apply = lua_util.override_defaults(nset, elt.apply)
end
apply_settings(task, elt['apply'])
rspamd_logger.infox(task, "applying settings id %s", id_str)
rspamd_logger.infox(task, "applying settings id %s", settings_id)
return true
end
else
rspamd_logger.warnx(task, 'no settings id "%s" has been found', id_str)
rspamd_logger.warnx(task, 'no settings id "%s" has been found', settings_id)
if nset then
rspamd_logger.infox(task, 'apply maxscore = %s', nset.actions)
apply_settings(task, nset)
@@ -494,6 +494,7 @@ local function process_settings_table(tbl)
-- Check the setting element internal data
local process_setting_elt = function(name, elt)

lua_util.debugm(N, rspamd_config, 'process settings "%s"', name)
-- Process IP address
local function process_ip(ip)
local out = {}
@@ -593,6 +594,8 @@ local function process_settings_table(tbl)
local ip = process_ip(elt['ip'])

if ip then
lua_util.debugm(N, rspamd_config, 'added ip condition to "%s": %s',
name, ip)
out['ip'] = check_table(elt['ip'], ip)
end
end
@@ -600,6 +603,8 @@ local function process_settings_table(tbl)
local ip = process_ip(elt['client_ip'])

if ip then
lua_util.debugm(N, rspamd_config, 'added client_ip condition to "%s": %s',
name, ip)
out['client_ip'] = check_table(elt['client_ip'], ip)
end
end
@@ -607,12 +612,16 @@ local function process_settings_table(tbl)
local from = process_addr(elt['from'])

if from then
lua_util.debugm(N, rspamd_config, 'added from condition to "%s": %s',
name, from)
out['from'] = check_table(elt['from'], from)
end
end
if elt['rcpt'] then
local rcpt = process_addr(elt['rcpt'])
if rcpt then
lua_util.debugm(N, rspamd_config, 'added rcpt condition to "%s": %s',
name, rcpt)
out['rcpt'] = check_table(elt['rcpt'], rcpt)
end
end
@@ -620,34 +629,48 @@ local function process_settings_table(tbl)
local from_mime = process_addr(elt['from_mime'])

if from_mime then
lua_util.debugm(N, rspamd_config, 'added from_mime condition to "%s": %s',
name, from_mime)
out['from_mime'] = check_table(elt['from_mime'], from_mime)
end
end
if elt['rcpt_mime'] then
local rcpt_mime = process_addr(elt['rcpt_mime'])
if rcpt_mime then
lua_util.debugm(N, rspamd_config, 'added rcpt_mime condition to "%s": %s',
name, rcpt_mime)
out['rcpt_mime'] = check_table(elt['rcpt_mime'], rcpt_mime)
end
end
if elt['user'] then
local user = process_addr(elt['user'])
if user then
lua_util.debugm(N, rspamd_config, 'added user condition to "%s": %s',
name, user)
out['user'] = check_table(elt['user'], user)
end
end
if elt['hostname'] then
local hostname = process_addr(elt['hostname'])
if hostname then
lua_util.debugm(N, rspamd_config, 'added hostname condition to "%s": %s',
name, hostname)
out['hostname'] = check_table(elt['hostname'], hostname)
end
end
if elt['authenticated'] then
lua_util.debugm(N, rspamd_config, 'added authenticated condition to "%s"',
name)
out['authenticated'] = true
end
if elt['local'] then
out['local'] = true
lua_util.debugm(N, rspamd_config, 'added local condition to "%s"',
name)
end
if elt['inverse'] then
lua_util.debugm(N, rspamd_config, 'added inverse condition to "%s"',
name)
out['inverse'] = true
end
if elt['request_header'] then
@@ -658,6 +681,8 @@ local function process_settings_table(tbl)
rho[k] = re
end
end
lua_util.debugm(N, rspamd_config, 'added request_header condition to "%s": %s',
name, rho)
out['request_header'] = rho
end
if elt['header'] then
@@ -688,6 +713,8 @@ local function process_settings_table(tbl)
if not out['header'] then out['header'] = {} end
table.insert(out['header'], rho)
end
lua_util.debugm(N, rspamd_config, 'added header condition to "%s": %s',
name, out.header)
end

if elt['selector'] then
@@ -708,14 +735,26 @@ local function process_settings_table(tbl)
out['selector'] = {sel}
end
end
lua_util.debugm(N, rspamd_config, 'added selector condition to "%s": %s',
name, sel)
end

-- Now we must process actions
if elt['symbols'] then out['symbols'] = elt['symbols'] end
if not elt.id then elt.id = name end
if elt['symbols'] then
lua_util.debugm(N, rspamd_config, 'added symbols condition to "%s": %s',
name, elt.symbols)
out['symbols'] = elt['symbols']
end
if not elt.id then
elt.id = name
end
if elt['id'] then
out['id'] = elt['id']
settings_ids[elt['id']] = out
local cr = require "rspamd_cryptobox_hash"
out.id = rspamd_util.unpack("I4",
cr.create_specific('xxh64'):update(elt.id):bin())
lua_util.debugm(N, rspamd_config, 'added settings id to "%s": %s -> %s',
name, elt.id, out.id)
settings_ids[out.id] = out
end

if elt['apply'] then

Loading…
Cancel
Save