diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-02-14 16:25:41 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-02-14 16:25:41 +0000 |
commit | 557c870057a43e72983e7f03feedbfc150e0b138 (patch) | |
tree | c59afd40eb471194d76db1bce97659ac16f9a127 /src/lua/lua_map.c | |
parent | d0d0f333d3fd5d10bc6b88dd364cb792e326c8c2 (diff) | |
download | rspamd-557c870057a43e72983e7f03feedbfc150e0b138.tar.gz rspamd-557c870057a43e72983e7f03feedbfc150e0b138.zip |
[Project] CDB maps: Start making cdb a first class citizen
Diffstat (limited to 'src/lua/lua_map.c')
-rw-r--r-- | src/lua/lua_map.c | 63 |
1 files changed, 48 insertions, 15 deletions
diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c index ed37625d5..087478ccc 100644 --- a/src/lua/lua_map.c +++ b/src/lua/lua_map.c @@ -162,7 +162,7 @@ lua_config_add_radix_map (lua_State *L) rspamd_radix_fin, rspamd_radix_dtor, (void **)&map->data.radix, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { msg_warn_config ("invalid radix map %s", map_line); lua_pushnil (L); @@ -220,7 +220,7 @@ lua_config_radix_from_config (lua_State *L) rspamd_radix_fin, rspamd_radix_dtor, (void **)&map->data.radix, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { msg_err_config ("invalid radix map static"); lua_pushnil (L); ucl_object_unref (fake_obj); @@ -282,7 +282,7 @@ lua_config_radix_from_ucl (lua_State *L) rspamd_radix_fin, rspamd_radix_dtor, (void **)&map->data.radix, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { msg_err_config ("invalid radix map static"); lua_pushnil (L); ucl_object_unref (fake_obj); @@ -328,7 +328,7 @@ lua_config_add_hash_map (lua_State *L) rspamd_kv_list_fin, rspamd_kv_list_dtor, (void **)&map->data.hash, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { msg_warn_config ("invalid set map %s", map_line); lua_pushnil (L); return 1; @@ -369,7 +369,7 @@ lua_config_add_kv_map (lua_State *L) rspamd_kv_list_fin, rspamd_kv_list_dtor, (void **)&map->data.hash, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { msg_warn_config ("invalid hash map %s", map_line); lua_pushnil (L); @@ -535,7 +535,7 @@ lua_config_add_map (lua_State *L) lua_map_fin, lua_map_dtor, (void **)&map->data.cbdata, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { if (cbidx != -1) { luaL_unref (L, LUA_REGISTRYINDEX, cbidx); @@ -561,7 +561,7 @@ lua_config_add_map (lua_State *L) rspamd_kv_list_fin, rspamd_kv_list_dtor, (void **)&map->data.hash, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { lua_pushnil (L); ucl_object_unref (map_obj); @@ -579,7 +579,7 @@ lua_config_add_map (lua_State *L) rspamd_kv_list_fin, rspamd_kv_list_dtor, (void **)&map->data.hash, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { lua_pushnil (L); ucl_object_unref (map_obj); @@ -597,7 +597,7 @@ lua_config_add_map (lua_State *L) rspamd_radix_fin, rspamd_radix_dtor, (void **)&map->data.radix, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { lua_pushnil (L); ucl_object_unref (map_obj); @@ -615,7 +615,7 @@ lua_config_add_map (lua_State *L) rspamd_regexp_list_fin, rspamd_regexp_list_dtor, (void **) &map->data.re_map, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { lua_pushnil (L); ucl_object_unref (map_obj); @@ -633,7 +633,7 @@ lua_config_add_map (lua_State *L) rspamd_regexp_list_fin, rspamd_regexp_list_dtor, (void **) &map->data.re_map, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { lua_pushnil (L); ucl_object_unref (map_obj); @@ -651,7 +651,7 @@ lua_config_add_map (lua_State *L) rspamd_regexp_list_fin, rspamd_regexp_list_dtor, (void **) &map->data.re_map, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { lua_pushnil (L); ucl_object_unref (map_obj); @@ -669,7 +669,25 @@ lua_config_add_map (lua_State *L) rspamd_regexp_list_fin, rspamd_regexp_list_dtor, (void **) &map->data.re_map, - NULL)) == NULL) { + NULL, RSPAMD_MAP_DEFAULT)) == NULL) { + lua_pushnil (L); + ucl_object_unref (map_obj); + + return 1; + } + m->lua_map = map; + } + else if (strcmp (type, "cdb") == 0) { + map = rspamd_mempool_alloc0 (cfg->cfg_pool, sizeof (*map)); + map->data.cdb_map = NULL; + map->type = RSPAMD_LUA_MAP_CDB; + + if ((m = rspamd_map_add_from_ucl (cfg, map_obj, description, + rspamd_cdb_list_read, + rspamd_cdb_list_fin, + rspamd_cdb_list_dtor, + (void **) &map->data.cdb_map, + NULL, RSPAMD_MAP_FILE_ONLY|RSPAMD_MAP_FILE_NO_READ)) == NULL) { lua_pushnil (L); ucl_object_unref (map_obj); @@ -857,7 +875,7 @@ lua_map_get_key (lua_State * L) key = lua_map_process_string_key (L, 2, &len); if (key && map->data.hash) { - ret = rspamd_match_hash_map (map->data.hash, key) != NULL; + ret = rspamd_match_hash_map (map->data.hash, key, len) != NULL; } } else if (map->type == RSPAMD_LUA_MAP_REGEXP) { @@ -903,7 +921,7 @@ lua_map_get_key (lua_State * L) key = lua_map_process_string_key (L, 2, &len); if (key && map->data.hash) { - value = rspamd_match_hash_map (map->data.hash, key); + value = rspamd_match_hash_map (map->data.hash, key, len); } if (value) { @@ -911,6 +929,21 @@ lua_map_get_key (lua_State * L) return 1; } } + else if (map->type == RSPAMD_LUA_MAP_CDB) { + /* cdb map */ + const rspamd_ftok_t *tok = NULL; + + key = lua_map_process_string_key (L, 2, &len); + + if (key && map->data.cdb_map) { + tok = rspamd_match_cdb_map (map->data.cdb_map, key, len); + } + + if (tok) { + lua_pushlstring (L, tok->begin, tok->len); + return 1; + } + } else { /* callback map or unknown type map */ lua_pushnil (L); |