From 18b681e68af2bf46d1b153d910ae65109f148158 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 24 Nov 2016 13:30:01 +0000 Subject: [PATCH] [Fix] Fix static IP maps --- src/libutil/radix.c | 4 +++- src/lua/lua_map.c | 22 ++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/libutil/radix.c b/src/libutil/radix.c index fcc6b1cf6..ebfd03197 100644 --- a/src/libutil/radix.c +++ b/src/libutil/radix.c @@ -315,12 +315,14 @@ gboolean radix_add_generic_iplist (const gchar *ip_list, radix_compressed_t **tree, gboolean resolve) { + static const char fill_ptr[] = "1"; + if (*tree == NULL) { *tree = radix_create_compressed (); } return (rspamd_radix_add_iplist (ip_list, ",; ", *tree, - GINT_TO_POINTER (1), resolve) > 0); + fill_ptr, resolve) > 0); } diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c index 796c74e14..1ed4aff7d 100644 --- a/src/lua/lua_map.c +++ b/src/lua/lua_map.c @@ -158,6 +158,7 @@ lua_config_radix_from_config (lua_State *L) const gchar *mname, *optname; const ucl_object_t *obj; struct rspamd_lua_map *map, **pmap; + static const char fill_ptr[] = "1"; if (!cfg) { return luaL_error (L, "invalid arguments"); @@ -174,8 +175,25 @@ lua_config_radix_from_config (lua_State *L) map->type = RSPAMD_LUA_MAP_RADIX; map->data.radix = radix_create_compressed (); map->flags |= RSPAMD_LUA_MAP_FLAG_EMBEDDED; - radix_add_generic_iplist (ucl_obj_tostring (obj), &map->data.radix, - TRUE); + + if (ucl_object_type (obj) == UCL_STRING) { + radix_add_generic_iplist (ucl_obj_tostring (obj), &map->data.radix, + TRUE); + } + else { + ucl_object_iter_t it = NULL; + const ucl_object_t *cur; + + map->data.radix = radix_create_compressed (); + + while ((cur = ucl_object_iterate (obj, &it, true)) != NULL) { + if (ucl_object_type (cur) == UCL_STRING) { + rspamd_radix_add_iplist (ucl_object_tostring (cur), + ",;", map->data.radix, fill_ptr, TRUE); + } + } + } + pmap = lua_newuserdata (L, sizeof (void *)); *pmap = map; rspamd_lua_setclass (L, "rspamd{map}", -1); -- 2.39.5