From: Jeremy Harris Date: Fri, 8 Jul 2016 17:49:10 +0000 (+0100) Subject: Cutthrough: disable on >1 addr from routing, and on verify option success_on_redirect X-Git-Tag: exim-4_88_RC1~72 X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/98c82a3de2d8582aae76e91c4a8d4bcf3e7c55f0 Cutthrough: disable on >1 addr from routing, and on verify option success_on_redirect --- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 7a5aab755..c1b43244b 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -40,6 +40,15 @@ JH/09 Bug 1804: Avoid writing msglog files when in -bh or -bhc mode. JH/10 Support ${sha256:} applied to a string (as well as the previous certificate). +JH/11 Cutthrough: avoid using the callout hints db on a verify callout when + a cutthrough deliver is pending, as we always want to make a connection. + This also avoids re-routing the message when later placing the cutthrough + connection after a verify cache hit. + Do not update it with the verify result either. + +JH/12 Cutthrough: disable when verify option success_on_redirect is used, and + when routing results in more than one destination address. + Exim version 4.87 ----------------- diff --git a/src/src/route.c b/src/src/route.c index f7a532567..57dfc09e6 100644 --- a/src/src/route.c +++ b/src/src/route.c @@ -1657,10 +1657,10 @@ for (r = addr->start_router ? addr->start_router : routers; r; r = nextr) set flag. */ if (r->dsn_lasthop && !(addr->dsn_flags & rf_dsnlasthop)) - { + { addr->dsn_flags |= rf_dsnlasthop; HDEBUG(D_route) debug_printf("DSN: last hop for %s\n", addr->address); - } + } HDEBUG(D_route) debug_printf("calling %s router\n", r->name); diff --git a/src/src/verify.c b/src/src/verify.c index 476276037..a73004028 100644 --- a/src/src/verify.c +++ b/src/src/verify.c @@ -1266,7 +1266,8 @@ can do it there for the non-rcpt-verify case. For this we keep an addresscount. && rcpt_count == 1 && done && yield == OK - && (options & (vopt_callout_recipsender|vopt_callout_recippmaster)) == vopt_callout_recipsender + && (options & (vopt_callout_recipsender|vopt_callout_recippmaster|vopt_success_on_redirect)) + == vopt_callout_recipsender && !random_local_part && !pm_mailfrom && cutthrough.fd < 0 @@ -2266,6 +2267,12 @@ while (addr_new) of $address_data to be that of the child */ vaddr->prop.address_data = addr->prop.address_data; + + /* If stopped because more than one new address, cannot cutthrough */ + + if (addr_new && addr_new->next) + cancel_cutthrough_connection("multiple addresses from routing"); + yield = OK; goto out; }