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