]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Add pcre_only option to re_cache registration
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 10 Dec 2015 16:11:21 +0000 (16:11 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 10 Dec 2015 16:11:21 +0000 (16:11 +0000)
src/libserver/re_cache.c
src/lua/lua_config.c

index 8d728b02e87b6afa49e6855f31a6a00834425b88..18c463db5528ada21ea5414781fef6a25c84b6c9 100644 (file)
@@ -1043,7 +1043,6 @@ rspamd_re_cache_compile_hyperscan (struct rspamd_re_cache *cache,
                while (g_hash_table_iter_next (&cit, &k, &v)) {
                        re = v;
 
-                       hs_flags[i] = 0;
                        pcre_flags = rspamd_regexp_get_pcre_flags (re);
                        re_flags = rspamd_regexp_get_flags (re);
 
@@ -1052,6 +1051,8 @@ rspamd_re_cache_compile_hyperscan (struct rspamd_re_cache *cache,
                                continue;
                        }
 
+                       hs_flags[i] = 0;
+
                        if (pcre_flags & PCRE_UTF8) {
                                hs_flags[i] |= HS_FLAG_UTF8;
                        }
index e079517a4ee6d313257de915aeb1115f6e7e1f9f..0e61ead07e69b09fdd4e653f7a8dcbd8993f2956 100644 (file)
@@ -363,6 +363,7 @@ LUA_FUNCTION_DEF (config, newindex);
  *   + `body`: raw body regexp
  *   + `url`: url regexp
  * - `header`: for header and rawheader regexp means the name of header
+ * - `pcre_only`: flag regexp as pcre only regexp
  */
 LUA_FUNCTION_DEF (config, register_regexp);
 
@@ -1567,6 +1568,8 @@ lua_config_register_regexp (lua_State *L)
        gsize header_len = 0;
        GError *err = NULL;
        enum rspamd_re_type type = RSPAMD_RE_BODY;
+       gboolean pcre_only = FALSE;
+       guint old_flags;
 
        /*
         * - `re`* : regular expression object
@@ -1578,11 +1581,12 @@ lua_config_register_regexp (lua_State *L)
         *   + `body`: raw body regexp
         *   + `url`: url regexp
         * - `header`: for header and rawheader regexp means the name of header
+        * - `pcre_only`: allow merely pcre for this regexp
         */
        if (cfg != NULL) {
                if (!rspamd_lua_parse_table_arguments (L, 2, &err,
-                               "*re=U{regexp};*type=S;header=V",
-                               &re, &type_str, &header_len, &header_str)) {
+                               "*re=U{regexp};*type=S;header=V;pcre_only=B",
+                               &re, &type_str, &header_len, &header_str, &pcre_only)) {
                        msg_err_config ("cannot get parameters list: %e", err);
 
                        if (err) {
@@ -1598,6 +1602,12 @@ lua_config_register_regexp (lua_State *L)
                                                "header argument is mandatory for header/rawheader regexps");
                        }
                        else {
+                               if (pcre_only) {
+                                       old_flags = rspamd_regexp_get_flags (re->re);
+                                       old_flags |= RSPAMD_REGEXP_FLAG_PCRE_ONLY;
+                                       rspamd_regexp_set_flags (re->re, old_flags);
+                               }
+
                                rspamd_re_cache_add (cfg->re_cache, re->re, type,
                                                (gpointer) header_str, header_len);
                        }