diff options
-rw-r--r-- | src/src/acl.c | 17 | ||||
-rw-r--r-- | test/confs/2200 | 8 | ||||
-rw-r--r-- | test/log/2200 | 1 | ||||
-rw-r--r-- | test/scripts/2200-dnsdb/2200 | 8 | ||||
-rw-r--r-- | test/stdout/2200 | 5 |
5 files changed, 28 insertions, 11 deletions
diff --git a/src/src/acl.c b/src/src/acl.c index 64b310968..396e29965 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -2838,18 +2838,15 @@ for (; cb != NULL; cb = cb->next) of them, but not for all, because expansion happens down in some lower level checking functions in some cases. */ - if (conditions[cb->type].expand_at_top) + if (!conditions[cb->type].expand_at_top) + arg = cb->arg; + else if (!(arg = expand_string(cb->arg))) { - arg = expand_string(cb->arg); - if (arg == NULL) - { - if (expand_string_forcedfail) continue; - *log_msgptr = string_sprintf("failed to expand ACL string \"%s\": %s", - cb->arg, expand_string_message); - return search_find_defer? DEFER : ERROR; - } + if (expand_string_forcedfail) continue; + *log_msgptr = string_sprintf("failed to expand ACL string \"%s\": %s", + cb->arg, expand_string_message); + return search_find_defer ? DEFER : ERROR; } - else arg = cb->arg; /* Show condition, and expanded condition if it's different */ diff --git a/test/confs/2200 b/test/confs/2200 index 904ccfb18..73f6f48e7 100644 --- a/test/confs/2200 +++ b/test/confs/2200 @@ -7,12 +7,18 @@ primary_hostname = myhost.test.ex # ----- Main settings ----- -acl_not_smtp = check_rcpt +acl_smtp_rcpt = check_rcpt +acl_not_smtp = check_not_smtp queue_only begin acl check_rcpt: + accept + local_parts = defer_strict + set acl_m1 = ${lookup dnsdb{defer_strict,a=$domain}} + +check_not_smtp: warn set acl_m1 = ${map {<,$recipients} \ {${lookup dnsdb{a=${domain:$item}}{$value}fail}}} diff --git a/test/log/2200 b/test/log/2200 index f59faf8b9..84f94626a 100644 --- a/test/log/2200 +++ b/test/log/2200 @@ -1 +1,2 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss +1999-03-02 09:44:33 U=CALLER F=<> temporarily rejected RCPT <defer_strict@test.again.dns>: failed to expand ACL string "${lookup dnsdb{defer_strict,a=$domain}}": lookup of "defer_strict,a=test.again.dns" gave DEFER: diff --git a/test/scripts/2200-dnsdb/2200 b/test/scripts/2200-dnsdb/2200 index 9f6262524..96c8dc7ec 100644 --- a/test/scripts/2200-dnsdb/2200 +++ b/test/scripts/2200-dnsdb/2200 @@ -60,5 +60,13 @@ a=localhost.test.ex ${lookup dnsdb{a=localhost.test.ex}{$value}fail} exim -d-all+lookup -odq user@shorthost.test.ex **** # +# ACL defer_strict +exim -bs +HELO test +MAIL FROM:<> +RCPT TO:<defer_strict@test.again.dns> +QUIT +**** +# no_msglog_check # diff --git a/test/stdout/2200 b/test/stdout/2200 index 71ff12017..202cadf88 100644 --- a/test/stdout/2200 +++ b/test/stdout/2200 @@ -54,3 +54,8 @@ ten-2.test.ex > a=localhost.test.ex 127.0.0.1 > a=localhost.test.ex 127.0.0.1 > +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250 myhost.test.ex Hello CALLER at test
+250 OK
+451 Temporary local problem - please try later
+221 myhost.test.ex closing connection
|