From b55dc2553db42c85e97f1e684afe6ac3cfe73273 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Tue, 19 Jan 2010 10:11:42 +0100 Subject: [PATCH] Envelope paths with only a mailbox part are now allowed. --- src/lib-sieve/sieve-address-parts.c | 8 +++++++ src/lib-sieve/sieve-address.c | 10 ++++----- tests/extensions/envelope.svtest | 35 +++++++++++++++++++++++++---- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c index 6c4af73de..297b23bd2 100644 --- a/src/lib-sieve/sieve-address-parts.c +++ b/src/lib-sieve/sieve-address-parts.c @@ -371,6 +371,14 @@ static const char *addrp_all_extract_from const char *local_part = address->local_part; const char *domain = address->domain; + if ( domain == NULL ) { + return local_part; + } + + if ( local_part == NULL ) { + return NULL; + } + return t_strconcat(local_part, "@", domain, NULL); } diff --git a/src/lib-sieve/sieve-address.c b/src/lib-sieve/sieve-address.c index fd02b3a09..4121ac3b7 100644 --- a/src/lib-sieve/sieve-address.c +++ b/src/lib-sieve/sieve-address.c @@ -692,14 +692,14 @@ static int path_parse_mailbox(struct sieve_envelope_address_parser *parser) /* Mailbox = Local-part "@" Domain */ - if ( (ret=path_parse_local_part(parser)) <= 0 ) + if ( (ret=path_parse_local_part(parser)) < 0 + || (ret=path_skip_white_space(parser)) < 0 ) return -1; - if ( (ret=path_skip_white_space(parser)) <= 0 ) - return -1; + if ( ret == 0 || *parser->data != '@' ) { + return ret; + } - if ( *parser->data != '@' ) - return -1; parser->data++; if ( (ret=path_skip_white_space(parser)) <= 0 ) diff --git a/tests/extensions/envelope.svtest b/tests/extensions/envelope.svtest index 30c4e60bf..356ac8e77 100644 --- a/tests/extensions/envelope.svtest +++ b/tests/extensions/envelope.svtest @@ -67,10 +67,10 @@ test "Envelope - from empty" { test "Envelope - invalid paths" { /* Return_path: "hutsefluts" */ - test_set "envelope.from" "hutsefluts"; - test_set "envelope.to" "knurft"; + test_set "envelope.from" "hutsefluts@"; + test_set "envelope.to" "knurft@"; - if not envelope :all :is "from" "hutsefluts" { + if not envelope :all :is "from" "hutsefluts@" { test_fail ":all address part mangled syntactically incorrect reverse path"; } @@ -82,7 +82,7 @@ test "Envelope - invalid paths" { test_fail ":domain address part matched syntactically incorrect reverse path"; } - if not envelope :all :is "to" "knurft" { + if not envelope :all :is "to" "knurft@" { test_fail ":all address part mangled syntactically incorrect forward path"; } @@ -216,3 +216,30 @@ test "Envelope - source route errors" { test_fail ":all address part mangled syntactically incorrect path"; } } + +test "Envelope - local part only" { + test_set "envelope.to" "<MAILER-DAEMON>"; + if not envelope :is "to" "MAILER-DAEMON" { + test_fail "failed to parse local_part only path"; + } + + test_set "envelope.to" "MAILER-DAEMON@"; + if envelope :is "to" "MAILER-DAEMON" { + test_fail "parsing syntactically incorrect path with missing domain"; + } + + test_set "envelope.to" "<MAILER-DAEMON>"; + if not envelope :is "to" "MAILER-DAEMON" { + test_fail "failed to parse local_part only path with angle brackets"; + } + + test_set "envelope.to" "<MAILER-DAEMON >"; + if not envelope :is "to" "MAILER-DAEMON" { + test_fail "failed to parse local_part only path with angle brackets and whitespace"; + } + + test_set "envelope.to" " MAILER-DAEMON "; + if not envelope :is "to" "MAILER-DAEMON" { + test_fail "failed to parse local_part only path with whitespace"; + } +} -- GitLab