From 051d5efab898146f3769c72e58af4577164d2dab Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Wed, 7 Feb 2018 12:11:22 +0000 Subject: [PATCH] Cutthrough: silently ignore ACL control when the message cannot be cutthrough-routed --- doc/doc-txt/ChangeLog | 5 +++++ src/src/acl.c | 22 ++++++++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index bac937e62..8221fb564 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -77,6 +77,11 @@ JH/14 Bug 2174: A timeout on connect for a callout was also erroneously seen as was marked defer_ok. Fix to keep the two timeout-detection methods separate. +JH/15 Relax results from ACL control request to enable cutthrough, in + unsupported situations, from error to silently (except under debug) + ignoring. This covers use with PRDR, frozen messages, queue-only and + fake-reject. + Exim version 4.90 ----------------- diff --git a/src/src/acl.c b/src/src/acl.c index 9efc85844..5b30535e8 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -3251,6 +3251,8 @@ for (; cb != NULL; cb = cb->next) break; case CONTROL_CUTTHROUGH_DELIVERY: + { + uschar * ignored = NULL; #ifndef DISABLE_PRDR if (prdr_requested) #else @@ -3259,20 +3261,20 @@ for (; cb != NULL; cb = cb->next) /* Too hard to think about for now. We might in future cutthrough the case where both sides handle prdr and this-node prdr acl is "accept" */ - *log_msgptr = string_sprintf("PRDR on %s reception\n", arg); + ignored = US"PRDR active"; else { if (deliver_freeze) - *log_msgptr = US"frozen"; + ignored = US"frozen"; else if (queue_only_policy) - *log_msgptr = US"queue-only"; + ignored = US"queue-only"; else if (fake_response == FAIL) - *log_msgptr = US"fakereject"; + ignored = US"fakereject"; else { if (rcpt_count == 1) { - cutthrough.delivery = TRUE; + cutthrough.delivery = TRUE; /* control accepted */ while (*p == '/') { const uschar * pp = p+1; @@ -3288,13 +3290,13 @@ for (; cb != NULL; cb = cb->next) } } else - DEBUG(D_acl) debug_printf(" cutthrough request ignored for nonfirst rcpt\n"); - break; + ignored = US"nonfirst rcpt"; } - *log_msgptr = string_sprintf("\"control=%s\" on %s item", - arg, *log_msgptr); } - return ERROR; + DEBUG(D_acl) if (ignored) + debug_printf(" cutthrough request ignored on %s item\n", ignored); + } + break; #ifdef SUPPORT_I18N case CONTROL_UTF8_DOWNCONVERT: -- 2.30.2