changeset 5210:b77a67169fc5 HEAD

While parsing the input stream ignore the mbox hidden headers so that eg. X-IMAP header won't cause us to crash.
author Timo Sirainen <tss@iki.fi>
date Tue, 06 Mar 2007 15:14:09 +0200
parents d5695e137ea4
children 6d4c18b51495
files src/deliver/Makefile.am src/deliver/deliver.c
diffstat 2 files changed, 17 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/deliver/Makefile.am	Thu Mar 01 14:30:13 2007 +0200
+++ b/src/deliver/Makefile.am	Tue Mar 06 15:14:09 2007 +0200
@@ -6,8 +6,10 @@
 	-I$(top_srcdir)/src/lib \
 	-I$(top_srcdir)/src/lib-dict \
 	-I$(top_srcdir)/src/lib-mail \
+	-I$(top_srcdir)/src/lib-index \
 	-I$(top_srcdir)/src/lib-settings \
 	-I$(top_srcdir)/src/lib-storage \
+	-I$(top_srcdir)/src/lib-storage/index \
 	-I$(top_srcdir)/src/lib-storage/index/mbox \
 	-DSYSCONFDIR=\""$(sysconfdir)"\" \
 	-DPKG_RUNDIR=\""$(rundir)"\" \
--- a/src/deliver/deliver.c	Thu Mar 01 14:30:13 2007 +0200
+++ b/src/deliver/deliver.c	Tue Mar 06 15:14:09 2007 +0200
@@ -16,6 +16,8 @@
 #include "strescape.h"
 #include "var-expand.h"
 #include "message-address.h"
+#include "istream-header-filter.h"
+#include "mbox-storage.h"
 #include "dict-client.h"
 #include "mbox-from.h"
 #include "auth-client.h"
@@ -366,16 +368,27 @@
 static struct istream *create_mbox_stream(int fd, const char *envelope_sender)
 {
 	const char *mbox_hdr;
-	struct istream *input_list[4], *input;
+	struct istream *input_list[4], *input, *input_filter;
 
 	fd_set_nonblock(fd, FALSE);
 
 	envelope_sender = address_sanitize(envelope_sender);
 	mbox_hdr = mbox_from_create(envelope_sender, ioloop_time);
 
+	input = i_stream_create_file(fd, default_pool, 4096, FALSE);
+	input_filter =
+		i_stream_create_header_filter(input,
+					      HEADER_FILTER_EXCLUDE |
+					      HEADER_FILTER_NO_CR,
+					      mbox_hide_headers,
+					      mbox_hide_headers_count,
+					      null_header_filter_callback,
+					      NULL);
+	i_stream_unref(&input);
+
 	input_list[0] = i_stream_create_from_data(default_pool, mbox_hdr,
 						  strlen(mbox_hdr));
-	input_list[1] = i_stream_create_file(fd, default_pool, 4096, FALSE);
+	input_list[1] = input_filter;
 	input_list[2] = i_stream_create_from_data(default_pool, "\n", 1);
 	input_list[3] = NULL;