-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.517 2007/06/22 14:38:58 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.518 2007/06/26 09:23:34 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
PH/11 Added $max_received_linelength.
+PH/12 Added +ignore_defer and +include_defer to host lists.
+
Exim version 4.67
-----------------
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.152 2007/06/22 14:38:58 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.153 2007/06/26 09:23:34 ph10 Exp $
New Features in Exim
--------------------
longest line that was received as part of the message, not counting the
line termination character(s).
+ 7. Host lists can now include +ignore_defer and +include_defer, analagous to
+ +ignore_unknown and +include_unknown. These options should be used with
+ care, probably only in non-critical host lists such as whitelists.
+
Version 4.67
------------
-/* $Cambridge: exim/src/src/match.c,v 1.17 2007/01/08 10:50:18 ph10 Exp $ */
+/* $Cambridge: exim/src/src/match.c,v 1.18 2007/06/26 09:23:34 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
unsigned int *original_cache_bits = *cache_ptr;
BOOL include_unknown = FALSE;
BOOL ignore_unknown = FALSE;
+BOOL include_defer = FALSE;
+BOOL ignore_defer = FALSE;
uschar *list;
uschar *sss;
uschar *ot = NULL;
}
}
- /* If the host item is "+include_unknown", remember it in case there's a
- subsequent failed reverse lookup. */
+ /* If the host item is "+include_unknown" or "+ignore_unknown", remember it
+ in case there's a subsequent failed reverse lookup. There is similar
+ processing for "defer". */
- else if (type == MCL_HOST)
+ else if (type == MCL_HOST && *ss == '+')
{
if (Ustrcmp(ss, "+include_unknown") == 0)
{
include_unknown = FALSE;
continue;
}
+ if (Ustrcmp(ss, "+include_defer") == 0)
+ {
+ include_defer = TRUE;
+ ignore_defer = FALSE;
+ continue;
+ }
+ if (Ustrcmp(ss, "+ignore_defer") == 0)
+ {
+ ignore_defer = TRUE;
+ include_defer = FALSE;
+ continue;
+ }
}
/* Starting with ! specifies a negative item. It is theoretically possible
return yield;
case DEFER:
+ if (error == NULL)
+ error = string_sprintf("DNS lookup of %s deferred", ss);
+ if (ignore_defer)
+ {
+ HDEBUG(D_lists) debug_printf("%s: item ignored by +ignore_defer\n",
+ error);
+ break;
+ }
+ HDEBUG(D_lists) debug_printf("%s %s (%s)\n", ot,
+ include_defer? "yes":"no", error);
+ if (include_defer)
+ {
+ log_write(0, LOG_MAIN, "%s: accepted by +include_defer", error);
+ return OK;
+ }
goto DEFER_RETURN;
/* The ERROR return occurs when checking hosts, when either a forward
return file_yield;
case DEFER:
+ if (error == NULL)
+ error = string_sprintf("DNS lookup of %s deferred", ss);
+ if (ignore_defer)
+ {
+ HDEBUG(D_lists) debug_printf("%s: item ignored by +ignore_defer\n",
+ error);
+ break;
+ }
(void)fclose(f);
+ HDEBUG(D_lists) debug_printf("%s %s (%s)\n", ot,
+ include_defer? "yes":"no", error);
+ if (include_defer)
+ {
+ log_write(0, LOG_MAIN, "%s: accepted by +include_defer", error);
+ return OK;
+ }
goto DEFER_RETURN;
case ERROR: /* host name lookup failed - this can only */
accept hosts = +ignore_unknown : non.existent.invalid : V4NET.0.0.13
deny message = "Denied"
+check_recipienta:
+ accept hosts = :
+ deny hosts = +include_defer : test.again.dns
+ accept domains = +local_domains
+ deny message = relay not permitted
+
+check_recipientb:
+ accept hosts = test.again.dns : V4NET.0.0.13
+ deny message = "Denied"
+
+check_recipientc:
+ accept hosts = +ignore_defer : test.again.dns : V4NET.0.0.13
+ deny message = "Denied"
+
# End
-# +include_unknown and +ignore_unknown
+# +include_unknown, +ignore_unknown, +include_defer, +ignore_defer
exim -bh V4NET.0.0.1
mail from:<x@y>
rcpt to:<x@test.ex>
rcpt to:<y@test.ex>
quit
****
+exim -bh V4NET.0.0.13
+MAIL FROM:<userx>
+rcpt to:<a@test.ex>
+quit
+****
+exim -bh V4NET.0.0.13
+MAIL FROM:<userx@test.ex>
+rcpt to:<b@test.ex>
+quit
+****
+exim -bh V4NET.0.0.13
+MAIL FROM:<userx@test.ex>
+rcpt to:<c@test.ex>
+quit
+****
>>> processing "deny"
>>> deny: condition test succeeded
LOG: H=[V4NET.0.0.13] F=<userx@test.ex> rejected RCPT <y@test.ex>: "Denied"
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> sender host name required, to match against ^ten-1\.test\.ex
+>>> looking up host name for V4NET.0.0.13
+LOG: no host name found for IP address V4NET.0.0.13
+>>> host in sender_unqualified_hosts? yes (failed to find host name for V4NET.0.0.13)
+LOG: failed to find host name for V4NET.0.0.13: accepted by +include_unknown
+>>> host in recipient_unqualified_hosts? no (option unset)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_recipienta"
+>>> processing "accept"
+>>> check hosts = :
+>>> host in ":"? no (end of list)
+>>> accept: condition test failed
+>>> processing "deny"
+>>> check hosts = +include_defer : test.again.dns
+>>> test.again.dns in dns_again_means_nonexist? no (option unset)
+>>> host in "+include_defer : test.again.dns"? yes (DNS lookup of test.again.dns deferred)
+LOG: DNS lookup of test.again.dns deferred: accepted by +include_defer
+>>> deny: condition test succeeded
+LOG: H=[V4NET.0.0.13] F=<userx@myhost.test.ex> rejected RCPT <a@test.ex>
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> sender host name required, to match against ^ten-1\.test\.ex
+>>> looking up host name for V4NET.0.0.13
+LOG: no host name found for IP address V4NET.0.0.13
+>>> host in sender_unqualified_hosts? yes (failed to find host name for V4NET.0.0.13)
+LOG: failed to find host name for V4NET.0.0.13: accepted by +include_unknown
+>>> host in recipient_unqualified_hosts? no (option unset)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_recipientb"
+>>> processing "accept"
+>>> check hosts = test.again.dns : V4NET.0.0.13
+>>> test.again.dns in dns_again_means_nonexist? no (option unset)
+>>> host in "test.again.dns : V4NET.0.0.13"? no (DNS lookup of test.again.dns deferred)
+>>> host in "test.again.dns : V4NET.0.0.13"? list match deferred for test.again.dns
+>>> accept: condition test deferred
+LOG: H=[V4NET.0.0.13] F=<userx@test.ex> temporarily rejected RCPT <b@test.ex>
+>>> host in hosts_connection_nolog? no (option unset)
+>>> host in host_lookup? no (option unset)
+>>> host in host_reject_connection? no (option unset)
+>>> sender host name required, to match against ^ten-1\.test\.ex
+>>> looking up host name for V4NET.0.0.13
+LOG: no host name found for IP address V4NET.0.0.13
+>>> host in sender_unqualified_hosts? yes (failed to find host name for V4NET.0.0.13)
+LOG: failed to find host name for V4NET.0.0.13: accepted by +include_unknown
+>>> host in recipient_unqualified_hosts? no (option unset)
+>>> host in helo_verify_hosts? no (option unset)
+>>> host in helo_try_verify_hosts? no (option unset)
+>>> host in helo_accept_junk_hosts? no (option unset)
+>>> using ACL "check_recipientc"
+>>> processing "accept"
+>>> check hosts = +ignore_defer : test.again.dns : V4NET.0.0.13
+>>> test.again.dns in dns_again_means_nonexist? no (option unset)
+>>> DNS lookup of test.again.dns deferred: item ignored by +ignore_defer
+>>> host in "+ignore_defer : test.again.dns : V4NET.0.0.13"? yes (matched "V4NET.0.0.13")
+>>> accept: condition test succeeded
250 OK\r
550 "Denied"\r
221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.0.0.13
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+550 Administrative prohibition\r
+221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.0.0.13
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+451 Temporary local problem - please try later\r
+221 myhost.test.ex closing connection\r
+
+**** SMTP testing session as if from host V4NET.0.0.13
+**** but without any ident (RFC 1413) callback.
+**** This is not for real!
+
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 OK\r
+250 Accepted\r
+221 myhost.test.ex closing connection\r