dovecot-1.0: Fix handling envelope senders containing spaces.

dovecot at dovecot.org dovecot at dovecot.org
Fri Nov 2 17:29:33 EET 2007


details:   http://hg.dovecot.org/dovecot-1.0/rev/1746473bcc46
changeset: 5445:1746473bcc46
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Nov 02 17:29:25 2007 +0200
description:
Fix handling envelope senders containing spaces.

diffstat:

1 file changed, 23 insertions(+), 5 deletions(-)
src/deliver/deliver.c |   28 +++++++++++++++++++++++-----

diffs (55 lines):

diff -r b3a7ee1ec68b -r 1746473bcc46 src/deliver/deliver.c
--- a/src/deliver/deliver.c	Fri Nov 02 17:28:43 2007 +0200
+++ b/src/deliver/deliver.c	Fri Nov 02 17:29:25 2007 +0200
@@ -15,6 +15,7 @@
 #include "str-sanitize.h"
 #include "strescape.h"
 #include "var-expand.h"
+#include "rfc822-parser.h"
 #include "message-address.h"
 #include "message-parser.h"
 #include "istream-header-filter.h"
@@ -390,10 +391,24 @@ expand_mail_env(const char *env, const s
 	return str_c(str);
 }
 
+static const char *escape_local_part(const char *local_part)
+{
+	const char *p;
+
+	/* if there are non-atext chars, we need to return quoted-string */
+	for (p = local_part; *p != '\0'; p++) {
+		if (!IS_ATEXT(*p)) {
+			return t_strdup_printf("\"%s\"",
+					       str_escape(local_part));
+		}
+	}
+	return local_part;
+}
+
 static const char *address_sanitize(const char *address)
 {
 	struct message_address *addr;
-	const char *ret;
+	const char *ret, *mailbox;
 	pool_t pool;
 
 	pool = pool_alloconly_create("address sanitizer", 256);
@@ -403,10 +418,13 @@ static const char *address_sanitize(cons
 	if (addr == NULL || addr->mailbox == NULL || addr->domain == NULL ||
 	    *addr->mailbox == '\0')
 		ret = DEFAULT_ENVELOPE_SENDER;
-	else if (*addr->domain == '\0')
-		ret = t_strdup(addr->mailbox);
-	else
-		ret = t_strdup_printf("%s@%s", addr->mailbox, addr->domain);
+	else {
+		mailbox = escape_local_part(addr->mailbox);
+		if (*addr->domain == '\0')
+			ret = t_strdup(mailbox);
+		else
+			ret = t_strdup_printf("%s@%s", mailbox, addr->domain);
+	}
 	pool_unref(pool);
 	return ret;
 }


More information about the dovecot-cvs mailing list