]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Support flatten attribute in rspamd_config:register_re_selector
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Apr 2020 09:12:21 +0000 (10:12 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Apr 2020 09:12:52 +0000 (10:12 +0100)
lualib/lua_selectors/init.lua
src/lua/lua_config.c

index f148c4d4661e5cba2cc1e21d3f260eb82465f2a7..7f20e2cbb1b639b75b9f4cd6c522d6b58db4853c 100644 (file)
@@ -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)
index fbaadd8bb98d03f5f0b7cfddd280ade20ef82b11..4d728cf14469f5f418af3c3e22afe11cdbeb5586 100644 (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));