aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2022-05-29 11:02:47 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2022-05-29 11:02:47 +0100
commit308aceb47309cb1c188e11f7a9173fb5fec1f8a8 (patch)
treebfd6017b493e0298e868901110cf1bb1bd1ab335 /src
parent563faab280101acdcbfe8a8f681dec74b50db85c (diff)
downloadrspamd-308aceb47309cb1c188e11f7a9173fb5fec1f8a8.tar.gz
rspamd-308aceb47309cb1c188e11f7a9173fb5fec1f8a8.zip
[Fix] Properly deal with `get_symbol/get_metric_symbol` ambiguity
Diffstat (limited to 'src')
-rw-r--r--src/lua/lua_config.c83
1 files changed, 10 insertions, 73 deletions
diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c
index 1a98f0ea6..06a22f096 100644
--- a/src/lua/lua_config.c
+++ b/src/lua/lua_config.c
@@ -332,23 +332,6 @@ LUA_FUNCTION_DEF (config, set_metric_symbol);
LUA_FUNCTION_DEF (config, set_metric_action);
/**
- * @method rspamd_config:get_symbol(name)
- * Gets metric data for a specific symbol identified by `name`:
- *
- * - `score`: score for symbol (number)
- * - `description`: description of symbol (string, optional)
- * - `group`: name of group for symbol (string, optional)
- * - `one_shot`: turn off multiple hits for a symbol (boolean, optional)
- * - `flags`: comma separated string of flags:
- * + `ignore`: do not strictly check validity of symbol and corresponding rule
- * + `one_shot`: turn off multiple hits for a symbol
- *
- * @param {string} name name of symbol
- * @return {table} symbol's definition or nil in case of undefined symbol
- */
-LUA_FUNCTION_DEF (config, get_metric_symbol);
-
-/**
* @method rspamd_config:get_action(name)
* Gets data for a specific action in config. This function returns number representing action's score
*
@@ -887,8 +870,7 @@ static const struct luaL_reg configlib_m[] = {
{"set_symbol", lua_config_set_metric_symbol},
LUA_INTERFACE_DEF (config, set_metric_action),
{"set_action", lua_config_set_metric_action},
- LUA_INTERFACE_DEF (config, get_metric_symbol),
- {"get_symbol", lua_config_get_metric_symbol},
+ {"get_metric_symbol", lua_config_get_symbol},
LUA_INTERFACE_DEF (config, get_metric_action),
{"get_action", lua_config_get_metric_action},
LUA_INTERFACE_DEF (config, get_all_actions),
@@ -2439,58 +2421,6 @@ lua_config_set_metric_symbol (lua_State * L)
}
static gint
-lua_config_get_metric_symbol (lua_State * L)
-{
- LUA_TRACE_POINT;
- struct rspamd_config *cfg = lua_check_config (L, 1);
- const gchar *sym_name = luaL_checkstring (L, 2);
- struct rspamd_symbol *sym_def;
- struct rspamd_symbols_group *sym_group;
- guint i;
-
- if (cfg && sym_name) {
- sym_def = g_hash_table_lookup (cfg->symbols, sym_name);
-
- if (sym_def == NULL) {
- lua_pushnil (L);
- }
- else {
- lua_createtable (L, 0, 3);
- lua_pushstring (L, "score");
- lua_pushnumber (L, sym_def->score);
- lua_settable (L, -3);
-
- if (sym_def->description) {
- lua_pushstring (L, "description");
- lua_pushstring (L, sym_def->description);
- lua_settable (L, -3);
- }
-
- if (sym_def->gr) {
- lua_pushstring (L, "group");
- lua_pushstring (L, sym_def->gr->name);
- lua_settable (L, -3);
- }
-
- lua_pushstring (L, "groups");
- lua_createtable (L, sym_def->groups->len, 0);
-
- PTR_ARRAY_FOREACH (sym_def->groups, i, sym_group) {
- lua_pushstring (L, sym_group->name);
- lua_rawseti (L, -2, i + 1);
- }
-
- lua_settable (L, -3);
- }
- }
- else {
- luaL_error (L, "Invalid arguments");
- }
-
- return 1;
-}
-
-static gint
lua_config_set_metric_action (lua_State * L)
{
LUA_TRACE_POINT;
@@ -3514,6 +3444,7 @@ lua_config_get_symbols_counters (lua_State *L)
struct lua_metric_symbols_cbdata {
lua_State *L;
struct rspamd_config *cfg;
+ bool is_table;
};
static void
@@ -3528,7 +3459,9 @@ lua_metric_symbol_inserter (gpointer k, gpointer v, gpointer ud)
L = cbd->L;
- lua_pushstring (L, sym); /* Symbol name */
+ if (cbd->is_table) {
+ lua_pushstring(L, sym); /* Symbol name */
+ }
lua_createtable (L, 0, 6);
lua_pushstring (L, "score");
@@ -3626,7 +3559,9 @@ lua_metric_symbol_inserter (gpointer k, gpointer v, gpointer ud)
lua_setfield (L, -2, "groups");
}
- lua_settable (L, -3); /* Symname -> table */
+ if (cbd->is_table) {
+ lua_settable(L, -3); /* Symname -> table */
+ }
}
static gint
@@ -3640,6 +3575,7 @@ lua_config_get_symbols (lua_State *L)
cbd.L = L;
cbd.cfg = cfg;
+ cbd.is_table = true;
lua_createtable (L, 0, g_hash_table_size (cfg->symbols));
g_hash_table_foreach (cfg->symbols,
@@ -3667,6 +3603,7 @@ lua_config_get_symbol (lua_State *L)
if (s) {
cbd.L = L;
cbd.cfg = cfg;
+ cbd.is_table = false;
lua_metric_symbol_inserter((void *)sym_name, s, &cbd);
}
else {