changeset 22195:c2a33eba3615

pop3-migration: Strip trailing spaces from headers when calculating hash Fixes matching mails with Zimbra.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 12 Jun 2017 14:24:59 +0300
parents 129d80313246
children 272e76ee5c49
files src/plugins/pop3-migration/pop3-migration-plugin.c src/plugins/pop3-migration/test-pop3-migration-plugin.c
diffstat 2 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/pop3-migration/pop3-migration-plugin.c	Mon Jun 12 14:35:22 2017 +0300
+++ b/src/plugins/pop3-migration/pop3-migration-plugin.c	Mon Jun 12 14:24:59 2017 +0300
@@ -171,7 +171,21 @@
 			/* Yahoo IMAP drops headers with invalid names, while
 			   Yahoo POP3 preserves them. Drop them all. */
 			*matched = TRUE;
-		}
+		} else if (hdr->value_len > 0 &&
+			   hdr->value[hdr->value_len-1] == ' ') T_BEGIN {
+			/* Delete trailing whitespace. Zimbra is stripping it
+			   away with BODY[HEADER]. */
+			struct message_header_line new_hdr = *hdr;
+			while (new_hdr.value_len > 0 &&
+			       new_hdr.value[new_hdr.value_len-1] == ' ')
+				new_hdr.value_len--;
+			new_hdr.crlf_newline = FALSE; /* CRs are stripped */
+			string_t *new_line = t_str_new(128);
+			message_header_line_write(new_line, &new_hdr);
+			i_stream_header_filter_add(input, str_data(new_line),
+						   str_len(new_line));
+			*matched = TRUE;
+		} T_END;
 	}
 }
 
--- a/src/plugins/pop3-migration/test-pop3-migration-plugin.c	Mon Jun 12 14:35:22 2017 +0300
+++ b/src/plugins/pop3-migration/test-pop3-migration-plugin.c	Mon Jun 12 14:24:59 2017 +0300
@@ -17,6 +17,9 @@
 		{ "", "da39a3ee5e6b4b0d3255bfef95601890afd80709", FALSE },
 		{ "\n", "adc83b19e793491b1c6ea0fd8b46cd9f32e592fc", TRUE },
 		{ "a: b\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
+		{ "a: b \r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
+		{ "a: b  \r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
+		{ "a: b     \r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
 		{ "a: b\r\n\r\n", "d14841695e1d9e2de6625d9222abd149ec821b0d", TRUE },
 		{ "a: b\r\n\r\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
 		{ "a: b\r\n\r\r\nc: d\r\n\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", TRUE }