From 221a576077cb7ae2b11bb954230bef583d384fc4 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 25 Feb 2019 15:37:38 +0000 Subject: [PATCH] [Fix] Multimap: Fix operating with userdata --- src/lua/lua_ip.c | 3 +++ src/plugins/lua/multimap.lua | 14 +++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lua/lua_ip.c b/src/lua/lua_ip.c index 800c9765c..5ee4a39b4 100644 --- a/src/lua/lua_ip.c +++ b/src/lua/lua_ip.c @@ -176,6 +176,9 @@ static const struct luaL_reg iplib_m[] = { LUA_INTERFACE_DEF (ip, apply_mask), LUA_INTERFACE_DEF (ip, copy), LUA_INTERFACE_DEF (ip, is_local), + {"tostring", lua_ip_to_string}, + {"totable", lua_ip_to_table}, + {"tonumber", lua_ip_to_number}, {"__tostring", lua_ip_to_string}, {"__eq", lua_ip_equal}, {"__gc", lua_ip_destroy}, diff --git a/src/plugins/lua/multimap.lua b/src/plugins/lua/multimap.lua index 8f1061e4f..9eda5aeec 100644 --- a/src/plugins/lua/multimap.lua +++ b/src/plugins/lua/multimap.lua @@ -404,14 +404,16 @@ local function multimap_callback(task, rule) if r['cdb'] then local srch = value if type(value) == 'userdata' then - srch = value:to_string() + if value.class == 'rspamd{ip}' then + srch = value:tostring() + end end ret = r['cdb']:lookup(srch) elseif r['redis_key'] then local srch = {value} local cmd = 'HGET' - if type(value) == 'userdata' then - srch = {value:to_string()} + if type(value) == 'userdata' and value.class == 'rspamd{ip}' then + srch = {value:tostring()} cmd = 'HMGET' local maxbits = 128 local minbits = 32 @@ -420,7 +422,7 @@ local function multimap_callback(task, rule) minbits = 8 end for i=maxbits,minbits,-1 do - local nip = value:apply_mask(i):to_string() .. "/" .. i + local nip = value:apply_mask(i):tostring() .. "/" .. i table.insert(srch, nip) end end @@ -440,7 +442,9 @@ local function multimap_callback(task, rule) ret = r['radix']:get_key(value) elseif r['hash'] then if type(value) == 'userdata' then - value = value:to_string() + if value.class == 'rspamd{ip}' then + value = value:tostring() + end end ret = r['hash']:get_key(value) end -- 2.39.5