Browse Source

[Fix] Properly deal with `get_symbol/get_metric_symbol` ambiguity

tags/3.3
Vsevolod Stakhov 2 years ago
parent
commit
308aceb473
No account linked to committer's email address
1 changed files with 10 additions and 73 deletions
  1. 10
    73
      src/lua/lua_config.c

+ 10
- 73
src/lua/lua_config.c View File

@@ -331,23 +331,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),
@@ -2438,58 +2420,6 @@ lua_config_set_metric_symbol (lua_State * L)
return 0;
}

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)
{
@@ -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 {

Loading…
Cancel
Save