]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Restore support for `for` and `id` parts in received headers
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 27 Jul 2020 15:10:21 +0000 (16:10 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 27 Jul 2020 15:10:21 +0000 (16:10 +0100)
src/libmime/mime_headers.c
src/libmime/mime_headers.h

index fec23927e9f8dbe875a0c12c645cc15781f9e379..de4184bb91d4938ae65e5a8fd96efcb4fa82f235 100644 (file)
@@ -906,6 +906,7 @@ enum rspamd_received_part_type {
        RSPAMD_RECEIVED_PART_BY,
        RSPAMD_RECEIVED_PART_FOR,
        RSPAMD_RECEIVED_PART_WITH,
+       RSPAMD_RECEIVED_PART_ID,
        RSPAMD_RECEIVED_PART_UNKNOWN,
 };
 
@@ -1238,6 +1239,12 @@ rspamd_smtp_received_spill (struct rspamd_task *task,
                                cur_part = rspamd_smtp_received_process_part (task, p, end - p,
                                                RSPAMD_RECEIVED_PART_FOR, &pos);
                        }
+                       else if (len > sizeof ("id") && (lc_map[p[0]] == 'i' &&
+                                                                                         lc_map[p[1]] == 'd')) {
+                               p += sizeof ("id") - 1;
+                               cur_part = rspamd_smtp_received_process_part (task, p, end - p,
+                                               RSPAMD_RECEIVED_PART_ID, &pos);
+                       }
                        else {
                                while (p < end) {
                                        if (!(g_ascii_isspace (*p) || *p == '(' || *p == ';')) {
@@ -1614,6 +1621,17 @@ rspamd_smtp_received_parse (struct rspamd_task *task,
                                }
                        }
 
+                       break;
+               case RSPAMD_RECEIVED_PART_FOR:
+                       rh->for_addr = rspamd_email_address_from_smtp (cur->data, cur->dlen);
+
+                       if (rh->for_addr) {
+                               rh->for_mbox = rh->for_addr->addr;
+
+                               rspamd_mempool_add_destructor (task->task_pool,
+                                               (rspamd_mempool_destruct_t)rspamd_email_address_free,
+                                               rh->for_addr);
+                       }
                        break;
                default:
                        /* Do nothing */
index 18d23d6626b4bbc21754794604a14dab372385b8..56e29e9f9127c2828de85bbeb69598b44e9e2fab 100644 (file)
@@ -95,6 +95,8 @@ enum rspamd_received_type {
                        RSPAMD_RECEIVED_MAPI| \
                        RSPAMD_RECEIVED_UNKNOWN)
 
+struct rspamd_email_address;
+
 struct rspamd_received_header {
        const gchar *from_hostname;
        const gchar *from_ip;
@@ -102,6 +104,7 @@ struct rspamd_received_header {
        const gchar *real_ip;
        const gchar *by_hostname;
        const gchar *for_mbox;
+       struct rspamd_email_address *for_addr;
        rspamd_inet_addr_t *addr;
        struct rspamd_mime_header *hdr;
        time_t timestamp;