diff options
author | Jeremy Harris <jgh146exb@wizmail.org> | 2018-01-26 18:40:41 +0000 |
---|---|---|
committer | Jeremy Harris <jgh146exb@wizmail.org> | 2018-01-26 20:05:56 +0000 |
commit | f83a760f108f79279c210e208bb02c270569a951 (patch) | |
tree | 0e0e5540ae4296f6bae8d555397363b09fdd5548 | |
parent | 06fdb9f73dedfffc8b8613017ec1bb23f970b246 (diff) |
Cutthrough: fix for port-number defined by router. Bug 2229
-rw-r--r-- | doc/doc-txt/ChangeLog | 4 | ||||
-rw-r--r-- | src/src/verify.c | 11 | ||||
-rw-r--r-- | test/confs/5407 | 52 | ||||
-rw-r--r-- | test/log/5407 | 6 | ||||
-rw-r--r-- | test/scripts/5400-cutthrough/5407 | 40 | ||||
-rw-r--r-- | test/stdout/5407 | 41 |
6 files changed, 150 insertions, 4 deletions
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index facdece83..7d577dbcb 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -67,6 +67,10 @@ JH/12 Bug 2230: Fix cutthrough routing for nonfirst messages in an initiating multiple onward connections in sequence, handling cutthrough connection for all multi-message initiating connections. +JH/13 Bug 2229: Fix cutthrough routing for nonstandard port numbers defined by + routers. Previously, a multi-recipient message would fail to match the + onward-connection opened for the first recipient, and cause its closure. + Exim version 4.90 ----------------- diff --git a/src/src/verify.c b/src/src/verify.c index dd5451848..eb479d440 100644 --- a/src/src/verify.c +++ b/src/src/verify.c @@ -388,18 +388,21 @@ if (addr->transport == cutthrough.addr.transport) host_af = Ustrchr(host->address, ':') ? AF_INET6 : AF_INET; - if (!smtp_get_interface(tf->interface, host_af, addr, &interface, - US"callout") || - !smtp_get_port(tf->port, addr, &port, US"callout")) + if ( !smtp_get_interface(tf->interface, host_af, addr, &interface, + US"callout") + || !smtp_get_port(tf->port, addr, &port, US"callout") + ) log_write(0, LOG_MAIN|LOG_PANIC, "<%s>: %s", addr->address, addr->message); + smtp_port_for_connect(host, port); + if ( ( interface == cutthrough.interface || ( interface && cutthrough.interface && Ustrcmp(interface, cutthrough.interface) == 0 ) ) - && port == cutthrough.host.port + && host->port == cutthrough.host.port ) { uschar * resp = NULL; diff --git a/test/confs/5407 b/test/confs/5407 new file mode 100644 index 000000000..0d41b0b7d --- /dev/null +++ b/test/confs/5407 @@ -0,0 +1,52 @@ +# Exim test configuration 5407 + +# any options on the cutthrough_delivery control +CONTROL= + +# optional verify-callout +OPT= + +.include DIR/aux-var/std_conf_prefix + +primary_hostname = myhost.test.ex + +log_selector = +received_recipients +queue_only + +# ----- Main settings ----- + +domainlist local_domains = test.ex : *.test.ex + +acl_smtp_rcpt = ar + + +# ----- ACLs ----- + +begin acl + +ar: + accept + control = cutthrough_deliveryCONTROL + OPT + logwrite = rcpt for $local_part@$domain + +# ----- Routers ----- + +begin routers + +all: + driver = manualroute + domains = ! +local_domains + route_list = * 127.0.0.1::PORT_S + self = send + transport = smtp + + +# ----- Transports ----- + +begin transports + +smtp: + driver = smtp + +# End diff --git a/test/log/5407 b/test/log/5407 new file mode 100644 index 000000000..3b35ec632 --- /dev/null +++ b/test/log/5407 @@ -0,0 +1,6 @@ +1999-03-02 09:44:33 rcpt for userx@domain.com +1999-03-02 09:44:33 rcpt for usery@domain.com +1999-03-02 09:44:33 10HmaX-0005vi-00 >> usery@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK" +1999-03-02 09:44:33 10HmaX-0005vi-00 >> userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] C="250 OK" +1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss for userx@domain.com usery@domain.com +1999-03-02 09:44:33 10HmaX-0005vi-00 Completed diff --git a/test/scripts/5400-cutthrough/5407 b/test/scripts/5400-cutthrough/5407 new file mode 100644 index 000000000..08bc36f1f --- /dev/null +++ b/test/scripts/5400-cutthrough/5407 @@ -0,0 +1,40 @@ +# cutthrough_delivery multiple recipient; router specifying port +need_ipv4 +munge loopback +# +# A two-RCPT message. +# Both should get cuttthrough, still as one message +server PORT_S +220 ESMTP +EHLO +250 OK +MAIL FROM: +250 Sender OK +RCPT TO: +250 Recipient OK +RCPT TO: +250 Recipient OK +DATA +354 Send data +. +250 OK +QUIT +250 OK +*eof +**** +exim -bs +EHLO myhost.test.ex +MAIL FROM:<CALLER@myhost.test.ex> +RCPT TO:<userx@domain.com> +RCPT TO:<usery@domain.com> +DATA + +. +QUIT +**** +# +# +# +# +# +# End diff --git a/test/stdout/5407 b/test/stdout/5407 new file mode 100644 index 000000000..90ae013fa --- /dev/null +++ b/test/stdout/5407 @@ -0,0 +1,41 @@ +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+250-myhost.test.ex Hello CALLER at myhost.test.ex
+250-SIZE 52428800
+250-8BITMIME
+250-PIPELINING
+250 HELP
+250 OK
+250 Accepted
+250 Accepted
+354 Enter message, ending with "." on a line by itself
+250 OK id=10HmaX-0005vi-00
+221 myhost.test.ex closing connection
+ +******** SERVER ******** +Listening on port 1224 ... +Connection request from [IP_LOOPBACK_ADDR] +220 ESMTP +EHLO myhost.test.ex +250 OK +MAIL FROM:<CALLER@myhost.test.ex> +250 Sender OK +RCPT TO:<userx@domain.com> +250 Recipient OK +RCPT TO:<usery@domain.com> +250 Recipient OK +DATA +354 Send data +Received: from CALLER (helo=myhost.test.ex) + by myhost.test.ex with local-esmtp (Exim x.yz) + (envelope-from <CALLER@myhost.test.ex>) + id 10HmaX-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000 +Message-Id: <E10HmaX-0005vi-00@myhost.test.ex> +From: CALLER_NAME <CALLER@myhost.test.ex> +Date: Tue, 2 Mar 1999 09:44:33 +0000 + +. +250 OK +QUIT +250 OK +Expected EOF read from client +End of script |