1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4 
5 /* Copyright (c) University of Cambridge 1995 - 2018 */
6 /* Copyright (c) The Exim Maintainers 2020 */
7 /* See the file NOTICE for conditions of use and distribution. */
8 
9 #include "../exim.h"
10 #include "smtp.h"
11 
12 #if defined(SUPPORT_DANE) && defined(DISABLE_TLS)
13 # error TLS is required for DANE
14 #endif
15 
16 
17 /* Options specific to the smtp transport. This transport also supports LMTP
18 over TCP/IP. The options must be in alphabetic order (note that "_" comes
19 before the lower case letters). Some live in the transport_instance block so as
20 to be publicly visible; these are flagged with opt_public. */
21 
22 #define LOFF(field) OPT_OFF(smtp_transport_options_block, field)
23 
24 optionlist smtp_transport_options[] = {
25   { "*expand_multi_domain",             opt_stringptr | opt_hidden | opt_public,
26       OPT_OFF(transport_instance, expand_multi_domain) },
27   { "*expand_retry_include_ip_address", opt_stringptr | opt_hidden,
28       LOFF(expand_retry_include_ip_address) },
29 
30   { "address_retry_include_sender", opt_bool,
31       LOFF(address_retry_include_sender) },
32   { "allow_localhost",      opt_bool,	   LOFF(allow_localhost) },
33 #ifdef EXPERIMENTAL_ARC
34   { "arc_sign", opt_stringptr,		   LOFF(arc_sign) },
35 #endif
36   { "authenticated_sender", opt_stringptr, LOFF(authenticated_sender) },
37   { "authenticated_sender_force", opt_bool, LOFF(authenticated_sender_force) },
38   { "command_timeout",      opt_time,	   LOFF(command_timeout) },
39   { "connect_timeout",      opt_time,	   LOFF(connect_timeout) },
40   { "connection_max_messages", opt_int | opt_public,
41       OPT_OFF(transport_instance, connection_max_messages) },
42 # ifdef SUPPORT_DANE
43   { "dane_require_tls_ciphers", opt_stringptr, LOFF(dane_require_tls_ciphers) },
44 # endif
45   { "data_timeout",         opt_time,	   LOFF(data_timeout) },
46   { "delay_after_cutoff",   opt_bool,	   LOFF(delay_after_cutoff) },
47 #ifndef DISABLE_DKIM
48   { "dkim_canon", opt_stringptr,	   LOFF(dkim.dkim_canon) },
49   { "dkim_domain", opt_stringptr,	   LOFF(dkim.dkim_domain) },
50   { "dkim_hash", opt_stringptr,		   LOFF(dkim.dkim_hash) },
51   { "dkim_identity", opt_stringptr,	   LOFF(dkim.dkim_identity) },
52   { "dkim_private_key", opt_stringptr,	   LOFF(dkim.dkim_private_key) },
53   { "dkim_selector", opt_stringptr,	   LOFF(dkim.dkim_selector) },
54   { "dkim_sign_headers", opt_stringptr,	   LOFF(dkim.dkim_sign_headers) },
55   { "dkim_strict", opt_stringptr,	   LOFF(dkim.dkim_strict) },
56   { "dkim_timestamps", opt_stringptr,	   LOFF(dkim.dkim_timestamps) },
57 #endif
58   { "dns_qualify_single",   opt_bool,	   LOFF(dns_qualify_single) },
59   { "dns_search_parents",   opt_bool,	   LOFF(dns_search_parents) },
60   { "dnssec_request_domains", opt_stringptr, LOFF(dnssec.request) },
61   { "dnssec_require_domains", opt_stringptr, LOFF(dnssec.require) },
62   { "dscp",                 opt_stringptr, LOFF(dscp) },
63   { "fallback_hosts",       opt_stringptr, LOFF(fallback_hosts) },
64   { "final_timeout",        opt_time,	   LOFF(final_timeout) },
65   { "gethostbyname",        opt_bool,	   LOFF(gethostbyname) },
66   { "helo_data",            opt_stringptr, LOFF(helo_data) },
67   { "hosts",                opt_stringptr, LOFF(hosts) },
68   { "hosts_avoid_esmtp",    opt_stringptr, LOFF(hosts_avoid_esmtp) },
69   { "hosts_avoid_pipelining", opt_stringptr, LOFF(hosts_avoid_pipelining) },
70 #ifndef DISABLE_TLS
71   { "hosts_avoid_tls",      opt_stringptr, LOFF(hosts_avoid_tls) },
72 #endif
73   { "hosts_max_try",        opt_int,	   LOFF(hosts_max_try) },
74   { "hosts_max_try_hardlimit", opt_int,	   LOFF(hosts_max_try_hardlimit) },
75 #ifndef DISABLE_TLS
76   { "hosts_nopass_tls",     opt_stringptr, LOFF(hosts_nopass_tls) },
77   { "hosts_noproxy_tls",    opt_stringptr, LOFF(hosts_noproxy_tls) },
78 #endif
79   { "hosts_override",       opt_bool,	   LOFF(hosts_override) },
80 #ifndef DISABLE_PIPE_CONNECT
81   { "hosts_pipe_connect",   opt_stringptr, LOFF(hosts_pipe_connect) },
82 #endif
83   { "hosts_randomize",      opt_bool,	   LOFF(hosts_randomize) },
84 #if !defined(DISABLE_TLS) && !defined(DISABLE_OCSP)
85   { "hosts_request_ocsp",   opt_stringptr, LOFF(hosts_request_ocsp) },
86 #endif
87   { "hosts_require_alpn",   opt_stringptr, LOFF(hosts_require_alpn) },
88   { "hosts_require_auth",   opt_stringptr, LOFF(hosts_require_auth) },
89 #ifndef DISABLE_TLS
90 # ifdef SUPPORT_DANE
91   { "hosts_require_dane",   opt_stringptr, LOFF(hosts_require_dane) },
92 # endif
93 # ifndef DISABLE_OCSP
94   { "hosts_require_ocsp",   opt_stringptr, LOFF(hosts_require_ocsp) },
95 # endif
96   { "hosts_require_tls",    opt_stringptr, LOFF(hosts_require_tls) },
97 #endif
98   { "hosts_try_auth",       opt_stringptr, LOFF(hosts_try_auth) },
99   { "hosts_try_chunking",   opt_stringptr, LOFF(hosts_try_chunking) },
100 #ifdef SUPPORT_DANE
101   { "hosts_try_dane",       opt_stringptr, LOFF(hosts_try_dane) },
102 #endif
103   { "hosts_try_fastopen",   opt_stringptr, LOFF(hosts_try_fastopen) },
104 #ifndef DISABLE_PRDR
105   { "hosts_try_prdr",       opt_stringptr, LOFF(hosts_try_prdr) },
106 #endif
107 #ifndef DISABLE_TLS
108   { "hosts_verify_avoid_tls", opt_stringptr, LOFF(hosts_verify_avoid_tls) },
109 #endif
110   { "interface",            opt_stringptr, LOFF(interface) },
111   { "keepalive",            opt_bool,	   LOFF(keepalive) },
112   { "lmtp_ignore_quota",    opt_bool,	   LOFF(lmtp_ignore_quota) },
113   { "max_rcpt",             opt_int | opt_public,
114       OPT_OFF(transport_instance, max_addresses) },
115   { "message_linelength_limit", opt_int,   LOFF(message_linelength_limit) },
116   { "multi_domain",         opt_expand_bool | opt_public,
117       OPT_OFF(transport_instance, multi_domain) },
118   { "port",                 opt_stringptr, LOFF(port) },
119   { "protocol",             opt_stringptr, LOFF(protocol) },
120   { "retry_include_ip_address", opt_expand_bool, LOFF(retry_include_ip_address) },
121   { "serialize_hosts",      opt_stringptr, LOFF(serialize_hosts) },
122   { "size_addition",        opt_int,	   LOFF(size_addition) },
123 #ifdef SUPPORT_SOCKS
124   { "socks_proxy",          opt_stringptr, LOFF(socks_proxy) },
125 #endif
126 #ifndef DISABLE_TLS
127   { "tls_alpn",             opt_stringptr, LOFF(tls_alpn) },
128   { "tls_certificate",      opt_stringptr, LOFF(tls_certificate) },
129   { "tls_crl",              opt_stringptr, LOFF(tls_crl) },
130   { "tls_dh_min_bits",      opt_int,	   LOFF(tls_dh_min_bits) },
131   { "tls_privatekey",       opt_stringptr, LOFF(tls_privatekey) },
132   { "tls_require_ciphers",  opt_stringptr, LOFF(tls_require_ciphers) },
133 # ifndef DISABLE_TLS_RESUME
134   { "tls_resumption_hosts", opt_stringptr, LOFF(tls_resumption_hosts) },
135 # endif
136   { "tls_sni",              opt_stringptr, LOFF(tls_sni) },
137   { "tls_tempfail_tryclear", opt_bool, LOFF(tls_tempfail_tryclear) },
138   { "tls_try_verify_hosts", opt_stringptr, LOFF(tls_try_verify_hosts) },
139   { "tls_verify_cert_hostnames", opt_stringptr, LOFF(tls_verify_cert_hostnames)},
140   { "tls_verify_certificates", opt_stringptr, LOFF(tls_verify_certificates) },
141   { "tls_verify_hosts",     opt_stringptr, LOFF(tls_verify_hosts) },
142 #endif
143 #ifdef SUPPORT_I18N
144   { "utf8_downconvert",	    opt_stringptr, LOFF(utf8_downconvert) },
145 #endif
146 };
147 
148 /* Size of the options list. An extern variable has to be used so that its
149 address can appear in the tables drtables.c. */
150 
151 int smtp_transport_options_count = nelem(smtp_transport_options);
152 
153 
154 #ifdef MACRO_PREDEF
155 
156 /* Dummy values */
157 smtp_transport_options_block smtp_transport_option_defaults = {0};
smtp_transport_init(transport_instance * tblock)158 void smtp_transport_init(transport_instance *tblock) {}
smtp_transport_entry(transport_instance * tblock,address_item * addr)159 BOOL smtp_transport_entry(transport_instance *tblock, address_item *addr) {return FALSE;}
smtp_transport_closedown(transport_instance * tblock)160 void smtp_transport_closedown(transport_instance *tblock) {}
161 
162 #else   /*!MACRO_PREDEF*/
163 
164 
165 /* Default private options block for the smtp transport. */
166 
167 smtp_transport_options_block smtp_transport_option_defaults = {
168   /* All non-mentioned elements 0/NULL/FALSE */
169   .helo_data =			US"$primary_hostname",
170   .protocol =			US"smtp",
171   .hosts_try_chunking =		US"*",
172 #ifdef SUPPORT_DANE
173   .hosts_try_dane =		US"*",
174 #endif
175   .hosts_try_fastopen =		US"*",
176 #ifndef DISABLE_PRDR
177   .hosts_try_prdr =		US"*",
178 #endif
179 #ifndef DISABLE_OCSP
180   .hosts_request_ocsp =		US"*",               /* hosts_request_ocsp (except under DANE; tls_client_start()) */
181 #endif
182   .command_timeout =		5*60,
183   .connect_timeout =		5*60,
184   .data_timeout =		5*60,
185   .final_timeout =		10*60,
186   .size_addition =		1024,
187   .hosts_max_try =		5,
188   .hosts_max_try_hardlimit =	50,
189   .message_linelength_limit =	998,
190   .address_retry_include_sender = TRUE,
191   .dns_qualify_single =		TRUE,
192   .dnssec = { .request= US"*", .require=NULL },
193   .delay_after_cutoff =		TRUE,
194   .keepalive =			TRUE,
195   .retry_include_ip_address =	TRUE,
196 #ifndef DISABLE_TLS
197   .tls_verify_certificates =	US"system",
198   .tls_dh_min_bits =		EXIM_CLIENT_DH_DEFAULT_MIN_BITS,
199   .tls_tempfail_tryclear =	TRUE,
200   .tls_try_verify_hosts =	US"*",
201   .tls_verify_cert_hostnames =	US"*",
202 #endif
203 #ifdef SUPPORT_I18N
204   .utf8_downconvert =		US"-1",
205 #endif
206 #ifndef DISABLE_DKIM
207  .dkim =
208    { .dkim_hash =		US"sha256", },
209 #endif
210 };
211 
212 /* some DSN flags for use later */
213 
214 static int     rf_list[] = {rf_notify_never, rf_notify_success,
215                             rf_notify_failure, rf_notify_delay };
216 
217 static uschar *rf_names[] = { US"NEVER", US"SUCCESS", US"FAILURE", US"DELAY" };
218 
219 
220 
221 /* Local statics */
222 
223 static uschar *smtp_command;		/* Points to last cmd for error messages */
224 static uschar *mail_command;		/* Points to MAIL cmd for error messages */
225 static uschar *data_command = US"";	/* Points to DATA cmd for error messages */
226 static BOOL    update_waiting;		/* TRUE to update the "wait" database */
227 
228 /*XXX move to smtp_context */
229 static BOOL    pipelining_active;	/* current transaction is in pipe mode */
230 
231 
232 static unsigned ehlo_response(uschar * buf, unsigned checks);
233 
234 
235 /******************************************************************************/
236 
237 void
smtp_deliver_init(void)238 smtp_deliver_init(void)
239 {
240 if (!regex_PIPELINING) regex_PIPELINING =
241   regex_must_compile(US"\\n250[\\s\\-]PIPELINING(\\s|\\n|$)", FALSE, TRUE);
242 
243 if (!regex_SIZE) regex_SIZE =
244   regex_must_compile(US"\\n250[\\s\\-]SIZE(\\s|\\n|$)", FALSE, TRUE);
245 
246 if (!regex_AUTH) regex_AUTH =
247   regex_must_compile(AUTHS_REGEX, FALSE, TRUE);
248 
249 #ifndef DISABLE_TLS
250 if (!regex_STARTTLS) regex_STARTTLS =
251   regex_must_compile(US"\\n250[\\s\\-]STARTTLS(\\s|\\n|$)", FALSE, TRUE);
252 #endif
253 
254 if (!regex_CHUNKING) regex_CHUNKING =
255   regex_must_compile(US"\\n250[\\s\\-]CHUNKING(\\s|\\n|$)", FALSE, TRUE);
256 
257 #ifndef DISABLE_PRDR
258 if (!regex_PRDR) regex_PRDR =
259   regex_must_compile(US"\\n250[\\s\\-]PRDR(\\s|\\n|$)", FALSE, TRUE);
260 #endif
261 
262 #ifdef SUPPORT_I18N
263 if (!regex_UTF8) regex_UTF8 =
264   regex_must_compile(US"\\n250[\\s\\-]SMTPUTF8(\\s|\\n|$)", FALSE, TRUE);
265 #endif
266 
267 if (!regex_DSN) regex_DSN  =
268   regex_must_compile(US"\\n250[\\s\\-]DSN(\\s|\\n|$)", FALSE, TRUE);
269 
270 if (!regex_IGNOREQUOTA) regex_IGNOREQUOTA =
271   regex_must_compile(US"\\n250[\\s\\-]IGNOREQUOTA(\\s|\\n|$)", FALSE, TRUE);
272 
273 #ifndef DISABLE_PIPE_CONNECT
274 if (!regex_EARLY_PIPE) regex_EARLY_PIPE =
275   regex_must_compile(US"\\n250[\\s\\-]" EARLY_PIPE_FEATURE_NAME "(\\s|\\n|$)", FALSE, TRUE);
276 #endif
277 
278 #ifdef EXPERIMENTAL_ESMTP_LIMITS
279 if (!regex_LIMITS) regex_LIMITS =
280   regex_must_compile(US"\\n250[\\s\\-]LIMITS\\s", FALSE, TRUE);
281 #endif
282 }
283 
284 
285 /*************************************************
286 *             Setup entry point                  *
287 *************************************************/
288 
289 /* This function is called when the transport is about to be used,
290 but before running it in a sub-process. It is used for two things:
291 
292   (1) To set the fallback host list in addresses, when delivering.
293   (2) To pass back the interface, port, protocol, and other options, for use
294       during callout verification.
295 
296 Arguments:
297   tblock    pointer to the transport instance block
298   addrlist  list of addresses about to be transported
299   tf        if not NULL, pointer to block in which to return options
300   uid       the uid that will be set (not used)
301   gid       the gid that will be set (not used)
302   errmsg    place for error message (not used)
303 
304 Returns:  OK always (FAIL, DEFER not used)
305 */
306 
307 static int
smtp_transport_setup(transport_instance * tblock,address_item * addrlist,transport_feedback * tf,uid_t uid,gid_t gid,uschar ** errmsg)308 smtp_transport_setup(transport_instance *tblock, address_item *addrlist,
309   transport_feedback *tf, uid_t uid, gid_t gid, uschar **errmsg)
310 {
311 smtp_transport_options_block *ob = SOB tblock->options_block;
312 
313 /* Pass back options if required. This interface is getting very messy. */
314 
315 if (tf)
316   {
317   tf->interface = ob->interface;
318   tf->port = ob->port;
319   tf->protocol = ob->protocol;
320   tf->hosts = ob->hosts;
321   tf->hosts_override = ob->hosts_override;
322   tf->hosts_randomize = ob->hosts_randomize;
323   tf->gethostbyname = ob->gethostbyname;
324   tf->qualify_single = ob->dns_qualify_single;
325   tf->search_parents = ob->dns_search_parents;
326   tf->helo_data = ob->helo_data;
327   }
328 
329 /* Set the fallback host list for all the addresses that don't have fallback
330 host lists, provided that the local host wasn't present in the original host
331 list. */
332 
333 if (!testflag(addrlist, af_local_host_removed))
334   for (; addrlist; addrlist = addrlist->next)
335     if (!addrlist->fallback_hosts) addrlist->fallback_hosts = ob->fallback_hostlist;
336 
337 return OK;
338 }
339 
340 
341 
342 /*************************************************
343 *          Initialization entry point            *
344 *************************************************/
345 
346 /* Called for each instance, after its options have been read, to
347 enable consistency checks to be done, or anything else that needs
348 to be set up.
349 
350 Argument:   pointer to the transport instance block
351 Returns:    nothing
352 */
353 
354 void
smtp_transport_init(transport_instance * tblock)355 smtp_transport_init(transport_instance *tblock)
356 {
357 smtp_transport_options_block *ob = SOB tblock->options_block;
358 int old_pool = store_pool;
359 
360 /* Retry_use_local_part defaults FALSE if unset */
361 
362 if (tblock->retry_use_local_part == TRUE_UNSET)
363   tblock->retry_use_local_part = FALSE;
364 
365 /* Set the default port according to the protocol */
366 
367 if (!ob->port)
368   ob->port = strcmpic(ob->protocol, US"lmtp") == 0
369   ? US"lmtp"
370   : strcmpic(ob->protocol, US"smtps") == 0
371   ? US"smtps" : US"smtp";
372 
373 /* Set up the setup entry point, to be called before subprocesses for this
374 transport. */
375 
376 tblock->setup = smtp_transport_setup;
377 
378 /* Complain if any of the timeouts are zero. */
379 
380 if (ob->command_timeout <= 0 || ob->data_timeout <= 0 ||
381     ob->final_timeout <= 0)
382   log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
383     "command, data, or final timeout value is zero for %s transport",
384       tblock->name);
385 
386 /* If hosts_override is set and there are local hosts, set the global
387 flag that stops verify from showing router hosts. */
388 
389 if (ob->hosts_override && ob->hosts) tblock->overrides_hosts = TRUE;
390 
391 /* If there are any fallback hosts listed, build a chain of host items
392 for them, but do not do any lookups at this time. */
393 
394 store_pool = POOL_PERM;
395 host_build_hostlist(&ob->fallback_hostlist, ob->fallback_hosts, FALSE);
396 store_pool = old_pool;
397 }
398 
399 
400 
401 
402 
403 /*************************************************
404 *   Set delivery info into all active addresses  *
405 *************************************************/
406 
407 /* Only addresses whose status is >= PENDING are relevant. A lesser
408 status means that an address is not currently being processed.
409 
410 Arguments:
411   addrlist       points to a chain of addresses
412   errno_value    to put in each address's errno field
413   msg            to put in each address's message field
414   rc             to put in each address's transport_return field
415   pass_message   if TRUE, set the "pass message" flag in the address
416   host           if set, mark addrs as having used this host
417   smtp_greeting  from peer
418   helo_response  from peer
419   start		 points to timestamp of delivery start
420 
421 If errno_value has the special value ERRNO_CONNECTTIMEOUT, ETIMEDOUT is put in
422 the errno field, and RTEF_CTOUT is ORed into the more_errno field, to indicate
423 this particular type of timeout.
424 
425 Returns:       nothing
426 */
427 
428 static void
set_errno(address_item * addrlist,int errno_value,uschar * msg,int rc,BOOL pass_message,host_item * host,const uschar * smtp_greeting,const uschar * helo_response,struct timeval * start)429 set_errno(address_item *addrlist, int errno_value, uschar *msg, int rc,
430   BOOL pass_message, host_item * host,
431 #ifdef EXPERIMENTAL_DSN_INFO
432   const uschar * smtp_greeting, const uschar * helo_response,
433 #endif
434   struct timeval * start
435   )
436 {
437 int orvalue = 0;
438 struct timeval deliver_time;
439 
440 if (errno_value == ERRNO_CONNECTTIMEOUT)
441   {
442   errno_value = ETIMEDOUT;
443   orvalue = RTEF_CTOUT;
444   }
445 timesince(&deliver_time, start);
446 
447 for (address_item * addr = addrlist; addr; addr = addr->next)
448   if (addr->transport_return >= PENDING)
449     {
450     addr->basic_errno = errno_value;
451     addr->more_errno |= orvalue;
452     addr->delivery_time = deliver_time;
453     if (msg)
454       {
455       addr->message = msg;
456       if (pass_message) setflag(addr, af_pass_message);
457       }
458     addr->transport_return = rc;
459     if (host)
460       {
461       addr->host_used = host;
462 #ifdef EXPERIMENTAL_DSN_INFO
463       if (smtp_greeting)
464 	{uschar * s = Ustrchr(smtp_greeting, '\n'); if (s) *s = '\0';}
465       addr->smtp_greeting = smtp_greeting;
466 
467       if (helo_response)
468 	{uschar * s = Ustrchr(helo_response, '\n'); if (s) *s = '\0';}
469       addr->helo_response = helo_response;
470 #endif
471       }
472     }
473 }
474 
475 static void
set_errno_nohost(address_item * addrlist,int errno_value,uschar * msg,int rc,BOOL pass_message,struct timeval * start)476 set_errno_nohost(address_item * addrlist, int errno_value, uschar * msg, int rc,
477   BOOL pass_message, struct timeval * start)
478 {
479 set_errno(addrlist, errno_value, msg, rc, pass_message, NULL,
480 #ifdef EXPERIMENTAL_DSN_INFO
481 	  NULL, NULL,
482 #endif
483 	  start);
484 }
485 
486 
487 /*************************************************
488 *          Check an SMTP response                *
489 *************************************************/
490 
491 /* This function is given an errno code and the SMTP response buffer
492 to analyse, together with the host identification for generating messages. It
493 sets an appropriate message and puts the first digit of the response code into
494 the yield variable. If no response was actually read, a suitable digit is
495 chosen.
496 
497 Arguments:
498   host           the current host, to get its name for messages
499   errno_value    pointer to the errno value
500   more_errno     from the top address for use with ERRNO_FILTER_FAIL
501   buffer         the SMTP response buffer
502   yield          where to put a one-digit SMTP response code
503   message        where to put an error message
504   pass_message   set TRUE if message is an SMTP response
505 
506 Returns:         TRUE if an SMTP "QUIT" command should be sent, else FALSE
507 */
508 
509 static BOOL
check_response(host_item * host,int * errno_value,int more_errno,uschar * buffer,int * yield,uschar ** message,BOOL * pass_message)510 check_response(host_item *host, int *errno_value, int more_errno,
511   uschar *buffer, int *yield, uschar **message, BOOL *pass_message)
512 {
513 uschar * pl = pipelining_active ? US"pipelined " : US"";
514 const uschar * s;
515 
516 *yield = '4';    /* Default setting is to give a temporary error */
517 
518 switch(*errno_value)
519   {
520   case ETIMEDOUT:		/* Handle response timeout */
521     *message = US string_sprintf("SMTP timeout after %s%s",
522 	pl, smtp_command);
523     if (transport_count > 0)
524       *message = US string_sprintf("%s (%d bytes written)", *message,
525 	transport_count);
526     return FALSE;
527 
528   case ERRNO_SMTPFORMAT:	/* Handle malformed SMTP response */
529     s = string_printing(buffer);
530     while (isspace(*s)) s++;
531     *message = *s == 0
532       ? string_sprintf("Malformed SMTP reply (an empty line) "
533 	  "in response to %s%s", pl, smtp_command)
534       : string_sprintf("Malformed SMTP reply in response to %s%s: %s",
535 	  pl, smtp_command, s);
536     return FALSE;
537 
538   case ERRNO_TLSFAILURE:	/* Handle bad first read; can happen with
539 				GnuTLS and TLS1.3 */
540     *message = US"bad first read from TLS conn";
541     return TRUE;
542 
543   case ERRNO_FILTER_FAIL:	/* Handle a failed filter process error;
544 			  can't send QUIT as we mustn't end the DATA. */
545     *message = string_sprintf("transport filter process failed (%d)%s",
546       more_errno,
547       more_errno == EX_EXECFAILED ? ": unable to execute command" : "");
548     return FALSE;
549 
550   case ERRNO_CHHEADER_FAIL:	/* Handle a failed add_headers expansion;
551 			    can't send QUIT as we mustn't end the DATA. */
552     *message =
553       string_sprintf("failed to expand headers_add or headers_remove: %s",
554 	expand_string_message);
555     return FALSE;
556 
557   case ERRNO_WRITEINCOMPLETE:	/* failure to write a complete data block */
558     *message = US"failed to write a data block";
559     return FALSE;
560 
561 #ifdef SUPPORT_I18N
562   case ERRNO_UTF8_FWD: /* no advertised SMTPUTF8, for international message */
563     *message = US"utf8 support required but not offered for forwarding";
564     DEBUG(D_deliver|D_transport) debug_printf("%s\n", *message);
565     return TRUE;
566 #endif
567   }
568 
569 /* Handle error responses from the remote mailer. */
570 
571 if (buffer[0] != 0)
572   {
573   *message = string_sprintf("SMTP error from remote mail server after %s%s: "
574     "%s", pl, smtp_command, s = string_printing(buffer));
575   *pass_message = TRUE;
576   *yield = buffer[0];
577   return TRUE;
578   }
579 
580 /* No data was read. If there is no errno, this must be the EOF (i.e.
581 connection closed) case, which causes deferral. An explicit connection reset
582 error has the same effect. Otherwise, put the host's identity in the message,
583 leaving the errno value to be interpreted as well. In all cases, we have to
584 assume the connection is now dead. */
585 
586 if (*errno_value == 0 || *errno_value == ECONNRESET)
587   {
588   *errno_value = ERRNO_SMTPCLOSED;
589   *message = US string_sprintf("Remote host closed connection "
590     "in response to %s%s", pl, smtp_command);
591   }
592 else
593   *message = US string_sprintf("%s [%s]", host->name, host->address);
594 
595 return FALSE;
596 }
597 
598 
599 
600 /*************************************************
601 *          Write error message to logs           *
602 *************************************************/
603 
604 /* This writes to the main log and to the message log.
605 
606 Arguments:
607   host     the current host
608   detail  the current message (addr_item->message)
609   basic_errno the errno (addr_item->basic_errno)
610 
611 Returns:   nothing
612 */
613 
614 static void
write_logs(const host_item * host,const uschar * suffix,int basic_errno)615 write_logs(const host_item *host, const uschar *suffix, int basic_errno)
616 {
617 gstring * message = LOGGING(outgoing_port)
618   ? string_fmt_append(NULL, "H=%s [%s]:%d", host->name, host->address,
619 		    host->port == PORT_NONE ? 25 : host->port)
620   : string_fmt_append(NULL, "H=%s [%s]", host->name, host->address);
621 
622 if (suffix)
623   {
624   message = string_fmt_append(message, ": %s", suffix);
625   if (basic_errno > 0)
626     message = string_fmt_append(message, ": %s", strerror(basic_errno));
627   }
628 else
629   message = string_fmt_append(message, " %s", exim_errstr(basic_errno));
630 
631 log_write(0, LOG_MAIN, "%s", string_from_gstring(message));
632 deliver_msglog("%s %s\n", tod_stamp(tod_log), message->s);
633 }
634 
635 static void
msglog_line(host_item * host,uschar * message)636 msglog_line(host_item * host, uschar * message)
637 {
638 deliver_msglog("%s H=%s [%s] %s\n", tod_stamp(tod_log),
639   host->name, host->address, message);
640 }
641 
642 
643 
644 #ifndef DISABLE_EVENT
645 /*************************************************
646 *   Post-defer action                            *
647 *************************************************/
648 
649 /* This expands an arbitrary per-transport string.
650    It might, for example, be used to write to the database log.
651 
652 Arguments:
653   addr                  the address item containing error information
654   host                  the current host
655   evstr			the event
656 
657 Returns:   nothing
658 */
659 
660 static void
deferred_event_raise(address_item * addr,host_item * host,uschar * evstr)661 deferred_event_raise(address_item * addr, host_item * host, uschar * evstr)
662 {
663 uschar * action = addr->transport->event_action;
664 const uschar * save_domain;
665 uschar * save_local;
666 
667 if (!action)
668   return;
669 
670 save_domain = deliver_domain;
671 save_local = deliver_localpart;
672 
673 /*XXX would ip & port already be set up? */
674 deliver_host_address = string_copy(host->address);
675 deliver_host_port =    host->port == PORT_NONE ? 25 : host->port;
676 event_defer_errno =    addr->basic_errno;
677 
678 router_name =    addr->router->name;
679 transport_name = addr->transport->name;
680 deliver_domain = addr->domain;
681 deliver_localpart = addr->local_part;
682 
683 (void) event_raise(action, evstr,
684     addr->message
685       ? addr->basic_errno > 0
686 	? string_sprintf("%s: %s", addr->message, strerror(addr->basic_errno))
687 	: string_copy(addr->message)
688       : addr->basic_errno > 0
689 	? string_copy(US strerror(addr->basic_errno))
690 	: NULL);
691 
692 deliver_localpart = save_local;
693 deliver_domain =    save_domain;
694 router_name = transport_name = NULL;
695 }
696 #endif
697 
698 /*************************************************
699 *           Reap SMTP specific responses         *
700 *************************************************/
701 static int
smtp_discard_responses(smtp_context * sx,smtp_transport_options_block * ob,int count)702 smtp_discard_responses(smtp_context * sx, smtp_transport_options_block * ob,
703   int count)
704 {
705 uschar flushbuffer[4096];
706 
707 while (count-- > 0)
708   {
709   if (!smtp_read_response(sx, flushbuffer, sizeof(flushbuffer),
710 	     '2', ob->command_timeout)
711       && (errno != 0 || flushbuffer[0] == 0))
712     break;
713   }
714 return count;
715 }
716 
717 
718 /* Return boolean success */
719 
720 static BOOL
smtp_reap_banner(smtp_context * sx)721 smtp_reap_banner(smtp_context * sx)
722 {
723 BOOL good_response;
724 #if defined(__linux__) && defined(TCP_QUICKACK)
725   {	/* Hack to get QUICKACK disabled; has to be right after 3whs, and has to on->off */
726   int sock = sx->cctx.sock;
727   struct pollfd p = {.fd = sock, .events = POLLOUT};
728   int rc = poll(&p, 1, 1000);
729   (void) setsockopt(sock, IPPROTO_TCP, TCP_QUICKACK, US &on, sizeof(on));
730   (void) setsockopt(sock, IPPROTO_TCP, TCP_QUICKACK, US &off, sizeof(off));
731   }
732 #endif
733 good_response = smtp_read_response(sx, sx->buffer, sizeof(sx->buffer),
734   '2', (SOB sx->conn_args.ob)->command_timeout);
735 #ifdef EXPERIMENTAL_DSN_INFO
736 sx->smtp_greeting = string_copy(sx->buffer);
737 #endif
738 return good_response;
739 }
740 
741 static BOOL
smtp_reap_ehlo(smtp_context * sx)742 smtp_reap_ehlo(smtp_context * sx)
743 {
744 if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2',
745        (SOB sx->conn_args.ob)->command_timeout))
746   {
747   if (errno != 0 || sx->buffer[0] == 0 || sx->lmtp)
748     {
749 #ifdef EXPERIMENTAL_DSN_INFO
750     sx->helo_response = string_copy(sx->buffer);
751 #endif
752     return FALSE;
753     }
754   sx->esmtp = FALSE;
755   }
756 #ifdef EXPERIMENTAL_DSN_INFO
757 sx->helo_response = string_copy(sx->buffer);
758 #endif
759 #ifndef DISABLE_EVENT
760 (void) event_raise(sx->conn_args.tblock->event_action,
761   US"smtp:ehlo", sx->buffer);
762 #endif
763 return TRUE;
764 }
765 
766 
767 /******************************************************************************/
768 
769 #ifdef EXPERIMENTAL_ESMTP_LIMITS
770 /* If TLS, or TLS not offered, called with the EHLO response in the buffer.
771 Check it for a LIMITS keyword and parse values into the smtp context structure.
772 
773 We don't bother with peers that we won't talk TLS to, even though they can,
774 just ignore their LIMITS advice (if any) and treat them as if they do not.
775 This saves us dealing with a duplicate set of values. */
776 
777 static void
ehlo_response_limits_read(smtp_context * sx)778 ehlo_response_limits_read(smtp_context * sx)
779 {
780 int ovec[3];	/* results vector for a main-match only */
781 
782 /* matches up to just after the first space after the keyword */
783 
784 if (pcre_exec(regex_LIMITS, NULL, CS sx->buffer, Ustrlen(sx->buffer),
785 	      0, PCRE_EOPT, ovec, nelem(ovec)) >= 0)
786   for (const uschar * s = sx->buffer + ovec[1]; *s; )
787     {
788     while (isspace(*s)) s++;
789     if (*s == '\n') break;
790 
791     if (strncmpic(s, US"MAILMAX=", 8) == 0)
792       {
793       sx->peer_limit_mail = atoi(CS (s += 8));
794       while (isdigit(*s)) s++;
795       }
796     else if (strncmpic(s, US"RCPTMAX=", 8) == 0)
797       {
798       sx->peer_limit_rcpt = atoi(CS (s += 8));
799       while (isdigit(*s)) s++;
800       }
801     else if (strncmpic(s, US"RCPTDOMAINMAX=", 14) == 0)
802       {
803       sx->peer_limit_rcptdom = atoi(CS (s += 14));
804       while (isdigit(*s)) s++;
805       }
806     else
807       while (*s && !isspace(*s)) s++;
808     }
809 }
810 
811 /* Apply given values to the current connection */
812 static void
ehlo_limits_apply(smtp_context * sx,unsigned limit_mail,unsigned limit_rcpt,unsigned limit_rcptdom)813 ehlo_limits_apply(smtp_context * sx,
814   unsigned limit_mail, unsigned limit_rcpt, unsigned limit_rcptdom)
815 {
816 if (limit_mail && limit_mail < sx->max_mail) sx->max_mail = limit_mail;
817 if (limit_rcpt && limit_rcpt < sx->max_rcpt) sx->max_rcpt = limit_rcpt;
818 if (limit_rcptdom)
819   {
820   DEBUG(D_transport) debug_printf("will treat as !multi_domain\n");
821   sx->single_rcpt_domain = TRUE;
822   }
823 }
824 
825 /* Apply values from EHLO-resp to the current connection */
826 static void
ehlo_response_limits_apply(smtp_context * sx)827 ehlo_response_limits_apply(smtp_context * sx)
828 {
829 ehlo_limits_apply(sx, sx->peer_limit_mail, sx->peer_limit_rcpt,
830   sx->peer_limit_rcptdom);
831 }
832 
833 /* Apply values read from cache to the current connection */
834 static void
ehlo_cache_limits_apply(smtp_context * sx)835 ehlo_cache_limits_apply(smtp_context * sx)
836 {
837 ehlo_limits_apply(sx, sx->ehlo_resp.limit_mail, sx->ehlo_resp.limit_rcpt,
838   sx->ehlo_resp.limit_rcptdom);
839 }
840 #endif
841 
842 /******************************************************************************/
843 
844 #ifndef DISABLE_PIPE_CONNECT
845 static uschar *
ehlo_cache_key(const smtp_context * sx)846 ehlo_cache_key(const smtp_context * sx)
847 {
848 host_item * host = sx->conn_args.host;
849 return Ustrchr(host->address, ':')
850   ? string_sprintf("[%s]:%d.EHLO", host->address,
851     host->port == PORT_NONE ? sx->port : host->port)
852   : string_sprintf("%s:%d.EHLO", host->address,
853     host->port == PORT_NONE ? sx->port : host->port);
854 }
855 
856 /* Cache EHLO-response info for use by early-pipe.
857 Called
858 - During a normal flow on EHLO response (either cleartext or under TLS),
859   when we are willing to do PIPE_CONNECT and it is offered
860 - During an early-pipe flow on receiving the actual EHLO response and noting
861   disparity versus the cached info used, when PIPE_CONNECT is still being offered
862 
863 We assume that suitable values have been set in the sx.ehlo_resp structure for
864 features and auths; we handle the copy of limits. */
865 
866 static void
write_ehlo_cache_entry(smtp_context * sx)867 write_ehlo_cache_entry(smtp_context * sx)
868 {
869 open_db dbblock, * dbm_file;
870 
871 #ifdef EXPERIMENTAL_ESMTP_LIMITS
872 sx->ehlo_resp.limit_mail = sx->peer_limit_mail;
873 sx->ehlo_resp.limit_rcpt = sx->peer_limit_rcpt;
874 sx->ehlo_resp.limit_rcptdom = sx->peer_limit_rcptdom;
875 #endif
876 
877 if ((dbm_file = dbfn_open(US"misc", O_RDWR, &dbblock, TRUE, TRUE)))
878   {
879   uschar * ehlo_resp_key = ehlo_cache_key(sx);
880   dbdata_ehlo_resp er = { .data = sx->ehlo_resp };
881 
882   HDEBUG(D_transport)
883 #ifdef EXPERIMENTAL_ESMTP_LIMITS
884     if (sx->ehlo_resp.limit_mail || sx->ehlo_resp.limit_rcpt || sx->ehlo_resp.limit_rcptdom)
885       debug_printf("writing clr %04x/%04x cry %04x/%04x lim %05d/%05d/%05d\n",
886 	sx->ehlo_resp.cleartext_features, sx->ehlo_resp.cleartext_auths,
887 	sx->ehlo_resp.crypted_features, sx->ehlo_resp.crypted_auths,
888 	sx->ehlo_resp.limit_mail, sx->ehlo_resp.limit_rcpt,
889 	sx->ehlo_resp.limit_rcptdom);
890     else
891 #endif
892       debug_printf("writing clr %04x/%04x cry %04x/%04x\n",
893 	sx->ehlo_resp.cleartext_features, sx->ehlo_resp.cleartext_auths,
894 	sx->ehlo_resp.crypted_features, sx->ehlo_resp.crypted_auths);
895 
896   dbfn_write(dbm_file, ehlo_resp_key, &er, (int)sizeof(er));
897   dbfn_close(dbm_file);
898   }
899 }
900 
901 static void
invalidate_ehlo_cache_entry(smtp_context * sx)902 invalidate_ehlo_cache_entry(smtp_context * sx)
903 {
904 open_db dbblock, * dbm_file;
905 
906 if (  sx->early_pipe_active
907    && (dbm_file = dbfn_open(US"misc", O_RDWR, &dbblock, TRUE, TRUE)))
908   {
909   uschar * ehlo_resp_key = ehlo_cache_key(sx);
910   dbfn_delete(dbm_file, ehlo_resp_key);
911   dbfn_close(dbm_file);
912   }
913 }
914 
915 static BOOL
read_ehlo_cache_entry(smtp_context * sx)916 read_ehlo_cache_entry(smtp_context * sx)
917 {
918 open_db dbblock;
919 open_db * dbm_file;
920 
921 if (!(dbm_file = dbfn_open(US"misc", O_RDONLY, &dbblock, FALSE, TRUE)))
922   { DEBUG(D_transport) debug_printf("ehlo-cache: no misc DB\n"); }
923 else
924   {
925   uschar * ehlo_resp_key = ehlo_cache_key(sx);
926   dbdata_ehlo_resp * er;
927 
928   if (!(er = dbfn_read_enforce_length(dbm_file, ehlo_resp_key, sizeof(dbdata_ehlo_resp))))
929     { DEBUG(D_transport) debug_printf("no ehlo-resp record\n"); }
930   else if (time(NULL) - er->time_stamp > retry_data_expire)
931     {
932     DEBUG(D_transport) debug_printf("ehlo-resp record too old\n");
933     dbfn_close(dbm_file);
934     if ((dbm_file = dbfn_open(US"misc", O_RDWR, &dbblock, TRUE, TRUE)))
935       dbfn_delete(dbm_file, ehlo_resp_key);
936     }
937   else
938     {
939     DEBUG(D_transport)
940 #ifdef EXPERIMENTAL_ESMTP_LIMITS
941       if (er->data.limit_mail || er->data.limit_rcpt || er->data.limit_rcptdom)
942 	debug_printf("EHLO response bits from cache:"
943 	  " cleartext 0x%04x/0x%04x crypted 0x%04x/0x%04x lim %05d/%05d/%05d\n",
944 	  er->data.cleartext_features, er->data.cleartext_auths,
945 	  er->data.crypted_features, er->data.crypted_auths,
946 	  er->data.limit_mail, er->data.limit_rcpt, er->data.limit_rcptdom);
947       else
948 #endif
949 	debug_printf("EHLO response bits from cache:"
950 	  " cleartext 0x%04x/0x%04x crypted 0x%04x/0x%04x\n",
951 	  er->data.cleartext_features, er->data.cleartext_auths,
952 	  er->data.crypted_features, er->data.crypted_auths);
953 
954     sx->ehlo_resp = er->data;
955 #ifdef EXPERIMENTAL_ESMTP_LIMITS
956     ehlo_cache_limits_apply(sx);
957 #endif
958     dbfn_close(dbm_file);
959     return TRUE;
960     }
961   dbfn_close(dbm_file);
962   }
963 return FALSE;
964 }
965 
966 
967 
968 /* Return an auths bitmap for the set of AUTH methods offered by the server
969 which match our authenticators. */
970 
971 static unsigned short
study_ehlo_auths(smtp_context * sx)972 study_ehlo_auths(smtp_context * sx)
973 {
974 uschar * names;
975 auth_instance * au;
976 uschar authnum;
977 unsigned short authbits = 0;
978 
979 if (!sx->esmtp) return 0;
980 if (!regex_AUTH) regex_AUTH = regex_must_compile(AUTHS_REGEX, FALSE, TRUE);
981 if (!regex_match_and_setup(regex_AUTH, sx->buffer, 0, -1)) return 0;
982 expand_nmax = -1;						/* reset */
983 names = string_copyn(expand_nstring[1], expand_nlength[1]);
984 
985 for (au = auths, authnum = 0; au; au = au->next, authnum++) if (au->client)
986   {
987   const uschar * list = names;
988   uschar * s;
989   for (int sep = ' '; s = string_nextinlist(&list, &sep, NULL, 0); )
990     if (strcmpic(au->public_name, s) == 0)
991       { authbits |= BIT(authnum); break; }
992   }
993 
994 DEBUG(D_transport)
995   debug_printf("server offers %s AUTH, methods '%s', bitmap 0x%04x\n",
996     tls_out.active.sock >= 0 ? "crypted" : "plaintext", names, authbits);
997 
998 if (tls_out.active.sock >= 0)
999   sx->ehlo_resp.crypted_auths = authbits;
1000 else
1001   sx->ehlo_resp.cleartext_auths = authbits;
1002 return authbits;
1003 }
1004 
1005 
1006 
1007 
1008 /* Wait for and check responses for early-pipelining.
1009 
1010 Called from the lower-level smtp_read_response() function
1011 used for general code that assume synchronisation, if context
1012 flags indicate outstanding early-pipelining commands.  Also
1013 called fom sync_responses() which handles pipelined commands.
1014 
1015 Arguments:
1016  sx	smtp connection context
1017  countp	number of outstanding responses, adjusted on return
1018 
1019 Return:
1020  OK	all well
1021  DEFER	error on first read of TLS'd conn
1022  FAIL	SMTP error in response
1023 */
1024 int
smtp_reap_early_pipe(smtp_context * sx,int * countp)1025 smtp_reap_early_pipe(smtp_context * sx, int * countp)
1026 {
1027 BOOL pending_BANNER = sx->pending_BANNER;
1028 BOOL pending_EHLO = sx->pending_EHLO;
1029 int rc = FAIL;
1030 
1031 sx->pending_BANNER = FALSE;	/* clear early to avoid recursion */
1032 sx->pending_EHLO = FALSE;
1033 
1034 if (pending_BANNER)
1035   {
1036   DEBUG(D_transport) debug_printf("%s expect banner\n", __FUNCTION__);
1037   (*countp)--;
1038   if (!smtp_reap_banner(sx))
1039     {
1040     DEBUG(D_transport) debug_printf("bad banner\n");
1041     if (tls_out.active.sock >= 0) rc = DEFER;
1042     goto fail;
1043     }
1044   }
1045 
1046 if (pending_EHLO)
1047   {
1048   unsigned peer_offered;
1049   unsigned short authbits = 0, * ap;
1050 
1051   DEBUG(D_transport) debug_printf("%s expect ehlo\n", __FUNCTION__);
1052   (*countp)--;
1053   if (!smtp_reap_ehlo(sx))
1054     {
1055     DEBUG(D_transport) debug_printf("bad response for EHLO\n");
1056     if (tls_out.active.sock >= 0) rc = DEFER;
1057     goto fail;
1058     }
1059 
1060   /* Compare the actual EHLO response extensions and AUTH methods to the cached
1061   value we assumed; on difference, dump or rewrite the cache and arrange for a
1062   retry. */
1063 
1064   ap = tls_out.active.sock < 0
1065       ? &sx->ehlo_resp.cleartext_auths : &sx->ehlo_resp.crypted_auths;
1066 
1067   peer_offered = ehlo_response(sx->buffer,
1068 	  (tls_out.active.sock < 0 ?  OPTION_TLS : 0)
1069 	| OPTION_CHUNKING | OPTION_PRDR | OPTION_DSN | OPTION_PIPE | OPTION_SIZE
1070 	| OPTION_UTF8 | OPTION_EARLY_PIPE
1071 	);
1072 #ifdef EXPERIMENTAL_ESMTP_LIMITS
1073   if (tls_out.active.sock >= 0 || !(peer_offered & OPTION_TLS))
1074     ehlo_response_limits_read(sx);
1075 #endif
1076   if (  peer_offered != sx->peer_offered
1077      || (authbits = study_ehlo_auths(sx)) != *ap)
1078     {
1079     HDEBUG(D_transport)
1080       debug_printf("EHLO %s extensions changed, 0x%04x/0x%04x -> 0x%04x/0x%04x\n",
1081 		    tls_out.active.sock < 0 ? "cleartext" : "crypted",
1082 		    sx->peer_offered, *ap, peer_offered, authbits);
1083     if (peer_offered & OPTION_EARLY_PIPE)
1084       {
1085       *(tls_out.active.sock < 0
1086 	? &sx->ehlo_resp.cleartext_features : &sx->ehlo_resp.crypted_features) =
1087 	  peer_offered;
1088       *ap = authbits;
1089       write_ehlo_cache_entry(sx);
1090       }
1091     else
1092       invalidate_ehlo_cache_entry(sx);
1093 
1094     return OK;		/* just carry on */
1095     }
1096 #ifdef EXPERIMENTAL_ESMTP_LIMITS
1097     /* If we are handling LIMITS, compare the actual EHLO LIMITS values with the
1098     cached values and invalidate cache if different.  OK to carry on with
1099     connect since values are advisory. */
1100     {
1101     if (  (tls_out.active.sock >= 0 || !(peer_offered & OPTION_TLS))
1102        && (  sx->peer_limit_mail != sx->ehlo_resp.limit_mail
1103           || sx->peer_limit_rcpt != sx->ehlo_resp.limit_rcpt
1104           || sx->peer_limit_rcptdom != sx->ehlo_resp.limit_rcptdom
1105        )  )
1106       {
1107       HDEBUG(D_transport)
1108 	{
1109 	debug_printf("EHLO LIMITS changed:");
1110 	if (sx->peer_limit_mail != sx->ehlo_resp.limit_mail)
1111 	  debug_printf(" MAILMAX %u -> %u\n", sx->ehlo_resp.limit_mail, sx->peer_limit_mail);
1112 	else if (sx->peer_limit_rcpt != sx->ehlo_resp.limit_rcpt)
1113 	  debug_printf(" RCPTMAX %u -> %u\n", sx->ehlo_resp.limit_rcpt, sx->peer_limit_rcpt);
1114 	else
1115 	  debug_printf(" RCPTDOMAINMAX %u -> %u\n", sx->ehlo_resp.limit_rcptdom, sx->peer_limit_rcptdom);
1116 	}
1117       invalidate_ehlo_cache_entry(sx);
1118       }
1119     }
1120 #endif
1121   }
1122 return OK;
1123 
1124 fail:
1125   invalidate_ehlo_cache_entry(sx);
1126   (void) smtp_discard_responses(sx, sx->conn_args.ob, *countp);
1127   return rc;
1128 }
1129 #endif	/*!DISABLE_PIPE_CONNECT*/
1130 
1131 
1132 /*************************************************
1133 *           Synchronize SMTP responses           *
1134 *************************************************/
1135 
1136 /* This function is called from smtp_deliver() to receive SMTP responses from
1137 the server, and match them up with the commands to which they relate. When
1138 PIPELINING is not in use, this function is called after every command, and is
1139 therefore somewhat over-engineered, but it is simpler to use a single scheme
1140 that works both with and without PIPELINING instead of having two separate sets
1141 of code.
1142 
1143 The set of commands that are buffered up with pipelining may start with MAIL
1144 and may end with DATA; in between are RCPT commands that correspond to the
1145 addresses whose status is PENDING_DEFER. All other commands (STARTTLS, AUTH,
1146 etc.) are never buffered.
1147 
1148 Errors after MAIL or DATA abort the whole process leaving the response in the
1149 buffer. After MAIL, pending responses are flushed, and the original command is
1150 re-instated in big_buffer for error messages. For RCPT commands, the remote is
1151 permitted to reject some recipient addresses while accepting others. However
1152 certain errors clearly abort the whole process. Set the value in
1153 transport_return to PENDING_OK if the address is accepted. If there is a
1154 subsequent general error, it will get reset accordingly. If not, it will get
1155 converted to OK at the end.
1156 
1157 Arguments:
1158   sx		    smtp connection context
1159   count             the number of responses to read
1160   pending_DATA      0 if last command sent was not DATA
1161                    +1 if previously had a good recipient
1162                    -1 if not previously had a good recipient
1163 
1164 Returns:      3 if at least one address had 2xx and one had 5xx
1165               2 if at least one address had 5xx but none had 2xx
1166               1 if at least one host had a 2xx response, but none had 5xx
1167               0 no address had 2xx or 5xx but no errors (all 4xx, or just DATA)
1168              -1 timeout while reading RCPT response
1169              -2 I/O or other non-response error for RCPT
1170              -3 DATA or MAIL failed - errno and buffer set
1171 	     -4 banner or EHLO failed (early-pipelining)
1172 	     -5 banner or EHLO failed (early-pipelining, TLS)
1173 */
1174 
1175 static int
sync_responses(smtp_context * sx,int count,int pending_DATA)1176 sync_responses(smtp_context * sx, int count, int pending_DATA)
1177 {
1178 address_item * addr = sx->sync_addr;
1179 smtp_transport_options_block * ob = sx->conn_args.ob;
1180 int yield = 0;
1181 
1182 #ifndef DISABLE_PIPE_CONNECT
1183 int rc;
1184 if ((rc = smtp_reap_early_pipe(sx, &count)) != OK)
1185   return rc == FAIL ? -4 : -5;
1186 #endif
1187 
1188 /* Handle the response for a MAIL command. On error, reinstate the original
1189 command in big_buffer for error message use, and flush any further pending
1190 responses before returning, except after I/O errors and timeouts. */
1191 
1192 if (sx->pending_MAIL)
1193   {
1194   DEBUG(D_transport) debug_printf("%s expect mail\n", __FUNCTION__);
1195   count--;
1196   sx->pending_MAIL = sx->RCPT_452 = FALSE;
1197   if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer),
1198 			  '2', ob->command_timeout))
1199     {
1200     DEBUG(D_transport) debug_printf("bad response for MAIL\n");
1201     Ustrcpy(big_buffer, mail_command);  /* Fits, because it came from there! */
1202     if (errno == ERRNO_TLSFAILURE)
1203       return -5;
1204     if (errno == 0 && sx->buffer[0] != 0)
1205       {
1206       int save_errno = 0;
1207       if (sx->buffer[0] == '4')
1208         {
1209         save_errno = ERRNO_MAIL4XX;
1210         addr->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
1211         }
1212       count = smtp_discard_responses(sx, ob, count);
1213       errno = save_errno;
1214       }
1215 
1216     if (pending_DATA) count--;  /* Number of RCPT responses to come */
1217     while (count-- > 0)		/* Mark any pending addrs with the host used */
1218       {
1219       while (addr->transport_return != PENDING_DEFER) addr = addr->next;
1220       addr->host_used = sx->conn_args.host;
1221       addr = addr->next;
1222       }
1223     return -3;
1224     }
1225   }
1226 
1227 if (pending_DATA) count--;  /* Number of RCPT responses to come */
1228 
1229 /* Read and handle the required number of RCPT responses, matching each one up
1230 with an address by scanning for the next address whose status is PENDING_DEFER.
1231 */
1232 
1233 while (count-- > 0)
1234   {
1235   while (addr->transport_return != PENDING_DEFER)
1236     if (!(addr = addr->next))
1237       return -2;
1238 
1239   /* The address was accepted */
1240   addr->host_used = sx->conn_args.host;
1241 
1242   DEBUG(D_transport) debug_printf("%s expect rcpt for %s\n", __FUNCTION__, addr->address);
1243   if (smtp_read_response(sx, sx->buffer, sizeof(sx->buffer),
1244 			  '2', ob->command_timeout))
1245     {
1246     yield |= 1;
1247     addr->transport_return = PENDING_OK;
1248 
1249     /* If af_dr_retry_exists is set, there was a routing delay on this address;
1250     ensure that any address-specific retry record is expunged. We do this both
1251     for the basic key and for the version that also includes the sender. */
1252 
1253     if (testflag(addr, af_dr_retry_exists))
1254       {
1255       uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
1256         sender_address);
1257       retry_add_item(addr, altkey, rf_delete);
1258       retry_add_item(addr, addr->address_retry_key, rf_delete);
1259       }
1260     }
1261 
1262   /* Error on first TLS read */
1263 
1264   else if (errno == ERRNO_TLSFAILURE)
1265     return -5;
1266 
1267   /* Timeout while reading the response */
1268 
1269   else if (errno == ETIMEDOUT)
1270     {
1271     uschar *message = string_sprintf("SMTP timeout after RCPT TO:<%s>",
1272 		transport_rcpt_address(addr, sx->conn_args.tblock->rcpt_include_affixes));
1273     set_errno_nohost(sx->first_addr, ETIMEDOUT, message, DEFER, FALSE, &sx->delivery_start);
1274     retry_add_item(addr, addr->address_retry_key, 0);
1275     update_waiting = FALSE;
1276     return -1;
1277     }
1278 
1279   /* Handle other errors in obtaining an SMTP response by returning -1. This
1280   will cause all the addresses to be deferred. Restore the SMTP command in
1281   big_buffer for which we are checking the response, so the error message
1282   makes sense. */
1283 
1284   else if (errno != 0 || sx->buffer[0] == 0)
1285     {
1286     gstring gs = { .size = big_buffer_size, .ptr = 0, .s = big_buffer }, * g = &gs;
1287 
1288     /* Use taint-unchecked routines for writing into big_buffer, trusting
1289     that we'll never expand it. */
1290 
1291     g = string_fmt_append_f(g, SVFMT_TAINT_NOCHK, "RCPT TO:<%s>",
1292       transport_rcpt_address(addr, sx->conn_args.tblock->rcpt_include_affixes));
1293     string_from_gstring(g);
1294     return -2;
1295     }
1296 
1297   /* Handle SMTP permanent and temporary response codes. */
1298 
1299   else
1300     {
1301     addr->message =
1302       string_sprintf("SMTP error from remote mail server after RCPT TO:<%s>: "
1303 	"%s", transport_rcpt_address(addr, sx->conn_args.tblock->rcpt_include_affixes),
1304 	string_printing(sx->buffer));
1305     setflag(addr, af_pass_message);
1306     if (!sx->verify)
1307       msglog_line(sx->conn_args.host, addr->message);
1308 
1309     /* The response was 5xx */
1310 
1311     if (sx->buffer[0] == '5')
1312       {
1313       addr->transport_return = FAIL;
1314       yield |= 2;
1315       }
1316 
1317     /* The response was 4xx */
1318 
1319     else
1320       {
1321       addr->transport_return = DEFER;
1322       addr->basic_errno = ERRNO_RCPT4XX;
1323       addr->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
1324 
1325       if (!sx->verify)
1326 	{
1327 #ifndef DISABLE_EVENT
1328 	event_defer_errno = addr->more_errno;
1329 	msg_event_raise(US"msg:rcpt:host:defer", addr);
1330 #endif
1331 	/* If a 452 and we've had at least one 2xx or 5xx, set next_addr to the
1332 	start point for another MAIL command. */
1333 
1334 	if (addr->more_errno >> 8 == 52  &&  yield & 3)
1335 	  {
1336 	  if (!sx->RCPT_452)		/* initialised at MAIL-ack above */
1337 	    {
1338 	    DEBUG(D_transport)
1339 	      debug_printf("%s: seen first 452 too-many-rcpts\n", __FUNCTION__);
1340 	    sx->RCPT_452 = TRUE;
1341 	    sx->next_addr = addr;
1342 	    }
1343 	  addr->transport_return = PENDING_DEFER;
1344 	  addr->basic_errno = 0;
1345 	  }
1346 	else
1347 	  {
1348 	  /* Log temporary errors if there are more hosts to be tried.
1349 	  If not, log this last one in the == line. */
1350 
1351 	  if (sx->conn_args.host->next)
1352 	    if (LOGGING(outgoing_port))
1353 	      log_write(0, LOG_MAIN, "H=%s [%s]:%d %s", sx->conn_args.host->name,
1354 		sx->conn_args.host->address,
1355 		sx->port == PORT_NONE ? 25 : sx->port, addr->message);
1356 	    else
1357 	      log_write(0, LOG_MAIN, "H=%s [%s]: %s", sx->conn_args.host->name,
1358 		sx->conn_args.host->address, addr->message);
1359 
1360 #ifndef DISABLE_EVENT
1361 	  else
1362 	    msg_event_raise(US"msg:rcpt:defer", addr);
1363 #endif
1364 
1365 	  /* Do not put this message on the list of those waiting for specific
1366 	  hosts, as otherwise it is likely to be tried too often. */
1367 
1368 	  update_waiting = FALSE;
1369 
1370 	  /* Add a retry item for the address so that it doesn't get tried again
1371 	  too soon. If address_retry_include_sender is true, add the sender address
1372 	  to the retry key. */
1373 
1374 	  retry_add_item(addr,
1375 	    ob->address_retry_include_sender
1376 	      ? string_sprintf("%s:<%s>", addr->address_retry_key, sender_address)
1377 	      : addr->address_retry_key,
1378 	    0);
1379 	  }
1380 	}
1381       }
1382     }
1383   if (count && !(addr = addr->next))
1384     return -2;
1385   }       /* Loop for next RCPT response */
1386 
1387 /* Update where to start at for the next block of responses, unless we
1388 have already handled all the addresses. */
1389 
1390 if (addr) sx->sync_addr = addr->next;
1391 
1392 /* Handle a response to DATA. If we have not had any good recipients, either
1393 previously or in this block, the response is ignored. */
1394 
1395 if (pending_DATA != 0)
1396   {
1397   DEBUG(D_transport) debug_printf("%s expect data\n", __FUNCTION__);
1398   if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer),
1399 			'3', ob->command_timeout))
1400     {
1401     int code;
1402     uschar *msg;
1403     BOOL pass_message;
1404 
1405     if (errno == ERRNO_TLSFAILURE)	/* Error on first TLS read */
1406       return -5;
1407 
1408     if (pending_DATA > 0 || (yield & 1) != 0)
1409       {
1410       if (errno == 0 && sx->buffer[0] == '4')
1411 	{
1412 	errno = ERRNO_DATA4XX;
1413 	sx->first_addr->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
1414 	}
1415       return -3;
1416       }
1417     (void)check_response(sx->conn_args.host, &errno, 0, sx->buffer, &code, &msg, &pass_message);
1418     DEBUG(D_transport) debug_printf("%s\nerror for DATA ignored: pipelining "
1419       "is in use and there were no good recipients\n", msg);
1420     }
1421   }
1422 
1423 /* All responses read and handled; MAIL (if present) received 2xx and DATA (if
1424 present) received 3xx. If any RCPTs were handled and yielded anything other
1425 than 4xx, yield will be set non-zero. */
1426 
1427 return yield;
1428 }
1429 
1430 
1431 
1432 
1433 
1434 /* Try an authenticator's client entry */
1435 
1436 static int
try_authenticator(smtp_context * sx,auth_instance * au)1437 try_authenticator(smtp_context * sx, auth_instance * au)
1438 {
1439 smtp_transport_options_block * ob = sx->conn_args.ob;	/* transport options */
1440 host_item * host = sx->conn_args.host;			/* host to deliver to */
1441 int rc;
1442 
1443 sx->outblock.authenticating = TRUE;
1444 rc = (au->info->clientcode)(au, sx, ob->command_timeout,
1445 			    sx->buffer, sizeof(sx->buffer));
1446 sx->outblock.authenticating = FALSE;
1447 DEBUG(D_transport) debug_printf("%s authenticator yielded %d\n", au->name, rc);
1448 
1449 /* A temporary authentication failure must hold up delivery to
1450 this host. After a permanent authentication failure, we carry on
1451 to try other authentication methods. If all fail hard, try to
1452 deliver the message unauthenticated unless require_auth was set. */
1453 
1454 switch(rc)
1455   {
1456   case OK:
1457     f.smtp_authenticated = TRUE;   /* stops the outer loop */
1458     client_authenticator = au->name;
1459     if (au->set_client_id)
1460       client_authenticated_id = expand_string(au->set_client_id);
1461     break;
1462 
1463   /* Failure after writing a command */
1464 
1465   case FAIL_SEND:
1466     return FAIL_SEND;
1467 
1468   /* Failure after reading a response */
1469 
1470   case FAIL:
1471     if (errno != 0 || sx->buffer[0] != '5') return FAIL;
1472     log_write(0, LOG_MAIN, "%s authenticator failed H=%s [%s] %s",
1473       au->name, host->name, host->address, sx->buffer);
1474     break;
1475 
1476   /* Failure by some other means. In effect, the authenticator
1477   decided it wasn't prepared to handle this case. Typically this
1478   is the result of "fail" in an expansion string. Do we need to
1479   log anything here? Feb 2006: a message is now put in the buffer
1480   if logging is required. */
1481 
1482   case CANCELLED:
1483     if (*sx->buffer != 0)
1484       log_write(0, LOG_MAIN, "%s authenticator cancelled "
1485 	"authentication H=%s [%s] %s", au->name, host->name,
1486 	host->address, sx->buffer);
1487     break;
1488 
1489   /* Internal problem, message in buffer. */
1490 
1491   case ERROR:
1492     set_errno_nohost(sx->addrlist, ERRNO_AUTHPROB, string_copy(sx->buffer),
1493 	      DEFER, FALSE, &sx->delivery_start);
1494     return ERROR;
1495   }
1496 return OK;
1497 }
1498 
1499 
1500 
1501 
1502 /* Do the client side of smtp-level authentication.
1503 
1504 Arguments:
1505   sx		smtp connection context
1506 
1507 sx->buffer should have the EHLO response from server (gets overwritten)
1508 
1509 Returns:
1510   OK			Success, or failed (but not required): global "smtp_authenticated" set
1511   DEFER			Failed authentication (and was required)
1512   ERROR			Internal problem
1513 
1514   FAIL_SEND		Failed communications - transmit
1515   FAIL			- response
1516 */
1517 
1518 static int
smtp_auth(smtp_context * sx)1519 smtp_auth(smtp_context * sx)
1520 {
1521 host_item * host = sx->conn_args.host;			/* host to deliver to */
1522 smtp_transport_options_block * ob = sx->conn_args.ob;	/* transport options */
1523 int require_auth = verify_check_given_host(CUSS &ob->hosts_require_auth, host);
1524 #ifndef DISABLE_PIPE_CONNECT
1525 unsigned short authbits = tls_out.active.sock >= 0
1526       ? sx->ehlo_resp.crypted_auths : sx->ehlo_resp.cleartext_auths;
1527 #endif
1528 uschar * fail_reason = US"server did not advertise AUTH support";
1529 
1530 f.smtp_authenticated = FALSE;
1531 client_authenticator = client_authenticated_id = client_authenticated_sender = NULL;
1532 
1533 if (!regex_AUTH)
1534   regex_AUTH = regex_must_compile(AUTHS_REGEX, FALSE, TRUE);
1535 
1536 /* Is the server offering AUTH? */
1537 
1538 if (  sx->esmtp
1539    &&
1540 #ifndef DISABLE_PIPE_CONNECT
1541       sx->early_pipe_active ? authbits
1542       :
1543 #endif
1544 	regex_match_and_setup(regex_AUTH, sx->buffer, 0, -1)
1545    )
1546   {
1547   uschar * names = NULL;
1548   expand_nmax = -1;                          /* reset */
1549 
1550 #ifndef DISABLE_PIPE_CONNECT
1551   if (!sx->early_pipe_active)
1552 #endif
1553     names = string_copyn(expand_nstring[1], expand_nlength[1]);
1554 
1555   /* Must not do this check until after we have saved the result of the
1556   regex match above as the check could be another RE. */
1557 
1558   if (  require_auth == OK
1559      || verify_check_given_host(CUSS &ob->hosts_try_auth, host) == OK)
1560     {
1561     DEBUG(D_transport) debug_printf("scanning authentication mechanisms\n");
1562     fail_reason = US"no common mechanisms were found";
1563 
1564 #ifndef DISABLE_PIPE_CONNECT
1565     if (sx->early_pipe_active)
1566       {
1567       /* Scan our authenticators (which support use by a client and were offered
1568       by the server (checked at cache-write time)), not suppressed by
1569       client_condition.  If one is found, attempt to authenticate by calling its
1570       client function.  We are limited to supporting up to 16 authenticator
1571       public-names by the number of bits in a short. */
1572 
1573       auth_instance * au;
1574       uschar bitnum;
1575       int rc;
1576 
1577       for (bitnum = 0, au = auths;
1578 	   !f.smtp_authenticated && au && bitnum < 16;
1579 	   bitnum++, au = au->next) if (authbits & BIT(bitnum))
1580 	{
1581 	if (  au->client_condition
1582 	   && !expand_check_condition(au->client_condition, au->name,
1583                    US"client authenticator"))
1584 	  {
1585 	  DEBUG(D_transport) debug_printf("skipping %s authenticator: %s\n",
1586 	    au->name, "client_condition is false");
1587 	  continue;
1588 	  }
1589 
1590 	/* Found data for a listed mechanism. Call its client entry. Set
1591 	a flag in the outblock so that data is overwritten after sending so
1592 	that reflections don't show it. */
1593 
1594 	fail_reason = US"authentication attempt(s) failed";
1595 
1596 	if ((rc = try_authenticator(sx, au)) != OK)
1597 	  return rc;
1598 	}
1599       }
1600     else
1601 #endif
1602 
1603     /* Scan the configured authenticators looking for one which is configured
1604     for use as a client, which is not suppressed by client_condition, and
1605     whose name matches an authentication mechanism supported by the server.
1606     If one is found, attempt to authenticate by calling its client function.
1607     */
1608 
1609     for (auth_instance * au = auths; !f.smtp_authenticated && au; au = au->next)
1610       {
1611       uschar *p = names;
1612 
1613       if (  !au->client
1614          || (   au->client_condition
1615 	    &&  !expand_check_condition(au->client_condition, au->name,
1616 		   US"client authenticator")))
1617 	{
1618 	DEBUG(D_transport) debug_printf("skipping %s authenticator: %s\n",
1619 	  au->name,
1620 	  (au->client)? "client_condition is false" :
1621 			"not configured as a client");
1622 	continue;
1623 	}
1624 
1625       /* Loop to scan supported server mechanisms */
1626 
1627       while (*p)
1628 	{
1629 	int len = Ustrlen(au->public_name);
1630 	int rc;
1631 
1632 	while (isspace(*p)) p++;
1633 
1634 	if (strncmpic(au->public_name, p, len) != 0 ||
1635 	    (p[len] != 0 && !isspace(p[len])))
1636 	  {
1637 	  while (*p != 0 && !isspace(*p)) p++;
1638 	  continue;
1639 	  }
1640 
1641 	/* Found data for a listed mechanism. Call its client entry. Set
1642 	a flag in the outblock so that data is overwritten after sending so
1643 	that reflections don't show it. */
1644 
1645 	fail_reason = US"authentication attempt(s) failed";
1646 
1647 	if ((rc = try_authenticator(sx, au)) != OK)
1648 	  return rc;
1649 
1650 	break;  /* If not authenticated, try next authenticator */
1651 	}       /* Loop for scanning supported server mechanisms */
1652       }         /* Loop for further authenticators */
1653     }
1654   }
1655 
1656 /* If we haven't authenticated, but are required to, give up. */
1657 
1658 if (require_auth == OK && !f.smtp_authenticated)
1659   {
1660 #ifndef DISABLE_PIPE_CONNECT
1661   invalidate_ehlo_cache_entry(sx);
1662 #endif
1663   set_errno_nohost(sx->addrlist, ERRNO_AUTHFAIL,
1664     string_sprintf("authentication required but %s", fail_reason), DEFER,
1665     FALSE, &sx->delivery_start);
1666   return DEFER;
1667   }
1668 
1669 return OK;
1670 }
1671 
1672 
1673 /* Construct AUTH appendix string for MAIL TO */
1674 /*
1675 Arguments
1676   sx		context for smtp connection
1677   p		point in sx->buffer to build string
1678   addrlist      chain of potential addresses to deliver
1679 
1680 Globals		f.smtp_authenticated
1681 		client_authenticated_sender
1682 Return	True on error, otherwise buffer has (possibly empty) terminated string
1683 */
1684 
1685 static BOOL
smtp_mail_auth_str(smtp_context * sx,uschar * p,address_item * addrlist)1686 smtp_mail_auth_str(smtp_context * sx, uschar * p, address_item * addrlist)
1687 {
1688 smtp_transport_options_block * ob = sx->conn_args.ob;
1689 uschar * local_authenticated_sender = authenticated_sender;
1690 
1691 #ifdef notdef
1692   debug_printf("smtp_mail_auth_str: as<%s> os<%s> SA<%s>\n",
1693     authenticated_sender, ob->authenticated_sender, f.smtp_authenticated?"Y":"N");
1694 #endif
1695 
1696 if (ob->authenticated_sender)
1697   {
1698   uschar * new = expand_string(ob->authenticated_sender);
1699   if (!new)
1700     {
1701     if (!f.expand_string_forcedfail)
1702       {
1703       uschar *message = string_sprintf("failed to expand "
1704         "authenticated_sender: %s", expand_string_message);
1705       set_errno_nohost(addrlist, ERRNO_EXPANDFAIL, message, DEFER, FALSE, &sx->delivery_start);
1706       return TRUE;
1707       }
1708     }
1709   else if (*new)
1710     local_authenticated_sender = new;
1711   }
1712 
1713 /* Add the authenticated sender address if present */
1714 
1715 if (  (f.smtp_authenticated || ob->authenticated_sender_force)
1716    && local_authenticated_sender)
1717   {
1718   string_format_nt(p, sizeof(sx->buffer) - (p-sx->buffer), " AUTH=%s",
1719     auth_xtextencode(local_authenticated_sender,
1720       Ustrlen(local_authenticated_sender)));
1721   client_authenticated_sender = string_copy(local_authenticated_sender);
1722   }
1723 else
1724   *p = 0;
1725 
1726 return FALSE;
1727 }
1728 
1729 
1730 
1731 typedef struct smtp_compare_s
1732 {
1733     uschar *			current_sender_address;
1734     struct transport_instance *	tblock;
1735 } smtp_compare_t;
1736 
1737 
1738 /* Create a unique string that identifies this message, it is based on
1739 sender_address, helo_data and tls_certificate if enabled.
1740 */
1741 
1742 static uschar *
smtp_local_identity(uschar * sender,struct transport_instance * tblock)1743 smtp_local_identity(uschar * sender, struct transport_instance * tblock)
1744 {
1745 address_item * addr1;
1746 uschar * if1 = US"";
1747 uschar * helo1 = US"";
1748 #ifndef DISABLE_TLS
1749 uschar * tlsc1 = US"";
1750 #endif
1751 uschar * save_sender_address = sender_address;
1752 uschar * local_identity = NULL;
1753 smtp_transport_options_block * ob = SOB tblock->options_block;
1754 
1755 sender_address = sender;
1756 
1757 addr1 = deliver_make_addr (sender, TRUE);
1758 deliver_set_expansions(addr1);
1759 
1760 if (ob->interface)
1761   if1 = expand_string(ob->interface);
1762 
1763 if (ob->helo_data)
1764   helo1 = expand_string(ob->helo_data);
1765 
1766 #ifndef DISABLE_TLS
1767 if (ob->tls_certificate)
1768   tlsc1 = expand_string(ob->tls_certificate);
1769 local_identity = string_sprintf ("%s^%s^%s", if1, helo1, tlsc1);
1770 #else
1771 local_identity = string_sprintf ("%s^%s", if1, helo1);
1772 #endif
1773 
1774 deliver_set_expansions(NULL);
1775 sender_address = save_sender_address;
1776 
1777 return local_identity;
1778 }
1779 
1780 
1781 
1782 /* This routine is a callback that is called from transport_check_waiting.
1783 This function will evaluate the incoming message versus the previous
1784 message.  If the incoming message is using a different local identity then
1785 we will veto this new message.  */
1786 
1787 static BOOL
smtp_are_same_identities(uschar * message_id,smtp_compare_t * s_compare)1788 smtp_are_same_identities(uschar * message_id, smtp_compare_t * s_compare)
1789 {
1790 uschar * message_local_identity,
1791        * current_local_identity,
1792        * new_sender_address;
1793 
1794 current_local_identity =
1795   smtp_local_identity(s_compare->current_sender_address, s_compare->tblock);
1796 
1797 if (!(new_sender_address = spool_sender_from_msgid(message_id)))
1798   return FALSE;
1799 
1800 
1801 message_local_identity =
1802   smtp_local_identity(new_sender_address, s_compare->tblock);
1803 
1804 return Ustrcmp(current_local_identity, message_local_identity) == 0;
1805 }
1806 
1807 
1808 
1809 static unsigned
ehlo_response(uschar * buf,unsigned checks)1810 ehlo_response(uschar * buf, unsigned checks)
1811 {
1812 size_t bsize = Ustrlen(buf);
1813 
1814 /* debug_printf("%s: check for 0x%04x\n", __FUNCTION__, checks); */
1815 
1816 #ifndef DISABLE_TLS
1817 if (  checks & OPTION_TLS
1818    && pcre_exec(regex_STARTTLS, NULL, CS buf, bsize, 0, PCRE_EOPT, NULL, 0) < 0)
1819 #endif
1820   checks &= ~OPTION_TLS;
1821 
1822 if (  checks & OPTION_IGNQ
1823    && pcre_exec(regex_IGNOREQUOTA, NULL, CS buf, bsize, 0,
1824 		PCRE_EOPT, NULL, 0) < 0)
1825   checks &= ~OPTION_IGNQ;
1826 
1827 if (  checks & OPTION_CHUNKING
1828    && pcre_exec(regex_CHUNKING, NULL, CS buf, bsize, 0, PCRE_EOPT, NULL, 0) < 0)
1829   checks &= ~OPTION_CHUNKING;
1830 
1831 #ifndef DISABLE_PRDR
1832 if (  checks & OPTION_PRDR
1833    && pcre_exec(regex_PRDR, NULL, CS buf, bsize, 0, PCRE_EOPT, NULL, 0) < 0)
1834 #endif
1835   checks &= ~OPTION_PRDR;
1836 
1837 #ifdef SUPPORT_I18N
1838 if (  checks & OPTION_UTF8
1839    && pcre_exec(regex_UTF8, NULL, CS buf, bsize, 0, PCRE_EOPT, NULL, 0) < 0)
1840 #endif
1841   checks &= ~OPTION_UTF8;
1842 
1843 if (  checks & OPTION_DSN
1844    && pcre_exec(regex_DSN, NULL, CS buf, bsize, 0, PCRE_EOPT, NULL, 0) < 0)
1845   checks &= ~OPTION_DSN;
1846 
1847 if (  checks & OPTION_PIPE
1848    && pcre_exec(regex_PIPELINING, NULL, CS buf, bsize, 0,
1849 		PCRE_EOPT, NULL, 0) < 0)
1850   checks &= ~OPTION_PIPE;
1851 
1852 if (  checks & OPTION_SIZE
1853    && pcre_exec(regex_SIZE, NULL, CS buf, bsize, 0, PCRE_EOPT, NULL, 0) < 0)
1854   checks &= ~OPTION_SIZE;
1855 
1856 #ifndef DISABLE_PIPE_CONNECT
1857 if (  checks & OPTION_EARLY_PIPE
1858    && pcre_exec(regex_EARLY_PIPE, NULL, CS buf, bsize, 0,
1859 		PCRE_EOPT, NULL, 0) < 0)
1860 #endif
1861   checks &= ~OPTION_EARLY_PIPE;
1862 
1863 /* debug_printf("%s: found     0x%04x\n", __FUNCTION__, checks); */
1864 return checks;
1865 }
1866 
1867 
1868 
1869 /* Callback for emitting a BDAT data chunk header.
1870 
1871 If given a nonzero size, first flush any buffered SMTP commands
1872 then emit the command.
1873 
1874 Reap previous SMTP command responses if requested, and always reap
1875 the response from a previous BDAT command.
1876 
1877 Args:
1878  tctx		transport context
1879  chunk_size	value for SMTP BDAT command
1880  flags
1881    tc_chunk_last	add LAST option to SMTP BDAT command
1882    tc_reap_prev		reap response to previous SMTP commands
1883 
1884 Returns:
1885   OK or ERROR
1886   DEFER			TLS error on first read (EHLO-resp); errno set
1887 */
1888 
1889 static int
smtp_chunk_cmd_callback(transport_ctx * tctx,unsigned chunk_size,unsigned flags)1890 smtp_chunk_cmd_callback(transport_ctx * tctx, unsigned chunk_size,
1891   unsigned flags)
1892 {
1893 smtp_transport_options_block * ob = SOB tctx->tblock->options_block;
1894 smtp_context * sx = tctx->smtp_context;
1895 int cmd_count = 0;
1896 int prev_cmd_count;
1897 
1898 /* Write SMTP chunk header command.  If not reaping responses, note that
1899 there may be more writes (like, the chunk data) done soon. */
1900 
1901 if (chunk_size > 0)
1902   {
1903 #ifndef DISABLE_PIPE_CONNECT
1904   BOOL new_conn = !!(sx->outblock.conn_args);
1905 #endif
1906   if((cmd_count = smtp_write_command(sx,
1907 	      flags & tc_reap_prev ? SCMD_FLUSH : SCMD_MORE,
1908 	      "BDAT %u%s\r\n", chunk_size, flags & tc_chunk_last ? " LAST" : "")
1909      ) < 0) return ERROR;
1910   if (flags & tc_chunk_last)
1911     data_command = string_copy(big_buffer);  /* Save for later error message */
1912 #ifndef DISABLE_PIPE_CONNECT
1913   /* That command write could have been the one that made the connection.
1914   Copy the fd from the client conn ctx (smtp transport specific) to the
1915   generic transport ctx. */
1916 
1917   if (new_conn)
1918     tctx->u.fd = sx->outblock.cctx->sock;
1919 #endif
1920   }
1921 
1922 prev_cmd_count = cmd_count += sx->cmd_count;
1923 
1924 /* Reap responses for any previous, but not one we just emitted */
1925 
1926 if (chunk_size > 0)
1927   prev_cmd_count--;
1928 if (sx->pending_BDAT)
1929   prev_cmd_count--;
1930 
1931 if (flags & tc_reap_prev  &&  prev_cmd_count > 0)
1932   {
1933   DEBUG(D_transport) debug_printf("look for %d responses"
1934     " for previous pipelined cmds\n", prev_cmd_count);
1935 
1936   switch(sync_responses(sx, prev_cmd_count, 0))
1937     {
1938     case 1:				/* 2xx (only) => OK */
1939     case 3: sx->good_RCPT = TRUE;	/* 2xx & 5xx => OK & progress made */
1940     case 2: sx->completed_addr = TRUE;	/* 5xx (only) => progress made */
1941     case 0: break;			/* No 2xx or 5xx, but no probs */
1942 
1943     case -5: errno = ERRNO_TLSFAILURE;
1944 	     return DEFER;
1945 #ifndef DISABLE_PIPE_CONNECT
1946     case -4:				/* non-2xx for pipelined banner or EHLO */
1947 #endif
1948     case -1:				/* Timeout on RCPT */
1949     default: return ERROR;		/* I/O error, or any MAIL/DATA error */
1950     }
1951   cmd_count = 1;
1952   if (!sx->pending_BDAT)
1953     pipelining_active = FALSE;
1954   }
1955 
1956 /* Reap response for an outstanding BDAT */
1957 
1958 if (sx->pending_BDAT)
1959   {
1960   DEBUG(D_transport) debug_printf("look for one response for BDAT\n");
1961 
1962   if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2',
1963        ob->command_timeout))
1964     {
1965     if (errno == 0 && sx->buffer[0] == '4')
1966       {
1967       errno = ERRNO_DATA4XX;	/*XXX does this actually get used? */
1968       sx->addrlist->more_errno |=
1969 	((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
1970       }
1971     return ERROR;
1972     }
1973   cmd_count--;
1974   sx->pending_BDAT = FALSE;
1975   pipelining_active = FALSE;
1976   }
1977 else if (chunk_size > 0)
1978   sx->pending_BDAT = TRUE;
1979 
1980 
1981 sx->cmd_count = cmd_count;
1982 return OK;
1983 }
1984 
1985 
1986 
1987 /*************************************************
1988 *       Make connection for given message        *
1989 *************************************************/
1990 
1991 /*
1992 Arguments:
1993   sx		  connection context
1994   suppress_tls    if TRUE, don't attempt a TLS connection - this is set for
1995                     a second attempt after TLS initialization fails
1996 
1997 Returns:          OK    - the connection was made and the delivery attempted;
1998                           fd is set in the conn context, tls_out set up.
1999                   DEFER - the connection could not be made, or something failed
2000                           while setting up the SMTP session, or there was a
2001                           non-message-specific error, such as a timeout.
2002                   ERROR - helo_data or add_headers or authenticated_sender is
2003 			  specified for this transport, and the string failed
2004 			  to expand
2005 */
2006 int
smtp_setup_conn(smtp_context * sx,BOOL suppress_tls)2007 smtp_setup_conn(smtp_context * sx, BOOL suppress_tls)
2008 {
2009 smtp_transport_options_block * ob = sx->conn_args.tblock->options_block;
2010 BOOL pass_message = FALSE;
2011 uschar * message = NULL;
2012 int yield = OK;
2013 #ifndef DISABLE_TLS
2014 uschar * tls_errstr;
2015 #endif
2016 
2017 sx->conn_args.ob = ob;
2018 
2019 sx->lmtp = strcmpic(ob->protocol, US"lmtp") == 0;
2020 sx->smtps = strcmpic(ob->protocol, US"smtps") == 0;
2021 /* sx->ok = FALSE; */
2022 sx->send_rset = TRUE;
2023 sx->send_quit = TRUE;
2024 sx->setting_up = TRUE;
2025 sx->esmtp = TRUE;
2026 /* sx->esmtp_sent = FALSE; */
2027 #ifdef SUPPORT_I18N
2028 /* sx->utf8_needed = FALSE; */
2029 #endif
2030 sx->dsn_all_lasthop = TRUE;
2031 #ifdef SUPPORT_DANE
2032 /* sx->conn_args.dane = FALSE; */
2033 sx->dane_required =
2034   verify_check_given_host(CUSS &ob->hosts_require_dane, sx->conn_args.host) == OK;
2035 #endif
2036 #ifndef DISABLE_PIPE_CONNECT
2037 /* sx->early_pipe_active = sx->early_pipe_ok = FALSE; */
2038 /* sx->ehlo_resp.cleartext_features = sx->ehlo_resp.crypted_features = 0; */
2039 /* sx->pending_BANNER = sx->pending_EHLO = sx->pending_MAIL = FALSE; */
2040 #endif
2041 
2042 if ((sx->max_mail = sx->conn_args.tblock->connection_max_messages) == 0) sx->max_mail = 999999;
2043 if ((sx->max_rcpt = sx->conn_args.tblock->max_addresses) == 0)           sx->max_rcpt = 999999;
2044 /* sx->peer_offered = 0; */
2045 /* sx->avoid_option = 0; */
2046 sx->igquotstr = US"";
2047 if (!sx->helo_data) sx->helo_data = ob->helo_data;
2048 #ifdef EXPERIMENTAL_DSN_INFO
2049 /* sx->smtp_greeting = NULL; */
2050 /* sx->helo_response = NULL; */
2051 #endif
2052 
2053 smtp_command = US"initial connection";
2054 /* sx->buffer[0] = '\0'; */
2055 
2056 /* Set up the buffer for reading SMTP response packets. */
2057 
2058 sx->inblock.buffer = sx->inbuffer;
2059 sx->inblock.buffersize = sizeof(sx->inbuffer);
2060 sx->inblock.ptr = sx->inbuffer;
2061 sx->inblock.ptrend = sx->inbuffer;
2062 
2063 /* Set up the buffer for holding SMTP commands while pipelining */
2064 
2065 sx->outblock.buffer = sx->outbuffer;
2066 sx->outblock.buffersize = sizeof(sx->outbuffer);
2067 sx->outblock.ptr = sx->outbuffer;
2068 /* sx->outblock.cmd_count = 0; */
2069 /* sx->outblock.authenticating = FALSE; */
2070 /* sx->outblock.conn_args = NULL; */
2071 
2072 /* Reset the parameters of a TLS session. */
2073 
2074 tls_out.bits = 0;
2075 tls_out.cipher = NULL;	/* the one we may use for this transport */
2076 tls_out.ourcert = NULL;
2077 tls_out.peercert = NULL;
2078 tls_out.peerdn = NULL;
2079 #ifdef USE_OPENSSL
2080 tls_out.sni = NULL;
2081 #endif
2082 tls_out.ocsp = OCSP_NOT_REQ;
2083 #ifndef DISABLE_TLS_RESUME
2084 tls_out.resumption = 0;
2085 #endif
2086 tls_out.ver = NULL;
2087 
2088 /* Flip the legacy TLS-related variables over to the outbound set in case
2089 they're used in the context of the transport.  Don't bother resetting
2090 afterward (when being used by a transport) as we're in a subprocess.
2091 For verify, unflipped once the callout is dealt with */
2092 
2093 tls_modify_variables(&tls_out);
2094 
2095 #ifdef DISABLE_TLS
2096 if (sx->smtps)
2097   {
2098   set_errno_nohost(sx->addrlist, ERRNO_TLSFAILURE, US"TLS support not available",
2099 	    DEFER, FALSE, &sx->delivery_start);
2100   return ERROR;
2101   }
2102 #else
2103 
2104 /* If we have a proxied TLS connection, check usability for this message */
2105 
2106 if (continue_hostname && continue_proxy_cipher)
2107   {
2108   int rc;
2109   const uschar * sni = US"";
2110 
2111 # ifdef SUPPORT_DANE
2112   /* Check if the message will be DANE-verified; if so force its SNI */
2113 
2114   tls_out.dane_verified = FALSE;
2115   smtp_port_for_connect(sx->conn_args.host, sx->port);
2116   if (  sx->conn_args.host->dnssec == DS_YES
2117      && (  sx->dane_required
2118 	|| verify_check_given_host(CUSS &ob->hosts_try_dane, sx->conn_args.host) == OK
2119      )  )
2120     switch (rc = tlsa_lookup(sx->conn_args.host, &sx->conn_args.tlsa_dnsa, sx->dane_required))
2121       {
2122       case OK:		sx->conn_args.dane = TRUE;
2123 			ob->tls_tempfail_tryclear = FALSE;	/* force TLS */
2124                         ob->tls_sni = sx->conn_args.host->name; /* force SNI */
2125 			break;
2126       case FAIL_FORCED:	break;
2127       default:		set_errno_nohost(sx->addrlist, ERRNO_DNSDEFER,
2128 			      string_sprintf("DANE error: tlsa lookup %s",
2129 				rc_to_string(rc)),
2130 			      rc, FALSE, &sx->delivery_start);
2131 #  ifndef DISABLE_EVENT
2132 			    (void) event_raise(sx->conn_args.tblock->event_action,
2133 			      US"dane:fail", sx->dane_required
2134 				?  US"dane-required" : US"dnssec-invalid");
2135 #  endif
2136 			    return rc;
2137       }
2138 # endif
2139 
2140   /* If the SNI or the DANE status required for the new message differs from the
2141   existing conn drop the connection to force a new one. */
2142 
2143   if (ob->tls_sni && !(sni = expand_cstring(ob->tls_sni)))
2144     log_write(0, LOG_MAIN|LOG_PANIC,
2145       "<%s>: failed to expand transport's tls_sni value: %s",
2146       sx->addrlist->address, expand_string_message);
2147 
2148 # ifdef SUPPORT_DANE
2149   if (  (continue_proxy_sni ? (Ustrcmp(continue_proxy_sni, sni) == 0) : !*sni)
2150      && continue_proxy_dane == sx->conn_args.dane)
2151     {
2152     tls_out.sni = US sni;
2153     if ((tls_out.dane_verified = continue_proxy_dane))
2154       sx->conn_args.host->dnssec = DS_YES;
2155     }
2156 # else
2157   if ((continue_proxy_sni ? (Ustrcmp(continue_proxy_sni, sni) == 0) : !*sni))
2158     tls_out.sni = US sni;
2159 # endif
2160   else
2161     {
2162     DEBUG(D_transport)
2163       debug_printf("Closing proxied-TLS connection due to SNI mismatch\n");
2164 
2165     HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP>> QUIT\n");
2166     write(0, "QUIT\r\n", 6);
2167     close(0);
2168     continue_hostname = continue_proxy_cipher = NULL;
2169     f.continue_more = FALSE;
2170     continue_sequence = 1;	/* Unfortunately, this process cannot affect success log
2171     				which is done by delivery proc.  Would have to pass this
2172 				back through reporting pipe. */
2173     }
2174   }
2175 #endif	/*!DISABLE_TLS*/
2176 
2177 /* Make a connection to the host if this isn't a continued delivery, and handle
2178 the initial interaction and HELO/EHLO/LHLO. Connect timeout errors are handled
2179 specially so they can be identified for retries. */
2180 
2181 if (!continue_hostname)
2182   {
2183   if (sx->verify)
2184     HDEBUG(D_verify) debug_printf("interface=%s port=%d\n", sx->conn_args.interface, sx->port);
2185 
2186   /* Arrange to report to calling process this is a new connection */
2187 
2188   clearflag(sx->first_addr, af_cont_conn);
2189   setflag(sx->first_addr, af_new_conn);
2190 
2191   /* Get the actual port the connection will use, into sx->conn_args.host */
2192 
2193   smtp_port_for_connect(sx->conn_args.host, sx->port);
2194 
2195 #ifdef SUPPORT_DANE
2196     /* Do TLSA lookup for DANE */
2197     {
2198     tls_out.dane_verified = FALSE;
2199     tls_out.tlsa_usage = 0;
2200 
2201     if (sx->conn_args.host->dnssec == DS_YES)
2202       {
2203       int rc;
2204       if(  sx->dane_required
2205 	|| verify_check_given_host(CUSS &ob->hosts_try_dane, sx->conn_args.host) == OK
2206 	)
2207 	switch (rc = tlsa_lookup(sx->conn_args.host, &sx->conn_args.tlsa_dnsa, sx->dane_required))
2208 	  {
2209 	  case OK:		sx->conn_args.dane = TRUE;
2210 				ob->tls_tempfail_tryclear = FALSE;	/* force TLS */
2211 				ob->tls_sni = sx->conn_args.host->name; /* force SNI */
2212 				break;
2213 	  case FAIL_FORCED:	break;
2214 	  default:		set_errno_nohost(sx->addrlist, ERRNO_DNSDEFER,
2215 				  string_sprintf("DANE error: tlsa lookup %s",
2216 				    rc_to_string(rc)),
2217 				  rc, FALSE, &sx->delivery_start);
2218 # ifndef DISABLE_EVENT
2219 				(void) event_raise(sx->conn_args.tblock->event_action,
2220 				  US"dane:fail", sx->dane_required
2221 				    ?  US"dane-required" : US"dnssec-invalid");
2222 # endif
2223 				return rc;
2224 	  }
2225       }
2226     else if (sx->dane_required)
2227       {
2228       set_errno_nohost(sx->addrlist, ERRNO_DNSDEFER,
2229 	string_sprintf("DANE error: %s lookup not DNSSEC", sx->conn_args.host->name),
2230 	FAIL, FALSE, &sx->delivery_start);
2231 # ifndef DISABLE_EVENT
2232       (void) event_raise(sx->conn_args.tblock->event_action,
2233 	US"dane:fail", US"dane-required");
2234 # endif
2235       return FAIL;
2236       }
2237     }
2238 #endif	/*DANE*/
2239 
2240   /* Make the TCP connection */
2241 
2242   sx->cctx.tls_ctx = NULL;
2243   sx->inblock.cctx = sx->outblock.cctx = &sx->cctx;
2244 #ifdef EXPERIMENTAL_ESMTP_LIMITS
2245   sx->peer_limit_mail = sx->peer_limit_rcpt = sx->peer_limit_rcptdom =
2246 #endif
2247   sx->avoid_option = sx->peer_offered = smtp_peer_options = 0;
2248 
2249 #ifndef DISABLE_PIPE_CONNECT
2250   if (  verify_check_given_host(CUSS &ob->hosts_pipe_connect,
2251 					    sx->conn_args.host) == OK)
2252 
2253     /* We don't find out the local ip address until the connect, so if
2254     the helo string might use it avoid doing early-pipelining. */
2255 
2256     if (  !sx->helo_data
2257        || !Ustrstr(sx->helo_data, "$sending_ip_address")
2258        || Ustrstr(sx->helo_data, "def:sending_ip_address")
2259        )
2260       {
2261       sx->early_pipe_ok = TRUE;
2262       if (  read_ehlo_cache_entry(sx)
2263 	 && sx->ehlo_resp.cleartext_features & OPTION_EARLY_PIPE)
2264 	{
2265 	DEBUG(D_transport)
2266 	  debug_printf("Using cached cleartext PIPE_CONNECT\n");
2267 	sx->early_pipe_active = TRUE;
2268 	sx->peer_offered = sx->ehlo_resp.cleartext_features;
2269 	}
2270       }
2271     else DEBUG(D_transport)
2272       debug_printf("helo needs $sending_ip_address\n");
2273 
2274 PIPE_CONNECT_RETRY:
2275   if (sx->early_pipe_active)
2276     sx->outblock.conn_args = &sx->conn_args;
2277   else
2278 #endif
2279     {
2280     blob lazy_conn = {.data = NULL};
2281     /* For TLS-connect, a TFO lazy-connect is useful since the Client Hello
2282     can go on the TCP SYN. */
2283 
2284     if ((sx->cctx.sock = smtp_connect(&sx->conn_args,
2285 			    sx->smtps ? &lazy_conn : NULL)) < 0)
2286       {
2287       set_errno_nohost(sx->addrlist,
2288 	errno == ETIMEDOUT ? ERRNO_CONNECTTIMEOUT : errno,
2289 	sx->verify ? US strerror(errno) : NULL,
2290 	DEFER, FALSE, &sx->delivery_start);
2291       sx->send_quit = FALSE;
2292       return DEFER;
2293       }
2294 #ifdef TCP_QUICKACK
2295     (void) setsockopt(sx->cctx.sock, IPPROTO_TCP, TCP_QUICKACK, US &off,
2296 			sizeof(off));
2297 #endif
2298     }
2299   /* Expand the greeting message while waiting for the initial response. (Makes
2300   sense if helo_data contains ${lookup dnsdb ...} stuff). The expansion is
2301   delayed till here so that $sending_interface and $sending_port are set. */
2302 /*XXX early-pipe: they still will not be. Is there any way to find out what they
2303 will be?  Somehow I doubt it. */
2304 
2305   if (sx->helo_data)
2306     if (!(sx->helo_data = expand_string(sx->helo_data)))
2307       if (sx->verify)
2308 	log_write(0, LOG_MAIN|LOG_PANIC,
2309 	  "<%s>: failed to expand transport's helo_data value for callout: %s",
2310 	  sx->addrlist->address, expand_string_message);
2311 
2312 #ifdef SUPPORT_I18N
2313   if (sx->helo_data)
2314     {
2315     expand_string_message = NULL;
2316     if ((sx->helo_data = string_domain_utf8_to_alabel(sx->helo_data,
2317 					      &expand_string_message)),
2318 	expand_string_message)
2319       if (sx->verify)
2320 	log_write(0, LOG_MAIN|LOG_PANIC,
2321 	  "<%s>: failed to expand transport's helo_data value for callout: %s",
2322 	  sx->addrlist->address, expand_string_message);
2323       else
2324 	sx->helo_data = NULL;
2325     }
2326 #endif
2327 
2328   /* The first thing is to wait for an initial OK response. The dreaded "goto"
2329   is nevertheless a reasonably clean way of programming this kind of logic,
2330   where you want to escape on any error. */
2331 
2332   if (!sx->smtps)
2333     {
2334 #ifndef DISABLE_PIPE_CONNECT
2335     if (sx->early_pipe_active)
2336       {
2337       sx->pending_BANNER = TRUE;	/* sync_responses() must eventually handle */
2338       sx->outblock.cmd_count = 1;
2339       }
2340     else
2341 #endif
2342       {
2343       if (!smtp_reap_banner(sx))
2344 	goto RESPONSE_FAILED;
2345       }
2346 
2347 #ifndef DISABLE_EVENT
2348       {
2349       uschar * s;
2350       lookup_dnssec_authenticated = sx->conn_args.host->dnssec==DS_YES ? US"yes"
2351 	: sx->conn_args.host->dnssec==DS_NO ? US"no" : NULL;
2352       s = event_raise(sx->conn_args.tblock->event_action, US"smtp:connect", sx->buffer);
2353       if (s)
2354 	{
2355 	set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL,
2356 	  string_sprintf("deferred by smtp:connect event expansion: %s", s),
2357 	  DEFER, FALSE, &sx->delivery_start);
2358 	yield = DEFER;
2359 	goto SEND_QUIT;
2360 	}
2361       }
2362 #endif
2363 
2364     /* Now check if the helo_data expansion went well, and sign off cleanly if
2365     it didn't. */
2366 
2367     if (!sx->helo_data)
2368       {
2369       message = string_sprintf("failed to expand helo_data: %s",
2370         expand_string_message);
2371       set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL, message, DEFER, FALSE, &sx->delivery_start);
2372       yield = DEFER;
2373       goto SEND_QUIT;
2374       }
2375     }
2376 
2377 /** Debugging without sending a message
2378 sx->addrlist->transport_return = DEFER;
2379 goto SEND_QUIT;
2380 **/
2381 
2382   /* Errors that occur after this point follow an SMTP command, which is
2383   left in big_buffer by smtp_write_command() for use in error messages. */
2384 
2385   smtp_command = big_buffer;
2386 
2387   /* Tell the remote who we are...
2388 
2389   February 1998: A convention has evolved that ESMTP-speaking MTAs include the
2390   string "ESMTP" in their greeting lines, so make Exim send EHLO if the
2391   greeting is of this form. The assumption was that the far end supports it
2392   properly... but experience shows that there are some that give 5xx responses,
2393   even though the banner includes "ESMTP" (there's a bloody-minded one that
2394   says "ESMTP not spoken here"). Cope with that case.
2395 
2396   September 2000: Time has passed, and it seems reasonable now to always send
2397   EHLO at the start. It is also convenient to make the change while installing
2398   the TLS stuff.
2399 
2400   July 2003: Joachim Wieland met a broken server that advertises "PIPELINING"
2401   but times out after sending MAIL FROM, RCPT TO and DATA all together. There
2402   would be no way to send out the mails, so there is now a host list
2403   "hosts_avoid_esmtp" that disables ESMTP for special hosts and solves the
2404   PIPELINING problem as well. Maybe it can also be useful to cure other
2405   problems with broken servers.
2406 
2407   Exim originally sent "Helo" at this point and ran for nearly a year that way.
2408   Then somebody tried it with a Microsoft mailer... It seems that all other
2409   mailers use upper case for some reason (the RFC is quite clear about case
2410   independence) so, for peace of mind, I gave in. */
2411 
2412   sx->esmtp = verify_check_given_host(CUSS &ob->hosts_avoid_esmtp, sx->conn_args.host) != OK;
2413 
2414   /* Alas; be careful, since this goto is not an error-out, so conceivably
2415   we might set data between here and the target which we assume to exist
2416   and be usable.  I can see this coming back to bite us. */
2417 #ifndef DISABLE_TLS
2418   if (sx->smtps)
2419     {
2420     smtp_peer_options |= OPTION_TLS;
2421     suppress_tls = FALSE;
2422     ob->tls_tempfail_tryclear = FALSE;
2423     smtp_command = US"SSL-on-connect";
2424     goto TLS_NEGOTIATE;
2425     }
2426 #endif
2427 
2428   if (sx->esmtp)
2429     {
2430     if (smtp_write_command(sx,
2431 #ifndef DISABLE_PIPE_CONNECT
2432 	  sx->early_pipe_active ? SCMD_BUFFER :
2433 #endif
2434 	    SCMD_FLUSH,
2435 	  "%s %s\r\n", sx->lmtp ? "LHLO" : "EHLO", sx->helo_data) < 0)
2436       goto SEND_FAILED;
2437     sx->esmtp_sent = TRUE;
2438 
2439 #ifndef DISABLE_PIPE_CONNECT
2440     if (sx->early_pipe_active)
2441       {
2442       sx->pending_EHLO = TRUE;
2443 
2444       /* If we have too many authenticators to handle and might need to AUTH
2445       for this transport, pipeline no further as we will need the
2446       list of auth methods offered.  Reap the banner and EHLO. */
2447 
2448       if (  (ob->hosts_require_auth || ob->hosts_try_auth)
2449 	 && f.smtp_in_early_pipe_no_auth)
2450 	{
2451 	DEBUG(D_transport) debug_printf("may need to auth, so pipeline no further\n");
2452 	if (smtp_write_command(sx, SCMD_FLUSH, NULL) < 0)
2453 	  goto SEND_FAILED;
2454 	if (sync_responses(sx, 2, 0) != 0)
2455 	  {
2456 	  HDEBUG(D_transport)
2457 	    debug_printf("failed reaping pipelined cmd responses\n");
2458 	  goto RESPONSE_FAILED;
2459 	  }
2460 	sx->early_pipe_active = FALSE;
2461 	}
2462       }
2463     else
2464 #endif
2465       if (!smtp_reap_ehlo(sx))
2466 	goto RESPONSE_FAILED;
2467     }
2468   else
2469     DEBUG(D_transport)
2470       debug_printf("not sending EHLO (host matches hosts_avoid_esmtp)\n");
2471 
2472 #ifndef DISABLE_PIPE_CONNECT
2473   if (!sx->early_pipe_active)
2474 #endif
2475     if (!sx->esmtp)
2476       {
2477       BOOL good_response;
2478       int n = sizeof(sx->buffer);
2479       uschar * rsp = sx->buffer;
2480 
2481       if (sx->esmtp_sent && (n = Ustrlen(sx->buffer) + 1) < sizeof(sx->buffer)/2)
2482 	{ rsp = sx->buffer + n; n = sizeof(sx->buffer) - n; }
2483 
2484       if (smtp_write_command(sx, SCMD_FLUSH, "HELO %s\r\n", sx->helo_data) < 0)
2485 	goto SEND_FAILED;
2486       good_response = smtp_read_response(sx, rsp, n, '2', ob->command_timeout);
2487 #ifdef EXPERIMENTAL_DSN_INFO
2488       sx->helo_response = string_copy(rsp);
2489 #endif
2490       if (!good_response)
2491 	{
2492 	/* Handle special logging for a closed connection after HELO
2493 	when had previously sent EHLO */
2494 
2495 	if (rsp != sx->buffer && rsp[0] == 0 && (errno == 0 || errno == ECONNRESET))
2496 	  {
2497 	  errno = ERRNO_SMTPCLOSED;
2498 	  goto EHLOHELO_FAILED;
2499 	  }
2500 	memmove(sx->buffer, rsp, Ustrlen(rsp));
2501 	goto RESPONSE_FAILED;
2502 	}
2503       }
2504 
2505   if (sx->esmtp || sx->lmtp)
2506     {
2507 #ifndef DISABLE_PIPE_CONNECT
2508     if (!sx->early_pipe_active)
2509 #endif
2510       {
2511       sx->peer_offered = ehlo_response(sx->buffer,
2512 	OPTION_TLS	/* others checked later */
2513 #ifndef DISABLE_PIPE_CONNECT
2514 	| (sx->early_pipe_ok
2515 	  ?   OPTION_IGNQ
2516 	    | OPTION_CHUNKING | OPTION_PRDR | OPTION_DSN | OPTION_PIPE | OPTION_SIZE
2517 #ifdef SUPPORT_I18N
2518 	    | OPTION_UTF8
2519 #endif
2520 	    | OPTION_EARLY_PIPE
2521 	  : 0
2522 	  )
2523 #endif
2524 	);
2525 #ifdef EXPERIMENTAL_ESMTP_LIMITS
2526       if (tls_out.active.sock >= 0 || !(sx->peer_offered & OPTION_TLS))
2527 	{
2528 	ehlo_response_limits_read(sx);
2529 	ehlo_response_limits_apply(sx);
2530 	}
2531 #endif
2532 #ifndef DISABLE_PIPE_CONNECT
2533       if (sx->early_pipe_ok)
2534 	{
2535 	sx->ehlo_resp.cleartext_features = sx->peer_offered;
2536 
2537 	if (  (sx->peer_offered & (OPTION_PIPE | OPTION_EARLY_PIPE))
2538 	   == (OPTION_PIPE | OPTION_EARLY_PIPE))
2539 	  {
2540 	  DEBUG(D_transport) debug_printf("PIPE_CONNECT usable in future for this IP\n");
2541 	  sx->ehlo_resp.cleartext_auths = study_ehlo_auths(sx);
2542 	  write_ehlo_cache_entry(sx);
2543 	  }
2544 	}
2545 #endif
2546       }
2547 
2548   /* Set tls_offered if the response to EHLO specifies support for STARTTLS. */
2549 
2550 #ifndef DISABLE_TLS
2551     smtp_peer_options |= sx->peer_offered & OPTION_TLS;
2552 #endif
2553     }
2554   }
2555 
2556 /* For continuing deliveries down the same channel, having re-exec'd  the socket
2557 is the standard input; for a socket held open from verify it is recorded
2558 in the cutthrough context block.  Either way we don't need to redo EHLO here
2559 (but may need to do so for TLS - see below).
2560 Set up the pointer to where subsequent commands will be left, for
2561 error messages. Note that smtp_peer_options will have been
2562 set from the command line if they were set in the process that passed the
2563 connection on. */
2564 
2565 /*XXX continue case needs to propagate DSN_INFO, prob. in deliver.c
2566 as the continue goes via transport_pass_socket() and doublefork and exec.
2567 It does not wait.  Unclear how we keep separate host's responses
2568 separate - we could match up by host ip+port as a bodge. */
2569 
2570 else
2571   {
2572   if (cutthrough.cctx.sock >= 0 && cutthrough.callout_hold_only)
2573     {
2574     sx->cctx = cutthrough.cctx;
2575     sx->conn_args.host->port = sx->port = cutthrough.host.port;
2576     }
2577   else
2578     {
2579     sx->cctx.sock = 0;				/* stdin */
2580     sx->cctx.tls_ctx = NULL;
2581     smtp_port_for_connect(sx->conn_args.host, sx->port);	/* Record the port that was used */
2582     }
2583   sx->inblock.cctx = sx->outblock.cctx = &sx->cctx;
2584   smtp_command = big_buffer;
2585   sx->peer_offered = smtp_peer_options;
2586 #ifdef EXPERIMENTAL_ESMTP_LIMITS
2587   /* Limits passed by cmdline over exec. */
2588   ehlo_limits_apply(sx,
2589 		    sx->peer_limit_mail = continue_limit_mail,
2590 		    sx->peer_limit_rcpt = continue_limit_rcpt,
2591 		    sx->peer_limit_rcptdom = continue_limit_rcptdom);
2592 #endif
2593   sx->helo_data = NULL;		/* ensure we re-expand ob->helo_data */
2594 
2595   /* For a continued connection with TLS being proxied for us, or a
2596   held-open verify connection with TLS, nothing more to do. */
2597 
2598   if (  continue_proxy_cipher
2599      || (cutthrough.cctx.sock >= 0 && cutthrough.callout_hold_only
2600          && cutthrough.is_tls)
2601      )
2602     {
2603     sx->pipelining_used = pipelining_active = !!(smtp_peer_options & OPTION_PIPE);
2604     HDEBUG(D_transport) debug_printf("continued connection, %s TLS\n",
2605       continue_proxy_cipher ? "proxied" : "verify conn with");
2606     return OK;
2607     }
2608   HDEBUG(D_transport) debug_printf("continued connection, no TLS\n");
2609   }
2610 
2611 /* If TLS is available on this connection, whether continued or not, attempt to
2612 start up a TLS session, unless the host is in hosts_avoid_tls. If successful,
2613 send another EHLO - the server may give a different answer in secure mode. We
2614 use a separate buffer for reading the response to STARTTLS so that if it is
2615 negative, the original EHLO data is available for subsequent analysis, should
2616 the client not be required to use TLS. If the response is bad, copy the buffer
2617 for error analysis. */
2618 
2619 #ifndef DISABLE_TLS
2620 if (  smtp_peer_options & OPTION_TLS
2621    && !suppress_tls
2622    && verify_check_given_host(CUSS &ob->hosts_avoid_tls, sx->conn_args.host) != OK
2623    && (  !sx->verify
2624       || verify_check_given_host(CUSS &ob->hosts_verify_avoid_tls, sx->conn_args.host) != OK
2625    )  )
2626   {
2627   uschar buffer2[4096];
2628 
2629   if (smtp_write_command(sx, SCMD_FLUSH, "STARTTLS\r\n") < 0)
2630     goto SEND_FAILED;
2631 
2632 #ifndef DISABLE_PIPE_CONNECT
2633   /* If doing early-pipelining reap the banner and EHLO-response but leave
2634   the response for the STARTTLS we just sent alone.  On fail, assume wrong
2635   cached capability and retry with the pipelining disabled. */
2636 
2637   if (sx->early_pipe_active && sync_responses(sx, 2, 0) != 0)
2638     {
2639     HDEBUG(D_transport)
2640       debug_printf("failed reaping pipelined cmd responses\n");
2641     close(sx->cctx.sock);
2642     sx->cctx.sock = -1;
2643     sx->early_pipe_active = FALSE;
2644     goto PIPE_CONNECT_RETRY;
2645     }
2646 #endif
2647 
2648   /* If there is an I/O error, transmission of this message is deferred. If
2649   there is a temporary rejection of STARRTLS and tls_tempfail_tryclear is
2650   false, we also defer. However, if there is a temporary rejection of STARTTLS
2651   and tls_tempfail_tryclear is true, or if there is an outright rejection of
2652   STARTTLS, we carry on. This means we will try to send the message in clear,
2653   unless the host is in hosts_require_tls (tested below). */
2654 
2655   if (!smtp_read_response(sx, buffer2, sizeof(buffer2), '2', ob->command_timeout))
2656     {
2657     if (  errno != 0
2658        || buffer2[0] == 0
2659        || (buffer2[0] == '4' && !ob->tls_tempfail_tryclear)
2660        )
2661       {
2662       Ustrncpy(sx->buffer, buffer2, sizeof(sx->buffer));
2663       sx->buffer[sizeof(sx->buffer)-1] = '\0';
2664       goto RESPONSE_FAILED;
2665       }
2666     }
2667 
2668   /* STARTTLS accepted: try to negotiate a TLS session. */
2669 
2670   else
2671   TLS_NEGOTIATE:
2672     {
2673     if (!tls_client_start(&sx->cctx, &sx->conn_args, sx->addrlist, &tls_out, &tls_errstr))
2674       {
2675       /* TLS negotiation failed; give an error. From outside, this function may
2676       be called again to try in clear on a new connection, if the options permit
2677       it for this host. */
2678   TLS_CONN_FAILED:
2679       DEBUG(D_tls) debug_printf("TLS session fail: %s\n", tls_errstr);
2680 
2681 # ifdef SUPPORT_DANE
2682       if (sx->conn_args.dane)
2683         {
2684 	log_write(0, LOG_MAIN,
2685 	  "DANE attempt failed; TLS connection to %s [%s]: %s",
2686 	  sx->conn_args.host->name, sx->conn_args.host->address, tls_errstr);
2687 #  ifndef DISABLE_EVENT
2688 	(void) event_raise(sx->conn_args.tblock->event_action,
2689 	  US"dane:fail", US"validation-failure");	/* could do with better detail */
2690 #  endif
2691 	}
2692 # endif
2693 
2694       errno = ERRNO_TLSFAILURE;
2695       message = string_sprintf("TLS session: %s", tls_errstr);
2696       sx->send_quit = FALSE;
2697       goto TLS_FAILED;
2698       }
2699     sx->send_tlsclose = TRUE;
2700 
2701     /* TLS session is set up.  Check the inblock fill level.  If there is
2702     content then as we have not yet done a tls read it must have arrived before
2703     the TLS handshake, in-clear.  That violates the sync requirement of the
2704     STARTTLS RFC, so fail. */
2705 
2706     if (sx->inblock.ptr != sx->inblock.ptrend)
2707       {
2708       DEBUG(D_tls)
2709 	{
2710 	int i = sx->inblock.ptrend - sx->inblock.ptr;
2711 	debug_printf("unused data in input buffer after ack for STARTTLS:\n"
2712 	  "'%.*s'%s\n",
2713 	  i > 100 ? 100 : i, sx->inblock.ptr, i > 100 ? "..." : "");
2714 	}
2715       tls_errstr = US"synch error before connect";
2716       goto TLS_CONN_FAILED;
2717       }
2718 
2719     smtp_peer_options_wrap = smtp_peer_options;
2720     for (address_item * addr = sx->addrlist; addr; addr = addr->next)
2721       if (addr->transport_return == PENDING_DEFER)
2722         {
2723         addr->cipher = tls_out.cipher;
2724         addr->ourcert = tls_out.ourcert;
2725         addr->peercert = tls_out.peercert;
2726         addr->peerdn = tls_out.peerdn;
2727 	addr->ocsp = tls_out.ocsp;
2728         addr->tlsver = tls_out.ver;
2729         }
2730     }
2731   }
2732 
2733 /* if smtps, we'll have smtp_command set to something else; always safe to
2734 reset it here. */
2735 smtp_command = big_buffer;
2736 
2737 /* If we started TLS, redo the EHLO/LHLO exchange over the secure channel. If
2738 helo_data is null, we are dealing with a connection that was passed from
2739 another process, and so we won't have expanded helo_data above. We have to
2740 expand it here. $sending_ip_address and $sending_port are set up right at the
2741 start of the Exim process (in exim.c). */
2742 
2743 if (tls_out.active.sock >= 0)
2744   {
2745   uschar * greeting_cmd;
2746 
2747   if (!sx->helo_data && !(sx->helo_data = expand_string(ob->helo_data)))
2748     {
2749     uschar *message = string_sprintf("failed to expand helo_data: %s",
2750       expand_string_message);
2751     set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL, message, DEFER, FALSE, &sx->delivery_start);
2752     yield = DEFER;
2753     goto SEND_QUIT;
2754     }
2755 
2756 #ifndef DISABLE_PIPE_CONNECT
2757   /* For SMTPS there is no cleartext early-pipe; use the crypted permission bit.
2758   We're unlikely to get the group sent and delivered before the server sends its
2759   banner, but it's still worth sending as a group.
2760   For STARTTLS allow for cleartext early-pipe but no crypted early-pipe, but not
2761   the reverse.  */
2762 
2763   if (sx->smtps ? sx->early_pipe_ok : sx->early_pipe_active)
2764     {
2765     sx->peer_offered = sx->ehlo_resp.crypted_features;
2766     if ((sx->early_pipe_active =
2767 	 !!(sx->ehlo_resp.crypted_features & OPTION_EARLY_PIPE)))
2768       DEBUG(D_transport) debug_printf("Using cached crypted PIPE_CONNECT\n");
2769     }
2770 #endif
2771 #ifdef EXPERIMMENTAL_ESMTP_LIMITS
2772   /* As we are about to send another EHLO, forget any LIMITS received so far. */
2773   sx->peer_limit_mail = sx->peer_limit_rcpt = sx->peer_limit_rcptdom = 0;
2774   if ((sx->max_mail = sx->conn_args.tblock->connection_max_message) == 0) sx->max_mail = 999999;
2775   if ((sx->max_rcpt = sx->conn_args.tblock->max_addresses) == 0)          sx->max_rcpt = 999999;
2776   sx->single_rcpt_domain = FALSE;
2777 #endif
2778 
2779   /* For SMTPS we need to wait for the initial OK response. */
2780   if (sx->smtps)
2781 #ifndef DISABLE_PIPE_CONNECT
2782     if (sx->early_pipe_active)
2783       {
2784       sx->pending_BANNER = TRUE;
2785       sx->outblock.cmd_count = 1;
2786       }
2787     else
2788 #endif
2789       if (!smtp_reap_banner(sx))
2790 	goto RESPONSE_FAILED;
2791 
2792   if (sx->lmtp)
2793     greeting_cmd = US"LHLO";
2794   else if (sx->esmtp)
2795     greeting_cmd = US"EHLO";
2796   else
2797     {
2798     greeting_cmd = US"HELO";
2799     DEBUG(D_transport)
2800       debug_printf("not sending EHLO (host matches hosts_avoid_esmtp)\n");
2801     }
2802 
2803   if (smtp_write_command(sx,
2804 #ifndef DISABLE_PIPE_CONNECT
2805 	sx->early_pipe_active ? SCMD_BUFFER :
2806 #endif
2807 	  SCMD_FLUSH,
2808 	"%s %s\r\n", greeting_cmd, sx->helo_data) < 0)
2809     goto SEND_FAILED;
2810 
2811 #ifndef DISABLE_PIPE_CONNECT
2812   if (sx->early_pipe_active)
2813     sx->pending_EHLO = TRUE;
2814   else
2815 #endif
2816     {
2817     if (!smtp_reap_ehlo(sx))
2818 #ifdef USE_GNUTLS
2819       {
2820       /* The GnuTLS layer in Exim only spots a server-rejection of a client
2821       cert late, under TLS1.3 - which means here; the first time we try to
2822       receive crypted data.  Treat it as if it was a connect-time failure.
2823       See also the early-pipe equivalent... which will be hard; every call
2824       to sync_responses will need to check the result.
2825       It would be nicer to have GnuTLS check the cert during the handshake.
2826       Can it do that, with all the flexibility we need? */
2827 
2828       tls_errstr = US"error on first read";
2829       goto TLS_CONN_FAILED;
2830       }
2831 #else
2832       goto RESPONSE_FAILED;
2833 #endif
2834     smtp_peer_options = 0;
2835     }
2836   }
2837 
2838 /* If the host is required to use a secure channel, ensure that we
2839 have one. */
2840 
2841 else if (  sx->smtps
2842 # ifdef SUPPORT_DANE
2843 	|| sx->conn_args.dane
2844 # endif
2845 	|| verify_check_given_host(CUSS &ob->hosts_require_tls, sx->conn_args.host) == OK
2846 	)
2847   {
2848   errno = ERRNO_TLSREQUIRED;
2849   message = string_sprintf("a TLS session is required, but %s",
2850     smtp_peer_options & OPTION_TLS
2851     ? "an attempt to start TLS failed" : "the server did not offer TLS support");
2852 # if defined(SUPPORT_DANE) && !defined(DISABLE_EVENT)
2853   if (sx->conn_args.dane)
2854     (void) event_raise(sx->conn_args.tblock->event_action, US"dane:fail",
2855       smtp_peer_options & OPTION_TLS
2856       ? US"validation-failure"		/* could do with better detail */
2857       : US"starttls-not-supported");
2858 # endif
2859   goto TLS_FAILED;
2860   }
2861 #endif	/*DISABLE_TLS*/
2862 
2863 /* If TLS is active, we have just started it up and re-done the EHLO command,
2864 so its response needs to be analyzed. If TLS is not active and this is a
2865 continued session down a previously-used socket, we haven't just done EHLO, so
2866 we skip this. */
2867 
2868 if (   !continue_hostname
2869 #ifndef DISABLE_TLS
2870     || tls_out.active.sock >= 0
2871 #endif
2872     )
2873   {
2874   if (sx->esmtp || sx->lmtp)
2875     {
2876 #ifndef DISABLE_PIPE_CONNECT
2877   if (!sx->early_pipe_active)
2878 #endif
2879     {
2880     sx->peer_offered = ehlo_response(sx->buffer,
2881 	0 /* no TLS */
2882 #ifndef DISABLE_PIPE_CONNECT
2883 	| (sx->lmtp && ob->lmtp_ignore_quota ? OPTION_IGNQ : 0)
2884 	| OPTION_DSN | OPTION_PIPE | OPTION_SIZE
2885 	| OPTION_CHUNKING | OPTION_PRDR | OPTION_UTF8
2886 	| (tls_out.active.sock >= 0 ? OPTION_EARLY_PIPE : 0) /* not for lmtp */
2887 
2888 #else
2889 
2890 	| (sx->lmtp && ob->lmtp_ignore_quota ? OPTION_IGNQ : 0)
2891 	| OPTION_CHUNKING
2892 	| OPTION_PRDR
2893 # ifdef SUPPORT_I18N
2894 	| (sx->addrlist->prop.utf8_msg ? OPTION_UTF8 : 0)
2895 	  /*XXX if we hand peercaps on to continued-conn processes,
2896 		must not depend on this addr */
2897 # endif
2898 	| OPTION_DSN
2899 	| OPTION_PIPE
2900 	| (ob->size_addition >= 0 ? OPTION_SIZE : 0)
2901 #endif
2902       );
2903 #ifndef DISABLE_PIPE_CONNECT
2904     if (tls_out.active.sock >= 0)
2905       sx->ehlo_resp.crypted_features = sx->peer_offered;
2906 #endif
2907 
2908 #ifdef EXPERIMENTAL_ESMTP_LIMITS
2909     if (tls_out.active.sock >= 0 || !(sx->peer_offered & OPTION_TLS))
2910       {
2911       ehlo_response_limits_read(sx);
2912       ehlo_response_limits_apply(sx);
2913       }
2914 #endif
2915     }
2916 
2917     /* Set for IGNOREQUOTA if the response to LHLO specifies support and the
2918     lmtp_ignore_quota option was set. */
2919 
2920     sx->igquotstr = sx->peer_offered & OPTION_IGNQ ? US" IGNOREQUOTA" : US"";
2921 
2922     /* If the response to EHLO specified support for the SIZE parameter, note
2923     this, provided size_addition is non-negative. */
2924 
2925     smtp_peer_options |= sx->peer_offered & OPTION_SIZE;
2926 
2927     /* Note whether the server supports PIPELINING. If hosts_avoid_esmtp matched
2928     the current host, esmtp will be false, so PIPELINING can never be used. If
2929     the current host matches hosts_avoid_pipelining, don't do it. */
2930 
2931     if (  sx->peer_offered & OPTION_PIPE
2932        && verify_check_given_host(CUSS &ob->hosts_avoid_pipelining, sx->conn_args.host) != OK)
2933       smtp_peer_options |= OPTION_PIPE;
2934 
2935     DEBUG(D_transport) debug_printf("%susing PIPELINING\n",
2936       smtp_peer_options & OPTION_PIPE ? "" : "not ");
2937 
2938     if (  sx->peer_offered & OPTION_CHUNKING
2939        && verify_check_given_host(CUSS &ob->hosts_try_chunking, sx->conn_args.host) != OK)
2940       sx->peer_offered &= ~OPTION_CHUNKING;
2941 
2942     if (sx->peer_offered & OPTION_CHUNKING)
2943       DEBUG(D_transport) debug_printf("CHUNKING usable\n");
2944 
2945 #ifndef DISABLE_PRDR
2946     if (  sx->peer_offered & OPTION_PRDR
2947        && verify_check_given_host(CUSS &ob->hosts_try_prdr, sx->conn_args.host) != OK)
2948       sx->peer_offered &= ~OPTION_PRDR;
2949 
2950     if (sx->peer_offered & OPTION_PRDR)
2951       DEBUG(D_transport) debug_printf("PRDR usable\n");
2952 #endif
2953 
2954     /* Note if the server supports DSN */
2955     smtp_peer_options |= sx->peer_offered & OPTION_DSN;
2956     DEBUG(D_transport) debug_printf("%susing DSN\n",
2957 			sx->peer_offered & OPTION_DSN ? "" : "not ");
2958 
2959 #ifndef DISABLE_PIPE_CONNECT
2960     if (  sx->early_pipe_ok
2961        && !sx->early_pipe_active
2962        && tls_out.active.sock >= 0
2963        && smtp_peer_options & OPTION_PIPE
2964        && ( sx->ehlo_resp.cleartext_features | sx->ehlo_resp.crypted_features)
2965 	  & OPTION_EARLY_PIPE)
2966       {
2967       DEBUG(D_transport) debug_printf("PIPE_CONNECT usable in future for this IP\n");
2968       sx->ehlo_resp.crypted_auths = study_ehlo_auths(sx);
2969       write_ehlo_cache_entry(sx);
2970       }
2971 #endif
2972 
2973     /* Note if the response to EHLO specifies support for the AUTH extension.
2974     If it has, check that this host is one we want to authenticate to, and do
2975     the business. The host name and address must be available when the
2976     authenticator's client driver is running. */
2977 
2978     switch (yield = smtp_auth(sx))
2979       {
2980       default:		goto SEND_QUIT;
2981       case OK:		break;
2982       case FAIL_SEND:	goto SEND_FAILED;
2983       case FAIL:	goto RESPONSE_FAILED;
2984       }
2985     }
2986   }
2987 sx->pipelining_used = pipelining_active = !!(smtp_peer_options & OPTION_PIPE);
2988 
2989 /* The setting up of the SMTP call is now complete. Any subsequent errors are
2990 message-specific. */
2991 
2992 sx->setting_up = FALSE;
2993 
2994 #ifdef SUPPORT_I18N
2995 if (sx->addrlist->prop.utf8_msg)
2996   {
2997   uschar * s;
2998 
2999   /* If the transport sets a downconversion mode it overrides any set by ACL
3000   for the message. */
3001 
3002   if ((s = ob->utf8_downconvert))
3003     {
3004     if (!(s = expand_string(s)))
3005       {
3006       message = string_sprintf("failed to expand utf8_downconvert: %s",
3007         expand_string_message);
3008       set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL, message, DEFER, FALSE, &sx->delivery_start);
3009       yield = DEFER;
3010       goto SEND_QUIT;
3011       }
3012     switch (*s)
3013       {
3014       case '1':	sx->addrlist->prop.utf8_downcvt = TRUE;
3015 		sx->addrlist->prop.utf8_downcvt_maybe = FALSE;
3016 		break;
3017       case '0':	sx->addrlist->prop.utf8_downcvt = FALSE;
3018 		sx->addrlist->prop.utf8_downcvt_maybe = FALSE;
3019 		break;
3020       case '-':	if (s[1] == '1')
3021 		  {
3022 		  sx->addrlist->prop.utf8_downcvt = FALSE;
3023 		  sx->addrlist->prop.utf8_downcvt_maybe = TRUE;
3024 		  }
3025 		break;
3026       }
3027     }
3028 
3029   sx->utf8_needed = !sx->addrlist->prop.utf8_downcvt
3030 		    && !sx->addrlist->prop.utf8_downcvt_maybe;
3031   DEBUG(D_transport) if (!sx->utf8_needed)
3032     debug_printf("utf8: %s downconvert\n",
3033       sx->addrlist->prop.utf8_downcvt ? "mandatory" : "optional");
3034   }
3035 
3036 /* If this is an international message we need the host to speak SMTPUTF8 */
3037 if (sx->utf8_needed && !(sx->peer_offered & OPTION_UTF8))
3038   {
3039   errno = ERRNO_UTF8_FWD;
3040   goto RESPONSE_FAILED;
3041   }
3042 #endif	/*SUPPORT_I18N*/
3043 
3044 return OK;
3045 
3046 
3047   {
3048   int code;
3049 
3050   RESPONSE_FAILED:
3051     if (errno == ECONNREFUSED)	/* first-read error on a TFO conn */
3052       {
3053       /* There is a testing facility for simulating a connection timeout, as I
3054       can't think of any other way of doing this. It converts a connection
3055       refused into a timeout if the timeout is set to 999999.  This is done for
3056       a 3whs connection in ip_connect(), but a TFO connection does not error
3057       there - instead it gets ECONNREFUSED on the first data read.  Tracking
3058       that a TFO really was done is too hard, or we would set a
3059       sx->pending_conn_done bit and test that in smtp_reap_banner() and
3060       smtp_reap_ehlo().  That would let us also add the conn-timeout to the
3061       cmd-timeout. */
3062 
3063       if (f.running_in_test_harness && ob->connect_timeout == 999999)
3064 	errno = ETIMEDOUT;
3065       set_errno_nohost(sx->addrlist,
3066 	errno == ETIMEDOUT ? ERRNO_CONNECTTIMEOUT : errno,
3067 	sx->verify ? US strerror(errno) : NULL,
3068 	DEFER, FALSE, &sx->delivery_start);
3069       sx->send_quit = FALSE;
3070       return DEFER;
3071       }
3072 
3073     /* really an error on an SMTP read */
3074     message = NULL;
3075     sx->send_quit = check_response(sx->conn_args.host, &errno, sx->addrlist->more_errno,
3076       sx->buffer, &code, &message, &pass_message);
3077     yield = DEFER;
3078     goto FAILED;
3079 
3080   SEND_FAILED:
3081     code = '4';
3082     message = US string_sprintf("send() to %s [%s] failed: %s",
3083       sx->conn_args.host->name, sx->conn_args.host->address, strerror(errno));
3084     sx->send_quit = FALSE;
3085     yield = DEFER;
3086     goto FAILED;
3087 
3088   EHLOHELO_FAILED:
3089     code = '4';
3090     message = string_sprintf("Remote host closed connection in response to %s"
3091       " (EHLO response was: %s)", smtp_command, sx->buffer);
3092     sx->send_quit = FALSE;
3093     yield = DEFER;
3094     goto FAILED;
3095 
3096   /* This label is jumped to directly when a TLS negotiation has failed,
3097   or was not done for a host for which it is required. Values will be set
3098   in message and errno, and setting_up will always be true. Treat as
3099   a temporary error. */
3100 
3101 #ifndef DISABLE_TLS
3102   TLS_FAILED:
3103     code = '4', yield = DEFER;
3104     goto FAILED;
3105 #endif
3106 
3107   /* The failure happened while setting up the call; see if the failure was
3108   a 5xx response (this will either be on connection, or following HELO - a 5xx
3109   after EHLO causes it to try HELO). If so, and there are no more hosts to try,
3110   fail all addresses, as this host is never going to accept them. For other
3111   errors during setting up (timeouts or whatever), defer all addresses, and
3112   yield DEFER, so that the host is not tried again for a while.
3113 
3114   XXX This peeking for another host feels like a layering violation. We want
3115   to note the host as unusable, but down here we shouldn't know if this was
3116   the last host to try for the addr(list).  Perhaps the upper layer should be
3117   the one to do set_errno() ?  The problem is that currently the addr is where
3118   errno etc. are stashed, but until we run out of hosts to try the errors are
3119   host-specific.  Maybe we should enhance the host_item definition? */
3120 
3121 FAILED:
3122   sx->ok = FALSE;                /* For when reached by GOTO */
3123   set_errno(sx->addrlist, errno, message,
3124 	    sx->conn_args.host->next
3125 	    ? DEFER
3126 	    : code == '5'
3127 #ifdef SUPPORT_I18N
3128 			|| errno == ERRNO_UTF8_FWD
3129 #endif
3130 	    ? FAIL : DEFER,
3131 	    pass_message,
3132 	    errno == ECONNREFUSED ? NULL : sx->conn_args.host,
3133 #ifdef EXPERIMENTAL_DSN_INFO
3134 	    sx->smtp_greeting, sx->helo_response,
3135 #endif
3136 	    &sx->delivery_start);
3137   }
3138 
3139 
3140 SEND_QUIT:
3141 
3142 if (sx->send_quit)
3143   (void)smtp_write_command(sx, SCMD_FLUSH, "QUIT\r\n");
3144 
3145 #ifndef DISABLE_TLS
3146 if (sx->cctx.tls_ctx)
3147   {
3148   if (sx->send_tlsclose)
3149     {
3150     tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_NOWAIT);
3151     sx->send_tlsclose = FALSE;
3152     }
3153   sx->cctx.tls_ctx = NULL;
3154   }
3155 #endif
3156 
3157 /* Close the socket, and return the appropriate value, first setting
3158 works because the NULL setting is passed back to the calling process, and
3159 remote_max_parallel is forced to 1 when delivering over an existing connection,
3160 */
3161 
3162 HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(close)>>\n");
3163 if (sx->send_quit)
3164   {
3165   shutdown(sx->cctx.sock, SHUT_WR);
3166   if (fcntl(sx->cctx.sock, F_SETFL, O_NONBLOCK) == 0)
3167     for (int i = 16; read(sx->cctx.sock, sx->inbuffer, sizeof(sx->inbuffer)) > 0 && i > 0;)
3168       i--;				/* drain socket */
3169   sx->send_quit = FALSE;
3170   }
3171 (void)close(sx->cctx.sock);
3172 sx->cctx.sock = -1;
3173 
3174 #ifndef DISABLE_EVENT
3175 (void) event_raise(sx->conn_args.tblock->event_action, US"tcp:close", NULL);
3176 #endif
3177 
3178 continue_transport = NULL;
3179 continue_hostname = NULL;
3180 return yield;
3181 }
3182 
3183 
3184 
3185 
3186 /* Create the string of options that will be appended to the MAIL FROM:
3187 in the connection context buffer */
3188 
3189 static int
build_mailcmd_options(smtp_context * sx,address_item * addrlist)3190 build_mailcmd_options(smtp_context * sx, address_item * addrlist)
3191 {
3192 uschar * p = sx->buffer;
3193 address_item * addr;
3194 int address_count;
3195 
3196 *p = 0;
3197 
3198 /* If we know the receiving MTA supports the SIZE qualification, and we know it,
3199 send it, adding something to the message size to allow for imprecision
3200 and things that get added en route. Exim keeps the number of lines
3201 in a message, so we can give an accurate value for the original message, but we
3202 need some additional to handle added headers. (Double "." characters don't get
3203 included in the count.) */
3204 
3205 if (  message_size > 0
3206    && sx->peer_offered & OPTION_SIZE && !(sx->avoid_option & OPTION_SIZE))
3207   {
3208 /*XXX problem here under spool_files_wireformat?
3209 Or just forget about lines?  Or inflate by a fixed proportion? */
3210 
3211   sprintf(CS p, " SIZE=%d", message_size+message_linecount+(SOB sx->conn_args.ob)->size_addition);
3212   while (*p) p++;
3213   }
3214 
3215 #ifndef DISABLE_PRDR
3216 /* If it supports Per-Recipient Data Responses, and we have more than one recipient,
3217 request that */
3218 
3219 sx->prdr_active = FALSE;
3220 if (sx->peer_offered & OPTION_PRDR)
3221   for (address_item * addr = addrlist; addr; addr = addr->next)
3222     if (addr->transport_return == PENDING_DEFER)
3223       {
3224       for (addr = addr->next; addr; addr = addr->next)
3225         if (addr->transport_return == PENDING_DEFER)
3226 	  {			/* at least two recipients to send */
3227 	  sx->prdr_active = TRUE;
3228 	  sprintf(CS p, " PRDR"); p += 5;
3229 	  break;
3230 	  }
3231       break;
3232       }
3233 #endif
3234 
3235 #ifdef SUPPORT_I18N
3236 /* If it supports internationalised messages, and this meesage need that,
3237 request it */
3238 
3239 if (  sx->peer_offered & OPTION_UTF8
3240    && addrlist->prop.utf8_msg
3241    && !addrlist->prop.utf8_downcvt
3242    )
3243   Ustrcpy(p, US" SMTPUTF8"), p += 9;
3244 #endif
3245 
3246 /* check if all addresses have DSN-lasthop flag; do not send RET and ENVID if so */
3247 for (sx->dsn_all_lasthop = TRUE, addr = addrlist, address_count = 0;
3248      addr && address_count < sx->max_rcpt;	/*XXX maybe also || sx->single_rcpt_domain ? */
3249      addr = addr->next) if (addr->transport_return == PENDING_DEFER)
3250   {
3251   address_count++;
3252   if (!(addr->dsn_flags & rf_dsnlasthop))
3253     {
3254     sx->dsn_all_lasthop = FALSE;
3255     break;
3256     }
3257   }
3258 
3259 /* Add any DSN flags to the mail command */
3260 
3261 if (sx->peer_offered & OPTION_DSN && !sx->dsn_all_lasthop)
3262   {
3263   if (dsn_ret == dsn_ret_hdrs)
3264     { Ustrcpy(p, US" RET=HDRS"); p += 9; }
3265   else if (dsn_ret == dsn_ret_full)
3266     { Ustrcpy(p, US" RET=FULL"); p += 9; }
3267 
3268   if (dsn_envid)
3269     {
3270     string_format(p, sizeof(sx->buffer) - (p-sx->buffer), " ENVID=%s", dsn_envid);
3271     while (*p) p++;
3272     }
3273   }
3274 
3275 /* If an authenticated_sender override has been specified for this transport
3276 instance, expand it. If the expansion is forced to fail, and there was already
3277 an authenticated_sender for this message, the original value will be used.
3278 Other expansion failures are serious. An empty result is ignored, but there is
3279 otherwise no check - this feature is expected to be used with LMTP and other
3280 cases where non-standard addresses (e.g. without domains) might be required. */
3281 
3282 return smtp_mail_auth_str(sx, p, addrlist) ? ERROR : OK;
3283 }
3284 
3285 
3286 static void
build_rcptcmd_options(smtp_context * sx,const address_item * addr)3287 build_rcptcmd_options(smtp_context * sx, const address_item * addr)
3288 {
3289 uschar * p = sx->buffer;
3290 *p = 0;
3291 
3292 /* Add any DSN flags to the rcpt command */
3293 
3294 if (sx->peer_offered & OPTION_DSN && !(addr->dsn_flags & rf_dsnlasthop))
3295   {
3296   if (addr->dsn_flags & rf_dsnflags)
3297     {
3298     BOOL first = TRUE;
3299 
3300     Ustrcpy(p, US" NOTIFY=");
3301     while (*p) p++;
3302     for (int i = 0; i < nelem(rf_list); i++) if (addr->dsn_flags & rf_list[i])
3303       {
3304       if (!first) *p++ = ',';
3305       first = FALSE;
3306       Ustrcpy(p, rf_names[i]);
3307       while (*p) p++;
3308       }
3309     }
3310 
3311   if (addr->dsn_orcpt)
3312     {
3313     string_format(p, sizeof(sx->buffer) - (p-sx->buffer), " ORCPT=%s",
3314       addr->dsn_orcpt);
3315     while (*p) p++;
3316     }
3317   }
3318 }
3319 
3320 
3321 
3322 /*
3323 Return:
3324  0	good, rcpt results in addr->transport_return (PENDING_OK, DEFER, FAIL)
3325  -1	MAIL response error
3326  -2	any non-MAIL read i/o error
3327  -3	non-MAIL response timeout
3328  -4	internal error; channel still usable
3329  -5	transmit failed
3330  */
3331 
3332 int
smtp_write_mail_and_rcpt_cmds(smtp_context * sx,int * yield)3333 smtp_write_mail_and_rcpt_cmds(smtp_context * sx, int * yield)
3334 {
3335 address_item * addr;
3336 #ifdef EXPERIMENTAL_ESMTP_LIMITS
3337 address_item * restart_addr = NULL;
3338 #endif
3339 int address_count, pipe_limit;
3340 int rc;
3341 
3342 if (build_mailcmd_options(sx, sx->first_addr) != OK)
3343   {
3344   *yield = ERROR;
3345   return -4;
3346   }
3347 
3348 /* From here until we send the DATA command, we can make use of PIPELINING
3349 if the server host supports it. The code has to be able to check the responses
3350 at any point, for when the buffer fills up, so we write it totally generally.
3351 When PIPELINING is off, each command written reports that it has flushed the
3352 buffer. */
3353 
3354 sx->pending_MAIL = TRUE;     /* The block starts with MAIL */
3355 
3356   {
3357   uschar * s = sx->from_addr;
3358 #ifdef SUPPORT_I18N
3359   uschar * errstr = NULL;
3360 
3361   /* If we must downconvert, do the from-address here.  Remember we had to
3362   for the to-addresses (done below), and also (ugly) for re-doing when building
3363   the delivery log line. */
3364 
3365   if (  sx->addrlist->prop.utf8_msg
3366      && (sx->addrlist->prop.utf8_downcvt || !(sx->peer_offered & OPTION_UTF8))
3367      )
3368     {
3369     if (s = string_address_utf8_to_alabel(s, &errstr), errstr)
3370       {
3371       set_errno_nohost(sx->addrlist, ERRNO_EXPANDFAIL, errstr, DEFER, FALSE, &sx->delivery_start);
3372       *yield = ERROR;
3373       return -4;
3374       }
3375     setflag(sx->addrlist, af_utf8_downcvt);
3376     }
3377 #endif
3378 
3379   rc = smtp_write_command(sx, pipelining_active ? SCMD_BUFFER : SCMD_FLUSH,
3380 	  "MAIL FROM:<%s>%s\r\n", s, sx->buffer);
3381   }
3382 
3383 mail_command = string_copy(big_buffer);  /* Save for later error message */
3384 
3385 switch(rc)
3386   {
3387   case -1:                /* Transmission error */
3388     return -5;
3389 
3390   case +1:                /* Cmd was sent */
3391     if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2',
3392        (SOB sx->conn_args.ob)->command_timeout))
3393       {
3394       if (errno == 0 && sx->buffer[0] == '4')
3395 	{
3396 	errno = ERRNO_MAIL4XX;
3397 	sx->addrlist->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
3398 	}
3399       return -1;
3400       }
3401     sx->pending_MAIL = FALSE;
3402     break;
3403 
3404   /* otherwise zero: command queued for pipeline */
3405   }
3406 
3407 /* Pass over all the relevant recipient addresses for this host, which are the
3408 ones that have status PENDING_DEFER. If we are using PIPELINING, we can send
3409 several before we have to read the responses for those seen so far. This
3410 checking is done by a subroutine because it also needs to be done at the end.
3411 Send only up to max_rcpt addresses at a time, leaving next_addr pointing to
3412 the next one if not all are sent.
3413 
3414 In the MUA wrapper situation, we want to flush the PIPELINING buffer for the
3415 last address because we want to abort if any recipients have any kind of
3416 problem, temporary or permanent. We know that all recipient addresses will have
3417 the PENDING_DEFER status, because only one attempt is ever made, and we know
3418 that max_rcpt will be large, so all addresses will be done at once.
3419 
3420 For verify we flush the pipeline after any (the only) rcpt address. */
3421 
3422 for (addr = sx->first_addr, address_count = 0, pipe_limit = 100;
3423      addr &&  address_count < sx->max_rcpt;
3424      addr = addr->next) if (addr->transport_return == PENDING_DEFER)
3425   {
3426   int cmds_sent;
3427   BOOL no_flush;
3428   uschar * rcpt_addr;
3429 
3430 #ifdef EXPERIMENTAL_ESMTP_LIMITS
3431   if (  sx->single_rcpt_domain					/* restriction on domains */
3432      && address_count > 0					/* not first being sent */
3433      && Ustrcmp(addr->domain, sx->first_addr->domain) != 0	/* dom diff from first */
3434      )
3435     {
3436     DEBUG(D_transport) debug_printf("skipping different domain %s\n", addr->domain);
3437 
3438     /* Ensure the smtp-response reaper does not think the address had a RCPT
3439     command sent for it.  Reset to PENDING_DEFER in smtp_deliver(), where we
3440     goto SEND_MESSAGE.  */
3441 
3442     addr->transport_return = SKIP;
3443     if (!restart_addr) restart_addr = addr;	/* note restart point */
3444     continue;					/* skip this one */
3445     }
3446 #endif
3447 
3448   addr->dsn_aware = sx->peer_offered & OPTION_DSN
3449     ? dsn_support_yes : dsn_support_no;
3450 
3451   address_count++;
3452   if (pipe_limit-- <= 0)
3453     { no_flush = FALSE; pipe_limit = 100; }
3454   else
3455     no_flush = pipelining_active && !sx->verify
3456 	  && (!mua_wrapper || addr->next && address_count < sx->max_rcpt);
3457 
3458   build_rcptcmd_options(sx, addr);
3459 
3460   /* Now send the RCPT command, and process outstanding responses when
3461   necessary. After a timeout on RCPT, we just end the function, leaving the
3462   yield as OK, because this error can often mean that there is a problem with
3463   just one address, so we don't want to delay the host. */
3464 
3465   rcpt_addr = transport_rcpt_address(addr, sx->conn_args.tblock->rcpt_include_affixes);
3466 
3467 #ifdef SUPPORT_I18N
3468   if (  testflag(sx->addrlist, af_utf8_downcvt)
3469      && !(rcpt_addr = string_address_utf8_to_alabel(rcpt_addr, NULL))
3470      )
3471     {
3472     /*XXX could we use a per-address errstr here? Not fail the whole send? */
3473     errno = ERRNO_EXPANDFAIL;
3474     return -5;		/*XXX too harsh? */
3475     }
3476 #endif
3477 
3478   cmds_sent = smtp_write_command(sx, no_flush ? SCMD_BUFFER : SCMD_FLUSH,
3479     "RCPT TO:<%s>%s%s\r\n", rcpt_addr, sx->igquotstr, sx->buffer);
3480 
3481   if (cmds_sent < 0) return -5;
3482   if (cmds_sent > 0)
3483     {
3484     switch(sync_responses(sx, cmds_sent, 0))
3485       {
3486       case 3: sx->ok = TRUE;			/* 2xx & 5xx => OK & progress made */
3487       case 2: sx->completed_addr = TRUE;	/* 5xx (only) => progress made */
3488 	      break;
3489 
3490       case 1: sx->ok = TRUE;			/* 2xx (only) => OK, but if LMTP, */
3491 	      if (!sx->lmtp)			/*  can't tell about progress yet */
3492 		sx->completed_addr = TRUE;
3493       case 0:					/* No 2xx or 5xx, but no probs */
3494 	      /* If any RCPT got a 452 response then next_addr has been updated
3495 	      for restarting with a new MAIL on the same connection.  Send no more
3496 	      RCPTs for this MAIL. */
3497 
3498 	      if (sx->RCPT_452)
3499 		{
3500 		DEBUG(D_transport) debug_printf("seen 452 too-many-rcpts\n");
3501 		sx->RCPT_452 = FALSE;
3502 		/* sx->next_addr has been reset for fast_retry */
3503 		return 0;
3504 		}
3505 	      break;
3506 
3507       case -1: return -3;			/* Timeout on RCPT */
3508       case -2: return -2;			/* non-MAIL read i/o error */
3509       default: return -1;			/* any MAIL error */
3510 
3511 #ifndef DISABLE_PIPE_CONNECT
3512       case -4: return -1;			/* non-2xx for pipelined banner or EHLO */
3513       case -5: return -1;			/* TLS first-read error */
3514 #endif
3515       }
3516     }
3517   }      /* Loop for next address */
3518 
3519 #ifdef EXPERIMENTAL_ESMTP_LIMITS
3520 sx->next_addr = restart_addr ? restart_addr : addr;
3521 #else
3522 sx->next_addr = addr;
3523 #endif
3524 return 0;
3525 }
3526 
3527 
3528 #ifndef DISABLE_TLS
3529 /*****************************************************
3530 * Proxy TLS connection for another transport process *
3531 ******************************************************/
3532 /*
3533 Close the unused end of the pipe, fork once more, then use the given buffer
3534 as a staging area, and select on both the given fd and the TLS'd client-fd for
3535 data to read (per the coding in ip_recv() and fd_ready() this is legitimate).
3536 Do blocking full-size writes, and reads under a timeout.  Once both input
3537 channels are closed, exit the process.
3538 
3539 Arguments:
3540   ct_ctx	tls context
3541   buf		space to use for buffering
3542   bufsiz	size of buffer
3543   pfd		pipe filedescriptor array; [0] is comms to proxied process
3544   timeout	per-read timeout, seconds
3545 
3546 Does not return.
3547 */
3548 
3549 void
smtp_proxy_tls(void * ct_ctx,uschar * buf,size_t bsize,int * pfd,int timeout)3550 smtp_proxy_tls(void * ct_ctx, uschar * buf, size_t bsize, int * pfd,
3551   int timeout)
3552 {
3553 struct pollfd p[2] = {{.fd = tls_out.active.sock, .events = POLLIN},
3554 		      {.fd = pfd[0], .events = POLLIN}};
3555 int rc, i;
3556 BOOL send_tls_shutdown = TRUE;
3557 
3558 close(pfd[1]);
3559 if ((rc = exim_fork(US"tls-proxy")))
3560   _exit(rc < 0 ? EXIT_FAILURE : EXIT_SUCCESS);
3561 
3562 set_process_info("proxying TLS connection for continued transport");
3563 
3564 do
3565   {
3566   time_t time_left = timeout;
3567   time_t time_start = time(NULL);
3568 
3569   /* wait for data */
3570   do
3571     {
3572     rc = poll(p, 2, time_left * 1000);
3573 
3574     if (rc < 0 && errno == EINTR)
3575       if ((time_left -= time(NULL) - time_start) > 0) continue;
3576 
3577     if (rc <= 0)
3578       {
3579       DEBUG(D_transport) if (rc == 0) debug_printf("%s: timed out\n", __FUNCTION__);
3580       goto done;
3581       }
3582 
3583     /* For errors where not readable, bomb out */
3584 
3585     if (p[0].revents & POLLERR || p[1].revents & POLLERR)
3586       {
3587       DEBUG(D_transport) debug_printf("select: exceptional cond on %s fd\n",
3588 	p[0].revents & POLLERR ? "tls" : "proxy");
3589       if (!(p[0].revents & POLLIN || p[1].events & POLLIN))
3590 	goto done;
3591       DEBUG(D_transport) debug_printf("- but also readable; no exit yet\n");
3592       }
3593     }
3594   while (rc < 0 || !(p[0].revents & POLLIN || p[1].revents & POLLIN));
3595 
3596   /* handle inbound data */
3597   if (p[0].revents & POLLIN)
3598     if ((rc = tls_read(ct_ctx, buf, bsize)) <= 0)	/* Expect -1 for EOF; */
3599     {				    /* that reaps the TLS Close Notify record */
3600       p[0].fd = -1;
3601       shutdown(pfd[0], SHUT_WR);
3602       timeout = 5;
3603       }
3604     else
3605       for (int nbytes = 0; rc - nbytes > 0; nbytes += i)
3606 	if ((i = write(pfd[0], buf + nbytes, rc - nbytes)) < 0) goto done;
3607 
3608   /* Handle outbound data.  We cannot combine payload and the TLS-close
3609   due to the limitations of the (pipe) channel feeding us.  Maybe use a unix-domain
3610   socket? */
3611   if (p[1].revents & POLLIN)
3612     if ((rc = read(pfd[0], buf, bsize)) <= 0)
3613       {
3614       p[1].fd = -1;
3615 
3616 # ifdef EXIM_TCP_CORK  /* Use _CORK to get TLS Close Notify in FIN segment */
3617       (void) setsockopt(tls_out.active.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
3618 # endif
3619       tls_shutdown_wr(ct_ctx);
3620       send_tls_shutdown = FALSE;
3621       shutdown(tls_out.active.sock, SHUT_WR);
3622       }
3623     else
3624       for (int nbytes = 0; rc - nbytes > 0; nbytes += i)
3625 	if ((i = tls_write(ct_ctx, buf + nbytes, rc - nbytes, FALSE)) < 0)
3626 	  goto done;
3627   }
3628 while (p[0].fd >= 0 || p[1].fd >= 0);
3629 
3630 done:
3631   if (send_tls_shutdown) tls_close(ct_ctx, TLS_SHUTDOWN_NOWAIT);
3632   ct_ctx = NULL;
3633   testharness_pause_ms(100);	/* let logging complete */
3634   exim_exit(EXIT_SUCCESS);
3635 }
3636 #endif
3637 
3638 
3639 /*************************************************
3640 *       Deliver address list to given host       *
3641 *************************************************/
3642 
3643 /* If continue_hostname is not null, we get here only when continuing to
3644 deliver down an existing channel. The channel was passed as the standard
3645 input. TLS is never active on a passed channel; the previous process either
3646 closes it down before passing the connection on, or inserts a TLS-proxy
3647 process and passes on a cleartext conection.
3648 
3649 Otherwise, we have to make a connection to the remote host, and do the
3650 initial protocol exchange.
3651 
3652 When running as an MUA wrapper, if the sender or any recipient is rejected,
3653 temporarily or permanently, we force failure for all recipients.
3654 
3655 Arguments:
3656   addrlist        chain of potential addresses to deliver; only those whose
3657                   transport_return field is set to PENDING_DEFER are currently
3658                   being processed; others should be skipped - they have either
3659                   been delivered to an earlier host or IP address, or been
3660                   failed by one of them.
3661   host            host to deliver to
3662   host_af         AF_INET or AF_INET6
3663   defport         default TCP/IP port to use if host does not specify, in host
3664 		  byte order
3665   interface       interface to bind to, or NULL
3666   tblock          transport instance block
3667   message_defer   set TRUE if yield is OK, but all addresses were deferred
3668                     because of a non-recipient, non-host failure, that is, a
3669                     4xx response to MAIL FROM, DATA, or ".". This is a defer
3670                     that is specific to the message.
3671   suppress_tls    if TRUE, don't attempt a TLS connection - this is set for
3672                     a second attempt after TLS initialization fails
3673 
3674 Returns:          OK    - the connection was made and the delivery attempted;
3675                           the result for each address is in its data block.
3676                   DEFER - the connection could not be made, or something failed
3677                           while setting up the SMTP session, or there was a
3678                           non-message-specific error, such as a timeout.
3679                   ERROR - a filter command is specified for this transport,
3680                           and there was a problem setting it up; OR helo_data
3681                           or add_headers or authenticated_sender is specified
3682                           for this transport, and the string failed to expand
3683 
3684 		For all non-OK returns the first addr of the list carries the
3685 		time taken for the attempt.
3686 */
3687 
3688 static int
smtp_deliver(address_item * addrlist,host_item * host,int host_af,int defport,uschar * interface,transport_instance * tblock,BOOL * message_defer,BOOL suppress_tls)3689 smtp_deliver(address_item *addrlist, host_item *host, int host_af, int defport,
3690   uschar *interface, transport_instance *tblock,
3691   BOOL *message_defer, BOOL suppress_tls)
3692 {
3693 smtp_transport_options_block * ob = SOB tblock->options_block;
3694 int yield = OK;
3695 int save_errno;
3696 int rc;
3697 
3698 uschar *message = NULL;
3699 uschar new_message_id[MESSAGE_ID_LENGTH + 1];
3700 smtp_context * sx = store_get(sizeof(*sx), TRUE);	/* tainted, for the data buffers */
3701 BOOL pass_message = FALSE;
3702 #ifdef EXPERIMENTAL_ESMTP_LIMITS
3703 BOOL mail_limit = FALSE;
3704 #endif
3705 #ifdef SUPPORT_DANE
3706 BOOL dane_held;
3707 #endif
3708 BOOL tcw_done = FALSE, tcw = FALSE;
3709 
3710 *message_defer = FALSE;
3711 
3712 memset(sx, 0, sizeof(*sx));
3713 sx->addrlist = addrlist;
3714 sx->conn_args.host = host;
3715 sx->conn_args.host_af = host_af,
3716 sx->port = defport;
3717 sx->conn_args.interface = interface;
3718 sx->helo_data = NULL;
3719 sx->conn_args.tblock = tblock;
3720 /* sx->verify = FALSE; */
3721 gettimeofday(&sx->delivery_start, NULL);
3722 sx->sync_addr = sx->first_addr = addrlist;
3723 
3724 REPEAT_CONN:
3725 #ifdef SUPPORT_DANE
3726 dane_held = FALSE;
3727 #endif
3728 
3729 /* Get the channel set up ready for a message, MAIL FROM being the next
3730 SMTP command to send. */
3731 
3732 if ((rc = smtp_setup_conn(sx, suppress_tls)) != OK)
3733   {
3734   timesince(&addrlist->delivery_time, &sx->delivery_start);
3735   yield = rc;
3736   goto TIDYUP;
3737   }
3738 
3739 #ifdef SUPPORT_DANE
3740 /* If the connection used DANE, ignore for now any addresses with incompatible
3741 domains.  The SNI has to be the domain.  Arrange a whole new TCP conn later,
3742 just in case only TLS isn't enough. */
3743 
3744 if (sx->conn_args.dane)
3745   {
3746   const uschar * dane_domain = sx->first_addr->domain;
3747 
3748   for (address_item * a = sx->first_addr->next; a; a = a->next)
3749     if (  a->transport_return == PENDING_DEFER
3750        && Ustrcmp(dane_domain, a->domain) != 0)
3751       {
3752       DEBUG(D_transport) debug_printf("DANE: holding %s for later\n", a->domain);
3753       dane_held = TRUE;
3754       a->transport_return = DANE;
3755       }
3756   }
3757 #endif
3758 
3759 /* If there is a filter command specified for this transport, we can now
3760 set it up. This cannot be done until the identity of the host is known. */
3761 
3762 if (tblock->filter_command)
3763   {
3764   transport_filter_timeout = tblock->filter_timeout;
3765 
3766   /* On failure, copy the error to all addresses, abandon the SMTP call, and
3767   yield ERROR. */
3768 
3769   if (!transport_set_up_command(&transport_filter_argv,
3770 	tblock->filter_command, TRUE, DEFER, addrlist,
3771 	string_sprintf("%.50s transport", tblock->name), NULL))
3772     {
3773     set_errno_nohost(addrlist->next, addrlist->basic_errno, addrlist->message, DEFER,
3774       FALSE, &sx->delivery_start);
3775     yield = ERROR;
3776     goto SEND_QUIT;
3777     }
3778 
3779   if (  transport_filter_argv
3780      && *transport_filter_argv
3781      && **transport_filter_argv
3782      && sx->peer_offered & OPTION_CHUNKING
3783 #ifndef DISABLE_DKIM
3784     /* When dkim signing, chunking is handled even with a transport-filter */
3785      && !(ob->dkim.dkim_private_key && ob->dkim.dkim_domain && ob->dkim.dkim_selector)
3786      && !ob->dkim.force_bodyhash
3787 #endif
3788      )
3789     {
3790     sx->peer_offered &= ~OPTION_CHUNKING;
3791     DEBUG(D_transport) debug_printf("CHUNKING not usable due to transport filter\n");
3792     }
3793   }
3794 
3795 /* For messages that have more than the maximum number of envelope recipients,
3796 we want to send several transactions down the same SMTP connection. (See
3797 comments in deliver.c as to how this reconciles, heuristically, with
3798 remote_max_parallel.) This optimization was added to Exim after the following
3799 code was already working. The simplest way to put it in without disturbing the
3800 code was to use a goto to jump back to this point when there is another
3801 transaction to handle. */
3802 
3803 SEND_MESSAGE:
3804 sx->from_addr = return_path;
3805 sx->sync_addr = sx->first_addr;
3806 sx->ok = FALSE;
3807 sx->send_rset = TRUE;
3808 sx->completed_addr = FALSE;
3809 
3810 
3811 /* If we are a continued-connection-after-verify the MAIL and RCPT
3812 commands were already sent; do not re-send but do mark the addrs as
3813 having been accepted up to RCPT stage.  A traditional cont-conn
3814 always has a sequence number greater than one. */
3815 
3816 if (continue_hostname && continue_sequence == 1)
3817   {
3818   /* sx->pending_MAIL = FALSE; */
3819   sx->ok = TRUE;
3820   /* sx->next_addr = NULL; */
3821 
3822   for (address_item * addr = addrlist; addr; addr = addr->next)
3823     addr->transport_return = PENDING_OK;
3824   }
3825 else
3826   {
3827   /* Initiate a message transfer. */
3828 
3829   switch(smtp_write_mail_and_rcpt_cmds(sx, &yield))
3830     {
3831     case 0:		break;
3832     case -1: case -2:	goto RESPONSE_FAILED;
3833     case -3:		goto END_OFF;
3834     case -4:		goto SEND_QUIT;
3835     default:		goto SEND_FAILED;
3836     }
3837 
3838   /* If we are an MUA wrapper, abort if any RCPTs were rejected, either
3839   permanently or temporarily. We should have flushed and synced after the last
3840   RCPT. */
3841 
3842   if (mua_wrapper)
3843     {
3844     address_item * a;
3845     unsigned cnt;
3846 
3847     for (a = sx->first_addr, cnt = 0; a && cnt < sx->max_rcpt; a = a->next, cnt++)
3848       if (a->transport_return != PENDING_OK)
3849 	{
3850 	/*XXX could we find a better errno than 0 here? */
3851 	set_errno_nohost(addrlist, 0, a->message, FAIL,
3852 	  testflag(a, af_pass_message), &sx->delivery_start);
3853 	sx->ok = FALSE;
3854 	break;
3855 	}
3856     }
3857   }
3858 
3859 /* If ok is TRUE, we know we have got at least one good recipient, and must now
3860 send DATA, but if it is FALSE (in the normal, non-wrapper case), we may still
3861 have a good recipient buffered up if we are pipelining. We don't want to waste
3862 time sending DATA needlessly, so we only send it if either ok is TRUE or if we
3863 are pipelining. The responses are all handled by sync_responses().
3864 If using CHUNKING, do not send a BDAT until we know how big a chunk we want
3865 to send is. */
3866 
3867 if (  !(sx->peer_offered & OPTION_CHUNKING)
3868    && (sx->ok || (pipelining_active && !mua_wrapper)))
3869   {
3870   int count = smtp_write_command(sx, SCMD_FLUSH, "DATA\r\n");
3871 
3872   if (count < 0) goto SEND_FAILED;
3873   switch(sync_responses(sx, count, sx->ok ? +1 : -1))
3874     {
3875     case 3: sx->ok = TRUE;            /* 2xx & 5xx => OK & progress made */
3876     case 2: sx->completed_addr = TRUE;    /* 5xx (only) => progress made */
3877     break;
3878 
3879     case 1: sx->ok = TRUE;            /* 2xx (only) => OK, but if LMTP, */
3880     if (!sx->lmtp) sx->completed_addr = TRUE; /* can't tell about progress yet */
3881     case 0: break;			/* No 2xx or 5xx, but no probs */
3882 
3883     case -1: goto END_OFF;		/* Timeout on RCPT */
3884 
3885 #ifndef DISABLE_PIPE_CONNECT
3886     case -5:				/* TLS first-read error */
3887     case -4:  HDEBUG(D_transport)
3888 		debug_printf("failed reaping pipelined cmd responses\n");
3889 #endif
3890     default: goto RESPONSE_FAILED;       /* I/O error, or any MAIL/DATA error */
3891     }
3892   pipelining_active = FALSE;
3893   data_command = string_copy(big_buffer);  /* Save for later error message */
3894   }
3895 
3896 /* If there were no good recipients (but otherwise there have been no
3897 problems), just set ok TRUE, since we have handled address-specific errors
3898 already. Otherwise, it's OK to send the message. Use the check/escape mechanism
3899 for handling the SMTP dot-handling protocol, flagging to apply to headers as
3900 well as body. Set the appropriate timeout value to be used for each chunk.
3901 (Haven't been able to make it work using select() for writing yet.) */
3902 
3903 if (  !sx->ok
3904    && (!(sx->peer_offered & OPTION_CHUNKING) || !pipelining_active))
3905   {
3906   /* Save the first address of the next batch. */
3907   sx->first_addr = sx->next_addr;
3908 
3909   sx->ok = TRUE;
3910   }
3911 else
3912   {
3913   transport_ctx tctx = {
3914     .u = {.fd = sx->cctx.sock},	/*XXX will this need TLS info? */
3915     .tblock =	tblock,
3916     .addr =	addrlist,
3917     .check_string = US".",
3918     .escape_string = US"..",	/* Escaping strings */
3919     .options =
3920       topt_use_crlf | topt_escape_headers
3921     | (tblock->body_only	? topt_no_headers : 0)
3922     | (tblock->headers_only	? topt_no_body : 0)
3923     | (tblock->return_path_add	? topt_add_return_path : 0)
3924     | (tblock->delivery_date_add ? topt_add_delivery_date : 0)
3925     | (tblock->envelope_to_add	? topt_add_envelope_to : 0)
3926   };
3927 
3928   /* If using CHUNKING we need a callback from the generic transport
3929   support to us, for the sending of BDAT smtp commands and the reaping
3930   of responses.  The callback needs a whole bunch of state so set up
3931   a transport-context structure to be passed around. */
3932 
3933   if (sx->peer_offered & OPTION_CHUNKING)
3934     {
3935     tctx.check_string = tctx.escape_string = NULL;
3936     tctx.options |= topt_use_bdat;
3937     tctx.chunk_cb = smtp_chunk_cmd_callback;
3938     sx->pending_BDAT = FALSE;
3939     sx->good_RCPT = sx->ok;
3940     sx->cmd_count = 0;
3941     tctx.smtp_context = sx;
3942     }
3943   else
3944     tctx.options |= topt_end_dot;
3945 
3946   /* Save the first address of the next batch. */
3947   sx->first_addr = sx->next_addr;
3948 
3949   /* Responses from CHUNKING commands go in buffer.  Otherwise,
3950   there has not been a response. */
3951 
3952   sx->buffer[0] = 0;
3953 
3954   sigalrm_seen = FALSE;
3955   transport_write_timeout = ob->data_timeout;
3956   smtp_command = US"sending data block";   /* For error messages */
3957   DEBUG(D_transport|D_v)
3958     if (sx->peer_offered & OPTION_CHUNKING)
3959       debug_printf("         will write message using CHUNKING\n");
3960     else
3961       debug_printf("  SMTP>> writing message and terminating \".\"\n");
3962   transport_count = 0;
3963 
3964 #ifndef DISABLE_DKIM
3965   {
3966 # ifdef MEASURE_TIMING
3967   struct timeval t0;
3968   gettimeofday(&t0, NULL);
3969 # endif
3970   dkim_exim_sign_init();
3971 # ifdef EXPERIMENTAL_ARC
3972     {
3973     uschar * s = ob->arc_sign;
3974     if (s)
3975       {
3976       if (!(ob->dkim.arc_signspec = s = expand_string(s)))
3977 	{
3978 	if (!f.expand_string_forcedfail)
3979 	  {
3980 	  message = US"failed to expand arc_sign";
3981 	  sx->ok = FALSE;
3982 	  goto SEND_FAILED;
3983 	  }
3984 	}
3985       else if (*s)
3986 	{
3987 	/* Ask dkim code to hash the body for ARC */
3988 	(void) arc_ams_setup_sign_bodyhash();
3989 	ob->dkim.force_bodyhash = TRUE;
3990 	}
3991       }
3992     }
3993 # endif
3994 # ifdef MEASURE_TIMING
3995   report_time_since(&t0, US"dkim_exim_sign_init (delta)");
3996 # endif
3997   }
3998 #endif
3999 
4000   /* See if we can pipeline QUIT.  Reasons not to are
4001   - pipelining not active
4002   - not ok to send quit
4003   - errors in amtp transation responses
4004   - more addrs to send for this message or this host
4005   - this message was being retried
4006   - more messages for this host
4007   If we can, we want the message-write to not flush (the tail end of) its data out.  */
4008 
4009   if (  sx->pipelining_used
4010      && (sx->ok && sx->completed_addr || sx->peer_offered & OPTION_CHUNKING)
4011      && sx->send_quit
4012      && !(sx->first_addr || f.continue_more)
4013      && f.deliver_firsttime
4014      )
4015     {
4016     smtp_compare_t t_compare =
4017       {.tblock = tblock, .current_sender_address = sender_address};
4018 
4019     tcw_done = TRUE;
4020     tcw =
4021 #ifndef DISABLE_TLS
4022 	   (  tls_out.active.sock < 0  &&  !continue_proxy_cipher
4023            || verify_check_given_host(CUSS &ob->hosts_nopass_tls, host) != OK
4024 	   )
4025         &&
4026 #endif
4027            transport_check_waiting(tblock->name, host->name,
4028              tblock->connection_max_messages, new_message_id,
4029 	     (oicf)smtp_are_same_identities, (void*)&t_compare);
4030     if (!tcw)
4031       {
4032       HDEBUG(D_transport) debug_printf("will pipeline QUIT\n");
4033       tctx.options |= topt_no_flush;
4034       }
4035     }
4036 
4037 #ifndef DISABLE_DKIM
4038   sx->ok = dkim_transport_write_message(&tctx, &ob->dkim, CUSS &message);
4039 #else
4040   sx->ok = transport_write_message(&tctx, 0);
4041 #endif
4042 
4043   /* transport_write_message() uses write() because it is called from other
4044   places to write to non-sockets. This means that under some OS (e.g. Solaris)
4045   it can exit with "Broken pipe" as its error. This really means that the
4046   socket got closed at the far end. */
4047 
4048   transport_write_timeout = 0;   /* for subsequent transports */
4049 
4050   /* Failure can either be some kind of I/O disaster (including timeout),
4051   or the failure of a transport filter or the expansion of added headers.
4052   Or, when CHUNKING, it can be a protocol-detected failure. */
4053 
4054   if (!sx->ok)
4055     if (message) goto SEND_FAILED;
4056     else         goto RESPONSE_FAILED;
4057 
4058   /* We used to send the terminating "." explicitly here, but because of
4059   buffering effects at both ends of TCP/IP connections, you don't gain
4060   anything by keeping it separate, so it might as well go in the final
4061   data buffer for efficiency. This is now done by setting the topt_end_dot
4062   flag above. */
4063 
4064   smtp_command = US"end of data";
4065 
4066   /* If we can pipeline a QUIT with the data them send it now.  If a new message
4067   for this host appeared in the queue while data was being sent, we will not see
4068   it and it will have to wait for a queue run.  If there was one but another
4069   thread took it, we might attempt to send it - but locking of spoolfiles will
4070   detect that. Use _MORE to get QUIT in FIN segment. */
4071 
4072   if (tcw_done && !tcw)
4073     {
4074     /*XXX jgh 2021/03/10 google et. al screwup.  G, at least, sends TCP FIN in response to TLS
4075     close-notify.  Under TLS 1.3, violating RFC.
4076     However, TLS 1.2 does not have half-close semantics. */
4077 
4078     if (     sx->cctx.tls_ctx
4079 #if 0 && !defined(DISABLE_TLS)
4080           && Ustrcmp(tls_out.ver, "TLS1.3") != 0
4081 #endif
4082        || !f.deliver_firsttime
4083        )
4084       {				/* Send QUIT now and not later */
4085       (void)smtp_write_command(sx, SCMD_FLUSH, "QUIT\r\n");
4086       sx->send_quit = FALSE;
4087       }
4088     else
4089       {				/* add QUIT to the output buffer */
4090       (void)smtp_write_command(sx, SCMD_MORE, "QUIT\r\n");
4091       sx->send_quit = FALSE;	/* avoid sending it later */
4092 
4093 #ifndef DISABLE_TLS
4094       if (sx->cctx.tls_ctx)	/* need to send TLS Close Notify */
4095 	{
4096 # ifdef EXIM_TCP_CORK		/* Use _CORK to get Close Notify in FIN segment */
4097 	(void) setsockopt(sx->cctx.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
4098 # endif
4099 	tls_shutdown_wr(sx->cctx.tls_ctx);
4100 	sx->send_tlsclose = FALSE;	/* avoid later repeat */
4101 	}
4102 #endif
4103       HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(shutdown)>>\n");
4104       shutdown(sx->cctx.sock, SHUT_WR);	/* flush output buffer, with TCP FIN */
4105       }
4106     }
4107 
4108   if (sx->peer_offered & OPTION_CHUNKING && sx->cmd_count > 1)
4109     {
4110     /* Reap any outstanding MAIL & RCPT commands, but not a DATA-go-ahead */
4111     switch(sync_responses(sx, sx->cmd_count-1, 0))
4112       {
4113       case 3: sx->ok = TRUE;            /* 2xx & 5xx => OK & progress made */
4114       case 2: sx->completed_addr = TRUE;    /* 5xx (only) => progress made */
4115 	      break;
4116 
4117       case 1: sx->ok = TRUE;		/* 2xx (only) => OK, but if LMTP, */
4118       if (!sx->lmtp) sx->completed_addr = TRUE; /* can't tell about progress yet */
4119       case 0: break;			/* No 2xx or 5xx, but no probs */
4120 
4121       case -1: goto END_OFF;		/* Timeout on RCPT */
4122 
4123 #ifndef DISABLE_PIPE_CONNECT
4124       case -5:				/* TLS first-read error */
4125       case -4:  HDEBUG(D_transport)
4126 		  debug_printf("failed reaping pipelined cmd responses\n");
4127 #endif
4128       default: goto RESPONSE_FAILED;	/* I/O error, or any MAIL/DATA error */
4129       }
4130     }
4131 
4132 #ifndef DISABLE_PRDR
4133   /* For PRDR we optionally get a partial-responses warning followed by the
4134   individual responses, before going on with the overall response.  If we don't
4135   get the warning then deal with per non-PRDR. */
4136 
4137   if(sx->prdr_active)
4138     {
4139     sx->ok = smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '3', ob->final_timeout);
4140     if (!sx->ok && errno == 0) switch(sx->buffer[0])
4141       {
4142       case '2': sx->prdr_active = FALSE;
4143 		sx->ok = TRUE;
4144 		break;
4145       case '4': errno = ERRNO_DATA4XX;
4146 		addrlist->more_errno |=
4147 		  ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
4148 		break;
4149       }
4150     }
4151   else
4152 #endif
4153 
4154   /* For non-PRDR SMTP, we now read a single response that applies to the
4155   whole message.  If it is OK, then all the addresses have been delivered. */
4156 
4157   if (!sx->lmtp)
4158     {
4159     sx->ok = smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2',
4160       ob->final_timeout);
4161     if (!sx->ok && errno == 0 && sx->buffer[0] == '4')
4162       {
4163       errno = ERRNO_DATA4XX;
4164       addrlist->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
4165       }
4166     }
4167 
4168   /* For LMTP, we get back a response for every RCPT command that we sent;
4169   some may be accepted and some rejected. For those that get a response, their
4170   status is fixed; any that are accepted have been handed over, even if later
4171   responses crash - at least, that's how I read RFC 2033.
4172 
4173   If all went well, mark the recipient addresses as completed, record which
4174   host/IPaddress they were delivered to, and cut out RSET when sending another
4175   message down the same channel. Write the completed addresses to the journal
4176   now so that they are recorded in case there is a crash of hardware or
4177   software before the spool gets updated. Also record the final SMTP
4178   confirmation if needed (for SMTP only). */
4179 
4180   if (sx->ok)
4181     {
4182     int flag = '=';
4183     struct timeval delivery_time;
4184     int len;
4185     uschar * conf = NULL;
4186 
4187     timesince(&delivery_time, &sx->delivery_start);
4188     sx->send_rset = FALSE;
4189     pipelining_active = FALSE;
4190 
4191     /* Set up confirmation if needed - applies only to SMTP */
4192 
4193     if (
4194 #ifdef DISABLE_EVENT
4195           LOGGING(smtp_confirmation) &&
4196 #endif
4197           !sx->lmtp
4198        )
4199       {
4200       const uschar * s = string_printing(sx->buffer);
4201       /* deconst cast ok here as string_printing was checked to have alloc'n'copied */
4202       conf = s == sx->buffer ? US string_copy(s) : US s;
4203       }
4204 
4205     /* Process all transported addresses - for LMTP or PRDR, read a status for
4206     each one. We used to drop out at first_addr, until someone returned a 452
4207     followed by a 250... and we screwed up the accepted addresses. */
4208 
4209     for (address_item * addr = addrlist; addr; addr = addr->next)
4210       {
4211       if (addr->transport_return != PENDING_OK) continue;
4212 
4213       /* LMTP - if the response fails badly (e.g. timeout), use it for all the
4214       remaining addresses. Otherwise, it's a return code for just the one
4215       address. For temporary errors, add a retry item for the address so that
4216       it doesn't get tried again too soon. */
4217 
4218 #ifndef DISABLE_PRDR
4219       if (sx->lmtp || sx->prdr_active)
4220 #else
4221       if (sx->lmtp)
4222 #endif
4223         {
4224         if (!smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2',
4225             ob->final_timeout))
4226           {
4227           if (errno != 0 || sx->buffer[0] == 0) goto RESPONSE_FAILED;
4228           addr->message = string_sprintf(
4229 #ifndef DISABLE_PRDR
4230 	    "%s error after %s: %s", sx->prdr_active ? "PRDR":"LMTP",
4231 #else
4232 	    "LMTP error after %s: %s",
4233 #endif
4234 	    data_command, string_printing(sx->buffer));
4235           setflag(addr, af_pass_message);   /* Allow message to go to user */
4236           if (sx->buffer[0] == '5')
4237             addr->transport_return = FAIL;
4238           else
4239             {
4240             errno = ERRNO_DATA4XX;
4241             addr->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
4242             addr->transport_return = DEFER;
4243 #ifndef DISABLE_PRDR
4244             if (!sx->prdr_active)
4245 #endif
4246               retry_add_item(addr, addr->address_retry_key, 0);
4247             }
4248           continue;
4249           }
4250         sx->completed_addr = TRUE;   /* NOW we can set this flag */
4251         if (LOGGING(smtp_confirmation))
4252           {
4253           const uschar *s = string_printing(sx->buffer);
4254 	  /* deconst cast ok here as string_printing was checked to have alloc'n'copied */
4255           conf = (s == sx->buffer) ? US string_copy(s) : US s;
4256           }
4257         }
4258 
4259       /* SMTP, or success return from LMTP for this address. Pass back the
4260       actual host that was used. */
4261 
4262       addr->transport_return = OK;
4263       addr->host_used = host;
4264       addr->delivery_time = delivery_time;
4265       addr->special_action = flag;
4266       addr->message = conf;
4267 
4268       if (tcp_out_fastopen)
4269 	{
4270 	setflag(addr, af_tcp_fastopen_conn);
4271 	if (tcp_out_fastopen >= TFO_USED_NODATA) setflag(addr, af_tcp_fastopen);
4272 	if (tcp_out_fastopen >= TFO_USED_DATA) setflag(addr, af_tcp_fastopen_data);
4273 	}
4274       if (sx->pipelining_used) setflag(addr, af_pipelining);
4275 #ifndef DISABLE_PIPE_CONNECT
4276       if (sx->early_pipe_active) setflag(addr, af_early_pipe);
4277 #endif
4278 #ifndef DISABLE_PRDR
4279       if (sx->prdr_active) setflag(addr, af_prdr_used);
4280 #endif
4281       if (sx->peer_offered & OPTION_CHUNKING) setflag(addr, af_chunking_used);
4282       flag = '-';
4283 
4284 #ifndef DISABLE_PRDR
4285       if (!sx->prdr_active)
4286 #endif
4287         {
4288         /* Update the journal. For homonymic addresses, use the base address plus
4289         the transport name. See lots of comments in deliver.c about the reasons
4290         for the complications when homonyms are involved. Just carry on after
4291         write error, as it may prove possible to update the spool file later. */
4292 
4293         if (testflag(addr, af_homonym))
4294           sprintf(CS sx->buffer, "%.500s/%s\n", addr->unique + 3, tblock->name);
4295         else
4296           sprintf(CS sx->buffer, "%.500s\n", addr->unique);
4297 
4298         DEBUG(D_deliver) debug_printf("S:journalling %s", sx->buffer);
4299         len = Ustrlen(CS sx->buffer);
4300         if (write(journal_fd, sx->buffer, len) != len)
4301           log_write(0, LOG_MAIN|LOG_PANIC, "failed to write journal for "
4302             "%s: %s", sx->buffer, strerror(errno));
4303         }
4304       }
4305 
4306 #ifndef DISABLE_PRDR
4307     if (sx->prdr_active)
4308       {
4309       const uschar * overall_message;
4310 
4311       /* PRDR - get the final, overall response.  For any non-success
4312       upgrade all the address statuses. */
4313 
4314       sx->ok = smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2',
4315 	ob->final_timeout);
4316       if (!sx->ok)
4317 	{
4318 	if(errno == 0 && sx->buffer[0] == '4')
4319 	  {
4320 	  errno = ERRNO_DATA4XX;
4321 	  addrlist->more_errno |= ((sx->buffer[1] - '0')*10 + sx->buffer[2] - '0') << 8;
4322 	  }
4323 	for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next)
4324 	  if (sx->buffer[0] == '5' || addr->transport_return == OK)
4325 	    addr->transport_return = PENDING_OK; /* allow set_errno action */
4326 	goto RESPONSE_FAILED;
4327 	}
4328 
4329       /* Append the overall response to the individual PRDR response for logging
4330       and update the journal, or setup retry. */
4331 
4332       overall_message = string_printing(sx->buffer);
4333       for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next)
4334 	if (addr->transport_return == OK)
4335 	  addr->message = string_sprintf("%s\\n%s", addr->message, overall_message);
4336 
4337       for (address_item * addr = addrlist; addr != sx->first_addr; addr = addr->next)
4338 	if (addr->transport_return == OK)
4339 	  {
4340 	  if (testflag(addr, af_homonym))
4341 	    sprintf(CS sx->buffer, "%.500s/%s\n", addr->unique + 3, tblock->name);
4342 	  else
4343 	    sprintf(CS sx->buffer, "%.500s\n", addr->unique);
4344 
4345 	  DEBUG(D_deliver) debug_printf("journalling(PRDR) %s\n", sx->buffer);
4346 	  len = Ustrlen(CS sx->buffer);
4347 	  if (write(journal_fd, sx->buffer, len) != len)
4348 	    log_write(0, LOG_MAIN|LOG_PANIC, "failed to write journal for "
4349 	      "%s: %s", sx->buffer, strerror(errno));
4350 	  }
4351 	else if (addr->transport_return == DEFER)
4352 	  retry_add_item(addr, addr->address_retry_key, -2);
4353       }
4354 #endif
4355 
4356     /* Ensure the journal file is pushed out to disk. */
4357 
4358     if (EXIMfsync(journal_fd) < 0)
4359       log_write(0, LOG_MAIN|LOG_PANIC, "failed to fsync journal: %s",
4360         strerror(errno));
4361     }
4362   }
4363 
4364 
4365 /* Handle general (not specific to one address) failures here. The value of ok
4366 is used to skip over this code on the falling through case. A timeout causes a
4367 deferral. Other errors may defer or fail according to the response code, and
4368 may set up a special errno value, e.g. after connection chopped, which is
4369 assumed if errno == 0 and there is no text in the buffer. If control reaches
4370 here during the setting up phase (i.e. before MAIL FROM) then always defer, as
4371 the problem is not related to this specific message. */
4372 
4373 if (!sx->ok)
4374   {
4375   int code, set_rc;
4376   uschar * set_message;
4377 
4378   RESPONSE_FAILED:
4379     {
4380     save_errno = errno;
4381     message = NULL;
4382     /* Clear send_quit flag if needed.  Do not set. */
4383     sx->send_quit &= check_response(host, &save_errno, addrlist->more_errno,
4384       sx->buffer, &code, &message, &pass_message);
4385     goto FAILED;
4386     }
4387 
4388   SEND_FAILED:
4389     {
4390     save_errno = errno;
4391     code = '4';
4392     message = string_sprintf("send() to %s [%s] failed: %s",
4393       host->name, host->address, message ? message : US strerror(save_errno));
4394     sx->send_quit = FALSE;
4395     goto FAILED;
4396     }
4397 
4398   FAILED:
4399     {
4400     BOOL message_error;
4401 
4402     sx->ok = FALSE;                /* For when reached by GOTO */
4403     set_message = message;
4404 
4405   /* We want to handle timeouts after MAIL or "." and loss of connection after
4406   "." specially. They can indicate a problem with the sender address or with
4407   the contents of the message rather than a real error on the connection. These
4408   cases are treated in the same way as a 4xx response. This next bit of code
4409   does the classification. */
4410 
4411     switch(save_errno)
4412       {
4413       case 0:
4414       case ERRNO_MAIL4XX:
4415       case ERRNO_DATA4XX:
4416 	message_error = TRUE;
4417 	break;
4418 
4419       case ETIMEDOUT:
4420 	message_error = Ustrncmp(smtp_command,"MAIL",4) == 0 ||
4421 			Ustrncmp(smtp_command,"end ",4) == 0;
4422 	break;
4423 
4424       case ERRNO_SMTPCLOSED:
4425 	message_error = Ustrncmp(smtp_command,"end ",4) == 0;
4426 	break;
4427 
4428 #ifndef DISABLE_DKIM
4429       case EACCES:
4430 	/* DKIM signing failure: avoid thinking we pipelined quit,
4431 	just abandon the message and close the socket. */
4432 
4433 	message_error = FALSE;
4434 # ifndef DISABLE_TLS
4435 	if (sx->cctx.tls_ctx)
4436 	  {
4437 	  tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_WAIT);
4438 	  sx->cctx.tls_ctx = NULL;
4439 	  }
4440 # endif
4441 	break;
4442 #endif
4443       default:
4444 	message_error = FALSE;
4445 	break;
4446       }
4447 
4448     /* Handle the cases that are treated as message errors. These are:
4449 
4450       (a) negative response or timeout after MAIL
4451       (b) negative response after DATA
4452       (c) negative response or timeout or dropped connection after "."
4453       (d) utf8 support required and not offered
4454 
4455     It won't be a negative response or timeout after RCPT, as that is dealt
4456     with separately above. The action in all cases is to set an appropriate
4457     error code for all the addresses, but to leave yield set to OK because the
4458     host itself has not failed. Of course, it might in practice have failed
4459     when we've had a timeout, but if so, we'll discover that at the next
4460     delivery attempt. For a temporary error, set the message_defer flag, and
4461     write to the logs for information if this is not the last host. The error
4462     for the last host will be logged as part of the address's log line. */
4463 
4464     if (message_error)
4465       {
4466       if (mua_wrapper) code = '5';  /* Force hard failure in wrapper mode */
4467 
4468       /* If there's an errno, the message contains just the identity of
4469       the host. */
4470 
4471       if (code == '5')
4472 	set_rc = FAIL;
4473       else		/* Anything other than 5 is treated as temporary */
4474         {
4475 	set_rc = DEFER;
4476         if (save_errno > 0)
4477           message = US string_sprintf("%s: %s", message, strerror(save_errno));
4478 
4479         write_logs(host, message, sx->first_addr ? sx->first_addr->basic_errno : 0);
4480 
4481         *message_defer = TRUE;
4482         }
4483 #ifdef TIOCOUTQ
4484       DEBUG(D_transport) if (sx->cctx.sock >= 0)
4485 	{
4486 	int n;
4487 	if (ioctl(sx->cctx.sock, TIOCOUTQ, &n) == 0)
4488 	  debug_printf("%d bytes remain in socket output buffer\n", n);
4489 	}
4490 #endif
4491       }
4492     /* Otherwise, we have an I/O error or a timeout other than after MAIL or
4493     ".", or some other transportation error. We defer all addresses and yield
4494     DEFER, except for the case of failed add_headers expansion, or a transport
4495     filter failure, when the yield should be ERROR, to stop it trying other
4496     hosts. */
4497 
4498     else
4499       {
4500 #ifndef DISABLE_PIPE_CONNECT
4501       /* If we were early-pipelinng and the actual EHLO response did not match
4502       the cached value we assumed, we could have detected it and passed a
4503       custom errno through to here.  It would be nice to RSET and retry right
4504       away, but to reliably do that we eould need an extra synch point before
4505       we committed to data and that would discard half the gained roundrips.
4506       Or we could summarily drop the TCP connection. but that is also ugly.
4507       Instead, we ignore the possibility (having freshened the cache) and rely
4508       on the server telling us with a nonmessage error if we have tried to
4509       do something it no longer supports. */
4510 #endif
4511       set_rc = DEFER;
4512       yield = (save_errno == ERRNO_CHHEADER_FAIL ||
4513                save_errno == ERRNO_FILTER_FAIL) ? ERROR : DEFER;
4514       }
4515     }
4516 
4517   set_errno(addrlist, save_errno, set_message, set_rc, pass_message, host,
4518 #ifdef EXPERIMENTAL_DSN_INFO
4519 	    sx->smtp_greeting, sx->helo_response,
4520 #endif
4521 	    &sx->delivery_start);
4522   }
4523 
4524 /* If all has gone well, send_quit will be set TRUE, implying we can end the
4525 SMTP session tidily. However, if there were too many addresses to send in one
4526 message (indicated by first_addr being non-NULL) we want to carry on with the
4527 rest of them. Also, it is desirable to send more than one message down the SMTP
4528 connection if there are several waiting, provided we haven't already sent so
4529 many as to hit the configured limit. The function transport_check_waiting looks
4530 for a waiting message and returns its id. Then transport_pass_socket tries to
4531 set up a continued delivery by passing the socket on to another process. The
4532 variable send_rset is FALSE if a message has just been successfully transferred.
4533 
4534 If we are already sending down a continued channel, there may be further
4535 addresses not yet delivered that are aimed at the same host, but which have not
4536 been passed in this run of the transport. In this case, continue_more will be
4537 true, and all we should do is send RSET if necessary, and return, leaving the
4538 channel open.
4539 
4540 However, if no address was disposed of, i.e. all addresses got 4xx errors, we
4541 do not want to continue with other messages down the same channel, because that
4542 can lead to looping between two or more messages, all with the same,
4543 temporarily failing address(es). [The retry information isn't updated yet, so
4544 new processes keep on trying.] We probably also don't want to try more of this
4545 message's addresses either.
4546 
4547 If we have started a TLS session, we have to end it before passing the
4548 connection to a new process. However, not all servers can handle this (Exim
4549 can), so we do not pass such a connection on if the host matches
4550 hosts_nopass_tls. */
4551 
4552 DEBUG(D_transport)
4553   debug_printf("ok=%d send_quit=%d send_rset=%d continue_more=%d "
4554     "yield=%d first_address is %sNULL\n", sx->ok, sx->send_quit,
4555     sx->send_rset, f.continue_more, yield, sx->first_addr ? "not " : "");
4556 
4557 if (sx->completed_addr && sx->ok && sx->send_quit)
4558 #ifdef EXPERIMENTAL_ESMTP_LIMITS
4559   if (mail_limit = continue_sequence >= sx->max_mail)
4560     {
4561     DEBUG(D_transport)
4562       debug_printf("reached limit %u for MAILs per conn\n", sx->max_mail);
4563     }
4564   else
4565 #endif
4566     {
4567     smtp_compare_t t_compare =
4568       {.tblock = tblock, .current_sender_address = sender_address};
4569 
4570     if (  sx->first_addr			/* more addrs for this message */
4571        || f.continue_more			/* more addrs for continued-host */
4572        || tcw_done && tcw			/* more messages for host */
4573        || (
4574 #ifndef DISABLE_TLS
4575 	     (  tls_out.active.sock < 0  &&  !continue_proxy_cipher
4576 	     || verify_check_given_host(CUSS &ob->hosts_nopass_tls, host) != OK
4577 	     )
4578 	  &&
4579 #endif
4580 	     transport_check_waiting(tblock->name, host->name,
4581 	       sx->max_mail, new_message_id,
4582 	       (oicf)smtp_are_same_identities, (void*)&t_compare)
4583        )  )
4584       {
4585       uschar *msg;
4586       BOOL pass_message;
4587 
4588       if (sx->send_rset)
4589 	if (! (sx->ok = smtp_write_command(sx, SCMD_FLUSH, "RSET\r\n") >= 0))
4590 	  {
4591 	  msg = US string_sprintf("send() to %s [%s] failed: %s", host->name,
4592 	    host->address, strerror(errno));
4593 	  sx->send_quit = FALSE;
4594 	  }
4595 	else if (! (sx->ok = smtp_read_response(sx, sx->buffer, sizeof(sx->buffer),
4596 		    '2', ob->command_timeout)))
4597 	  {
4598 	  int code;
4599 	  sx->send_quit = check_response(host, &errno, 0, sx->buffer, &code, &msg,
4600 	    &pass_message);
4601 	  if (!sx->send_quit)
4602 	    {
4603 	    DEBUG(D_transport) debug_printf("H=%s [%s] %s\n",
4604 	      host->name, host->address, msg);
4605 	    }
4606 	  }
4607 
4608       /* Either RSET was not needed, or it succeeded */
4609 
4610       if (sx->ok)
4611 	{
4612 #ifndef DISABLE_TLS
4613 	int pfd[2];
4614 #endif
4615 	int socket_fd = sx->cctx.sock;
4616 
4617 	if (sx->first_addr)		/* More addresses still to be sent */
4618 	  {				/*   for this message              */
4619 #ifdef EXPERIMENTAL_ESMTP_LIMITS
4620 	  /* Any that we marked as skipped, reset to do now */
4621 	  for (address_item * a = sx->first_addr; a; a = a->next)
4622 	    if (a->transport_return == SKIP)
4623 	      a->transport_return = PENDING_DEFER;
4624 #endif
4625 	  continue_sequence++;				/* for consistency */
4626 	  clearflag(sx->first_addr, af_new_conn);
4627 	  setflag(sx->first_addr, af_cont_conn);	/* Causes * in logging */
4628 	  pipelining_active = sx->pipelining_used;	/* was cleared at DATA */
4629 	  goto SEND_MESSAGE;
4630 	  }
4631 
4632 	/* Unless caller said it already has more messages listed for this host,
4633 	pass the connection on to a new Exim process (below, the call to
4634 	transport_pass_socket).  If the caller has more ready, just return with
4635 	the connection still open. */
4636 
4637 #ifndef DISABLE_TLS
4638 	if (tls_out.active.sock >= 0)
4639 	  if (  f.continue_more
4640 	     || verify_check_given_host(CUSS &ob->hosts_noproxy_tls, host) == OK)
4641 	    {
4642 	    /* Before passing the socket on, or returning to caller with it still
4643 	    open, we must shut down TLS.  Not all MTAs allow for the continuation
4644 	    of the SMTP session when TLS is shut down. We test for this by sending
4645 	    a new EHLO. If we don't get a good response, we don't attempt to pass
4646 	    the socket on. */
4647 
4648 	  tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_WAIT);
4649 	  sx->send_tlsclose = FALSE;
4650 	  sx->cctx.tls_ctx = NULL;
4651 	  tls_out.active.sock = -1;
4652 	  smtp_peer_options = smtp_peer_options_wrap;
4653 	  sx->ok = !sx->smtps
4654 	    && smtp_write_command(sx, SCMD_FLUSH, "EHLO %s\r\n", sx->helo_data)
4655 		>= 0
4656 	    && smtp_read_response(sx, sx->buffer, sizeof(sx->buffer),
4657 				      '2', ob->command_timeout);
4658 
4659 	    if (sx->ok && f.continue_more)
4660 	      goto TIDYUP;		/* More addresses for another run */
4661 	    }
4662 	  else
4663 	    {
4664 	    /* Set up a pipe for proxying TLS for the new transport process */
4665 
4666 	    smtp_peer_options |= OPTION_TLS;
4667 	    if ((sx->ok = socketpair(AF_UNIX, SOCK_STREAM, 0, pfd) == 0))
4668 	      socket_fd = pfd[1];
4669 	    else
4670 	      set_errno(sx->first_addr, errno, US"internal allocation problem",
4671 		      DEFER, FALSE, host,
4672 # ifdef EXPERIMENTAL_DSN_INFO
4673 		      sx->smtp_greeting, sx->helo_response,
4674 # endif
4675 		      &sx->delivery_start);
4676 	    }
4677 	else
4678 #endif
4679 	  if (f.continue_more)
4680 	    goto TIDYUP;			/* More addresses for another run */
4681 
4682 	/* If the socket is successfully passed, we mustn't send QUIT (or
4683 	indeed anything!) from here. */
4684 
4685   /*XXX DSN_INFO: assume likely to do new HELO; but for greet we'll want to
4686   propagate it from the initial
4687   */
4688 	if (sx->ok && transport_pass_socket(tblock->name, host->name,
4689 	      host->address, new_message_id, socket_fd
4690 #ifdef EXPERIMENTAL_ESMTP_LIMITS
4691 	      , sx->peer_limit_mail, sx->peer_limit_rcpt, sx->peer_limit_rcptdom
4692 #endif
4693 	      ))
4694 	  {
4695 	  sx->send_quit = FALSE;
4696 
4697 	  /* We have passed the client socket to a fresh transport process.
4698 	  If TLS is still active, we need to proxy it for the transport we
4699 	  just passed the baton to.  Fork a child to to do it, and return to
4700 	  get logging done asap.  Which way to place the work makes assumptions
4701 	  about post-fork prioritisation which may not hold on all platforms. */
4702 #ifndef DISABLE_TLS
4703 	  if (tls_out.active.sock >= 0)
4704 	    {
4705 	    int pid = exim_fork(US"tls-proxy-interproc");
4706 	    if (pid == 0)		/* child; fork again to disconnect totally */
4707 	      {
4708 	      /* does not return */
4709 	      smtp_proxy_tls(sx->cctx.tls_ctx, sx->buffer, sizeof(sx->buffer), pfd,
4710 			      ob->command_timeout);
4711 	      }
4712 
4713 	    if (pid > 0)		/* parent */
4714 	      {
4715 	      close(pfd[0]);
4716 	      /* tidy the inter-proc to disconn the proxy proc */
4717 	      waitpid(pid, NULL, 0);
4718 	      tls_close(sx->cctx.tls_ctx, TLS_NO_SHUTDOWN);
4719 	      sx->cctx.tls_ctx = NULL;
4720 	      (void)close(sx->cctx.sock);
4721 	      sx->cctx.sock = -1;
4722 	      continue_transport = NULL;
4723 	      continue_hostname = NULL;
4724 	      goto TIDYUP;
4725 	      }
4726 	    log_write(0, LOG_PANIC_DIE, "fork failed");
4727 	    }
4728 #endif
4729 	  }
4730 	}
4731 
4732       /* If RSET failed and there are addresses left, they get deferred. */
4733       else
4734 	set_errno(sx->first_addr, errno, msg, DEFER, FALSE, host,
4735 #ifdef EXPERIMENTAL_DSN_INFO
4736 		    sx->smtp_greeting, sx->helo_response,
4737 #endif
4738 		    &sx->delivery_start);
4739       }
4740     }
4741 
4742 /* End off tidily with QUIT unless the connection has died or the socket has
4743 been passed to another process. */
4744 
4745 SEND_QUIT:
4746 if (sx->send_quit)
4747   {			/* Use _MORE to get QUIT in FIN segment */
4748   (void)smtp_write_command(sx, SCMD_MORE, "QUIT\r\n");
4749 #ifndef DISABLE_TLS
4750   if (sx->cctx.tls_ctx)
4751     {
4752 # ifdef EXIM_TCP_CORK	/* Use _CORK to get TLS Close Notify in FIN segment */
4753     (void) setsockopt(sx->cctx.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
4754 # endif
4755     tls_shutdown_wr(sx->cctx.tls_ctx);
4756     sx->send_tlsclose = FALSE;
4757     }
4758 #endif
4759   }
4760 
4761 END_OFF:
4762 
4763 /* Close the socket, and return the appropriate value, first setting
4764 works because the NULL setting is passed back to the calling process, and
4765 remote_max_parallel is forced to 1 when delivering over an existing connection,
4766 
4767 If all went well and continue_more is set, we shouldn't actually get here if
4768 there are further addresses, as the return above will be taken. However,
4769 writing RSET might have failed, or there may be other addresses whose hosts are
4770 specified in the transports, and therefore not visible at top level, in which
4771 case continue_more won't get set. */
4772 
4773 if (sx->send_quit)
4774   {
4775   /* This flushes data queued in the socket, being the QUIT and any TLS Close,
4776   sending them along with the client FIN flag.  Us (we hope) sending FIN first
4777   means we (client) take the TIME_WAIT state, so the server (which likely has a
4778   higher connection rate) does not have to. */
4779 
4780   HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(shutdown)>>\n");
4781   shutdown(sx->cctx.sock, SHUT_WR);
4782   }
4783 
4784 if (sx->send_quit || tcw_done && !tcw)
4785   {
4786   /* Wait for (we hope) ack of our QUIT, and a server FIN.  Discard any data
4787   received, then discard the socket.  Any packet received after then, or receive
4788   data still in the socket, will get a RST - hence the pause/drain. */
4789 
4790   /* Reap the response to QUIT, timing out after one second */
4791   (void) smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', 1);
4792 #ifndef DISABLE_TLS
4793   if (sx->cctx.tls_ctx)
4794     {
4795     int n;
4796 
4797     /* Reap the TLS Close Notify from the server, timing out after one second */
4798     sigalrm_seen = FALSE;
4799     ALARM(1);
4800     do
4801       n = tls_read(sx->cctx.tls_ctx, sx->inbuffer, sizeof(sx->inbuffer));
4802     while (!sigalrm_seen && n > 0);
4803     ALARM_CLR(0);
4804 
4805 # ifdef EXIM_TCP_CORK
4806     (void) setsockopt(sx->cctx.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
4807 # endif
4808     tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_WAIT);
4809     sx->cctx.tls_ctx = NULL;
4810     }
4811 #endif
4812   millisleep(20);
4813   if (fcntl(sx->cctx.sock, F_SETFL, O_NONBLOCK) == 0)
4814     for (int i = 16, n;						/* drain socket */
4815 	 (n = read(sx->cctx.sock, sx->inbuffer, sizeof(sx->inbuffer))) > 0 && i > 0;
4816 	 i--) HDEBUG(D_transport|D_acl|D_v)
4817       {
4818       int m = MIN(n, 64);
4819       debug_printf_indent("  SMTP(drain %d bytes)<< %.*s\n", n, m, sx->inbuffer);
4820       for (m = 0; m < n; m++)
4821 	debug_printf("0x%02x\n", sx->inbuffer[m]);
4822       }
4823   }
4824 HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(close)>>\n");
4825 (void)close(sx->cctx.sock);
4826 sx->cctx.sock = -1;
4827 continue_transport = NULL;
4828 continue_hostname = NULL;
4829 
4830 #ifndef DISABLE_EVENT
4831 (void) event_raise(tblock->event_action, US"tcp:close", NULL);
4832 #endif
4833 
4834 #ifdef SUPPORT_DANE
4835 if (dane_held)
4836   {
4837   sx->first_addr = NULL;
4838   for (address_item * a = sx->addrlist->next; a; a = a->next)
4839     if (a->transport_return == DANE)
4840       {
4841       a->transport_return = PENDING_DEFER;
4842       if (!sx->first_addr)
4843 	{
4844 	/* Remember the new start-point in the addrlist, for smtp_setup_conn()
4845 	to get the domain string for SNI */
4846 
4847 	sx->first_addr = a;
4848 	clearflag(a, af_cont_conn);
4849 	setflag(a, af_new_conn);		/* clear * from logging */
4850 	DEBUG(D_transport) debug_printf("DANE: go-around for %s\n", a->domain);
4851 	}
4852       }
4853   continue_sequence = 1;			/* for consistency */
4854   goto REPEAT_CONN;
4855   }
4856 #endif
4857 
4858 #ifdef EXPERIMENTAL_ESMTP_LIMITS
4859 if (mail_limit && sx->first_addr)
4860   {
4861   /* Reset the sequence count since we closed the connection.  This is flagged
4862   on the pipe back to the delivery process so that a non-continued-conn delivery
4863   is logged. */
4864 
4865   continue_sequence = 1;			/* for consistency */
4866   clearflag(sx->first_addr, af_cont_conn);
4867   setflag(sx->first_addr, af_new_conn);		/* clear  * from logging */
4868   goto REPEAT_CONN;
4869   }
4870 #endif
4871 
4872 return yield;
4873 
4874 TIDYUP:
4875 #ifdef SUPPORT_DANE
4876 if (dane_held) for (address_item * a = sx->addrlist->next; a; a = a->next)
4877   if (a->transport_return == DANE)
4878     a->transport_return = PENDING_DEFER;
4879 #endif
4880 return yield;
4881 }
4882 
4883 
4884 
4885 
4886 /*************************************************
4887 *              Closedown entry point             *
4888 *************************************************/
4889 
4890 /* This function is called when exim is passed an open smtp channel
4891 from another incarnation, but the message which it has been asked
4892 to deliver no longer exists. The channel is on stdin.
4893 
4894 We might do fancy things like looking for another message to send down
4895 the channel, but if the one we sought has gone, it has probably been
4896 delivered by some other process that itself will seek further messages,
4897 so just close down our connection.
4898 
4899 Argument:   pointer to the transport instance block
4900 Returns:    nothing
4901 */
4902 
4903 void
smtp_transport_closedown(transport_instance * tblock)4904 smtp_transport_closedown(transport_instance *tblock)
4905 {
4906 smtp_transport_options_block * ob = SOB tblock->options_block;
4907 client_conn_ctx cctx;
4908 smtp_context sx;
4909 uschar buffer[256];
4910 uschar inbuffer[4096];
4911 uschar outbuffer[16];
4912 
4913 /*XXX really we need an active-smtp-client ctx, rather than assuming stdout */
4914 cctx.sock = fileno(stdin);
4915 cctx.tls_ctx = cctx.sock == tls_out.active.sock ? tls_out.active.tls_ctx : NULL;
4916 
4917 sx.inblock.cctx = &cctx;
4918 sx.inblock.buffer = inbuffer;
4919 sx.inblock.buffersize = sizeof(inbuffer);
4920 sx.inblock.ptr = inbuffer;
4921 sx.inblock.ptrend = inbuffer;
4922 
4923 sx.outblock.cctx = &cctx;
4924 sx.outblock.buffersize = sizeof(outbuffer);
4925 sx.outblock.buffer = outbuffer;
4926 sx.outblock.ptr = outbuffer;
4927 sx.outblock.cmd_count = 0;
4928 sx.outblock.authenticating = FALSE;
4929 
4930 (void)smtp_write_command(&sx, SCMD_FLUSH, "QUIT\r\n");
4931 (void)smtp_read_response(&sx, buffer, sizeof(buffer), '2', ob->command_timeout);
4932 (void)close(cctx.sock);
4933 }
4934 
4935 
4936 
4937 /*************************************************
4938 *            Prepare addresses for delivery      *
4939 *************************************************/
4940 
4941 /* This function is called to flush out error settings from previous delivery
4942 attempts to other hosts. It also records whether we got here via an MX record
4943 or not in the more_errno field of the address. We are interested only in
4944 addresses that are still marked DEFER - others may have got delivered to a
4945 previously considered IP address. Set their status to PENDING_DEFER to indicate
4946 which ones are relevant this time.
4947 
4948 Arguments:
4949   addrlist     the list of addresses
4950   host         the host we are delivering to
4951 
4952 Returns:       the first address for this delivery
4953 */
4954 
4955 static address_item *
prepare_addresses(address_item * addrlist,host_item * host)4956 prepare_addresses(address_item *addrlist, host_item *host)
4957 {
4958 address_item *first_addr = NULL;
4959 for (address_item * addr = addrlist; addr; addr = addr->next)
4960   if (addr->transport_return == DEFER)
4961     {
4962     if (!first_addr) first_addr = addr;
4963     addr->transport_return = PENDING_DEFER;
4964     addr->basic_errno = 0;
4965     addr->more_errno = (host->mx >= 0)? 'M' : 'A';
4966     addr->message = NULL;
4967 #ifndef DISABLE_TLS
4968     addr->cipher = NULL;
4969     addr->ourcert = NULL;
4970     addr->peercert = NULL;
4971     addr->peerdn = NULL;
4972     addr->ocsp = OCSP_NOT_REQ;
4973     addr->tlsver = NULL;
4974 #endif
4975 #ifdef EXPERIMENTAL_DSN_INFO
4976     addr->smtp_greeting = NULL;
4977     addr->helo_response = NULL;
4978 #endif
4979     }
4980 return first_addr;
4981 }
4982 
4983 
4984 
4985 /*************************************************
4986 *              Main entry point                  *
4987 *************************************************/
4988 
4989 /* See local README for interface details. As this is a remote transport, it is
4990 given a chain of addresses to be delivered in one connection, if possible. It
4991 always returns TRUE, indicating that each address has its own independent
4992 status set, except if there is a setting up problem, in which case it returns
4993 FALSE. */
4994 
4995 BOOL
smtp_transport_entry(transport_instance * tblock,address_item * addrlist)4996 smtp_transport_entry(
4997   transport_instance *tblock,      /* data for this instantiation */
4998   address_item *addrlist)          /* addresses we are working on */
4999 {
5000 int defport;
5001 int hosts_defer = 0;
5002 int hosts_fail  = 0;
5003 int hosts_looked_up = 0;
5004 int hosts_retry = 0;
5005 int hosts_serial = 0;
5006 int hosts_total = 0;
5007 int total_hosts_tried = 0;
5008 BOOL expired = TRUE;
5009 uschar *expanded_hosts = NULL;
5010 uschar *pistring;
5011 uschar *tid = string_sprintf("%s transport", tblock->name);
5012 smtp_transport_options_block *ob = SOB tblock->options_block;
5013 host_item *hostlist = addrlist->host_list;
5014 host_item *host = NULL;
5015 
5016 DEBUG(D_transport)
5017   {
5018   debug_printf("%s transport entered\n", tblock->name);
5019   for (address_item * addr = addrlist; addr; addr = addr->next)
5020     debug_printf("  %s\n", addr->address);
5021   if (hostlist)
5022     {
5023     debug_printf("hostlist:\n");
5024     for (host_item * host = hostlist; host; host = host->next)
5025       debug_printf("  '%s' IP %s port %d\n", host->name, host->address, host->port);
5026     }
5027   if (continue_hostname)
5028     debug_printf("already connected to %s [%s] (on fd %d)\n",
5029       continue_hostname, continue_host_address,
5030       cutthrough.cctx.sock >= 0 ? cutthrough.cctx.sock : 0);
5031   }
5032 
5033 /* Check the restrictions on line length */
5034 
5035 if (max_received_linelength > ob->message_linelength_limit)
5036   {
5037   struct timeval now;
5038   gettimeofday(&now, NULL);
5039 
5040   for (address_item * addr = addrlist; addr; addr = addr->next)
5041     if (addr->transport_return == DEFER)
5042       addr->transport_return = PENDING_DEFER;
5043 
5044   set_errno_nohost(addrlist, ERRNO_SMTPFORMAT,
5045     US"message has lines too long for transport", FAIL, TRUE, &now);
5046   goto END_TRANSPORT;
5047   }
5048 
5049 /* Set the flag requesting that these hosts be added to the waiting
5050 database if the delivery fails temporarily or if we are running with
5051 queue_smtp or a 2-stage queue run. This gets unset for certain
5052 kinds of error, typically those that are specific to the message. */
5053 
5054 update_waiting =  TRUE;
5055 
5056 /* If a host list is not defined for the addresses - they must all have the
5057 same one in order to be passed to a single transport - or if the transport has
5058 a host list with hosts_override set, use the host list supplied with the
5059 transport. It is an error for this not to exist. */
5060 
5061 if (!hostlist || (ob->hosts_override && ob->hosts))
5062   {
5063   if (!ob->hosts)
5064     {
5065     addrlist->message = string_sprintf("%s transport called with no hosts set",
5066       tblock->name);
5067     addrlist->transport_return = PANIC;
5068     return FALSE;   /* Only top address has status */
5069     }
5070 
5071   DEBUG(D_transport) debug_printf("using the transport's hosts: %s\n",
5072     ob->hosts);
5073 
5074   /* If the transport's host list contains no '$' characters, and we are not
5075   randomizing, it is fixed and therefore a chain of hosts can be built once
5076   and for all, and remembered for subsequent use by other calls to this
5077   transport. If, on the other hand, the host list does contain '$', or we are
5078   randomizing its order, we have to rebuild it each time. In the fixed case,
5079   as the hosts string will never be used again, it doesn't matter that we
5080   replace all the : characters with zeros. */
5081 
5082   if (!ob->hostlist)
5083     {
5084     uschar *s = ob->hosts;
5085 
5086     if (Ustrchr(s, '$'))
5087       {
5088       if (!(expanded_hosts = expand_string(s)))
5089         {
5090         addrlist->message = string_sprintf("failed to expand list of hosts "
5091           "\"%s\" in %s transport: %s", s, tblock->name, expand_string_message);
5092         addrlist->transport_return = f.search_find_defer ? DEFER : PANIC;
5093         return FALSE;     /* Only top address has status */
5094         }
5095       DEBUG(D_transport) debug_printf("expanded list of hosts \"%s\" to "
5096         "\"%s\"\n", s, expanded_hosts);
5097       s = expanded_hosts;
5098       }
5099     else
5100       if (ob->hosts_randomize) s = expanded_hosts = string_copy(s);
5101 
5102     if (is_tainted2(s, LOG_MAIN|LOG_PANIC, "Tainted host list '%s' from '%s' in transport %s", s, ob->hosts, tblock->name))
5103       {
5104       /* Avoid leaking info to an attacker */
5105       addrlist->message = US"internal configuration error";
5106       addrlist->transport_return = PANIC;
5107       return FALSE;
5108       }
5109 
5110     host_build_hostlist(&hostlist, s, ob->hosts_randomize);
5111 
5112     /* Check that the expansion yielded something useful. */
5113     if (!hostlist)
5114       {
5115       addrlist->message =
5116         string_sprintf("%s transport has empty hosts setting", tblock->name);
5117       addrlist->transport_return = PANIC;
5118       return FALSE;   /* Only top address has status */
5119       }
5120 
5121     /* If there was no expansion of hosts, save the host list for
5122     next time. */
5123 
5124     if (!expanded_hosts) ob->hostlist = hostlist;
5125     }
5126 
5127   /* This is not the first time this transport has been run in this delivery;
5128   the host list was built previously. */
5129 
5130   else
5131     hostlist = ob->hostlist;
5132   }
5133 
5134 /* The host list was supplied with the address. If hosts_randomize is set, we
5135 must sort it into a random order if it did not come from MX records and has not
5136 already been randomized (but don't bother if continuing down an existing
5137 connection). */
5138 
5139 else if (ob->hosts_randomize && hostlist->mx == MX_NONE && !continue_hostname)
5140   {
5141   host_item *newlist = NULL;
5142   while (hostlist)
5143     {
5144     host_item *h = hostlist;
5145     hostlist = hostlist->next;
5146 
5147     h->sort_key = random_number(100);
5148 
5149     if (!newlist)
5150       {
5151       h->next = NULL;
5152       newlist = h;
5153       }
5154     else if (h->sort_key < newlist->sort_key)
5155       {
5156       h->next = newlist;
5157       newlist = h;
5158       }
5159     else
5160       {
5161       host_item *hh = newlist;
5162       while (hh->next)
5163         {
5164         if (h->sort_key < hh->next->sort_key) break;
5165         hh = hh->next;
5166         }
5167       h->next = hh->next;
5168       hh->next = h;
5169       }
5170     }
5171 
5172   hostlist = addrlist->host_list = newlist;
5173   }
5174 
5175 /* Sort out the default port.  */
5176 
5177 if (!smtp_get_port(ob->port, addrlist, &defport, tid)) return FALSE;
5178 
5179 /* For each host-plus-IP-address on the list:
5180 
5181 .  If this is a continued delivery and the host isn't the one with the
5182    current connection, skip.
5183 
5184 .  If the status is unusable (i.e. previously failed or retry checked), skip.
5185 
5186 .  If no IP address set, get the address, either by turning the name into
5187    an address, calling gethostbyname if gethostbyname is on, or by calling
5188    the DNS. The DNS may yield multiple addresses, in which case insert the
5189    extra ones into the list.
5190 
5191 .  Get the retry data if not previously obtained for this address and set the
5192    field which remembers the state of this address. Skip if the retry time is
5193    not reached. If not, remember whether retry data was found. The retry string
5194    contains both the name and the IP address.
5195 
5196 .  Scan the list of addresses and mark those whose status is DEFER as
5197    PENDING_DEFER. These are the only ones that will be processed in this cycle
5198    of the hosts loop.
5199 
5200 .  Make a delivery attempt - addresses marked PENDING_DEFER will be tried.
5201    Some addresses may be successfully delivered, others may fail, and yet
5202    others may get temporary errors and so get marked DEFER.
5203 
5204 .  The return from the delivery attempt is OK if a connection was made and a
5205    valid SMTP dialogue was completed. Otherwise it is DEFER.
5206 
5207 .  If OK, add a "remove" retry item for this host/IPaddress, if any.
5208 
5209 .  If fail to connect, or other defer state, add a retry item.
5210 
5211 .  If there are any addresses whose status is still DEFER, carry on to the
5212    next host/IPaddress, unless we have tried the number of hosts given
5213    by hosts_max_try or hosts_max_try_hardlimit; otherwise return. Note that
5214    there is some fancy logic for hosts_max_try that means its limit can be
5215    overstepped in some circumstances.
5216 
5217 If we get to the end of the list, all hosts have deferred at least one address,
5218 or not reached their retry times. If delay_after_cutoff is unset, it requests a
5219 delivery attempt to those hosts whose last try was before the arrival time of
5220 the current message. To cope with this, we have to go round the loop a second
5221 time. After that, set the status and error data for any addresses that haven't
5222 had it set already. */
5223 
5224 for (int cutoff_retry = 0;
5225      expired && cutoff_retry < (ob->delay_after_cutoff ? 1 : 2);
5226      cutoff_retry++)
5227   {
5228   host_item *nexthost = NULL;
5229   int unexpired_hosts_tried = 0;
5230   BOOL continue_host_tried = FALSE;
5231 
5232 retry_non_continued:
5233   for (host = hostlist;
5234           host
5235        && unexpired_hosts_tried < ob->hosts_max_try
5236        && total_hosts_tried < ob->hosts_max_try_hardlimit;
5237        host = nexthost)
5238     {
5239     int rc;
5240     int host_af;
5241     BOOL host_is_expired = FALSE;
5242     BOOL message_defer = FALSE;
5243     BOOL some_deferred = FALSE;
5244     address_item *first_addr = NULL;
5245     uschar *interface = NULL;
5246     uschar *retry_host_key = NULL;
5247     uschar *retry_message_key = NULL;
5248     uschar *serialize_key = NULL;
5249 
5250     /* Default next host is next host. :-) But this can vary if the
5251     hosts_max_try limit is hit (see below). It may also be reset if a host
5252     address is looked up here (in case the host was multihomed). */
5253 
5254     nexthost = host->next;
5255 
5256     /* If the address hasn't yet been obtained from the host name, look it up
5257     now, unless the host is already marked as unusable. If it is marked as
5258     unusable, it means that the router was unable to find its IP address (in
5259     the DNS or wherever) OR we are in the 2nd time round the cutoff loop, and
5260     the lookup failed last time. We don't get this far if *all* MX records
5261     point to non-existent hosts; that is treated as a hard error.
5262 
5263     We can just skip this host entirely. When the hosts came from the router,
5264     the address will timeout based on the other host(s); when the address is
5265     looked up below, there is an explicit retry record added.
5266 
5267     Note that we mustn't skip unusable hosts if the address is not unset; they
5268     may be needed as expired hosts on the 2nd time round the cutoff loop. */
5269 
5270     if (!host->address)
5271       {
5272       int new_port, flags;
5273 
5274       if (host->status >= hstatus_unusable)
5275         {
5276         DEBUG(D_transport) debug_printf("%s has no address and is unusable - skipping\n",
5277           host->name);
5278         continue;
5279         }
5280 
5281       DEBUG(D_transport) debug_printf("getting address for %s\n", host->name);
5282 
5283       /* The host name is permitted to have an attached port. Find it, and
5284       strip it from the name. Just remember it for now. */
5285 
5286       new_port = host_item_get_port(host);
5287 
5288       /* Count hosts looked up */
5289 
5290       hosts_looked_up++;
5291 
5292       /* Find by name if so configured, or if it's an IP address. We don't
5293       just copy the IP address, because we need the test-for-local to happen. */
5294 
5295       flags = HOST_FIND_BY_A | HOST_FIND_BY_AAAA;
5296       if (ob->dns_qualify_single) flags |= HOST_FIND_QUALIFY_SINGLE;
5297       if (ob->dns_search_parents) flags |= HOST_FIND_SEARCH_PARENTS;
5298 
5299       if (ob->gethostbyname || string_is_ip_address(host->name, NULL) != 0)
5300         rc = host_find_byname(host, NULL, flags, NULL, TRUE);
5301       else
5302         rc = host_find_bydns(host, NULL, flags, NULL, NULL, NULL,
5303 	  &ob->dnssec,		/* domains for request/require */
5304           NULL, NULL);
5305 
5306       /* Update the host (and any additional blocks, resulting from
5307       multihoming) with a host-specific port, if any. */
5308 
5309       for (host_item * hh = host; hh != nexthost; hh = hh->next) hh->port = new_port;
5310 
5311       /* Failure to find the host at this time (usually DNS temporary failure)
5312       is really a kind of routing failure rather than a transport failure.
5313       Therefore we add a retry item of the routing kind, not to stop us trying
5314       to look this name up here again, but to ensure the address gets timed
5315       out if the failures go on long enough. A complete failure at this point
5316       commonly points to a configuration error, but the best action is still
5317       to carry on for the next host. */
5318 
5319       if (rc == HOST_FIND_AGAIN || rc == HOST_FIND_SECURITY || rc == HOST_FIND_FAILED)
5320         {
5321         retry_add_item(addrlist, string_sprintf("R:%s", host->name), 0);
5322         expired = FALSE;
5323         if (rc == HOST_FIND_AGAIN) hosts_defer++; else hosts_fail++;
5324         DEBUG(D_transport) debug_printf("rc = %s for %s\n", (rc == HOST_FIND_AGAIN)?
5325           "HOST_FIND_AGAIN" : "HOST_FIND_FAILED", host->name);
5326         host->status = hstatus_unusable;
5327 
5328         for (address_item * addr = addrlist; addr; addr = addr->next)
5329           {
5330           if (addr->transport_return != DEFER) continue;
5331           addr->basic_errno = ERRNO_UNKNOWNHOST;
5332           addr->message = string_sprintf(
5333 	    rc == HOST_FIND_SECURITY
5334 	      ? "lookup of IP address for %s was insecure"
5335 	      : "failed to lookup IP address for %s",
5336 	    host->name);
5337           }
5338         continue;
5339         }
5340 
5341       /* If the host is actually the local host, we may have a problem, or
5342       there may be some cunning configuration going on. In the problem case,
5343       log things and give up. The default transport status is already DEFER. */
5344 
5345       if (rc == HOST_FOUND_LOCAL && !ob->allow_localhost)
5346         {
5347         for (address_item * addr = addrlist; addr; addr = addr->next)
5348           {
5349           addr->basic_errno = ERRNO_HOST_IS_LOCAL;
5350           addr->message = string_sprintf("%s transport found host %s to be "
5351             "local", tblock->name, host->name);
5352           }
5353         goto END_TRANSPORT;
5354         }
5355       }   /* End of block for IP address lookup */
5356 
5357     /* If this is a continued delivery, we are interested only in the host
5358     which matches the name of the existing open channel. The check is put
5359     here after the local host lookup, in case the name gets expanded as a
5360     result of the lookup. Set expired FALSE, to save the outer loop executing
5361     twice. */
5362 
5363     if (continue_hostname)
5364       if (  Ustrcmp(continue_hostname, host->name) != 0
5365          || Ustrcmp(continue_host_address, host->address) != 0
5366 	 )
5367 	{
5368 	expired = FALSE;
5369 	continue;      /* With next host */
5370 	}
5371       else
5372 	continue_host_tried = TRUE;
5373 
5374     /* Reset the default next host in case a multihomed host whose addresses
5375     are not looked up till just above added to the host list. */
5376 
5377     nexthost = host->next;
5378 
5379     /* If queue_smtp is set (-odqs or the first part of a 2-stage run), or the
5380     domain is in queue_smtp_domains, we don't actually want to attempt any
5381     deliveries. When doing a queue run, queue_smtp_domains is always unset. If
5382     there is a lookup defer in queue_smtp_domains, proceed as if the domain
5383     were not in it. We don't want to hold up all SMTP deliveries! Except when
5384     doing a two-stage queue run, don't do this if forcing. */
5385 
5386     if (  (!f.deliver_force || f.queue_2stage)
5387        && (  f.queue_smtp
5388 	  || match_isinlist(addrlist->domain,
5389 	      CUSS &queue_smtp_domains, 0,
5390 	      &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK)
5391        )
5392       {
5393       DEBUG(D_transport) debug_printf("first-pass routing only\n");
5394       expired = FALSE;
5395       for (address_item * addr = addrlist; addr; addr = addr->next)
5396         if (addr->transport_return == DEFER)
5397 	  addr->message = US"first-pass only routing due to -odqs, "
5398 			    "queue_smtp_domains or control=queue";
5399       continue;      /* With next host */
5400       }
5401 
5402     /* Count hosts being considered - purely for an intelligent comment
5403     if none are usable. */
5404 
5405     hosts_total++;
5406 
5407     /* Set $host and $host address now in case they are needed for the
5408     interface expansion or the serialize_hosts check; they remain set if an
5409     actual delivery happens. */
5410 
5411     deliver_host = host->name;
5412     deliver_host_address = host->address;
5413     lookup_dnssec_authenticated = host->dnssec == DS_YES ? US"yes"
5414 				: host->dnssec == DS_NO ? US"no"
5415 				: US"";
5416 
5417     /* Set up a string for adding to the retry key if the port number is not
5418     the standard SMTP port. A host may have its own port setting that overrides
5419     the default. */
5420 
5421     pistring = string_sprintf(":%d", host->port == PORT_NONE
5422       ? defport : host->port);
5423     if (Ustrcmp(pistring, ":25") == 0) pistring = US"";
5424 
5425     /* Select IPv4 or IPv6, and choose an outgoing interface. If the interface
5426     string is set, even if constant (as different transports can have different
5427     constant settings), we must add it to the key that is used for retries,
5428     because connections to the same host from a different interface should be
5429     treated separately. */
5430 
5431     host_af = Ustrchr(host->address, ':') ? AF_INET6 : AF_INET;
5432       {
5433       uschar * s = ob->interface;
5434       if (s && *s)
5435 	{
5436 	if (!smtp_get_interface(s, host_af, addrlist, &interface, tid))
5437 	  return FALSE;
5438 	pistring = string_sprintf("%s/%s", pistring, interface);
5439 	}
5440       }
5441 
5442     /* The first time round the outer loop, check the status of the host by
5443     inspecting the retry data. The second time round, we are interested only
5444     in expired hosts that haven't been tried since this message arrived. */
5445 
5446     if (cutoff_retry == 0)
5447       {
5448       BOOL incl_ip;
5449       /* Ensure the status of the address is set by checking retry data if
5450       necessary. There may be host-specific retry data (applicable to all
5451       messages) and also data for retries of a specific message at this host.
5452       If either of these retry records are actually read, the keys used are
5453       returned to save recomputing them later. */
5454 
5455       if (exp_bool(addrlist, US"transport", tblock->name, D_transport,
5456 		US"retry_include_ip_address", ob->retry_include_ip_address,
5457 		ob->expand_retry_include_ip_address, &incl_ip) != OK)
5458 	continue;	/* with next host */
5459 
5460       host_is_expired = retry_check_address(addrlist->domain, host, pistring,
5461         incl_ip, &retry_host_key, &retry_message_key);
5462 
5463       DEBUG(D_transport) debug_printf("%s [%s]%s retry-status = %s\n", host->name,
5464         host->address ? host->address : US"", pistring,
5465         host->status == hstatus_usable ? "usable"
5466         : host->status == hstatus_unusable ? "unusable"
5467         : host->status == hstatus_unusable_expired ? "unusable (expired)" : "?");
5468 
5469       /* Skip this address if not usable at this time, noting if it wasn't
5470       actually expired, both locally and in the address. */
5471 
5472       switch (host->status)
5473         {
5474         case hstatus_unusable:
5475 	  expired = FALSE;
5476 	  setflag(addrlist, af_retry_skipped);
5477 	  /* Fall through */
5478 
5479         case hstatus_unusable_expired:
5480 	  switch (host->why)
5481 	    {
5482 	    case hwhy_retry: hosts_retry++; break;
5483 	    case hwhy_failed:  hosts_fail++; break;
5484 	    case hwhy_insecure:
5485 	    case hwhy_deferred: hosts_defer++; break;
5486 	    }
5487 
5488 	  /* If there was a retry message key, implying that previously there
5489 	  was a message-specific defer, we don't want to update the list of
5490 	  messages waiting for these hosts. */
5491 
5492 	  if (retry_message_key) update_waiting = FALSE;
5493 	  continue;   /* With the next host or IP address */
5494         }
5495       }
5496 
5497     /* Second time round the loop: if the address is set but expired, and
5498     the message is newer than the last try, let it through. */
5499 
5500     else
5501       {
5502       if (  !host->address
5503          || host->status != hstatus_unusable_expired
5504 	 || host->last_try > received_time.tv_sec)
5505         continue;
5506       DEBUG(D_transport) debug_printf("trying expired host %s [%s]%s\n",
5507           host->name, host->address, pistring);
5508       host_is_expired = TRUE;
5509       }
5510 
5511     /* Setting "expired=FALSE" doesn't actually mean not all hosts are expired;
5512     it remains TRUE only if all hosts are expired and none are actually tried.
5513     */
5514 
5515     expired = FALSE;
5516 
5517     /* If this host is listed as one to which access must be serialized,
5518     see if another Exim process has a connection to it, and if so, skip
5519     this host. If not, update the database to record our connection to it
5520     and remember this for later deletion. Do not do any of this if we are
5521     sending the message down a pre-existing connection. */
5522 
5523     if (  !continue_hostname
5524        && verify_check_given_host(CUSS &ob->serialize_hosts, host) == OK)
5525       {
5526       serialize_key = string_sprintf("host-serialize-%s", host->name);
5527       if (!enq_start(serialize_key, 1))
5528         {
5529         DEBUG(D_transport)
5530           debug_printf("skipping host %s because another Exim process "
5531             "is connected to it\n", host->name);
5532         hosts_serial++;
5533         continue;
5534         }
5535       }
5536 
5537     /* OK, we have an IP address that is not waiting for its retry time to
5538     arrive (it might be expired) OR (second time round the loop) we have an
5539     expired host that hasn't been tried since the message arrived. Have a go
5540     at delivering the message to it. First prepare the addresses by flushing
5541     out the result of previous attempts, and finding the first address that
5542     is still to be delivered. */
5543 
5544     first_addr = prepare_addresses(addrlist, host);
5545 
5546     DEBUG(D_transport) debug_printf("delivering %s to %s [%s] (%s%s)\n",
5547       message_id, host->name, host->address, addrlist->address,
5548       addrlist->next ? ", ..." : "");
5549 
5550     set_process_info("delivering %s to %s [%s]%s (%s%s)",
5551       message_id, host->name, host->address, pistring, addrlist->address,
5552       addrlist->next ? ", ..." : "");
5553 
5554     /* This is not for real; don't do the delivery. If there are
5555     any remaining hosts, list them. */
5556 
5557     if (f.dont_deliver)
5558       {
5559       struct timeval now;
5560       gettimeofday(&now, NULL);
5561       set_errno_nohost(addrlist, 0, NULL, OK, FALSE, &now);
5562       for (address_item * addr = addrlist; addr; addr = addr->next)
5563         {
5564         addr->host_used = host;
5565         addr->special_action = '*';
5566         addr->message = US"delivery bypassed by -N option";
5567         }
5568       DEBUG(D_transport)
5569         {
5570         debug_printf("*** delivery by %s transport bypassed by -N option\n"
5571                      "*** host and remaining hosts:\n", tblock->name);
5572         for (host_item * host2 = host; host2; host2 = host2->next)
5573           debug_printf("    %s [%s]\n", host2->name,
5574             host2->address ? host2->address : US"unset");
5575         }
5576       rc = OK;
5577       }
5578 
5579     /* This is for real. If the host is expired, we don't count it for
5580     hosts_max_retry. This ensures that all hosts must expire before an address
5581     is timed out, unless hosts_max_try_hardlimit (which protects against
5582     lunatic DNS configurations) is reached.
5583 
5584     If the host is not expired and we are about to hit the hosts_max_retry
5585     limit, check to see if there is a subsequent hosts with a different MX
5586     value. If so, make that the next host, and don't count this one. This is a
5587     heuristic to make sure that different MXs do get tried. With a normal kind
5588     of retry rule, they would get tried anyway when the earlier hosts were
5589     delayed, but if the domain has a "retry every time" type of rule - as is
5590     often used for the the very large ISPs, that won't happen. */
5591 
5592     else
5593       {
5594       host_item * thost;
5595       /* Make a copy of the host if it is local to this invocation
5596        of the transport. */
5597 
5598       if (expanded_hosts)
5599 	{
5600 	thost = store_get(sizeof(host_item), FALSE);
5601 	*thost = *host;
5602 	thost->name = string_copy(host->name);
5603 	thost->address = string_copy(host->address);
5604 	}
5605       else
5606         thost = host;
5607 
5608       if (!host_is_expired && ++unexpired_hosts_tried >= ob->hosts_max_try)
5609         {
5610         DEBUG(D_transport)
5611           debug_printf("hosts_max_try limit reached with this host\n");
5612         for (host_item * h = host; h; h = h->next) if (h->mx != host->mx)
5613 	  {
5614 	  nexthost = h;
5615 	  unexpired_hosts_tried--;
5616 	  DEBUG(D_transport) debug_printf("however, a higher MX host exists "
5617 	    "and will be tried\n");
5618 	  break;
5619 	  }
5620         }
5621 
5622       /* Attempt the delivery. */
5623 
5624       total_hosts_tried++;
5625       rc = smtp_deliver(addrlist, thost, host_af, defport, interface, tblock,
5626         &message_defer, FALSE);
5627 
5628       /* Yield is one of:
5629          OK     => connection made, each address contains its result;
5630                      message_defer is set for message-specific defers (when all
5631                      recipients are marked defer)
5632          DEFER  => there was a non-message-specific delivery problem;
5633          ERROR  => there was a problem setting up the arguments for a filter,
5634                    or there was a problem with expanding added headers
5635       */
5636 
5637       /* If the result is not OK, there was a non-message-specific problem.
5638       If the result is DEFER, we need to write to the logs saying what happened
5639       for this particular host, except in the case of authentication and TLS
5640       failures, where the log has already been written. If all hosts defer a
5641       general message is written at the end. */
5642 
5643       if (rc == DEFER && first_addr->basic_errno != ERRNO_AUTHFAIL
5644 		      && first_addr->basic_errno != ERRNO_TLSFAILURE)
5645         write_logs(host, first_addr->message, first_addr->basic_errno);
5646 
5647 #ifndef DISABLE_EVENT
5648       if (rc == DEFER)
5649 	deferred_event_raise(first_addr, host, US"msg:host:defer");
5650 #endif
5651 
5652       /* If STARTTLS was accepted, but there was a failure in setting up the
5653       TLS session (usually a certificate screwup), and the host is not in
5654       hosts_require_tls, and tls_tempfail_tryclear is true, try again, with
5655       TLS forcibly turned off. We have to start from scratch with a new SMTP
5656       connection. That's why the retry is done from here, not from within
5657       smtp_deliver(). [Rejections of STARTTLS itself don't screw up the
5658       session, so the in-clear transmission after those errors, if permitted,
5659       happens inside smtp_deliver().] */
5660 
5661 #ifndef DISABLE_TLS
5662       if (  rc == DEFER
5663 	 && first_addr->basic_errno == ERRNO_TLSFAILURE
5664 	 && ob->tls_tempfail_tryclear
5665 	 && verify_check_given_host(CUSS &ob->hosts_require_tls, host) != OK
5666 	 )
5667         {
5668         log_write(0, LOG_MAIN,
5669 	  "%s: delivering unencrypted to H=%s [%s] (not in hosts_require_tls)",
5670 	  first_addr->message, host->name, host->address);
5671         first_addr = prepare_addresses(addrlist, host);
5672         rc = smtp_deliver(addrlist, thost, host_af, defport, interface, tblock,
5673           &message_defer, TRUE);
5674         if (rc == DEFER && first_addr->basic_errno != ERRNO_AUTHFAIL)
5675           write_logs(host, first_addr->message, first_addr->basic_errno);
5676 # ifndef DISABLE_EVENT
5677 	if (rc == DEFER)
5678 	  deferred_event_raise(first_addr, host, US"msg:host:defer");
5679 # endif
5680         }
5681 #endif	/*DISABLE_TLS*/
5682 
5683 #ifndef DISABLE_EVENT
5684       /* If the last host gave a defer raise a per-message event */
5685 
5686       if (  !(  nexthost
5687 	     && unexpired_hosts_tried < ob->hosts_max_try
5688 	     && total_hosts_tried < ob->hosts_max_try_hardlimit
5689 	     )
5690          && (message_defer || rc == DEFER)
5691 	 )
5692 	deferred_event_raise(first_addr, host, US"msg:defer");
5693 #endif
5694       }
5695 
5696     /* Delivery attempt finished */
5697 
5698     set_process_info("delivering %s: just tried %s [%s]%s for %s%s: result %s",
5699       message_id, host->name, host->address, pistring, addrlist->address,
5700       addrlist->next ? " (& others)" : "", rc_to_string(rc));
5701 
5702     /* Release serialization if set up */
5703 
5704     if (serialize_key) enq_end(serialize_key);
5705 
5706     /* If the result is DEFER, or if a host retry record is known to exist, we
5707     need to add an item to the retry chain for updating the retry database
5708     at the end of delivery. We only need to add the item to the top address,
5709     of course. Also, if DEFER, we mark the IP address unusable so as to skip it
5710     for any other delivery attempts using the same address. (It is copied into
5711     the unusable tree at the outer level, so even if different address blocks
5712     contain the same address, it still won't get tried again.) */
5713 
5714     if (rc == DEFER || retry_host_key)
5715       {
5716       int delete_flag = rc != DEFER ? rf_delete : 0;
5717       if (!retry_host_key)
5718         {
5719 	BOOL incl_ip;
5720 	if (exp_bool(addrlist, US"transport", tblock->name, D_transport,
5721 		  US"retry_include_ip_address", ob->retry_include_ip_address,
5722 		  ob->expand_retry_include_ip_address, &incl_ip) != OK)
5723 	  incl_ip = TRUE;	/* error; use most-specific retry record */
5724 
5725         retry_host_key = incl_ip
5726 	  ? string_sprintf("T:%S:%s%s", host->name, host->address, pistring)
5727 	  : string_sprintf("T:%S%s", host->name, pistring);
5728         }
5729 
5730       /* If a delivery of another message over an existing SMTP connection
5731       yields DEFER, we do NOT set up retry data for the host. This covers the
5732       case when there are delays in routing the addresses in the second message
5733       that are so long that the server times out. This is alleviated by not
5734       routing addresses that previously had routing defers when handling an
5735       existing connection, but even so, this case may occur (e.g. if a
5736       previously happily routed address starts giving routing defers). If the
5737       host is genuinely down, another non-continued message delivery will
5738       notice it soon enough. */
5739 
5740       if (delete_flag != 0 || !continue_hostname)
5741         retry_add_item(first_addr, retry_host_key, rf_host | delete_flag);
5742 
5743       /* We may have tried an expired host, if its retry time has come; ensure
5744       the status reflects the expiry for the benefit of any other addresses. */
5745 
5746       if (rc == DEFER)
5747         {
5748         host->status = host_is_expired
5749 	  ? hstatus_unusable_expired : hstatus_unusable;
5750         host->why = hwhy_deferred;
5751         }
5752       }
5753 
5754     /* If message_defer is set (host was OK, but every recipient got deferred
5755     because of some message-specific problem), or if that had happened
5756     previously so that a message retry key exists, add an appropriate item
5757     to the retry chain. Note that if there was a message defer but now there is
5758     a host defer, the message defer record gets deleted. That seems perfectly
5759     reasonable. Also, stop the message from being remembered as waiting
5760     for specific hosts. */
5761 
5762     if (message_defer || retry_message_key)
5763       {
5764       int delete_flag = message_defer ? 0 : rf_delete;
5765       if (!retry_message_key)
5766         {
5767 	BOOL incl_ip;
5768 	if (exp_bool(addrlist, US"transport", tblock->name, D_transport,
5769 		  US"retry_include_ip_address", ob->retry_include_ip_address,
5770 		  ob->expand_retry_include_ip_address, &incl_ip) != OK)
5771 	  incl_ip = TRUE;	/* error; use most-specific retry record */
5772 
5773         retry_message_key = incl_ip
5774 	  ? string_sprintf("T:%S:%s%s:%s", host->name, host->address, pistring,
5775 	      message_id)
5776 	  : string_sprintf("T:%S%s:%s", host->name, pistring, message_id);
5777         }
5778       retry_add_item(addrlist, retry_message_key,
5779         rf_message | rf_host | delete_flag);
5780       update_waiting = FALSE;
5781       }
5782 
5783     /* Any return other than DEFER (that is, OK or ERROR) means that the
5784     addresses have got their final statuses filled in for this host. In the OK
5785     case, see if any of them are deferred. */
5786 
5787     if (rc == OK)
5788       for (address_item * addr = addrlist; addr; addr = addr->next)
5789         if (addr->transport_return == DEFER)
5790           {
5791           some_deferred = TRUE;
5792           break;
5793           }
5794 
5795     /* If no addresses deferred or the result was ERROR, return. We do this for
5796     ERROR because a failing filter set-up or add_headers expansion is likely to
5797     fail for any host we try. */
5798 
5799     if (rc == ERROR || (rc == OK && !some_deferred))
5800       {
5801       DEBUG(D_transport) debug_printf("Leaving %s transport\n", tblock->name);
5802       return TRUE;    /* Each address has its status */
5803       }
5804 
5805     /* If the result was DEFER or some individual addresses deferred, let
5806     the loop run to try other hosts with the deferred addresses, except for the
5807     case when we were trying to deliver down an existing channel and failed.
5808     Don't try any other hosts in this case. */
5809 
5810     if (continue_hostname) break;
5811 
5812     /* If the whole delivery, or some individual addresses, were deferred and
5813     there are more hosts that could be tried, do not count this host towards
5814     the hosts_max_try limit if the age of the message is greater than the
5815     maximum retry time for this host. This means we may try try all hosts,
5816     ignoring the limit, when messages have been around for some time. This is
5817     important because if we don't try all hosts, the address will never time
5818     out. NOTE: this does not apply to hosts_max_try_hardlimit. */
5819 
5820     if ((rc == DEFER || some_deferred) && nexthost)
5821       {
5822       BOOL timedout;
5823       retry_config *retry = retry_find_config(host->name, NULL, 0, 0);
5824 
5825       if (retry && retry->rules)
5826         {
5827         retry_rule *last_rule;
5828         for (last_rule = retry->rules;
5829              last_rule->next;
5830              last_rule = last_rule->next);
5831         timedout = time(NULL) - received_time.tv_sec > last_rule->timeout;
5832         }
5833       else timedout = TRUE;    /* No rule => timed out */
5834 
5835       if (timedout)
5836         {
5837         unexpired_hosts_tried--;
5838         DEBUG(D_transport) debug_printf("temporary delivery error(s) override "
5839           "hosts_max_try (message older than host's retry time)\n");
5840         }
5841       }
5842 
5843     DEBUG(D_transport)
5844       {
5845       if (unexpired_hosts_tried >= ob->hosts_max_try)
5846 	debug_printf("reached transport hosts_max_try limit %d\n",
5847 	  ob->hosts_max_try);
5848       if (total_hosts_tried >= ob->hosts_max_try_hardlimit)
5849 	debug_printf("reached transport hosts_max_try_hardlimit limit %d\n",
5850 	  ob->hosts_max_try_hardlimit);
5851       }
5852 
5853     testharness_pause_ms(500); /* let server debug out */
5854     }   /* End of loop for trying multiple hosts. */
5855 
5856   /* If we failed to find a matching host in the list, for an already-open
5857   connection, just close it and start over with the list.  This can happen
5858   for routing that changes from run to run, or big multi-IP sites with
5859   round-robin DNS. */
5860 
5861   if (continue_hostname && !continue_host_tried)
5862     {
5863     int fd = cutthrough.cctx.sock >= 0 ? cutthrough.cctx.sock : 0;
5864 
5865     DEBUG(D_transport) debug_printf("no hosts match already-open connection\n");
5866 #ifndef DISABLE_TLS
5867     /* A TLS conn could be open for a cutthrough, but not for a plain continued-
5868     transport */
5869 /*XXX doublecheck that! */
5870 
5871     if (cutthrough.cctx.sock >= 0 && cutthrough.is_tls)
5872       {
5873       (void) tls_write(cutthrough.cctx.tls_ctx, US"QUIT\r\n", 6, FALSE);
5874       tls_close(cutthrough.cctx.tls_ctx, TLS_SHUTDOWN_NOWAIT);
5875       cutthrough.cctx.tls_ctx = NULL;
5876       cutthrough.is_tls = FALSE;
5877       }
5878     else
5879 #else
5880       (void) write(fd, US"QUIT\r\n", 6);
5881 #endif
5882     (void) close(fd);
5883     cutthrough.cctx.sock = -1;
5884     continue_hostname = NULL;
5885     goto retry_non_continued;
5886     }
5887 
5888   /* This is the end of the loop that repeats iff expired is TRUE and
5889   ob->delay_after_cutoff is FALSE. The second time round we will
5890   try those hosts that haven't been tried since the message arrived. */
5891 
5892   DEBUG(D_transport)
5893     {
5894     debug_printf("all IP addresses skipped or deferred at least one address\n");
5895     if (expired && !ob->delay_after_cutoff && cutoff_retry == 0)
5896       debug_printf("retrying IP addresses not tried since message arrived\n");
5897     }
5898   }
5899 
5900 
5901 /* Get here if all IP addresses are skipped or defer at least one address. In
5902 MUA wrapper mode, this will happen only for connection or other non-message-
5903 specific failures. Force the delivery status for all addresses to FAIL. */
5904 
5905 if (mua_wrapper)
5906   {
5907   for (address_item * addr = addrlist; addr; addr = addr->next)
5908     addr->transport_return = FAIL;
5909   goto END_TRANSPORT;
5910   }
5911 
5912 /* In the normal, non-wrapper case, add a standard message to each deferred
5913 address if there hasn't been an error, that is, if it hasn't actually been
5914 tried this time. The variable "expired" will be FALSE if any deliveries were
5915 actually tried, or if there was at least one host that was not expired. That
5916 is, it is TRUE only if no deliveries were tried and all hosts were expired. If
5917 a delivery has been tried, an error code will be set, and the failing of the
5918 message is handled by the retry code later.
5919 
5920 If queue_smtp is set, or this transport was called to send a subsequent message
5921 down an existing TCP/IP connection, and something caused the host not to be
5922 found, we end up here, but can detect these cases and handle them specially. */
5923 
5924 for (address_item * addr = addrlist; addr; addr = addr->next)
5925   {
5926   /* If host is not NULL, it means that we stopped processing the host list
5927   because of hosts_max_try or hosts_max_try_hardlimit. In the former case, this
5928   means we need to behave as if some hosts were skipped because their retry
5929   time had not come. Specifically, this prevents the address from timing out.
5930   However, if we have hit hosts_max_try_hardlimit, we want to behave as if all
5931   hosts were tried. */
5932 
5933   if (host)
5934     if (total_hosts_tried >= ob->hosts_max_try_hardlimit)
5935       {
5936       DEBUG(D_transport)
5937         debug_printf("hosts_max_try_hardlimit reached: behave as if all "
5938           "hosts were tried\n");
5939       }
5940     else
5941       {
5942       DEBUG(D_transport)
5943         debug_printf("hosts_max_try limit caused some hosts to be skipped\n");
5944       setflag(addr, af_retry_skipped);
5945       }
5946 
5947   if (f.queue_smtp)    /* no deliveries attempted */
5948     {
5949     addr->transport_return = DEFER;
5950     addr->basic_errno = 0;
5951     addr->message = US"SMTP delivery explicitly queued";
5952     }
5953 
5954   else if (  addr->transport_return == DEFER
5955 	  && (addr->basic_errno == ERRNO_UNKNOWNERROR || addr->basic_errno == 0)
5956 	  && !addr->message
5957 	  )
5958     {
5959     addr->basic_errno = ERRNO_HRETRY;
5960     if (continue_hostname)
5961       addr->message = US"no host found for existing SMTP connection";
5962     else if (expired)
5963       {
5964       setflag(addr, af_pass_message);   /* This is not a security risk */
5965       addr->message = string_sprintf(
5966 	"all hosts%s have been failing for a long time %s",
5967 	addr->domain ? string_sprintf(" for '%s'", addr->domain) : US"",
5968         ob->delay_after_cutoff
5969 	? US"(and retry time not reached)"
5970 	: US"and were last tried after this message arrived");
5971 
5972       /* If we are already using fallback hosts, or there are no fallback hosts
5973       defined, convert the result to FAIL to cause a bounce. */
5974 
5975       if (addr->host_list == addr->fallback_hosts || !addr->fallback_hosts)
5976         addr->transport_return = FAIL;
5977       }
5978     else
5979       {
5980       const char * s;
5981       if (hosts_retry == hosts_total)
5982         s = "retry time not reached for any host%s";
5983       else if (hosts_fail == hosts_total)
5984         s = "all host address lookups%s failed permanently";
5985       else if (hosts_defer == hosts_total)
5986         s = "all host address lookups%s failed temporarily";
5987       else if (hosts_serial == hosts_total)
5988         s = "connection limit reached for all hosts%s";
5989       else if (hosts_fail+hosts_defer == hosts_total)
5990         s = "all host address lookups%s failed";
5991       else
5992         s = "some host address lookups failed and retry time "
5993         "not reached for other hosts or connection limit reached%s";
5994 
5995       addr->message = string_sprintf(s,
5996 	addr->domain ? string_sprintf(" for '%s'", addr->domain) : US"");
5997       }
5998     }
5999   }
6000 
6001 /* Update the database which keeps information about which messages are waiting
6002 for which hosts to become available. For some message-specific errors, the
6003 update_waiting flag is turned off because we don't want follow-on deliveries in
6004 those cases.  If this transport instance is explicitly limited to one message
6005 per connection then follow-on deliveries are not possible and there's no need
6006 to create/update the per-transport wait-<transport_name> database. */
6007 
6008 if (update_waiting && tblock->connection_max_messages != 1)
6009   transport_update_waiting(hostlist, tblock->name);
6010 
6011 END_TRANSPORT:
6012 
6013 DEBUG(D_transport) debug_printf("Leaving %s transport\n", tblock->name);
6014 
6015 return TRUE;   /* Each address has its status */
6016 }
6017 
6018 #endif	/*!MACRO_PREDEF*/
6019 /* vi: aw ai sw=2
6020 */
6021 /* End of transport/smtp.c */
6022