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