Преглед изворни кода

[Minor] Add multiple regexp maps support in lua

tags/1.6.0
Vsevolod Stakhov пре 7 година
родитељ
комит
e1ed8edbcc
2 измењених фајлова са 41 додато и 0 уклоњено
  1. 1
    0
      src/lua/lua_common.h
  2. 40
    0
      src/lua/lua_map.c

+ 1
- 0
src/lua/lua_common.h Прегледај датотеку

@@ -94,6 +94,7 @@ enum rspamd_lua_map_type {
RSPAMD_LUA_MAP_SET,
RSPAMD_LUA_MAP_HASH,
RSPAMD_LUA_MAP_REGEXP,
RSPAMD_LUA_MAP_REGEXP_MULTIPLE,
RSPAMD_LUA_MAP_CALLBACK
};


+ 40
- 0
src/lua/lua_map.c Прегледај датотеку

@@ -476,6 +476,21 @@ lua_config_add_map (lua_State *L)
return 1;
}
}
else if (strcmp (type, "regexp_multi") == 0) {
map = rspamd_mempool_alloc0 (cfg->cfg_pool, sizeof (*map));
map->data.re_map = NULL;
map->type = RSPAMD_LUA_MAP_REGEXP_MULTIPLE;

if ((m = rspamd_map_add_from_ucl (cfg, map_obj, description,
rspamd_regexp_list_read_multiple,
rspamd_regexp_list_fin,
(void **) &map->data.re_map)) == NULL) {
lua_pushnil (L);
ucl_object_unref (map_obj);

return 1;
}
}
else {
ret = luaL_error (L, "invalid arguments: unknown type '%s'", type);
ucl_object_unref (map_obj);
@@ -615,6 +630,31 @@ lua_map_get_key (lua_State * L)
}
}
}
else if (map->type == RSPAMD_LUA_MAP_REGEXP_MULTIPLE) {
GPtrArray *ar;
guint i;
const gchar *val;

key = lua_map_process_string_key (L, 2, &len);

if (key && map->data.re_map) {
ar = rspamd_match_regexp_map_all (map->data.re_map, key,
len);

if (ar) {
lua_createtable (L, ar->len, 0);

PTR_ARRAY_FOREACH (ar, i, val) {
lua_pushstring (L, val);
lua_rawseti (L, -2, i + 1);
}

g_ptr_array_free (ar, TRUE);

return 1;
}
}
}
else if (map->type == RSPAMD_LUA_MAP_HASH) {
/* key-value map */
key = lua_map_process_string_key (L, 2, &len);

Loading…
Откажи
Сачувај