dovecot-2.2-pigeonhole: lib-sieve: Accept non-standard domain na...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Sat Dec 20 15:45:42 UTC 2014
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/0a412dd2c168
changeset: 1978:0a412dd2c168
user: Stephan Bosch <stephan at rename-it.nl>
date: Sat Dec 20 16:45:32 2014 +0100
description:
lib-sieve: Accept non-standard domain names, e.g. containing '_'.
diffstat:
src/lib-sieve/sieve-address.c | 16 ++++++++++------
tests/extensions/envelope.svtest | 26 ++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 6 deletions(-)
diffs (83 lines):
diff -r e8882cfd73af -r 0a412dd2c168 src/lib-sieve/sieve-address.c
--- a/src/lib-sieve/sieve-address.c Wed Dec 17 01:15:04 2014 +0100
+++ b/src/lib-sieve/sieve-address.c Sat Dec 20 16:45:32 2014 +0100
@@ -696,6 +696,10 @@
* sub-domain = Let-dig [Ldh-str]
* Let-dig = ALPHA / DIGIT
* Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig
+ *
+ * NOTE: A more generic syntax is accepted to be lenient towards
+ * systems that don't adhere to the standards. It allows
+ * '-' and '_' to occur anywhere in a sub-domain.
*/
str_truncate(parser->str, 0);
@@ -705,27 +709,27 @@
if ( ret < 0 ) return ret;
} else {
for (;;) {
- if ( !i_isalnum(*parser->data) )
+ if ( parser->data >= parser->end ||
+ (!i_isalnum(*parser->data) && *parser->data != '-' &&
+ *parser->data != '_') )
return -1;
str_append_c(parser->str, *parser->data);
parser->data++;
while ( parser->data < parser->end ) {
- if ( !i_isalnum(*parser->data) && *parser->data != '-' )
+ if ( !i_isalnum(*parser->data) && *parser->data != '-' &&
+ *parser->data != '_' )
break;
str_append_c(parser->str, *parser->data);
parser->data++;
}
- if ( !i_isalnum(*(parser->data-1)) )
- return -1;
-
if ( (ret=path_skip_white_space(parser)) < 0 )
return ret;
- if ( *parser->data != '.' )
+ if ( parser->data >= parser->end || *parser->data != '.' )
break;
str_append_c(parser->str, *parser->data);
diff -r e8882cfd73af -r 0a412dd2c168 tests/extensions/envelope.svtest
--- a/tests/extensions/envelope.svtest Wed Dec 17 01:15:04 2014 +0100
+++ b/tests/extensions/envelope.svtest Sat Dec 20 16:45:32 2014 +0100
@@ -265,5 +265,31 @@
if not envelope :localpart :is "to" "..japanese...localpart.." {
test_fail "failed to parse japanese local_part (4)";
}
+}
+test "Envelope - Non-standard hostnames" {
+ test_set "envelope.to" "japanese at _example.com";
+ if not envelope :domain :is "to" "_example.com" {
+ test_fail "failed to parse non-standard domain (1)";
+ }
+
+ test_set "envelope.to" "japanese at ex_ample.com";
+ if not envelope :domain :is "to" "ex_ample.com" {
+ test_fail "failed to parse non-standard domain (2)";
+ }
+
+ test_set "envelope.to" "japanese at example_.com";
+ if not envelope :domain :is "to" "example_.com" {
+ test_fail "failed to parse non-standard domain (3)";
+ }
+
+ test_set "envelope.to" "japanese at -example.com";
+ if not envelope :domain :is "to" "-example.com" {
+ test_fail "failed to parse non-standard domain (4)";
+ }
+
+ test_set "envelope.to" "japanese at example-.com";
+ if not envelope :domain :is "to" "example-.com" {
+ test_fail "failed to parse non-standard domain (5)";
+ }
}
More information about the dovecot-cvs
mailing list