summaryrefslogtreecommitdiffstats
path: root/src/libserver/cfg_rcl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2021-09-01 14:26:32 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2021-09-01 14:26:32 +0100
commit718238fd33017f346d1e84fe757481f9f147eb90 (patch)
tree34140ab35d6b9709d3c8ff45c8c1a7501ee44dd9 /src/libserver/cfg_rcl.c
parent6b80e5120a9edeebee4e266fc17c81e2a5ddaf40 (diff)
downloadrspamd-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.c30
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);