https://bugs.exim.org/show_bug.cgi?id=2604
Bug ID: 2604 Summary: exim does not send DATA to target host when verify callout hold and delivery cutthrough Product: Exim Version: N/A Hardware: x86 OS: Windows Status: NEW Severity: bug Priority: medium Component: Transports Assignee: unalloca...@exim.org Reporter: david-exim-b...@infotrek.co.uk CC: exim-dev@exim.org Created attachment 1318 --> https://bugs.exim.org/attachment.cgi?id=1318&action=edit sample pcap of both SMTP sessions Mail server setup: sender --smtp--> inbound relay(exim) --smtp--> mailstore host(exim) Inbound relay has a callout to verify recipient with 'hold' option set to keep SMTP session alive for the message. Delivery is then cutthrough. The inbound relay often does not send the DATA command to the mailstore host and also misses out parts of the message. This causes at best SMTP synchronisation errors. Attached is a pcap of a simple test using telnet, but this also happens in reality with real mail from real senders. In the pcap: - sending host is sarlonintman001 (2a05:e200:0:1::1) - inbound relay is smtpin001 (2a05:e200:1:74::2:1) - mailstore host is mailstore001 (2a05:e200:1:74::3:1) The dialogue from sending host to inbound relay: << 220 smtpin001.a.snlmail.net ESMTP >> ehlo asd << 250-smtpin001.a.snlmail.net Hello sarlonintman001.sargasso.net.uk [2a05:e200:0:1::1] << 250-SIZE 52428800 << 250-8BITMIME << 250-PIPELINING << 250-CHUNKING << 250-STARTTLS << 250 HELP >> mail from:<asda...@asdasd.com> << 250 OK >> rcpt to:<da...@sargasso.pw> << 250 Accepted >> data << 354 Enter message, ending with "." on a line by itself >> Subject: test >> >> testing >> . << 554 SMTP synchronization error >> quit << 221 smtpin001.a.snlmail.net closing connection The dialogue from inbound relay to mailstore host: << 220 mailstore001.a.snlmail.net ESMTP >> EHLO smtpin001.a.snlmail.net << 250-mailstore001.a.snlmail.net Hello smtpin001.a.snlmail.net [2a05:e200:1:74::2:1] << 250-SIZE 52428800 << 250-8BITMIME << 250-PIPELINING << 250-CHUNKING << 250 HELP >> MAIL FROM:<asda...@asdasd.com> >> RCPT TO:<da...@sargasso.pw> << 250 OK << 250 Accepted >> testing >> . << 554 SMTP synchronization error >> QUIT Note that the DATA command and the initial part of the message (subject line) is missing. Exim version 4.92 (Debian exim4-daemon-heavy package) Configuration on relay host (one standalone file; Debian config is not used): log_selector = +lost_incoming_connection +retry_defer +sender_on_delivery +skip_delivery +smtp_confirmation +smtp_connection +smtp_protocol_error +smtp_syntax_error +tls_peerdn never_users = root host_lookup = * print_topbitchars = false rfc1413_hosts = * rfc1413_query_timeout = 5s ignore_bounce_errors_after = 2d timeout_frozen_after = 7d smtp_banner = $smtp_active_hostname ESMTP smtp_receive_timeout = 1m tls_certificate = xxx tls_privatekey = xxx domainlist relay_domains = sargasso.pw acl_smtp_rcpt = acl_check_rcpt acl_smtp_predata = acl_smtp_ratelimit begin acl acl_check_rcpt: # Accept local accept hosts = : # Accept hostlist accept hosts = @ : 127.0.0.1 # Require it is a domain we relay for require message = Relaying not permitted. domains = +relay_domains # Require that the user being sent to exists require verify = recipient/callout=10s,defer_ok,use_sender,hold,no_cache message = Recipient <$local_part@$domain> unknown # Accept message and cut-through accept control = cutthrough_delivery acl_smtp_ratelimit: # Log all sender host ratelimits warn ratelimit = 0 / 1h / readonly log_message = RATELIMIT INFO: Sender $sender_host_address rate $sender_rate / $sender_rate_period # System-wide rate limit defer ratelimit = 10 / 1s / $primary_hostname log_message = RATELIMIT DEFER: System message rate $sender_rate / $sender_rate_period. message = System load exceeded. Try again later. # Per sender host rate limit defer ratelimit = 100 / 1h / strict / $sender_host_address log_message = RATELIMIT DEFER: Sender host $sender_host_address message rate $sender_rate / $sender_rate_period. message = You have exceeded your maximum message rate. Please try again later. # Accept messages not rate limited accept ###################################################################### # ROUTERS CONFIGURATION # # Specifies how addresses are handled # ###################################################################### begin routers system_aliases: driver = redirect domains = @ allow_defer allow_fail data = ${lookup{$local_part}lsearch{/etc/aliases}} debug_print = R: system_aliases for $local_part@$domain relay_virtual_domains: driver = manualroute domains = +relaydomains route_data = mailstore001 same_domain_copy_routing = true debug_print = R: relay_virtual_domains for $domain transport = remote_smtp no_more smarthost: driver = manualroute domains = !@ : !+relay_domains route_list = * smtpout byname host_find_failed = ignore same_domain_copy_routing = true debug_print = R: smarthost for $local_part@$domain transport = remote_smtp no_more begin transports remote_smtp: driver = smtp message_size_limit = ${if > {$max_received_linelength}{998} {1}{0}} begin retry * * F,4h,5m; G,16h,1h,1.5; F,2d,6h; begin authenticators begin rewrite -- You are receiving this mail because: You are on the CC list for the bug. -- ## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim details at http://www.exim.org/ ##