From: Stephan Bosch Date: Tue, 6 Mar 2018 21:11:34 +0000 (+0100) Subject: lib-lda: Do not convert "From:" message address to STMP address, just to make a strin... X-Git-Tag: 2.3.1~53 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c3df1c9efed5099e2760951c582b879c044e6e6b;p=thirdparty%2Fdovecot%2Fcore.git lib-lda: Do not convert "From:" message address to STMP address, just to make a string for logging. This leads to problems when the message address (RFC5322) has UTF-8 code points in the local part, which is (currently) allowed for message addresses, but not for SMTP addresses (RFC5321). --- diff --git a/src/lib-lda/mail-deliver.c b/src/lib-lda/mail-deliver.c index 558face961..b7aa4ee883 100644 --- a/src/lib-lda/mail-deliver.c +++ b/src/lib-lda/mail-deliver.c @@ -65,8 +65,8 @@ static MODULE_CONTEXT_DEFINE_INIT(mail_deliver_user_module, static MODULE_CONTEXT_DEFINE_INIT(mail_deliver_storage_module, &mail_storage_module_register); -const struct smtp_address * -mail_deliver_get_address(struct mail *mail, const char *header) +static struct message_address * +mail_deliver_get_message_address(struct mail *mail, const char *header) { struct message_address *addr; const char *str; @@ -76,9 +76,21 @@ mail_deliver_get_address(struct mail *mail, const char *header) addr = message_address_parse(pool_datastack_create(), (const unsigned char *)str, strlen(str), 1, FALSE); - return addr == NULL || addr->mailbox == NULL || addr->domain == NULL || - *addr->mailbox == '\0' || *addr->domain == '\0' ? - NULL : smtp_address_create_from_msg_temp(addr); + if (addr == NULL || addr->mailbox == NULL || addr->domain == NULL || + *addr->mailbox == '\0' || *addr->domain == '\0') + return NULL; + return addr; +} + +const struct smtp_address * +mail_deliver_get_address(struct mail *mail, const char *header) +{ + struct message_address *addr; + + addr = mail_deliver_get_message_address(mail, header); + if (addr == NULL) + return NULL; + return smtp_address_create_from_msg_temp(addr); } static void update_cache(pool_t pool, const char **old_str, const char *new_str) @@ -94,6 +106,7 @@ mail_deliver_log_update_cache(struct mail_deliver_cache *cache, pool_t pool, struct mail *mail) { const char *message_id = NULL, *subject = NULL, *from_envelope = NULL; + static struct message_address *from_addr; const char *from; if (cache->filled) @@ -108,7 +121,9 @@ mail_deliver_log_update_cache(struct mail_deliver_cache *cache, pool_t pool, subject = str_sanitize(subject, 80); update_cache(pool, &cache->subject, subject); - from = smtp_address_encode(mail_deliver_get_address(mail, "From")); + from_addr = mail_deliver_get_message_address(mail, "From"); + from = (from_addr == NULL ? NULL : + t_strconcat(from_addr->mailbox, "@", from_addr->domain, NULL)); update_cache(pool, &cache->from, from); if (mail_get_special(mail, MAIL_FETCH_FROM_ENVELOPE, &from_envelope) > 0)