aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua/lua_map.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-02-14 16:25:41 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-02-14 16:25:41 +0000
commit557c870057a43e72983e7f03feedbfc150e0b138 (patch)
treec59afd40eb471194d76db1bce97659ac16f9a127 /src/lua/lua_map.c
parentd0d0f333d3fd5d10bc6b88dd364cb792e326c8c2 (diff)
downloadrspamd-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.c63
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);