diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-09-01 14:26:32 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-09-01 14:26:32 +0100 |
commit | 718238fd33017f346d1e84fe757481f9f147eb90 (patch) | |
tree | 34140ab35d6b9709d3c8ff45c8c1a7501ee44dd9 /src/libserver/cfg_rcl.c | |
parent | 6b80e5120a9edeebee4e266fc17c81e2a5ddaf40 (diff) | |
download | rspamd-718238fd33017f346d1e84fe757481f9f147eb90.tar.gz rspamd-718238fd33017f346d1e84fe757481f9f147eb90.zip |
[Rework] Rework learn and add classify condition
Diffstat (limited to 'src/libserver/cfg_rcl.c')
-rw-r--r-- | src/libserver/cfg_rcl.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index 717b16bea..e3c69c343 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -1299,7 +1299,7 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool, ccf->tokenizer = tkcf; /* Handle lua conditions */ - val = ucl_object_lookup_any (obj, "condition", "learn_condition", NULL); + val = ucl_object_lookup_any (obj, "learn_condition", NULL); if (val) { LL_FOREACH (val, cur) { @@ -1310,7 +1310,7 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool, lua_script = ucl_object_tolstring(cur, &slen); ref_idx = rspamd_lua_function_ref_from_str(L, - lua_script, slen, err); + lua_script, slen, "learn_condition", err); if (ref_idx == LUA_NOREF) { return FALSE; @@ -1325,6 +1325,32 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool, } } + val = ucl_object_lookup_any (obj, "classify_condition", NULL); + + if (val) { + LL_FOREACH (val, cur) { + if (ucl_object_type(cur) == UCL_STRING) { + const gchar *lua_script; + gsize slen; + gint ref_idx; + + lua_script = ucl_object_tolstring(cur, &slen); + ref_idx = rspamd_lua_function_ref_from_str(L, + lua_script, slen, "classify_condition", err); + + if (ref_idx == LUA_NOREF) { + return FALSE; + } + + rspamd_lua_add_ref_dtor (L, cfg->cfg_pool, ref_idx); + ccf->classify_conditions = rspamd_mempool_glist_append( + cfg->cfg_pool, + ccf->classify_conditions, + GINT_TO_POINTER (ref_idx)); + } + } + } + ccf->opts = (ucl_object_t *)obj; cfg->classifiers = g_list_prepend (cfg->classifiers, ccf); |