]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Feature] Implement headers flags in mime parser
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 2 Oct 2017 19:42:40 +0000 (20:42 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 2 Oct 2017 19:43:28 +0000 (20:43 +0100)
MFH: rspamd-1.6

src/libmime/mime_headers.c
src/libmime/mime_headers.h

index e187c5d147bdb04af4037a3a4fe2766930ea7981..742b36fd325fdcc10b0baa75a4c866d1d70cbe1d 100644 (file)
@@ -53,26 +53,26 @@ rspamd_mime_header_check_special (struct rspamd_task *task,
        case 0x76F31A09F4352521ULL:     /* to */
                task->rcpt_mime = rspamd_email_address_from_mime (task->task_pool,
                                rh->value, strlen (rh->value), task->rcpt_mime);
-               rh->type = RSPAMD_HEADER_TO;
+               rh->type = RSPAMD_HEADER_TO|RSPAMD_HEADER_RCPT|RSPAMD_HEADER_UNIQUE;
                break;
        case 0x7EB117C1480B76ULL:       /* cc */
                task->rcpt_mime = rspamd_email_address_from_mime (task->task_pool,
                                rh->value, strlen (rh->value), task->rcpt_mime);
-               rh->type = RSPAMD_HEADER_CC;
+               rh->type = RSPAMD_HEADER_CC|RSPAMD_HEADER_RCPT|RSPAMD_HEADER_UNIQUE;
                break;
        case 0xE4923E11C4989C8DULL:     /* bcc */
                task->rcpt_mime = rspamd_email_address_from_mime (task->task_pool,
                                rh->value, strlen (rh->value), task->rcpt_mime);
-               rh->type = RSPAMD_HEADER_BCC;
+               rh->type = RSPAMD_HEADER_BCC|RSPAMD_HEADER_RCPT|RSPAMD_HEADER_UNIQUE;
                break;
        case 0x41E1985EDC1CBDE4ULL:     /* from */
                task->from_mime = rspamd_email_address_from_mime (task->task_pool,
                                rh->value, strlen (rh->value), task->from_mime);
-               rh->type = RSPAMD_HEADER_FROM;
+               rh->type = RSPAMD_HEADER_FROM|RSPAMD_HEADER_SENDER|RSPAMD_HEADER_UNIQUE;
                break;
        case 0x43A558FC7C240226ULL:     /* message-id */ {
 
-               rh->type = RSPAMD_HEADER_MESSAGE_ID;
+               rh->type = RSPAMD_HEADER_MESSAGE_ID|RSPAMD_HEADER_UNIQUE;
                p = rh->decoded;
                end = p + strlen (p);
 
@@ -111,20 +111,28 @@ rspamd_mime_header_check_special (struct rspamd_task *task,
                if (task->subject == NULL) {
                        task->subject = rh->decoded;
                }
-               rh->type = RSPAMD_HEADER_SUBJECT;
+               rh->type = RSPAMD_HEADER_SUBJECT|RSPAMD_HEADER_UNIQUE;
                break;
        case 0xEE4AA2EAAC61D6F4ULL:     /* return-path */
                if (task->from_envelope == NULL) {
                        task->from_envelope = rspamd_email_address_from_smtp (rh->decoded,
                                        strlen (rh->decoded));
                }
-               rh->type = RSPAMD_HEADER_RETURN_PATH;
+               rh->type = RSPAMD_HEADER_RETURN_PATH|RSPAMD_HEADER_UNIQUE;
                break;
        case 0xB9EEFAD2E93C2161ULL:     /* delivered-to */
                if (task->deliver_to == NULL) {
                        task->deliver_to = rh->decoded;
                }
-               rh->type = RSPAMD_HEADER_DELIVERED_TO;
+               rh->type = RSPAMD_HEADER_DELIVERED_TO|RSPAMD_HEADER_UNIQUE;
+               break;
+       case 0x2EC3BFF3C393FC10ULL: /* date */
+       case 0xAC0DDB1A1D214CAULL: /* sender */
+       case 0x54094572367AB695ULL: /* in-reply-to */
+       case 0x81CD9E9131AB6A9AULL: /* content-type */
+       case 0xC39BD9A75AA25B60ULL: /* content-transfer-encoding */
+       case 0xB3F6704CB3AD6589ULL: /* references */
+               rh->type = RSPAMD_HEADER_UNIQUE;
                break;
        }
 }
index 14ece02e641fcfdf7bb29522bf340ac0e56d9534..03a7beae96415335a0cdc7f555338aaed04751c0 100644 (file)
@@ -28,15 +28,18 @@ enum rspamd_rfc2047_encoding {
 
 enum rspamd_mime_header_special_type {
        RSPAMD_HEADER_GENERIC = 0,
-       RSPAMD_HEADER_RECEIVED = 1,
-       RSPAMD_HEADER_TO,
-       RSPAMD_HEADER_CC,
-       RSPAMD_HEADER_BCC,
-       RSPAMD_HEADER_FROM,
-       RSPAMD_HEADER_MESSAGE_ID,
-       RSPAMD_HEADER_SUBJECT,
-       RSPAMD_HEADER_RETURN_PATH,
-       RSPAMD_HEADER_DELIVERED_TO,
+       RSPAMD_HEADER_RECEIVED = 1 << 0,
+       RSPAMD_HEADER_TO = 1 << 2,
+       RSPAMD_HEADER_CC = 1 << 3,
+       RSPAMD_HEADER_BCC = 1 << 4,
+       RSPAMD_HEADER_FROM = 1 << 5,
+       RSPAMD_HEADER_MESSAGE_ID = 1 << 6,
+       RSPAMD_HEADER_SUBJECT = 1 << 7,
+       RSPAMD_HEADER_RETURN_PATH = 1 << 8,
+       RSPAMD_HEADER_DELIVERED_TO = 1 << 9,
+       RSPAMD_HEADER_SENDER = 1 << 10,
+       RSPAMD_HEADER_RCPT = 1 << 11,
+       RSPAMD_HEADER_UNIQUE = 1 << 12
 };
 
 struct rspamd_mime_header {