dovecot: Fix handling envelope senders containing spaces.
dovecot at dovecot.org
dovecot at dovecot.org
Fri Nov 2 17:29:30 EET 2007
details: http://hg.dovecot.org/dovecot/rev/a7d462ed94df
changeset: 6660:a7d462ed94df
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 d9fb00afbc25 -r a7d462ed94df 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
@@ -20,6 +20,7 @@
#include "str-sanitize.h"
#include "strescape.h"
#include "var-expand.h"
+#include "rfc822-parser.h"
#include "message-address.h"
#include "message-header-parser.h"
#include "istream-header-filter.h"
@@ -451,10 +452,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);
@@ -464,10 +479,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