diff --git a/TODO b/TODO index c91b112294f3e66c3e1b4fe0b9aca1179b47dd7f..7a44932dbcd84f5df3d18b42f688bfef544f7f85 100644 --- a/TODO +++ b/TODO @@ -6,6 +6,7 @@ Next (in order of descending priority/precedence): * Test with dovecot --enable-debug for initial mempool allocation size * Full standards compliance review for the engine and all fully implemented sieve extensions. + - Address test MUST restrict itself to headers that contain addresses.' * Code cleanup * Make sure cmusieve can be replaced seamlessly with the new plugin. * Full security review. Enforce limits on number of created objects, script @@ -16,7 +17,7 @@ Next (in order of descending priority/precedence): * ## MAKE A FIRST RELEASE ## -* Add normalize() method to comparators to normalize the string before mathing +* Add normalize() method to comparators to normalize the string before matching (for efficiency). * Verify outgoing mail addresses at runtime when necessary (e.g. after variables substitution) diff --git a/src/lib-sieve/ext-envelope.c b/src/lib-sieve/ext-envelope.c index 19d1a999d54ee38421037e4f4118fcfeda1de11b..1ccb0c7595b44061653502b952195abc8f95f807 100644 --- a/src/lib-sieve/ext-envelope.c +++ b/src/lib-sieve/ext-envelope.c @@ -207,11 +207,11 @@ static int ext_envelope_get_fields t_array_init(&envelope_values, 2); - if ( strncmp(field, "from", 4) == 0 ) + if ( strcasecmp(field, "from") == 0 ) value = msgdata->return_path; - else if ( strncmp(field, "to", 2) == 0 ) + else if ( strcasecmp(field, "to") == 0 ) value = msgdata->to_address; - else if ( strncmp(field, "auth", 2) == 0 ) /* Non-standard */ + else if ( strcasecmp(field, "auth") == 0 ) /* Non-standard */ value = msgdata->auth_user; if ( value != NULL ) diff --git a/src/lib-sieve/sieve-address-parts.c b/src/lib-sieve/sieve-address-parts.c index f13ac3dcd300200e347c068779966c747f70102b..9a5faec29f8f23a68b2ad4c54bdf114b7b70e898 100644 --- a/src/lib-sieve/sieve-address-parts.c +++ b/src/lib-sieve/sieve-address-parts.c @@ -198,17 +198,15 @@ bool sieve_address_match strlen(data), 256, FALSE); while (!matched && addr != NULL) { - if (addr->domain != NULL) { - /* mailbox@domain */ - const char *part; + /* mailbox@domain */ + const char *part; - i_assert(addr->mailbox != NULL); + i_assert(addr->mailbox != NULL); - part = addrp->extract_from(addr); + part = addrp->extract_from(addr); - if ( part != NULL && sieve_match_value(mctx, part, strlen(part)) ) - matched = TRUE; - } + if ( part != NULL && sieve_match_value(mctx, part, strlen(part)) ) + matched = TRUE; addr = addr->next; } diff --git a/src/testsuite/tests/testsuite.svtest b/src/testsuite/tests/testsuite.svtest index 8b79dbd54d3714464a7fe2636fa35ebf4d8f918f..97bb5bcb7f157ca31c4b33444686bfaaf53c126f 100644 --- a/src/testsuite/tests/testsuite.svtest +++ b/src/testsuite/tests/testsuite.svtest @@ -1,4 +1,5 @@ require "vnd.dovecot.testsuite"; +require "envelope"; test "Message Environment" { test_set "message" text: @@ -9,7 +10,6 @@ Subject: Frop! Frop! . ; - test_set "envelope.from" "stephan@rename-it.nl"; if not header :contains "from" "rename-it.nl" { test_fail "message data not set properly."; @@ -23,7 +23,6 @@ Subject: Friep! Friep! . ; - test_set "envelope.from" "stephan@rename-it.nl"; if not header :is "from" "nico@vestingbar.nl" { test_fail "message data not set properly."; @@ -32,3 +31,40 @@ Friep! keep; } +test "Envelope Environment" { + test_set "envelope.from" "stephan@hutsefluts.nl"; + + if not envelope :is "from" "stephan@hutsefluts.nl" { + test_fail "envelope.from data not set properly."; + } + + test_set "envelope.to" "news@rename-it.nl"; + + if not envelope :is "to" "news@rename-it.nl" { + test_fail "envelope.to data not set properly."; + } + + test_set "envelope.auth" "sirius"; + + if not envelope :is "auth" "sirius@" { + test_fail "envelope.auth data not set properly."; + } + + test_set "envelope.from" "stephan@rename-it.nl"; + + if not envelope :is "from" "stephan@rename-it.nl" { + test_fail "envelope.from data not reset properly."; + } + + test_set "envelope.to" "past-news@rename-it.nl"; + + if not envelope :is "to" "past-news@rename-it.nl" { + test_fail "envelope.to data not reset properly."; + } + + test_set "envelope.auth" "zilla"; + + if not envelope :is "auth" "zilla@" { + test_fail "envelope.auth data not reset properly."; + } +} diff --git a/src/testsuite/testsuite-objects.c b/src/testsuite/testsuite-objects.c index 3f2420f15654c8ed505c806779dacf4755ea31e9..14c2a32cb37033b3e38444997a21372c26ef60cb 100644 --- a/src/testsuite/testsuite-objects.c +++ b/src/testsuite/testsuite-objects.c @@ -325,6 +325,7 @@ static bool tsto_envelope_set_member(int id, string_t *value) return TRUE; case TESTSUITE_OBJECT_ENVELOPE_AUTH_USER: testsuite_envelope_set_auth_user(str_c(value)); + printf("AUTH: %s\n", str_c(value)); return TRUE; }