Browse Source

Add more settings processing.

tags/0.7.0
Vsevolod Stakhov 10 years ago
parent
commit
4c6d1b64fe
1 changed files with 41 additions and 21 deletions
  1. 41
    21
      src/plugins/lua/settings.lua

+ 41
- 21
src/plugins/lua/settings.lua View File

@@ -46,7 +46,7 @@ local function process_settings_table(tbl)
end
-- Check the setting element internal data
local process_setting_elt = function(elt)
local process_setting_elt = function(name, elt)
-- Process IP address
local function process_ip(ip)
local out = {}
@@ -69,7 +69,7 @@ local function process_settings_table(tbl)
return nil
end
else
local res = rspamd_ip.from_string(string.sub(ip, 1, slash))
local res = rspamd_ip.from_string(string.sub(ip, 1, slash - 1))
local mask = tonumber(string.sub(ip, slash + 1))
if res:is_valid() then
@@ -86,21 +86,18 @@ local function process_settings_table(tbl)
return out
end
local process_addr = function(addr)
local out = {
name = {},
user = {},
domain = {},
regexp = {}
}
local function process_addr(addr)
local out = {}
if type(addr) == "table" then
for i,v in ipairs(addr) do
table.insert(out, process_addr(v))
end
elseif type(addr) == "string" then
if addr[1] == '/' then
local start = string.sub(addr, 1, 1)
if start == '/' then
-- It is a regexp
local re = rspamd_regexp.create(string.sub(addr, 2))
local re = regexp.create(string.sub(addr, 2))
if re then
out['regexp'] = re
setmetatable(out, {
@@ -108,9 +105,10 @@ local function process_settings_table(tbl)
})
else
rspamd_logger.err("bad regexp: " .. addr)
return nil
end
elseif addr[1] == '@' then
elseif start == '@' then
-- It is a domain if form @domain
out['domain'] = string.sub(addr, 2)
else
@@ -132,33 +130,53 @@ local function process_settings_table(tbl)
end
local out = {
ip = {},
rcpt = {},
from = {}
}
local out = {}
if elt['ip'] then
local ip = process_ip(elt['ip'])
if ip then
table.insert(out['ip'], ip)
if not out['ip'] then
out['ip'] = {ip}
else
table.insert(out['ip'], ip)
end
end
end
if elt['from'] then
local from = process_addr(elt['from'])
if from then
table.insert(out['from'], from)
if not out['from'] then
out['from'] = {from}
else
table.insert(out['from'], from)
end
end
end
if elt['rcpt'] then
local rcpt = process_addr(elt['rcpt'])
if rcpt then
table.insert(out['rcpt'], rcpt)
if not out['rcpt'] then
out['rcpt'] = {rcpt}
else
table.insert(out['rcpt'], rcpt)
end
end
end
-- Now we must process actions
if elt['apply'] then
-- Just insert all metric results to the action key
out['apply'] = elt['apply']
elseif elt['whitelist'] or elt['want_spam'] then
out['whitelist'] = true
else
rspamd_logger.err("no actions in settings: " .. name)
return nil
end
return out
end
@@ -179,11 +197,13 @@ local function process_settings_table(tbl)
if not settings[pri] then
settings[pri] = {}
end
local s = process_setting_elt(v)
local s = process_setting_elt(k, v)
if s then
settings[pri][k] = s
end
end
--local dumper = require 'pl.pretty'.dump
--dumper(settings)
end

-- Parse settings map from the ucl line

Loading…
Cancel
Save