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