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