From: Vsevolod Stakhov Date: Wed, 8 Apr 2020 09:12:21 +0000 (+0100) Subject: [Minor] Support flatten attribute in rspamd_config:register_re_selector X-Git-Tag: 2.6~549 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=839c994813156d51cb4b1299b9c92aa807ee6d80;p=thirdparty%2Frspamd.git [Minor] Support flatten attribute in rspamd_config:register_re_selector --- diff --git a/lualib/lua_selectors/init.lua b/lualib/lua_selectors/init.lua index f148c4d466..7f20e2cbb1 100644 --- a/lualib/lua_selectors/init.lua +++ b/lualib/lua_selectors/init.lua @@ -486,7 +486,7 @@ exports.flatten_selectors = function(selectors) end --[[[ --- @function lua_selectors.create_closure(cfg, selector_str, delimiter='') +-- @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) diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index fbaadd8bb9..4d728cf144 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -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));