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