summaryrefslogtreecommitdiffstats
path: root/src/libserver/cfg_rcl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2021-09-01 13:35:13 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2021-09-01 13:35:13 +0100
commit6b80e5120a9edeebee4e266fc17c81e2a5ddaf40 (patch)
treef4bd1e271977503db3a4292e201f332aa367ace4 /src/libserver/cfg_rcl.c
parent760522c4da986f19e864da6123ba938f5e7d25d2 (diff)
downloadrspamd-6b80e5120a9edeebee4e266fc17c81e2a5ddaf40.tar.gz
rspamd-6b80e5120a9edeebee4e266fc17c81e2a5ddaf40.zip
[Minor] Add function to get a lua_reference from a string returning a function
Diffstat (limited to 'src/libserver/cfg_rcl.c')
-rw-r--r--src/libserver/cfg_rcl.c53
1 files changed, 9 insertions, 44 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index d91ebf3ae..717b16bea 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -1220,7 +1220,7 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool,
gboolean res = TRUE;
struct rspamd_rcl_section *stat_section;
struct rspamd_tokenizer_config *tkcf = NULL;
- lua_State *L;
+ lua_State *L = cfg->lua_state;
g_assert (key != NULL);
ccf = rspamd_config_new_classifier (cfg, NULL);
@@ -1303,59 +1303,24 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool,
if (val) {
LL_FOREACH (val, cur) {
- if (ucl_object_type (cur) == UCL_STRING) {
+ if (ucl_object_type(cur) == UCL_STRING) {
const gchar *lua_script;
gsize slen;
- gint err_idx, ref_idx;
-
- lua_script = ucl_object_tolstring (cur, &slen);
- L = cfg->lua_state;
- lua_pushcfunction (L, &rspamd_lua_traceback);
- err_idx = lua_gettop (L);
-
+ gint ref_idx;
- /* Load file */
- if (luaL_loadbuffer (L, lua_script, slen, "learn_condition") != 0) {
- g_set_error (err,
- CFG_RCL_ERROR,
- EINVAL,
- "cannot load lua condition script: %s",
- lua_tostring (L, -1));
- lua_settop (L, 0); /* Error function */
+ lua_script = ucl_object_tolstring(cur, &slen);
+ ref_idx = rspamd_lua_function_ref_from_str(L,
+ lua_script, slen, err);
+ if (ref_idx == LUA_NOREF) {
return FALSE;
}
- /* Now do it */
- if (lua_pcall (L, 0, 1, err_idx) != 0) {
- g_set_error (err,
- CFG_RCL_ERROR,
- EINVAL,
- "cannot init lua condition script: %s",
- lua_tostring (L, -1));
- lua_settop (L, 0);
-
- return FALSE;
- }
-
- if (!lua_isfunction (L, -1)) {
- g_set_error (err,
- CFG_RCL_ERROR,
- EINVAL,
- "cannot init lua condition script: "
- "must return function");
- lua_settop (L, 0);
-
- return FALSE;
- }
-
- ref_idx = luaL_ref (L, LUA_REGISTRYINDEX);
- rspamd_lua_add_ref_dtor (L, cfg->cfg_pool, ref_idx);
- ccf->learn_conditions = rspamd_mempool_glist_append (
+ rspamd_lua_add_ref_dtor(L, cfg->cfg_pool, ref_idx);
+ ccf->learn_conditions = rspamd_mempool_glist_append(
cfg->cfg_pool,
ccf->learn_conditions,
GINT_TO_POINTER (ref_idx));
- lua_settop (L, 0);
}
}
}