]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Multimap: Fix operating with userdata
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 25 Feb 2019 15:37:38 +0000 (15:37 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 25 Feb 2019 15:37:38 +0000 (15:37 +0000)
src/lua/lua_ip.c
src/plugins/lua/multimap.lua

index 800c9765c80d93c1ebfc134dea29e61dff57790b..5ee4a39b4e27b6ac1803283305491edcd9c63062 100644 (file)
@@ -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},
index 8f1061e4f15918951e26e693245d06b621195ec6..9eda5aeec09ecaaf320f5d0c6ae7a67e8c62358d 100644 (file)
@@ -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