]> source.dussan.org Git - rspamd.git/commitdiff
Add rawmime class
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 9 Dec 2015 18:02:30 +0000 (18:02 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 9 Dec 2015 18:02:30 +0000 (18:02 +0000)
src/libmime/mime_expressions.c
src/libserver/re_cache.c
src/libserver/re_cache.h
src/lua/lua_config.c
src/lua/lua_task.c
src/plugins/lua/spamassassin.lua

index 373ec955ecf6a6c2a16c31ec56202354ae8b8e78..cf9f29fac99121776e8cbd4d29f040cb745a2b76 100644 (file)
@@ -303,6 +303,10 @@ rspamd_mime_expr_parse_regexp_atom (rspamd_mempool_t * pool, const gchar *line)
                        result->type = RSPAMD_RE_MIME;
                        p++;
                        break;
+               case 'Q':
+                       result->type = RSPAMD_RE_RAWMIME;
+                       p++;
+                       break;
                case 'U':
                        result->type = RSPAMD_RE_URL;
                        p++;
@@ -743,6 +747,7 @@ rspamd_mime_expr_priority (rspamd_expression_atom_t *atom)
                        ret = 90;
                        break;
                case RSPAMD_RE_MIME:
+               case RSPAMD_RE_RAWMIME:
                        ret = 10;
                        break;
                default:
index f38b254efb7726b3113c91303a00159160a50055..da25040f899eb6645a9865a51051bf7cb7de31fe 100644 (file)
@@ -633,6 +633,7 @@ rspamd_re_cache_exec_re (struct rspamd_task *task,
                                rspamd_regexp_get_pattern (re), ret);
                break;
        case RSPAMD_RE_MIME:
+       case RSPAMD_RE_RAWMIME:
                /* Iterate throught text parts */
                for (i = 0; i < task->text_parts->len; i++) {
                        part = g_ptr_array_index (task->text_parts, i);
@@ -647,9 +648,10 @@ rspamd_re_cache_exec_re (struct rspamd_task *task,
                                raw = TRUE;
                        }
                        /* Select data for regexp */
-                       if (raw) {
+                       if (re_class->type == RSPAMD_RE_RAWMIME) {
                                in = part->orig->data;
                                len = part->orig->len;
+                               raw = TRUE;
                        }
                        else {
                                in = part->content->data;
@@ -820,6 +822,9 @@ rspamd_re_cache_type_to_string (enum rspamd_re_type type)
        case RSPAMD_RE_MIME:
                ret = "part";
                break;
+       case RSPAMD_RE_RAWMIME:
+               ret = "raw part";
+               break;
        case RSPAMD_RE_BODY:
                ret = "rawbody";
                break;
@@ -849,6 +854,9 @@ rspamd_re_cache_type_from_string (const char *str)
                else if (strcmp (str, "mime") == 0) {
                        ret = RSPAMD_RE_MIME;
                }
+               else if (strcmp (str, "rawmime") == 0) {
+                       ret = RSPAMD_RE_RAWMIME;
+               }
                else if (strcmp (str, "body") == 0) {
                        ret = RSPAMD_RE_BODY;
                }
index 0fffc2d7cb4e38eba56c8bdb21f63e83769103fc..1f0ab7c9b5c7302c5b733935005501937e3cb1a7 100644 (file)
@@ -36,6 +36,7 @@ enum rspamd_re_type {
        RSPAMD_RE_RAWHEADER,
        RSPAMD_RE_ALLHEADER,
        RSPAMD_RE_MIME,
+       RSPAMD_RE_RAWMIME,
        RSPAMD_RE_URL,
        RSPAMD_RE_BODY,
        RSPAMD_RE_MAX
index b574cba59a9b0980bf35e694454283ba7b55644f..e079517a4ee6d313257de915aeb1115f6e7e1f9f 100644 (file)
@@ -357,6 +357,7 @@ LUA_FUNCTION_DEF (config, newindex);
  * - `re`* : regular expression object
  * - `type`*: type of regular expression:
  *   + `mime`: mime regexp
+ *   + `rawmime`: raw mime regexp
  *   + `header`: header regexp
  *   + `rawheader`: raw header expression
  *   + `body`: raw body regexp
@@ -1571,6 +1572,7 @@ lua_config_register_regexp (lua_State *L)
         * - `re`* : regular expression object
         * - `type`*: type of regular expression:
         *   + `mime`: mime regexp
+        *   + `rawmime`: raw mime regexp
         *   + `header`: header regexp
         *   + `rawheader`: raw header expression
         *   + `body`: raw body regexp
index 8529489f6e4da821e7ba5d5a1af8d2cd668069cd..efe755ad72672abf7ca10d256dc10d767160eb62 100644 (file)
@@ -436,6 +436,7 @@ LUA_FUNCTION_DEF (task, set_settings);
  *   + `mime`: mime regexp
  *   + `header`: header regexp
  *   + `rawheader`: raw header expression
+ *   + `rawmime`: raw mime regexp
  *   + `body`: raw body regexp
  *   + `url`: url regexp
  * - `header`: for header and rawheader regexp means the name of header
@@ -2017,6 +2018,7 @@ lua_task_process_regexp (lua_State *L)
         * - `re`* : regular expression object
         * - `type`*: type of regular expression:
         *   + `mime`: mime regexp
+        *   + `rawmime`: raw mime regexp
         *   + `header`: header regexp
         *   + `rawheader`: raw header expression
         *   + `body`: raw body regexp
index e2708bbeb3ae719bf9d5b25fff47dc56ecfd1937..10457d2d7a51db38895b1b87945d507a6a47ff7c 100644 (file)
@@ -659,9 +659,10 @@ local function process_sa_conf(f)
         cur_rule['re'] = rspamd_regexp.create_cached(cur_rule['re_expr'])
         cur_rule['raw'] = true
         if cur_rule['re'] then
+
           rspamd_config:register_regexp({
             re = cur_rule['re'],
-            type = 'mime',
+            type = 'rawmime',
           })
           valid_rule = true
           cur_rule['re']:set_limit(match_limit)
@@ -1107,9 +1108,12 @@ _.each(function(k, r)
         return 0
       end
 
+      local t = 'mime'
+      if r['raw'] then t = 'rawmime' end
+
       return task:process_regexp({
         re = r['re'],
-        type = 'mime',
+        type = t,
       })
     end
     if r['score'] then