diff options
Diffstat (limited to 'src/lua/lua_ip.c')
-rw-r--r-- | src/lua/lua_ip.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/src/lua/lua_ip.c b/src/lua/lua_ip.c index 3c3ef2d51..f873c4515 100644 --- a/src/lua/lua_ip.c +++ b/src/lua/lua_ip.c @@ -369,13 +369,15 @@ lua_ip_from_string (lua_State *L) LUA_TRACE_POINT; struct rspamd_lua_ip *ip; const gchar *ip_str; + gsize len; - ip_str = luaL_checkstring (L, 1); + ip_str = luaL_checklstring (L, 1, &len); if (ip_str) { ip = lua_ip_new (L, NULL); - if (!rspamd_parse_inet_address (&ip->addr, ip_str, 0)) { - msg_warn ("cannot parse ip: %s", ip_str); + if (!rspamd_parse_inet_address (&ip->addr, + ip_str, len, RSPAMD_INET_ADDRESS_PARSE_DEFAULT)) { + msg_warn ("cannot parse ip: %*s", (gint) len, ip_str); ip->addr = NULL; } } @@ -490,7 +492,7 @@ lua_ip_equal (lua_State *L) gboolean res = FALSE; if (ip1 && ip2 && ip1->addr && ip2->addr) { - res = rspamd_inet_address_compare (ip1->addr, ip2->addr, TRUE); + res = rspamd_inet_address_compare (ip1->addr, ip2->addr, TRUE) == 0; } lua_pushboolean (L, res); @@ -559,7 +561,8 @@ rspamd_lua_ip_push_fromstring (lua_State *L, const gchar *ip_str) else { ip = g_malloc0 (sizeof (struct rspamd_lua_ip)); - if (rspamd_parse_inet_address (&ip->addr, ip_str, 0)) { + if (rspamd_parse_inet_address (&ip->addr, + ip_str, strlen (ip_str), RSPAMD_INET_ADDRESS_PARSE_DEFAULT)) { pip = lua_newuserdata (L, sizeof (struct rspamd_lua_ip *)); rspamd_lua_setclass (L, "rspamd{ip}", -1); @@ -584,17 +587,7 @@ lua_load_ip (lua_State * L) void luaopen_ip (lua_State * L) { - luaL_newmetatable (L, "rspamd{ip}"); - lua_pushstring (L, "__index"); - lua_pushvalue (L, -2); - lua_settable (L, -3); - - lua_pushstring (L, "class"); - lua_pushstring (L, "rspamd{ip}"); - lua_rawset (L, -3); - - luaL_register (L, NULL, iplib_m); - rspamd_lua_add_preload (L, "rspamd_ip", lua_load_ip); - + rspamd_lua_new_class (L, "rspamd{ip}", iplib_m); lua_pop (L, 1); + rspamd_lua_add_preload (L, "rspamd_ip", lua_load_ip); } |