diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-05-21 17:30:27 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-05-21 17:30:27 +0100 |
commit | 79e69412d0ca7cf644a946409b9673f8d5073023 (patch) | |
tree | 03c8a32e0059ed54dfa81bacadd958682d9cb41a | |
parent | 9a26b96cf2dfb78cbd2c7c553cad363d320b1695 (diff) | |
download | rspamd-79e69412d0ca7cf644a946409b9673f8d5073023.tar.gz rspamd-79e69412d0ca7cf644a946409b9673f8d5073023.zip |
[Feature] Use maps logic from lua_maps for multimap
-rw-r--r-- | lualib/lua_maps.lua | 3 | ||||
-rw-r--r-- | src/plugins/lua/multimap.lua | 166 |
2 files changed, 55 insertions, 114 deletions
diff --git a/lualib/lua_maps.lua b/lualib/lua_maps.lua index 7cbd9ae0d..6b1a37590 100644 --- a/lualib/lua_maps.lua +++ b/lualib/lua_maps.lua @@ -57,7 +57,10 @@ local function maybe_adjust_type(data,mtype) local known_types = { {'regexp;', 'regexp'}, {'re;', 'regexp'}, + {'regexp_multi;', 'regexp_multi'}, + {'re_multi;', 'regexp_multi'}, {'glob;', 'glob'}, + {'glob_multi;', 'glob_multi'}, {'radix;', 'radix'}, {'ipnet;', 'radix'}, {'set;', 'set'}, diff --git a/src/plugins/lua/multimap.lua b/src/plugins/lua/multimap.lua index 9ee8f59c2..68f254c1c 100644 --- a/src/plugins/lua/multimap.lua +++ b/src/plugins/lua/multimap.lua @@ -29,12 +29,11 @@ local rspamd_expression = require "rspamd_expression" local rspamd_ip = require "rspamd_ip" local lua_util = require "lua_util" local lua_selectors = require "lua_selectors" +local lua_maps = require "lua_maps" local redis_params local fun = require "fun" local N = 'multimap' -local urls = {} - local value_types = { ip = { get_value = function(ip) return ip:to_string() end, @@ -918,38 +917,23 @@ local function add_multimap_rule(key, newrule) local function multimap_load_hash(rule) if rule['regexp'] then if rule['multi'] then - rule['hash'] = rspamd_config:add_map ({ - url = rule['map'], - description = rule['description'], - type = 'regexp_multi' - }) + rule.hash = lua_maps.map_add_from_ucl(rule.map, 'regexp_multi', + rule.description) else - rule['hash'] = rspamd_config:add_map ({ - url = newrule['map'], - description = newrule['description'], - type = 'regexp' - }) + rule.hash = lua_maps.map_add_from_ucl(rule.map, 'regexp', + rule.description) end elseif rule['glob'] then if rule['multi'] then - rule['hash'] = rspamd_config:add_map ({ - url = rule['map'], - description = rule['description'], - type = 'glob_multi' - }) + rule.hash = lua_maps.map_add_from_ucl(rule.map, 'glob_multi', + rule.description) else - rule['hash'] = rspamd_config:add_map ({ - url = rule['map'], - description = rule['description'], - type = 'glob' - }) + rule.hash = lua_maps.map_add_from_ucl(rule.map, 'glob', + rule.description) end else - rule['hash'] = rspamd_config:add_map ({ - url = rule['map'], - description = rule['description'], - type = 'hash' - }) + rule.hash = lua_maps.map_add_from_ucl(rule.map, 'hash', + rule.description) end end @@ -1045,106 +1029,60 @@ local function add_multimap_rule(key, newrule) ret = true end else - if type(newrule['map']) == 'string' then - local map = urls[newrule['map']] - if map and map['regexp'] == newrule['regexp'] and - map['glob'] == newrule['glob'] then - if newrule['type'] == 'ip' or newrule['filter'] == 'ip_addr' then - newrule['radix'] = map['map'] - else - newrule['hash'] = map['map'] - end - rspamd_logger.infox(rspamd_config, 'reuse url for %s: "%s"', - newrule['symbol'], newrule['map']) + if newrule['type'] == 'ip' then + newrule['radix'] = lua_maps.map_add_from_ucl(newrule.map, 'radix', + newrule.description) + if newrule['radix'] then ret = true + else + rspamd_logger.warnx(rspamd_config, 'Cannot add rule: map doesn\'t exists: %1', + newrule['map']) end - end - if not ret then - if newrule['type'] == 'ip' then - newrule['radix'] = rspamd_config:add_map ({ - url = newrule['map'], - description = newrule['description'], - type = 'radix' - }) + elseif newrule['type'] == 'received' then + if type(newrule['flags']) == 'table' and newrule['flags'][1] then + newrule['flags'] = newrule['flags'] + elseif type(newrule['flags']) == 'string' then + newrule['flags'] = {newrule['flags']} + end + if type(newrule['nflags']) == 'table' and newrule['nflags'][1] then + newrule['nflags'] = newrule['nflags'] + elseif type(newrule['nflags']) == 'string' then + newrule['nflags'] = {newrule['nflags']} + end + local filter = newrule['filter'] or 'real_ip' + if filter == 'real_ip' or filter == 'from_ip' then + newrule['radix'] = lua_maps.map_add_from_ucl(newrule.map, 'radix', + newrule.description) if newrule['radix'] then ret = true - if type(newrule['map']) == 'string' then - urls[newrule['map']] = { - type = 'ip', - map = newrule['radix'], - regexp = false - } - end - else - rspamd_logger.warnx(rspamd_config, 'Cannot add rule: map doesn\'t exists: %1', - newrule['map']) - end - elseif newrule['type'] == 'received' then - if type(newrule['flags']) == 'table' and newrule['flags'][1] then - newrule['flags'] = newrule['flags'] - elseif type(newrule['flags']) == 'string' then - newrule['flags'] = {newrule['flags']} - end - if type(newrule['nflags']) == 'table' and newrule['nflags'][1] then - newrule['nflags'] = newrule['nflags'] - elseif type(newrule['nflags']) == 'string' then - newrule['nflags'] = {newrule['nflags']} - end - local filter = newrule['filter'] or 'real_ip' - if filter == 'real_ip' or filter == 'from_ip' then - newrule['radix'] = rspamd_config:add_map ({ - url = newrule['map'], - description = newrule['description'], - type = 'radix' - }) - if newrule['radix'] then - ret = true - end - else - multimap_load_hash(newrule) - - if newrule['hash'] then - ret = true - if type(newrule['map']) == 'string' then - urls[newrule['map']] = { - type = newrule['type'], - map = newrule['hash'], - regexp = newrule['regexp'] - } - end - else - rspamd_logger.warnx(rspamd_config, 'Cannot add rule: map doesn\'t exists: %1', - newrule['map']) - end - end - elseif known_generic_types[newrule.type] then - - if newrule.filter == 'ip_addr' then - newrule['radix'] = rspamd_config:add_map ({ - url = newrule['map'], - description = newrule['description'], - type = 'radix' - }) - elseif not newrule.combined then - multimap_load_hash(newrule) end + else + multimap_load_hash(newrule) - if newrule.hash or newrule.radix then + if newrule['hash'] then ret = true - if type(newrule['map']) == 'string' then - urls[newrule['map']] = { - type = newrule['type'], - map = newrule.hash or newrule.radix, - regexp = newrule['regexp'] - } - end else rspamd_logger.warnx(rspamd_config, 'Cannot add rule: map doesn\'t exists: %1', newrule['map']) end - elseif newrule['type'] == 'dnsbl' then + end + elseif known_generic_types[newrule.type] then + + if newrule.filter == 'ip_addr' then + newrule['radix'] = lua_maps.map_add_from_ucl(newrule.map, 'radix', + newrule.description) + elseif not newrule.combined then + multimap_load_hash(newrule) + end + + if newrule.hash or newrule.radix then ret = true + else + rspamd_logger.warnx(rspamd_config, 'Cannot add rule: map doesn\'t exists: %1', + newrule['map']) end + elseif newrule['type'] == 'dnsbl' then + ret = true end end |