summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2016-07-08 18:49:10 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2016-07-08 18:49:10 +0100
commit98c82a3de2d8582aae76e91c4a8d4bcf3e7c55f0 (patch)
tree8f608107150a7f26e91ef04f5d059bbbcaaf6e3b
parent8b9476ba56f0fd05ac8303ad86a41e0242bc876d (diff)
downloadexim4-98c82a3de2d8582aae76e91c4a8d4bcf3e7c55f0.tar.gz
Cutthrough: disable on >1 addr from routing, and on verify option success_on_redirect
-rw-r--r--doc/doc-txt/ChangeLog9
-rw-r--r--src/src/route.c4
-rw-r--r--src/src/verify.c9
3 files changed, 19 insertions, 3 deletions
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;
}