Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6660:a7d462ed94df HEAD
Fix handling envelope senders containing spaces.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 02 Nov 2007 17:29:25 +0200 |
parents | d9fb00afbc25 |
children | dbe6224b0309 |
files | src/deliver/deliver.c |
diffstat | 1 files changed, 23 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ 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 @@ 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; }