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