aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-02-27 12:16:23 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-02-27 12:16:23 +0000
commitfd449b38e77db529a69dd44ccfd7e90dcbbd7717 (patch)
tree90be2f8960697531f1b5f3a88fc53d5316e9d483
parente47d8db1f1c1b8983263075ad00401a49e90560c (diff)
downloadrspamd-fd449b38e77db529a69dd44ccfd7e90dcbbd7717.tar.gz
rspamd-fd449b38e77db529a69dd44ccfd7e90dcbbd7717.zip
[Minor] Accept strign keys for radix maps
-rw-r--r--src/lua/lua_map.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c
index c74bcf31b..c0ce00609 100644
--- a/src/lua/lua_map.c
+++ b/src/lua/lua_map.c
@@ -540,9 +540,18 @@ lua_map_get_key (lua_State * L)
if (map->type == RSPAMD_LUA_MAP_RADIX) {
radix = map->data.radix;
- if (lua_type (L, 2) == LUA_TNUMBER) {
- key_num = luaL_checknumber (L, 2);
- key_num = htonl (key_num);
+ if (lua_type (L, 2) == LUA_TSTRING) {
+ const gchar *addr_str;
+ gsize len;
+
+ addr_str = luaL_checklstring (L, 2, &len);
+ addr = g_alloca (sizeof (*addr));
+ addr->addr = g_alloca (rspamd_inet_address_storage_size ());
+
+ if (!rspamd_parse_inet_address_ip (addr_str, len, addr->addr)) {
+ addr = NULL;
+ msg_err ("invalid ip address: %*s", (gint)len, addr_str);
+ }
}
else if (lua_type (L, 2) == LUA_TUSERDATA) {
ud = rspamd_lua_check_udata (L, 2, "rspamd{ip}");
@@ -557,6 +566,10 @@ lua_map_get_key (lua_State * L)
msg_err ("invalid userdata type provided, rspamd{ip} expected");
}
}
+ else if (lua_type (L, 2) == LUA_TNUMBER) {
+ key_num = luaL_checknumber (L, 2);
+ key_num = htonl (key_num);
+ }
if (radix) {
guintptr p = 0;