Browse Source

[Minor] Support flatten attribute in rspamd_config:register_re_selector

tags/2.6
Vsevolod Stakhov 4 years ago
parent
commit
839c994813
2 changed files with 12 additions and 3 deletions
  1. 1
    0
      lualib/lua_selectors/init.lua
  2. 11
    3
      src/lua/lua_config.c

+ 1
- 0
lualib/lua_selectors/init.lua View File

@@ -486,7 +486,7 @@ exports.flatten_selectors = function(selectors)
end

--[[[
-- @function lua_selectors.create_closure(cfg, selector_str, delimiter='', flatten=false)
--]]
exports.create_selector_closure = function(cfg, selector_str, delimiter, flatten)
local selector = exports.parse_selector(cfg, selector_str)

+ 11
- 3
src/lua/lua_config.c View File

@@ -282,11 +282,13 @@ LUA_FUNCTION_DEF (config, get_symbol_flags);
LUA_FUNCTION_DEF (config, add_symbol_flags);

/**
* @method rspamd_config:register_re_selector(name, selector_str)
* @method rspamd_config:register_re_selector(name, selector_str, [delimiter, [flatten]])
* Registers selector with the specific name to use in regular expressions in form
* name=/re/$ or name=/re/{selector}
* @param {string} name name of the selector
* @param {selector_str} selector string
* @param {string} selector_str selector definition
* @param {string} delimiter delimiter to use when joining strings if flatten is false
* @param {bool} flatten if true then selector will return a table of captures instead of a single string
* @return true if selector has been registered
*/
LUA_FUNCTION_DEF (config, register_re_selector);
@@ -4338,12 +4340,17 @@ lua_config_register_re_selector (lua_State *L)
const gchar *name = luaL_checkstring (L, 2);
const gchar *selector_str = luaL_checkstring (L, 3);
const gchar *delimiter = "";
bool flatten = false;
gint top = lua_gettop (L);
bool res = false;

if (cfg && name && selector_str) {
if (lua_gettop (L) >= 4) {
delimiter = luaL_checkstring (L, 4);

if (lua_isboolean (L, 5)) {
flatten = lua_toboolean (L, 5);
}
}

if (luaL_dostring (L, "return require \"lua_selectors\"") != 0) {
@@ -4380,8 +4387,9 @@ lua_config_register_re_selector (lua_State *L)
*pcfg = cfg;
lua_pushstring (L, selector_str);
lua_pushstring (L, delimiter);
lua_pushboolean (L, flatten);

if ((ret = lua_pcall (L, 3, 1, err_idx)) != 0) {
if ((ret = lua_pcall (L, 4, 1, err_idx)) != 0) {
msg_err_config ("call to create_selector_closure lua "
"script failed (%d): %s", ret,
lua_tostring (L, -1));

Loading…
Cancel
Save