changeset 13524:501b33c4aa28

imapc: Filter out X-Message-Flag: header from incoming mails. This is only added by MS Exchange when \Flagged flag is set, so it could be made optional, but it probably doesn't really hurt to just make it unconditional to ease the configuration.
author Timo Sirainen <tss@iki.fi>
date Tue, 20 Sep 2011 15:36:39 +0300
parents a15a1b1994cc
children 1dcc1ebe9516
files src/lib-storage/index/imapc/imapc-mail-fetch.c
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c	Tue Sep 20 15:22:37 2011 +0300
+++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c	Tue Sep 20 15:36:39 2011 +0300
@@ -3,6 +3,7 @@
 #include "lib.h"
 #include "str.h"
 #include "istream.h"
+#include "istream-header-filter.h"
 #include "imap-arg.h"
 #include "imap-date.h"
 #include "imapc-client.h"
@@ -182,6 +183,23 @@
 	return FALSE;
 }
 
+static void imapc_stream_filter(struct istream **input)
+{
+	static const char *imapc_hide_headers[] = {
+		/* Added by MS Exchange 2010 when \Flagged flag is set.
+		   This violates IMAP guarantee of messages being immutable. */
+		"X-Message-Flag"
+	};
+	struct istream *filter_input;
+
+	filter_input = i_stream_create_header_filter(*input,
+		HEADER_FILTER_EXCLUDE,
+		imapc_hide_headers, N_ELEMENTS(imapc_hide_headers),
+		null_header_filter_callback, NULL);
+	i_stream_unref(input);
+	*input = filter_input;
+}
+
 static void
 imapc_fetch_stream(struct imapc_mail *mail,
 		   const struct imapc_untagged_reply *reply,
@@ -230,6 +248,7 @@
 			  t_strdup_printf("imapc mail uid=%u", _mail->uid));
 	index_mail_set_read_buffer_size(_mail, imail->data.stream);
 
+	imapc_stream_filter(&imail->data.stream);
 	if (imail->mail.v.istream_opened != NULL) {
 		if (imail->mail.v.istream_opened(_mail,
 						 &imail->data.stream) < 0) {