summaryrefslogtreecommitdiffstats
path: root/src/plugins/lua/settings.lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-09-23 15:34:50 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-09-23 15:34:50 +0100
commitc90615aec8e1f477096e3e8a42ce6000169c4787 (patch)
tree8cbab6c3b1cd2692d272f7ef4aa46cddd84d62b3 /src/plugins/lua/settings.lua
parent6701c19298f3bc9c74caf0686f8ecba6ca748336 (diff)
downloadrspamd-c90615aec8e1f477096e3e8a42ce6000169c4787.tar.gz
rspamd-c90615aec8e1f477096e3e8a42ce6000169c4787.zip
[Feature] Support selectors in settings
Diffstat (limited to 'src/plugins/lua/settings.lua')
-rw-r--r--src/plugins/lua/settings.lua23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/plugins/lua/settings.lua b/src/plugins/lua/settings.lua
index f25714b0e..970062d3b 100644
--- a/src/plugins/lua/settings.lua
+++ b/src/plugins/lua/settings.lua
@@ -28,6 +28,7 @@ local lua_squeeze = require "lua_squeeze_rules"
local lua_util = require "lua_util"
local rspamd_ip = require "rspamd_ip"
local rspamd_regexp = require "rspamd_regexp"
+local lua_selectors = require "lua_selectors"
local ucl = require "ucl"
local fun = require "fun"
@@ -39,6 +40,8 @@ local settings_ids = {}
local settings_initialized = false
local max_pri = 0
+local selectors_cache = {} -- Used to speed up selectors in settings
+
local function apply_settings(task, to_apply)
task:set_settings(to_apply)
task:cache_set('settings', to_apply)
@@ -189,7 +192,7 @@ local function check_settings(task)
return false
end
- local function check_specific_setting(_, rule, ip, client_ip, from, rcpt,
+ local function check_specific_setting(rule_name, rule, ip, client_ip, from, rcpt,
user, auth_user)
local res = false
@@ -313,6 +316,24 @@ local function check_settings(task)
end
end
+ if rule['selector'] then
+ local sel = selectors_cache[rule_name]
+ if not sel then
+ sel = lua_selectors.create_selector_closure(rspamd_config, rule.selector,
+ rule.delimiter or "")
+
+ if sel then
+ selectors_cache[rule_name] = sel
+ end
+ end
+
+ if sel then
+ if sel(task) then
+ res = true
+ end
+ end
+ end
+
if res then
if rule['whitelist'] then
rule['apply'] = {whitelist = true}