Expanded EXPERIMENTAL_TPDA feature
[exim.git] / src / src / transports / smtp.c
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) University of Cambridge 1995 - 2014 */
6 /* See the file NOTICE for conditions of use and distribution. */
7
8 #include "../exim.h"
9 #include "smtp.h"
10
11 #define PENDING          256
12 #define PENDING_DEFER   (PENDING + DEFER)
13 #define PENDING_OK      (PENDING + OK)
14
15
16 /* Options specific to the smtp transport. This transport also supports LMTP
17 over TCP/IP. The options must be in alphabetic order (note that "_" comes
18 before the lower case letters). Some live in the transport_instance block so as
19 to be publicly visible; these are flagged with opt_public. */
20
21 optionlist smtp_transport_options[] = {
22   { "address_retry_include_sender", opt_bool,
23       (void *)offsetof(smtp_transport_options_block, address_retry_include_sender) },
24   { "allow_localhost",      opt_bool,
25       (void *)offsetof(smtp_transport_options_block, allow_localhost) },
26   { "authenticated_sender", opt_stringptr,
27       (void *)offsetof(smtp_transport_options_block, authenticated_sender) },
28   { "authenticated_sender_force", opt_bool,
29       (void *)offsetof(smtp_transport_options_block, authenticated_sender_force) },
30   { "command_timeout",      opt_time,
31       (void *)offsetof(smtp_transport_options_block, command_timeout) },
32   { "connect_timeout",      opt_time,
33       (void *)offsetof(smtp_transport_options_block, connect_timeout) },
34   { "connection_max_messages", opt_int | opt_public,
35       (void *)offsetof(transport_instance, connection_max_messages) },
36   { "data_timeout",         opt_time,
37       (void *)offsetof(smtp_transport_options_block, data_timeout) },
38   { "delay_after_cutoff", opt_bool,
39       (void *)offsetof(smtp_transport_options_block, delay_after_cutoff) },
40 #ifndef DISABLE_DKIM
41   { "dkim_canon", opt_stringptr,
42       (void *)offsetof(smtp_transport_options_block, dkim_canon) },
43   { "dkim_domain", opt_stringptr,
44       (void *)offsetof(smtp_transport_options_block, dkim_domain) },
45   { "dkim_private_key", opt_stringptr,
46       (void *)offsetof(smtp_transport_options_block, dkim_private_key) },
47   { "dkim_selector", opt_stringptr,
48       (void *)offsetof(smtp_transport_options_block, dkim_selector) },
49   { "dkim_sign_headers", opt_stringptr,
50       (void *)offsetof(smtp_transport_options_block, dkim_sign_headers) },
51   { "dkim_strict", opt_stringptr,
52       (void *)offsetof(smtp_transport_options_block, dkim_strict) },
53 #endif
54   { "dns_qualify_single",   opt_bool,
55       (void *)offsetof(smtp_transport_options_block, dns_qualify_single) },
56   { "dns_search_parents",   opt_bool,
57       (void *)offsetof(smtp_transport_options_block, dns_search_parents) },
58   { "dnssec_request_domains", opt_stringptr,
59       (void *)offsetof(smtp_transport_options_block, dnssec_request_domains) },
60   { "dnssec_require_domains", opt_stringptr,
61       (void *)offsetof(smtp_transport_options_block, dnssec_require_domains) },
62   { "dscp",                 opt_stringptr,
63       (void *)offsetof(smtp_transport_options_block, dscp) },
64   { "fallback_hosts",       opt_stringptr,
65       (void *)offsetof(smtp_transport_options_block, fallback_hosts) },
66   { "final_timeout",        opt_time,
67       (void *)offsetof(smtp_transport_options_block, final_timeout) },
68   { "gethostbyname",        opt_bool,
69       (void *)offsetof(smtp_transport_options_block, gethostbyname) },
70 #ifdef SUPPORT_TLS
71   /* These are no longer honoured, as of Exim 4.80; for now, we silently
72   ignore; 4.83 will warn, and a later-still release will remove
73   these options, so that using them becomes an error. */
74   { "gnutls_require_kx",    opt_stringptr,
75       (void *)offsetof(smtp_transport_options_block, gnutls_require_kx) },
76   { "gnutls_require_mac",   opt_stringptr,
77       (void *)offsetof(smtp_transport_options_block, gnutls_require_mac) },
78   { "gnutls_require_protocols", opt_stringptr,
79       (void *)offsetof(smtp_transport_options_block, gnutls_require_proto) },
80 #endif
81   { "helo_data",            opt_stringptr,
82       (void *)offsetof(smtp_transport_options_block, helo_data) },
83   { "hosts",                opt_stringptr,
84       (void *)offsetof(smtp_transport_options_block, hosts) },
85   { "hosts_avoid_esmtp",    opt_stringptr,
86       (void *)offsetof(smtp_transport_options_block, hosts_avoid_esmtp) },
87   { "hosts_avoid_pipelining", opt_stringptr,
88       (void *)offsetof(smtp_transport_options_block, hosts_avoid_pipelining) },
89 #ifdef SUPPORT_TLS
90   { "hosts_avoid_tls",      opt_stringptr,
91       (void *)offsetof(smtp_transport_options_block, hosts_avoid_tls) },
92 #endif
93   { "hosts_max_try",        opt_int,
94       (void *)offsetof(smtp_transport_options_block, hosts_max_try) },
95   { "hosts_max_try_hardlimit", opt_int,
96       (void *)offsetof(smtp_transport_options_block, hosts_max_try_hardlimit) },
97 #ifdef SUPPORT_TLS
98   { "hosts_nopass_tls",     opt_stringptr,
99       (void *)offsetof(smtp_transport_options_block, hosts_nopass_tls) },
100 #endif
101   { "hosts_override",       opt_bool,
102       (void *)offsetof(smtp_transport_options_block, hosts_override) },
103   { "hosts_randomize",      opt_bool,
104       (void *)offsetof(smtp_transport_options_block, hosts_randomize) },
105 #if defined(SUPPORT_TLS) && !defined(DISABLE_OCSP)
106   { "hosts_request_ocsp",   opt_stringptr,
107       (void *)offsetof(smtp_transport_options_block, hosts_request_ocsp) },
108 #endif
109   { "hosts_require_auth",   opt_stringptr,
110       (void *)offsetof(smtp_transport_options_block, hosts_require_auth) },
111 #ifdef SUPPORT_TLS
112 # ifndef DISABLE_OCSP
113   { "hosts_require_ocsp",   opt_stringptr,
114       (void *)offsetof(smtp_transport_options_block, hosts_require_ocsp) },
115 # endif
116   { "hosts_require_tls",    opt_stringptr,
117       (void *)offsetof(smtp_transport_options_block, hosts_require_tls) },
118 #endif
119   { "hosts_try_auth",       opt_stringptr,
120       (void *)offsetof(smtp_transport_options_block, hosts_try_auth) },
121 #ifndef DISABLE_PRDR
122   { "hosts_try_prdr",       opt_stringptr,
123       (void *)offsetof(smtp_transport_options_block, hosts_try_prdr) },
124 #endif
125 #ifdef SUPPORT_TLS
126   { "hosts_verify_avoid_tls", opt_stringptr,
127       (void *)offsetof(smtp_transport_options_block, hosts_verify_avoid_tls) },
128 #endif
129   { "interface",            opt_stringptr,
130       (void *)offsetof(smtp_transport_options_block, interface) },
131   { "keepalive",            opt_bool,
132       (void *)offsetof(smtp_transport_options_block, keepalive) },
133   { "lmtp_ignore_quota",    opt_bool,
134       (void *)offsetof(smtp_transport_options_block, lmtp_ignore_quota) },
135   { "max_rcpt",             opt_int | opt_public,
136       (void *)offsetof(transport_instance, max_addresses) },
137   { "multi_domain",         opt_bool | opt_public,
138       (void *)offsetof(transport_instance, multi_domain) },
139   { "port",                 opt_stringptr,
140       (void *)offsetof(smtp_transport_options_block, port) },
141   { "protocol",             opt_stringptr,
142       (void *)offsetof(smtp_transport_options_block, protocol) },
143   { "retry_include_ip_address", opt_bool,
144       (void *)offsetof(smtp_transport_options_block, retry_include_ip_address) },
145   { "serialize_hosts",      opt_stringptr,
146       (void *)offsetof(smtp_transport_options_block, serialize_hosts) },
147   { "size_addition",        opt_int,
148       (void *)offsetof(smtp_transport_options_block, size_addition) }
149 #ifdef SUPPORT_TLS
150  ,{ "tls_certificate",      opt_stringptr,
151       (void *)offsetof(smtp_transport_options_block, tls_certificate) },
152   { "tls_crl",              opt_stringptr,
153       (void *)offsetof(smtp_transport_options_block, tls_crl) },
154   { "tls_dh_min_bits",      opt_int,
155       (void *)offsetof(smtp_transport_options_block, tls_dh_min_bits) },
156   { "tls_privatekey",       opt_stringptr,
157       (void *)offsetof(smtp_transport_options_block, tls_privatekey) },
158   { "tls_require_ciphers",  opt_stringptr,
159       (void *)offsetof(smtp_transport_options_block, tls_require_ciphers) },
160   { "tls_sni",              opt_stringptr,
161       (void *)offsetof(smtp_transport_options_block, tls_sni) },
162   { "tls_tempfail_tryclear", opt_bool,
163       (void *)offsetof(smtp_transport_options_block, tls_tempfail_tryclear) },
164   { "tls_try_verify_hosts", opt_stringptr,
165       (void *)offsetof(smtp_transport_options_block, tls_try_verify_hosts) },
166 #ifdef EXPERIMENTAL_CERTNAMES
167   { "tls_verify_cert_hostnames", opt_stringptr,
168       (void *)offsetof(smtp_transport_options_block,tls_verify_cert_hostnames)},
169 #endif
170   { "tls_verify_certificates", opt_stringptr,
171       (void *)offsetof(smtp_transport_options_block, tls_verify_certificates) },
172   { "tls_verify_hosts",     opt_stringptr,
173       (void *)offsetof(smtp_transport_options_block, tls_verify_hosts) }
174 #endif
175 };
176
177 /* Size of the options list. An extern variable has to be used so that its
178 address can appear in the tables drtables.c. */
179
180 int smtp_transport_options_count =
181   sizeof(smtp_transport_options)/sizeof(optionlist);
182
183 /* Default private options block for the smtp transport. */
184
185 smtp_transport_options_block smtp_transport_option_defaults = {
186   NULL,                /* hosts */
187   NULL,                /* fallback_hosts */
188   NULL,                /* hostlist */
189   NULL,                /* fallback_hostlist */
190   NULL,                /* authenticated_sender */
191   US"$primary_hostname", /* helo_data */
192   NULL,                /* interface */
193   NULL,                /* port */
194   US"smtp",            /* protocol */
195   NULL,                /* DSCP */
196   NULL,                /* serialize_hosts */
197   NULL,                /* hosts_try_auth */
198   NULL,                /* hosts_require_auth */
199 #ifndef DISABLE_PRDR
200   NULL,                /* hosts_try_prdr */
201 #endif
202 #ifndef DISABLE_OCSP
203   US"*",               /* hosts_request_ocsp */
204   NULL,                /* hosts_require_ocsp */
205 #endif
206   NULL,                /* hosts_require_tls */
207   NULL,                /* hosts_avoid_tls */
208   US"*",               /* hosts_verify_avoid_tls */
209   NULL,                /* hosts_avoid_pipelining */
210   NULL,                /* hosts_avoid_esmtp */
211   NULL,                /* hosts_nopass_tls */
212   5*60,                /* command_timeout */
213   5*60,                /* connect_timeout; shorter system default overrides */
214   5*60,                /* data timeout */
215   10*60,               /* final timeout */
216   1024,                /* size_addition */
217   5,                   /* hosts_max_try */
218   50,                  /* hosts_max_try_hardlimit */
219   TRUE,                /* address_retry_include_sender */
220   FALSE,               /* allow_localhost */
221   FALSE,               /* authenticated_sender_force */
222   FALSE,               /* gethostbyname */
223   TRUE,                /* dns_qualify_single */
224   FALSE,               /* dns_search_parents */
225   NULL,                /* dnssec_request_domains */
226   NULL,                /* dnssec_require_domains */
227   TRUE,                /* delay_after_cutoff */
228   FALSE,               /* hosts_override */
229   FALSE,               /* hosts_randomize */
230   TRUE,                /* keepalive */
231   FALSE,               /* lmtp_ignore_quota */
232   TRUE                 /* retry_include_ip_address */
233 #ifdef SUPPORT_TLS
234  ,NULL,                /* tls_certificate */
235   NULL,                /* tls_crl */
236   NULL,                /* tls_privatekey */
237   NULL,                /* tls_require_ciphers */
238   NULL,                /* gnutls_require_kx */
239   NULL,                /* gnutls_require_mac */
240   NULL,                /* gnutls_require_proto */
241   NULL,                /* tls_sni */
242   NULL,                /* tls_verify_certificates */
243   EXIM_CLIENT_DH_DEFAULT_MIN_BITS,
244                        /* tls_dh_min_bits */
245   TRUE,                /* tls_tempfail_tryclear */
246   NULL,                /* tls_verify_hosts */
247   NULL                 /* tls_try_verify_hosts */
248 # ifdef EXPERIMENTAL_CERTNAMES
249  ,NULL                 /* tls_verify_cert_hostnames */
250 # endif
251 #endif
252 #ifndef DISABLE_DKIM
253  ,NULL,                /* dkim_canon */
254   NULL,                /* dkim_domain */
255   NULL,                /* dkim_private_key */
256   NULL,                /* dkim_selector */
257   NULL,                /* dkim_sign_headers */
258   NULL                 /* dkim_strict */
259 #endif
260 };
261
262 #ifdef EXPERIMENTAL_DSN
263 /* some DSN flags for use later */
264
265 static int     rf_list[] = {rf_notify_never, rf_notify_success,
266                             rf_notify_failure, rf_notify_delay };
267
268 static uschar *rf_names[] = { "NEVER", "SUCCESS", "FAILURE", "DELAY" };
269 #endif
270
271
272
273 /* Local statics */
274
275 static uschar *smtp_command;   /* Points to last cmd for error messages */
276 static uschar *mail_command;   /* Points to MAIL cmd for error messages */
277 static BOOL    update_waiting; /* TRUE to update the "wait" database */
278
279
280 /*************************************************
281 *             Setup entry point                  *
282 *************************************************/
283
284 /* This function is called when the transport is about to be used,
285 but before running it in a sub-process. It is used for two things:
286
287   (1) To set the fallback host list in addresses, when delivering.
288   (2) To pass back the interface, port, protocol, and other options, for use
289       during callout verification.
290
291 Arguments:
292   tblock    pointer to the transport instance block
293   addrlist  list of addresses about to be transported
294   tf        if not NULL, pointer to block in which to return options
295   uid       the uid that will be set (not used)
296   gid       the gid that will be set (not used)
297   errmsg    place for error message (not used)
298
299 Returns:  OK always (FAIL, DEFER not used)
300 */
301
302 static int
303 smtp_transport_setup(transport_instance *tblock, address_item *addrlist,
304   transport_feedback *tf, uid_t uid, gid_t gid, uschar **errmsg)
305 {
306 smtp_transport_options_block *ob =
307   (smtp_transport_options_block *)(tblock->options_block);
308
309 errmsg = errmsg;    /* Keep picky compilers happy */
310 uid = uid;
311 gid = gid;
312
313 /* Pass back options if required. This interface is getting very messy. */
314
315 if (tf != NULL)
316   {
317   tf->interface = ob->interface;
318   tf->port = ob->port;
319   tf->protocol = ob->protocol;
320   tf->hosts = ob->hosts;
321   tf->hosts_override = ob->hosts_override;
322   tf->hosts_randomize = ob->hosts_randomize;
323   tf->gethostbyname = ob->gethostbyname;
324   tf->qualify_single = ob->dns_qualify_single;
325   tf->search_parents = ob->dns_search_parents;
326   tf->helo_data = ob->helo_data;
327   }
328
329 /* Set the fallback host list for all the addresses that don't have fallback
330 host lists, provided that the local host wasn't present in the original host
331 list. */
332
333 if (!testflag(addrlist, af_local_host_removed))
334   {
335   for (; addrlist != NULL; addrlist = addrlist->next)
336     if (addrlist->fallback_hosts == NULL)
337       addrlist->fallback_hosts = ob->fallback_hostlist;
338   }
339
340 return OK;
341 }
342
343
344
345 /*************************************************
346 *          Initialization entry point            *
347 *************************************************/
348
349 /* Called for each instance, after its options have been read, to
350 enable consistency checks to be done, or anything else that needs
351 to be set up.
352
353 Argument:   pointer to the transport instance block
354 Returns:    nothing
355 */
356
357 void
358 smtp_transport_init(transport_instance *tblock)
359 {
360 smtp_transport_options_block *ob =
361   (smtp_transport_options_block *)(tblock->options_block);
362
363 /* Retry_use_local_part defaults FALSE if unset */
364
365 if (tblock->retry_use_local_part == TRUE_UNSET)
366   tblock->retry_use_local_part = FALSE;
367
368 /* Set the default port according to the protocol */
369
370 if (ob->port == NULL)
371   ob->port = (strcmpic(ob->protocol, US"lmtp") == 0)? US"lmtp" :
372     (strcmpic(ob->protocol, US"smtps") == 0)? US"smtps" : US"smtp";
373
374 /* Set up the setup entry point, to be called before subprocesses for this
375 transport. */
376
377 tblock->setup = smtp_transport_setup;
378
379 /* Complain if any of the timeouts are zero. */
380
381 if (ob->command_timeout <= 0 || ob->data_timeout <= 0 ||
382     ob->final_timeout <= 0)
383   log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
384     "command, data, or final timeout value is zero for %s transport",
385       tblock->name);
386
387 /* If hosts_override is set and there are local hosts, set the global
388 flag that stops verify from showing router hosts. */
389
390 if (ob->hosts_override && ob->hosts != NULL) tblock->overrides_hosts = TRUE;
391
392 /* If there are any fallback hosts listed, build a chain of host items
393 for them, but do not do any lookups at this time. */
394
395 host_build_hostlist(&(ob->fallback_hostlist), ob->fallback_hosts, FALSE);
396
397 #ifdef SUPPORT_TLS
398 if (  ob->gnutls_require_kx
399    || ob->gnutls_require_mac
400    || ob->gnutls_require_proto)
401   log_write(0, LOG_MAIN, "WARNING: smtp transport options"
402     " gnutls_require_kx, gnutls_require_mac and gnutls_require_protocols"
403     " are obsolete\n");
404 #endif
405 }
406
407
408
409
410
411 /*************************************************
412 *   Set delivery info into all active addresses  *
413 *************************************************/
414
415 /* Only addresses whose status is >= PENDING are relevant. A lesser
416 status means that an address is not currently being processed.
417
418 Arguments:
419   addrlist       points to a chain of addresses
420   errno_value    to put in each address's errno field
421   msg            to put in each address's message field
422   rc             to put in each address's transport_return field
423   pass_message   if TRUE, set the "pass message" flag in the address
424
425 If errno_value has the special value ERRNO_CONNECTTIMEOUT, ETIMEDOUT is put in
426 the errno field, and RTEF_CTOUT is ORed into the more_errno field, to indicate
427 this particular type of timeout.
428
429 Returns:       nothing
430 */
431
432 static void
433 set_errno(address_item *addrlist, int errno_value, uschar *msg, int rc,
434   BOOL pass_message)
435 {
436 address_item *addr;
437 int orvalue = 0;
438 if (errno_value == ERRNO_CONNECTTIMEOUT)
439   {
440   errno_value = ETIMEDOUT;
441   orvalue = RTEF_CTOUT;
442   }
443 for (addr = addrlist; addr != NULL; addr = addr->next)
444   {
445   if (addr->transport_return < PENDING) continue;
446   addr->basic_errno = errno_value;
447   addr->more_errno |= orvalue;
448   if (msg != NULL)
449     {
450     addr->message = msg;
451     if (pass_message) setflag(addr, af_pass_message);
452     }
453   addr->transport_return = rc;
454   }
455 }
456
457
458
459 /*************************************************
460 *          Check an SMTP response                *
461 *************************************************/
462
463 /* This function is given an errno code and the SMTP response buffer
464 to analyse, together with the host identification for generating messages. It
465 sets an appropriate message and puts the first digit of the response code into
466 the yield variable. If no response was actually read, a suitable digit is
467 chosen.
468
469 Arguments:
470   host           the current host, to get its name for messages
471   errno_value    pointer to the errno value
472   more_errno     from the top address for use with ERRNO_FILTER_FAIL
473   buffer         the SMTP response buffer
474   yield          where to put a one-digit SMTP response code
475   message        where to put an errror message
476   pass_message   set TRUE if message is an SMTP response
477
478 Returns:         TRUE if an SMTP "QUIT" command should be sent, else FALSE
479 */
480
481 static BOOL
482 check_response(host_item *host, int *errno_value, int more_errno,
483   uschar *buffer, int *yield, uschar **message, BOOL *pass_message)
484 {
485 uschar *pl = US"";
486
487 if (smtp_use_pipelining &&
488     (Ustrcmp(smtp_command, "MAIL") == 0 ||
489      Ustrcmp(smtp_command, "RCPT") == 0 ||
490      Ustrcmp(smtp_command, "DATA") == 0))
491   pl = US"pipelined ";
492
493 *yield = '4';    /* Default setting is to give a temporary error */
494
495 /* Handle response timeout */
496
497 if (*errno_value == ETIMEDOUT)
498   {
499   *message = US string_sprintf("SMTP timeout while connected to %s [%s] "
500     "after %s%s", host->name, host->address, pl, smtp_command);
501   if (transport_count > 0)
502     *message = US string_sprintf("%s (%d bytes written)", *message,
503       transport_count);
504   return FALSE;
505   }
506
507 /* Handle malformed SMTP response */
508
509 if (*errno_value == ERRNO_SMTPFORMAT)
510   {
511   uschar *malfresp = string_printing(buffer);
512   while (isspace(*malfresp)) malfresp++;
513   if (*malfresp == 0)
514     *message = string_sprintf("Malformed SMTP reply (an empty line) from "
515       "%s [%s] in response to %s%s", host->name, host->address, pl,
516       smtp_command);
517   else
518     *message = string_sprintf("Malformed SMTP reply from %s [%s] in response "
519       "to %s%s: %s", host->name, host->address, pl, smtp_command, malfresp);
520   return FALSE;
521   }
522
523 /* Handle a failed filter process error; can't send QUIT as we mustn't
524 end the DATA. */
525
526 if (*errno_value == ERRNO_FILTER_FAIL)
527   {
528   *message = US string_sprintf("transport filter process failed (%d)%s",
529     more_errno,
530     (more_errno == EX_EXECFAILED)? ": unable to execute command" : "");
531   return FALSE;
532   }
533
534 /* Handle a failed add_headers expansion; can't send QUIT as we mustn't
535 end the DATA. */
536
537 if (*errno_value == ERRNO_CHHEADER_FAIL)
538   {
539   *message =
540     US string_sprintf("failed to expand headers_add or headers_remove: %s",
541       expand_string_message);
542   return FALSE;
543   }
544
545 /* Handle failure to write a complete data block */
546
547 if (*errno_value == ERRNO_WRITEINCOMPLETE)
548   {
549   *message = US string_sprintf("failed to write a data block");
550   return FALSE;
551   }
552
553 /* Handle error responses from the remote mailer. */
554
555 if (buffer[0] != 0)
556   {
557   uschar *s = string_printing(buffer);
558   *message = US string_sprintf("SMTP error from remote mail server after %s%s: "
559     "host %s [%s]: %s", pl, smtp_command, host->name, host->address, s);
560   *pass_message = TRUE;
561   *yield = buffer[0];
562   return TRUE;
563   }
564
565 /* No data was read. If there is no errno, this must be the EOF (i.e.
566 connection closed) case, which causes deferral. An explicit connection reset
567 error has the same effect. Otherwise, put the host's identity in the message,
568 leaving the errno value to be interpreted as well. In all cases, we have to
569 assume the connection is now dead. */
570
571 if (*errno_value == 0 || *errno_value == ECONNRESET)
572   {
573   *errno_value = ERRNO_SMTPCLOSED;
574   *message = US string_sprintf("Remote host %s [%s] closed connection "
575     "in response to %s%s", host->name, host->address, pl, smtp_command);
576   }
577 else *message = US string_sprintf("%s [%s]", host->name, host->address);
578
579 return FALSE;
580 }
581
582
583
584 /*************************************************
585 *          Write error message to logs           *
586 *************************************************/
587
588 /* This writes to the main log and to the message log.
589
590 Arguments:
591   addr     the address item containing error information
592   host     the current host
593
594 Returns:   nothing
595 */
596
597 static void
598 write_logs(address_item *addr, host_item *host)
599 {
600 if (addr->message != NULL)
601   {
602   uschar *message = addr->message;
603   if (addr->basic_errno > 0)
604     message = string_sprintf("%s: %s", message, strerror(addr->basic_errno));
605   log_write(0, LOG_MAIN, "%s", message);
606   deliver_msglog("%s %s\n", tod_stamp(tod_log), message);
607   }
608 else
609   {
610   uschar *msg =
611     ((log_extra_selector & LX_outgoing_port) != 0)?
612     string_sprintf("%s [%s]:%d", host->name, host->address,
613       (host->port == PORT_NONE)? 25 : host->port)
614     :
615     string_sprintf("%s [%s]", host->name, host->address);
616   log_write(0, LOG_MAIN, "%s %s", msg, strerror(addr->basic_errno));
617   deliver_msglog("%s %s %s\n", tod_stamp(tod_log), msg,
618     strerror(addr->basic_errno));
619   }
620 }
621
622
623
624 #ifdef EXPERIMENTAL_TPDA
625 /*************************************************
626 *   Post-defer action                            *
627 *************************************************/
628
629 /* This expands an arbitrary per-transport string.
630    It might, for example, be used to write to the database log.
631
632 Arguments:
633   addr                  the address item containing error information
634   host                  the current host
635
636 Returns:   nothing
637 */
638
639 static void
640 tpda_deferred(address_item *addr, host_item *host)
641 {
642 uschar * action = addr->transport->tpda_event_action;
643 uschar * save_domain;
644 uschar * save_local;
645
646 if (!action)
647   return;
648
649 save_domain = deliver_domain;
650 save_local = deliver_localpart;
651
652 /*XXX would ip & port already be set up? */
653 deliver_host_address = string_copy(host->address);
654 deliver_host_port =    (host->port == PORT_NONE)? 25 : host->port;
655 tpda_defer_errno =     addr->basic_errno;
656
657 router_name =    addr->router->name;
658 transport_name = addr->transport->name;
659 deliver_domain = addr->domain;
660 deliver_localpart = addr->local_part;
661
662 (void) tpda_raise_event(action, US"msg:host:defer",
663     addr->message
664       ? addr->basic_errno > 0
665         ? string_sprintf("%s: %s", addr->message, strerror(addr->basic_errno))
666         : string_copy(addr->message)
667       : addr->basic_errno > 0
668         ? string_copy(US strerror(addr->basic_errno))
669         : NULL);
670
671 deliver_localpart = save_local;
672 deliver_domain =    save_domain;
673 router_name = transport_name = NULL;
674 }
675 #endif
676
677
678
679 /*************************************************
680 *           Synchronize SMTP responses           *
681 *************************************************/
682
683 /* This function is called from smtp_deliver() to receive SMTP responses from
684 the server, and match them up with the commands to which they relate. When
685 PIPELINING is not in use, this function is called after every command, and is
686 therefore somewhat over-engineered, but it is simpler to use a single scheme
687 that works both with and without PIPELINING instead of having two separate sets
688 of code.
689
690 The set of commands that are buffered up with pipelining may start with MAIL
691 and may end with DATA; in between are RCPT commands that correspond to the
692 addresses whose status is PENDING_DEFER. All other commands (STARTTLS, AUTH,
693 etc.) are never buffered.
694
695 Errors after MAIL or DATA abort the whole process leaving the response in the
696 buffer. After MAIL, pending responses are flushed, and the original command is
697 re-instated in big_buffer for error messages. For RCPT commands, the remote is
698 permitted to reject some recipient addresses while accepting others. However
699 certain errors clearly abort the whole process. Set the value in
700 transport_return to PENDING_OK if the address is accepted. If there is a
701 subsequent general error, it will get reset accordingly. If not, it will get
702 converted to OK at the end.
703
704 Arguments:
705   addrlist          the complete address list
706   include_affixes   TRUE if affixes include in RCPT
707   sync_addr         ptr to the ptr of the one to start scanning at (updated)
708   host              the host we are connected to
709   count             the number of responses to read
710   address_retry_
711     include_sender  true if 4xx retry is to include the sender it its key
712   pending_MAIL      true if the first response is for MAIL
713   pending_DATA      0 if last command sent was not DATA
714                    +1 if previously had a good recipient
715                    -1 if not previously had a good recipient
716   inblock           incoming SMTP block
717   timeout           timeout value
718   buffer            buffer for reading response
719   buffsize          size of buffer
720
721 Returns:      3 if at least one address had 2xx and one had 5xx
722               2 if at least one address had 5xx but none had 2xx
723               1 if at least one host had a 2xx response, but none had 5xx
724               0 no address had 2xx or 5xx but no errors (all 4xx, or just DATA)
725              -1 timeout while reading RCPT response
726              -2 I/O or other non-response error for RCPT
727              -3 DATA or MAIL failed - errno and buffer set
728 */
729
730 static int
731 sync_responses(address_item *addrlist, BOOL include_affixes,
732   address_item **sync_addr, host_item *host, int count,
733   BOOL address_retry_include_sender, BOOL pending_MAIL,
734   int pending_DATA, smtp_inblock *inblock, int timeout, uschar *buffer,
735   int buffsize)
736 {
737 address_item *addr = *sync_addr;
738 int yield = 0;
739
740 /* Handle the response for a MAIL command. On error, reinstate the original
741 command in big_buffer for error message use, and flush any further pending
742 responses before returning, except after I/O errors and timeouts. */
743
744 if (pending_MAIL)
745   {
746   count--;
747   if (!smtp_read_response(inblock, buffer, buffsize, '2', timeout))
748     {
749     Ustrcpy(big_buffer, mail_command);  /* Fits, because it came from there! */
750     if (errno == 0 && buffer[0] != 0)
751       {
752       uschar flushbuffer[4096];
753       int save_errno = 0;
754       if (buffer[0] == '4')
755         {
756         save_errno = ERRNO_MAIL4XX;
757         addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
758         }
759       while (count-- > 0)
760         {
761         if (!smtp_read_response(inblock, flushbuffer, sizeof(flushbuffer),
762                    '2', timeout)
763             && (errno != 0 || flushbuffer[0] == 0))
764           break;
765         }
766       errno = save_errno;
767       }
768     return -3;
769     }
770   }
771
772 if (pending_DATA) count--;  /* Number of RCPT responses to come */
773
774 /* Read and handle the required number of RCPT responses, matching each one up
775 with an address by scanning for the next address whose status is PENDING_DEFER.
776 */
777
778 while (count-- > 0)
779   {
780   while (addr->transport_return != PENDING_DEFER) addr = addr->next;
781
782   /* The address was accepted */
783
784   if (smtp_read_response(inblock, buffer, buffsize, '2', timeout))
785     {
786     yield |= 1;
787     addr->transport_return = PENDING_OK;
788
789     /* If af_dr_retry_exists is set, there was a routing delay on this address;
790     ensure that any address-specific retry record is expunged. We do this both
791     for the basic key and for the version that also includes the sender. */
792
793     if (testflag(addr, af_dr_retry_exists))
794       {
795       uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
796         sender_address);
797       retry_add_item(addr, altkey, rf_delete);
798       retry_add_item(addr, addr->address_retry_key, rf_delete);
799       }
800     }
801
802   /* Timeout while reading the response */
803
804   else if (errno == ETIMEDOUT)
805     {
806     int save_errno = errno;
807     uschar *message = string_sprintf("SMTP timeout while connected to %s [%s] "
808       "after RCPT TO:<%s>", host->name, host->address,
809       transport_rcpt_address(addr, include_affixes));
810     set_errno(addrlist, save_errno, message, DEFER, FALSE);
811     retry_add_item(addr, addr->address_retry_key, 0);
812     update_waiting = FALSE;
813     return -1;
814     }
815
816   /* Handle other errors in obtaining an SMTP response by returning -1. This
817   will cause all the addresses to be deferred. Restore the SMTP command in
818   big_buffer for which we are checking the response, so the error message
819   makes sense. */
820
821   else if (errno != 0 || buffer[0] == 0)
822     {
823     string_format(big_buffer, big_buffer_size, "RCPT TO:<%s>",
824       transport_rcpt_address(addr, include_affixes));
825     return -2;
826     }
827
828   /* Handle SMTP permanent and temporary response codes. */
829
830   else
831     {
832     addr->message =
833       string_sprintf("SMTP error from remote mail server after RCPT TO:<%s>: "
834         "host %s [%s]: %s", transport_rcpt_address(addr, include_affixes),
835         host->name, host->address, string_printing(buffer));
836     setflag(addr, af_pass_message);
837     deliver_msglog("%s %s\n", tod_stamp(tod_log), addr->message);
838
839     /* The response was 5xx */
840
841     if (buffer[0] == '5')
842       {
843       addr->transport_return = FAIL;
844       yield |= 2;
845       }
846
847     /* The response was 4xx */
848
849     else
850       {
851       addr->transport_return = DEFER;
852       addr->basic_errno = ERRNO_RCPT4XX;
853       addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
854
855       /* Log temporary errors if there are more hosts to be tried. */
856
857       if (host->next != NULL) log_write(0, LOG_MAIN, "%s", addr->message);
858
859       /* Do not put this message on the list of those waiting for specific
860       hosts, as otherwise it is likely to be tried too often. */
861
862       update_waiting = FALSE;
863
864       /* Add a retry item for the address so that it doesn't get tried again
865       too soon. If address_retry_include_sender is true, add the sender address
866       to the retry key. */
867
868       if (address_retry_include_sender)
869         {
870         uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
871           sender_address);
872         retry_add_item(addr, altkey, 0);
873         }
874       else retry_add_item(addr, addr->address_retry_key, 0);
875       }
876     }
877   }       /* Loop for next RCPT response */
878
879 /* Update where to start at for the next block of responses, unless we
880 have already handled all the addresses. */
881
882 if (addr != NULL) *sync_addr = addr->next;
883
884 /* Handle a response to DATA. If we have not had any good recipients, either
885 previously or in this block, the response is ignored. */
886
887 if (pending_DATA != 0 &&
888     !smtp_read_response(inblock, buffer, buffsize, '3', timeout))
889   {
890   int code;
891   uschar *msg;
892   BOOL pass_message;
893   if (pending_DATA > 0 || (yield & 1) != 0)
894     {
895     if (errno == 0 && buffer[0] == '4')
896       {
897       errno = ERRNO_DATA4XX;
898       addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
899       }
900     return -3;
901     }
902   (void)check_response(host, &errno, 0, buffer, &code, &msg, &pass_message);
903   DEBUG(D_transport) debug_printf("%s\nerror for DATA ignored: pipelining "
904     "is in use and there were no good recipients\n", msg);
905   }
906
907 /* All responses read and handled; MAIL (if present) received 2xx and DATA (if
908 present) received 3xx. If any RCPTs were handled and yielded anything other
909 than 4xx, yield will be set non-zero. */
910
911 return yield;
912 }
913
914
915
916 /* Do the client side of smtp-level authentication */
917 /*
918 Arguments:
919   buffer        EHLO response from server (gets overwritten)
920   addrlist      chain of potential addresses to deliver
921   host          host to deliver to
922   ob            transport options
923   ibp, obp      comms channel control blocks
924
925 Returns:
926   OK                    Success, or failed (but not required): global "smtp_authenticated" set
927   DEFER                 Failed authentication (and was required)
928   ERROR                 Internal problem
929
930   FAIL_SEND             Failed communications - transmit
931   FAIL                  - response
932 */
933
934 int
935 smtp_auth(uschar *buffer, unsigned bufsize, address_item *addrlist, host_item *host,
936     smtp_transport_options_block *ob, BOOL is_esmtp,
937     smtp_inblock *ibp, smtp_outblock *obp)
938 {
939 int require_auth;
940 uschar *fail_reason = US"server did not advertise AUTH support";
941
942 smtp_authenticated = FALSE;
943 client_authenticator = client_authenticated_id = client_authenticated_sender = NULL;
944 require_auth = verify_check_this_host(&(ob->hosts_require_auth), NULL,
945   host->name, host->address, NULL);
946
947 if (is_esmtp && !regex_AUTH) regex_AUTH =
948     regex_must_compile(US"\\n250[\\s\\-]AUTH\\s+([\\-\\w\\s]+)(?:\\n|$)",
949           FALSE, TRUE);
950
951 if (is_esmtp && regex_match_and_setup(regex_AUTH, buffer, 0, -1))
952   {
953   uschar *names = string_copyn(expand_nstring[1], expand_nlength[1]);
954   expand_nmax = -1;                          /* reset */
955
956   /* Must not do this check until after we have saved the result of the
957   regex match above. */
958
959   if (require_auth == OK ||
960       verify_check_this_host(&(ob->hosts_try_auth), NULL, host->name,
961         host->address, NULL) == OK)
962     {
963     auth_instance *au;
964     fail_reason = US"no common mechanisms were found";
965
966     DEBUG(D_transport) debug_printf("scanning authentication mechanisms\n");
967
968     /* Scan the configured authenticators looking for one which is configured
969     for use as a client, which is not suppressed by client_condition, and
970     whose name matches an authentication mechanism supported by the server.
971     If one is found, attempt to authenticate by calling its client function.
972     */
973
974     for (au = auths; !smtp_authenticated && au != NULL; au = au->next)
975       {
976       uschar *p = names;
977       if (!au->client ||
978           (au->client_condition != NULL &&
979            !expand_check_condition(au->client_condition, au->name,
980              US"client authenticator")))
981         {
982         DEBUG(D_transport) debug_printf("skipping %s authenticator: %s\n",
983           au->name,
984           (au->client)? "client_condition is false" :
985                         "not configured as a client");
986         continue;
987         }
988
989       /* Loop to scan supported server mechanisms */
990
991       while (*p != 0)
992         {
993         int rc;
994         int len = Ustrlen(au->public_name);
995         while (isspace(*p)) p++;
996
997         if (strncmpic(au->public_name, p, len) != 0 ||
998             (p[len] != 0 && !isspace(p[len])))
999           {
1000           while (*p != 0 && !isspace(*p)) p++;
1001           continue;
1002           }
1003
1004         /* Found data for a listed mechanism. Call its client entry. Set
1005         a flag in the outblock so that data is overwritten after sending so
1006         that reflections don't show it. */
1007
1008         fail_reason = US"authentication attempt(s) failed";
1009         obp->authenticating = TRUE;
1010         rc = (au->info->clientcode)(au, ibp, obp,
1011           ob->command_timeout, buffer, bufsize);
1012         obp->authenticating = FALSE;
1013         DEBUG(D_transport) debug_printf("%s authenticator yielded %d\n",
1014           au->name, rc);
1015
1016         /* A temporary authentication failure must hold up delivery to
1017         this host. After a permanent authentication failure, we carry on
1018         to try other authentication methods. If all fail hard, try to
1019         deliver the message unauthenticated unless require_auth was set. */
1020
1021         switch(rc)
1022           {
1023           case OK:
1024           smtp_authenticated = TRUE;   /* stops the outer loop */
1025           client_authenticator = au->name;
1026           if (au->set_client_id != NULL)
1027             client_authenticated_id = expand_string(au->set_client_id);
1028           break;
1029
1030           /* Failure after writing a command */
1031
1032           case FAIL_SEND:
1033           return FAIL_SEND;
1034
1035           /* Failure after reading a response */
1036
1037           case FAIL:
1038           if (errno != 0 || buffer[0] != '5') return FAIL;
1039           log_write(0, LOG_MAIN, "%s authenticator failed H=%s [%s] %s",
1040             au->name, host->name, host->address, buffer);
1041           break;
1042
1043           /* Failure by some other means. In effect, the authenticator
1044           decided it wasn't prepared to handle this case. Typically this
1045           is the result of "fail" in an expansion string. Do we need to
1046           log anything here? Feb 2006: a message is now put in the buffer
1047           if logging is required. */
1048
1049           case CANCELLED:
1050           if (*buffer != 0)
1051             log_write(0, LOG_MAIN, "%s authenticator cancelled "
1052               "authentication H=%s [%s] %s", au->name, host->name,
1053               host->address, buffer);
1054           break;
1055
1056           /* Internal problem, message in buffer. */
1057
1058           case ERROR:
1059           set_errno(addrlist, 0, string_copy(buffer), DEFER, FALSE);
1060           return ERROR;
1061           }
1062
1063         break;  /* If not authenticated, try next authenticator */
1064         }       /* Loop for scanning supported server mechanisms */
1065       }         /* Loop for further authenticators */
1066     }
1067   }
1068
1069 /* If we haven't authenticated, but are required to, give up. */
1070
1071 if (require_auth == OK && !smtp_authenticated)
1072   {
1073   set_errno(addrlist, ERRNO_AUTHFAIL,
1074     string_sprintf("authentication required but %s", fail_reason), DEFER,
1075     FALSE);
1076   return DEFER;
1077   }
1078
1079 return OK;
1080 }
1081
1082
1083 /* Construct AUTH appendix string for MAIL TO */
1084 /*
1085 Arguments
1086   buffer        to build string
1087   addrlist      chain of potential addresses to deliver
1088   ob            transport options
1089
1090 Globals         smtp_authenticated
1091                 client_authenticated_sender
1092 Return  True on error, otherwise buffer has (possibly empty) terminated string
1093 */
1094
1095 BOOL
1096 smtp_mail_auth_str(uschar *buffer, unsigned bufsize, address_item *addrlist,
1097                     smtp_transport_options_block *ob)
1098 {
1099 uschar *local_authenticated_sender = authenticated_sender;
1100
1101 #ifdef notdef
1102   debug_printf("smtp_mail_auth_str: as<%s> os<%s> SA<%s>\n", authenticated_sender, ob->authenticated_sender, smtp_authenticated?"Y":"N");
1103 #endif
1104
1105 if (ob->authenticated_sender != NULL)
1106   {
1107   uschar *new = expand_string(ob->authenticated_sender);
1108   if (new == NULL)
1109     {
1110     if (!expand_string_forcedfail)
1111       {
1112       uschar *message = string_sprintf("failed to expand "
1113         "authenticated_sender: %s", expand_string_message);
1114       set_errno(addrlist, 0, message, DEFER, FALSE);
1115       return TRUE;
1116       }
1117     }
1118   else if (new[0] != 0) local_authenticated_sender = new;
1119   }
1120
1121 /* Add the authenticated sender address if present */
1122
1123 if ((smtp_authenticated || ob->authenticated_sender_force) &&
1124     local_authenticated_sender != NULL)
1125   {
1126   string_format(buffer, bufsize, " AUTH=%s",
1127     auth_xtextencode(local_authenticated_sender,
1128     Ustrlen(local_authenticated_sender)));
1129   client_authenticated_sender = string_copy(local_authenticated_sender);
1130   }
1131 else
1132   *buffer= 0;
1133
1134 return FALSE;
1135 }
1136
1137
1138
1139 /*************************************************
1140 *       Deliver address list to given host       *
1141 *************************************************/
1142
1143 /* If continue_hostname is not null, we get here only when continuing to
1144 deliver down an existing channel. The channel was passed as the standard
1145 input. TLS is never active on a passed channel; the previous process always
1146 closes it down before passing the connection on.
1147
1148 Otherwise, we have to make a connection to the remote host, and do the
1149 initial protocol exchange.
1150
1151 When running as an MUA wrapper, if the sender or any recipient is rejected,
1152 temporarily or permanently, we force failure for all recipients.
1153
1154 Arguments:
1155   addrlist        chain of potential addresses to deliver; only those whose
1156                   transport_return field is set to PENDING_DEFER are currently
1157                   being processed; others should be skipped - they have either
1158                   been delivered to an earlier host or IP address, or been
1159                   failed by one of them.
1160   host            host to deliver to
1161   host_af         AF_INET or AF_INET6
1162   port            default TCP/IP port to use, in host byte order
1163   interface       interface to bind to, or NULL
1164   tblock          transport instance block
1165   copy_host       TRUE if host set in addr->host_used must be copied, because
1166                     it is specific to this call of the transport
1167   message_defer   set TRUE if yield is OK, but all addresses were deferred
1168                     because of a non-recipient, non-host failure, that is, a
1169                     4xx response to MAIL FROM, DATA, or ".". This is a defer
1170                     that is specific to the message.
1171   suppress_tls    if TRUE, don't attempt a TLS connection - this is set for
1172                     a second attempt after TLS initialization fails
1173
1174 Returns:          OK    - the connection was made and the delivery attempted;
1175                           the result for each address is in its data block.
1176                   DEFER - the connection could not be made, or something failed
1177                           while setting up the SMTP session, or there was a
1178                           non-message-specific error, such as a timeout.
1179                   ERROR - a filter command is specified for this transport,
1180                           and there was a problem setting it up; OR helo_data
1181                           or add_headers or authenticated_sender is specified
1182                           for this transport, and the string failed to expand
1183 */
1184
1185 static int
1186 smtp_deliver(address_item *addrlist, host_item *host, int host_af, int port,
1187   uschar *interface, transport_instance *tblock, BOOL copy_host,
1188   BOOL *message_defer, BOOL suppress_tls)
1189 {
1190 address_item *addr;
1191 address_item *sync_addr;
1192 address_item *first_addr = addrlist;
1193 int yield = OK;
1194 int address_count;
1195 int save_errno;
1196 int rc;
1197 time_t start_delivery_time = time(NULL);
1198 smtp_transport_options_block *ob =
1199   (smtp_transport_options_block *)(tblock->options_block);
1200 BOOL lmtp = strcmpic(ob->protocol, US"lmtp") == 0;
1201 BOOL smtps = strcmpic(ob->protocol, US"smtps") == 0;
1202 BOOL ok = FALSE;
1203 BOOL send_rset = TRUE;
1204 BOOL send_quit = TRUE;
1205 BOOL setting_up = TRUE;
1206 BOOL completed_address = FALSE;
1207 BOOL esmtp = TRUE;
1208 BOOL pending_MAIL;
1209 BOOL pass_message = FALSE;
1210 #ifndef DISABLE_PRDR
1211 BOOL prdr_offered = FALSE;
1212 BOOL prdr_active;
1213 #endif
1214 #ifdef EXPERIMENTAL_DSN
1215 BOOL dsn_all_lasthop = TRUE;
1216 #endif
1217 smtp_inblock inblock;
1218 smtp_outblock outblock;
1219 int max_rcpt = tblock->max_addresses;
1220 uschar *igquotstr = US"";
1221 uschar *helo_data = NULL;
1222 uschar *message = NULL;
1223 uschar new_message_id[MESSAGE_ID_LENGTH + 1];
1224 uschar *p;
1225 uschar buffer[4096];
1226 uschar inbuffer[4096];
1227 uschar outbuffer[4096];
1228
1229 suppress_tls = suppress_tls;  /* stop compiler warning when no TLS support */
1230
1231 *message_defer = FALSE;
1232 smtp_command = US"initial connection";
1233 if (max_rcpt == 0) max_rcpt = 999999;
1234
1235 /* Set up the buffer for reading SMTP response packets. */
1236
1237 inblock.buffer = inbuffer;
1238 inblock.buffersize = sizeof(inbuffer);
1239 inblock.ptr = inbuffer;
1240 inblock.ptrend = inbuffer;
1241
1242 /* Set up the buffer for holding SMTP commands while pipelining */
1243
1244 outblock.buffer = outbuffer;
1245 outblock.buffersize = sizeof(outbuffer);
1246 outblock.ptr = outbuffer;
1247 outblock.cmd_count = 0;
1248 outblock.authenticating = FALSE;
1249
1250 /* Reset the parameters of a TLS session. */
1251
1252 tls_out.bits = 0;
1253 tls_out.cipher = NULL;  /* the one we may use for this transport */
1254 tls_out.ourcert = NULL;
1255 tls_out.peercert = NULL;
1256 tls_out.peerdn = NULL;
1257 #if defined(SUPPORT_TLS) && !defined(USE_GNUTLS)
1258 tls_out.sni = NULL;
1259 #endif
1260 tls_out.ocsp = OCSP_NOT_REQ;
1261
1262 /* Flip the legacy TLS-related variables over to the outbound set in case
1263 they're used in the context of the transport.  Don't bother resetting
1264 afterward as we're in a subprocess. */
1265
1266 tls_modify_variables(&tls_out);
1267
1268 #ifndef SUPPORT_TLS
1269 if (smtps)
1270   {
1271   set_errno(addrlist, 0, US"TLS support not available", DEFER, FALSE);
1272   return ERROR;
1273   }
1274 #endif
1275
1276 /* Make a connection to the host if this isn't a continued delivery, and handle
1277 the initial interaction and HELO/EHLO/LHLO. Connect timeout errors are handled
1278 specially so they can be identified for retries. */
1279
1280 if (continue_hostname == NULL)
1281   {
1282   /* This puts port into host->port */
1283   inblock.sock = outblock.sock =
1284     smtp_connect(host, host_af, port, interface, ob->connect_timeout,
1285                   ob->keepalive, ob->dscp
1286 #ifdef EXPERIMENTAL_TPDA
1287                   , tblock->tpda_event_action
1288 #endif
1289                 );
1290
1291   if (inblock.sock < 0)
1292     {
1293     set_errno(addrlist, (errno == ETIMEDOUT)? ERRNO_CONNECTTIMEOUT : errno,
1294       NULL, DEFER, FALSE);
1295     return DEFER;
1296     }
1297
1298   /* Expand the greeting message while waiting for the initial response. (Makes
1299   sense if helo_data contains ${lookup dnsdb ...} stuff). The expansion is
1300   delayed till here so that $sending_interface and $sending_port are set. */
1301
1302   helo_data = expand_string(ob->helo_data);
1303
1304   /* The first thing is to wait for an initial OK response. The dreaded "goto"
1305   is nevertheless a reasonably clean way of programming this kind of logic,
1306   where you want to escape on any error. */
1307
1308   if (!smtps)
1309     {
1310     if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
1311       ob->command_timeout)) goto RESPONSE_FAILED;
1312
1313 #ifdef EXPERIMENTAL_TPDA
1314     if (tpda_raise_event(tblock->tpda_event_action, US"smtp:connect", buffer)
1315         == DEFER)
1316         {
1317         uschar *message = US"deferred by smtp:connect event expansion";
1318         set_errno(addrlist, 0, message, DEFER, FALSE);
1319         yield = DEFER;
1320         goto SEND_QUIT;
1321         }
1322 #endif
1323
1324     /* Now check if the helo_data expansion went well, and sign off cleanly if
1325     it didn't. */
1326
1327     if (helo_data == NULL)
1328       {
1329       uschar *message = string_sprintf("failed to expand helo_data: %s",
1330         expand_string_message);
1331       set_errno(addrlist, 0, message, DEFER, FALSE);
1332       yield = DEFER;
1333       goto SEND_QUIT;
1334       }
1335     }
1336
1337 /** Debugging without sending a message
1338 addrlist->transport_return = DEFER;
1339 goto SEND_QUIT;
1340 **/
1341
1342   /* Errors that occur after this point follow an SMTP command, which is
1343   left in big_buffer by smtp_write_command() for use in error messages. */
1344
1345   smtp_command = big_buffer;
1346
1347   /* Tell the remote who we are...
1348
1349   February 1998: A convention has evolved that ESMTP-speaking MTAs include the
1350   string "ESMTP" in their greeting lines, so make Exim send EHLO if the
1351   greeting is of this form. The assumption was that the far end supports it
1352   properly... but experience shows that there are some that give 5xx responses,
1353   even though the banner includes "ESMTP" (there's a bloody-minded one that
1354   says "ESMTP not spoken here"). Cope with that case.
1355
1356   September 2000: Time has passed, and it seems reasonable now to always send
1357   EHLO at the start. It is also convenient to make the change while installing
1358   the TLS stuff.
1359
1360   July 2003: Joachim Wieland met a broken server that advertises "PIPELINING"
1361   but times out after sending MAIL FROM, RCPT TO and DATA all together. There
1362   would be no way to send out the mails, so there is now a host list
1363   "hosts_avoid_esmtp" that disables ESMTP for special hosts and solves the
1364   PIPELINING problem as well. Maybe it can also be useful to cure other
1365   problems with broken servers.
1366
1367   Exim originally sent "Helo" at this point and ran for nearly a year that way.
1368   Then somebody tried it with a Microsoft mailer... It seems that all other
1369   mailers use upper case for some reason (the RFC is quite clear about case
1370   independence) so, for peace of mind, I gave in. */
1371
1372   esmtp = verify_check_this_host(&(ob->hosts_avoid_esmtp), NULL,
1373      host->name, host->address, NULL) != OK;
1374
1375   /* Alas; be careful, since this goto is not an error-out, so conceivably
1376   we might set data between here and the target which we assume to exist
1377   and be usable.  I can see this coming back to bite us. */
1378 #ifdef SUPPORT_TLS
1379   if (smtps)
1380     {
1381     tls_offered = TRUE;
1382     suppress_tls = FALSE;
1383     ob->tls_tempfail_tryclear = FALSE;
1384     smtp_command = US"SSL-on-connect";
1385     goto TLS_NEGOTIATE;
1386     }
1387 #endif
1388
1389   if (esmtp)
1390     {
1391     if (smtp_write_command(&outblock, FALSE, "%s %s\r\n",
1392          lmtp? "LHLO" : "EHLO", helo_data) < 0)
1393       goto SEND_FAILED;
1394     if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
1395            ob->command_timeout))
1396       {
1397       if (errno != 0 || buffer[0] == 0 || lmtp) goto RESPONSE_FAILED;
1398       esmtp = FALSE;
1399       }
1400     }
1401   else
1402     {
1403     DEBUG(D_transport)
1404       debug_printf("not sending EHLO (host matches hosts_avoid_esmtp)\n");
1405     }
1406
1407   if (!esmtp)
1408     {
1409     if (smtp_write_command(&outblock, FALSE, "HELO %s\r\n", helo_data) < 0)
1410       goto SEND_FAILED;
1411     if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
1412       ob->command_timeout)) goto RESPONSE_FAILED;
1413     }
1414
1415   /* Set IGNOREQUOTA if the response to LHLO specifies support and the
1416   lmtp_ignore_quota option was set. */
1417
1418   igquotstr = (lmtp && ob->lmtp_ignore_quota &&
1419     pcre_exec(regex_IGNOREQUOTA, NULL, CS buffer, Ustrlen(CS buffer), 0,
1420       PCRE_EOPT, NULL, 0) >= 0)? US" IGNOREQUOTA" : US"";
1421
1422   /* Set tls_offered if the response to EHLO specifies support for STARTTLS. */
1423
1424 #ifdef SUPPORT_TLS
1425   tls_offered = esmtp &&
1426     pcre_exec(regex_STARTTLS, NULL, CS buffer, Ustrlen(buffer), 0,
1427       PCRE_EOPT, NULL, 0) >= 0;
1428 #endif
1429
1430 #ifndef DISABLE_PRDR
1431   prdr_offered = esmtp &&
1432     (pcre_exec(regex_PRDR, NULL, CS buffer, Ustrlen(buffer), 0,
1433       PCRE_EOPT, NULL, 0) >= 0) &&
1434     (verify_check_this_host(&(ob->hosts_try_prdr), NULL, host->name,
1435       host->address, NULL) == OK);
1436
1437   if (prdr_offered)
1438     {DEBUG(D_transport) debug_printf("PRDR usable\n");}
1439 #endif
1440   }
1441
1442 /* For continuing deliveries down the same channel, the socket is the standard
1443 input, and we don't need to redo EHLO here (but may need to do so for TLS - see
1444 below). Set up the pointer to where subsequent commands will be left, for
1445 error messages. Note that smtp_use_size and smtp_use_pipelining will have been
1446 set from the command line if they were set in the process that passed the
1447 connection on. */
1448
1449 else
1450   {
1451   inblock.sock = outblock.sock = fileno(stdin);
1452   smtp_command = big_buffer;
1453   host->port = port;    /* Record the port that was used */
1454   }
1455
1456 /* If TLS is available on this connection, whether continued or not, attempt to
1457 start up a TLS session, unless the host is in hosts_avoid_tls. If successful,
1458 send another EHLO - the server may give a different answer in secure mode. We
1459 use a separate buffer for reading the response to STARTTLS so that if it is
1460 negative, the original EHLO data is available for subsequent analysis, should
1461 the client not be required to use TLS. If the response is bad, copy the buffer
1462 for error analysis. */
1463
1464 #ifdef SUPPORT_TLS
1465 if (tls_offered && !suppress_tls &&
1466       verify_check_this_host(&(ob->hosts_avoid_tls), NULL, host->name,
1467         host->address, NULL) != OK)
1468   {
1469   uschar buffer2[4096];
1470   if (smtp_write_command(&outblock, FALSE, "STARTTLS\r\n") < 0)
1471     goto SEND_FAILED;
1472
1473   /* If there is an I/O error, transmission of this message is deferred. If
1474   there is a temporary rejection of STARRTLS and tls_tempfail_tryclear is
1475   false, we also defer. However, if there is a temporary rejection of STARTTLS
1476   and tls_tempfail_tryclear is true, or if there is an outright rejection of
1477   STARTTLS, we carry on. This means we will try to send the message in clear,
1478   unless the host is in hosts_require_tls (tested below). */
1479
1480   if (!smtp_read_response(&inblock, buffer2, sizeof(buffer2), '2',
1481       ob->command_timeout))
1482     {
1483     if (errno != 0 || buffer2[0] == 0 ||
1484          (buffer2[0] == '4' && !ob->tls_tempfail_tryclear))
1485       {
1486       Ustrncpy(buffer, buffer2, sizeof(buffer));
1487       goto RESPONSE_FAILED;
1488       }
1489     }
1490
1491   /* STARTTLS accepted: try to negotiate a TLS session. */
1492
1493   else
1494   TLS_NEGOTIATE:
1495     {
1496     int rc = tls_client_start(inblock.sock, host, addrlist, tblock);
1497
1498     /* TLS negotiation failed; give an error. From outside, this function may
1499     be called again to try in clear on a new connection, if the options permit
1500     it for this host. */
1501
1502     if (rc != OK)
1503       {
1504       save_errno = ERRNO_TLSFAILURE;
1505       message = US"failure while setting up TLS session";
1506       send_quit = FALSE;
1507       goto TLS_FAILED;
1508       }
1509
1510     /* TLS session is set up */
1511
1512     for (addr = addrlist; addr != NULL; addr = addr->next)
1513       {
1514       if (addr->transport_return == PENDING_DEFER)
1515         {
1516         addr->cipher = tls_out.cipher;
1517         addr->ourcert = tls_out.ourcert;
1518         addr->peercert = tls_out.peercert;
1519         addr->peerdn = tls_out.peerdn;
1520         addr->ocsp = tls_out.ocsp;
1521         }
1522       }
1523     }
1524   }
1525
1526 /* if smtps, we'll have smtp_command set to something else; always safe to
1527 reset it here. */
1528 smtp_command = big_buffer;
1529
1530 /* If we started TLS, redo the EHLO/LHLO exchange over the secure channel. If
1531 helo_data is null, we are dealing with a connection that was passed from
1532 another process, and so we won't have expanded helo_data above. We have to
1533 expand it here. $sending_ip_address and $sending_port are set up right at the
1534 start of the Exim process (in exim.c). */
1535
1536 if (tls_out.active >= 0)
1537   {
1538   char *greeting_cmd;
1539   if (helo_data == NULL)
1540     {
1541     helo_data = expand_string(ob->helo_data);
1542     if (helo_data == NULL)
1543       {
1544       uschar *message = string_sprintf("failed to expand helo_data: %s",
1545         expand_string_message);
1546       set_errno(addrlist, 0, message, DEFER, FALSE);
1547       yield = DEFER;
1548       goto SEND_QUIT;
1549       }
1550     }
1551
1552   /* For SMTPS we need to wait for the initial OK response. */
1553   if (smtps)
1554     {
1555     if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
1556       ob->command_timeout)) goto RESPONSE_FAILED;
1557     }
1558
1559   if (esmtp)
1560     greeting_cmd = "EHLO";
1561   else
1562     {
1563     greeting_cmd = "HELO";
1564     DEBUG(D_transport)
1565       debug_printf("not sending EHLO (host matches hosts_avoid_esmtp)\n");
1566     }
1567
1568   if (smtp_write_command(&outblock, FALSE, "%s %s\r\n",
1569         lmtp? "LHLO" : greeting_cmd, helo_data) < 0)
1570     goto SEND_FAILED;
1571   if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
1572        ob->command_timeout))
1573     goto RESPONSE_FAILED;
1574   }
1575
1576 /* If the host is required to use a secure channel, ensure that we
1577 have one. */
1578
1579 else if (verify_check_this_host(&(ob->hosts_require_tls), NULL, host->name,
1580           host->address, NULL) == OK)
1581   {
1582   save_errno = ERRNO_TLSREQUIRED;
1583   message = string_sprintf("a TLS session is required for %s [%s], but %s",
1584     host->name, host->address,
1585     tls_offered? "an attempt to start TLS failed" :
1586                  "the server did not offer TLS support");
1587   goto TLS_FAILED;
1588   }
1589 #endif
1590
1591 /* If TLS is active, we have just started it up and re-done the EHLO command,
1592 so its response needs to be analyzed. If TLS is not active and this is a
1593 continued session down a previously-used socket, we haven't just done EHLO, so
1594 we skip this. */
1595
1596 if (continue_hostname == NULL
1597 #ifdef SUPPORT_TLS
1598     || tls_out.active >= 0
1599 #endif
1600     )
1601   {
1602   /* Set for IGNOREQUOTA if the response to LHLO specifies support and the
1603   lmtp_ignore_quota option was set. */
1604
1605   igquotstr = (lmtp && ob->lmtp_ignore_quota &&
1606     pcre_exec(regex_IGNOREQUOTA, NULL, CS buffer, Ustrlen(CS buffer), 0,
1607       PCRE_EOPT, NULL, 0) >= 0)? US" IGNOREQUOTA" : US"";
1608
1609   /* If the response to EHLO specified support for the SIZE parameter, note
1610   this, provided size_addition is non-negative. */
1611
1612   smtp_use_size = esmtp && ob->size_addition >= 0 &&
1613     pcre_exec(regex_SIZE, NULL, CS buffer, Ustrlen(CS buffer), 0,
1614       PCRE_EOPT, NULL, 0) >= 0;
1615
1616   /* Note whether the server supports PIPELINING. If hosts_avoid_esmtp matched
1617   the current host, esmtp will be false, so PIPELINING can never be used. If
1618   the current host matches hosts_avoid_pipelining, don't do it. */
1619
1620   smtp_use_pipelining = esmtp &&
1621     verify_check_this_host(&(ob->hosts_avoid_pipelining), NULL, host->name,
1622       host->address, NULL) != OK &&
1623     pcre_exec(regex_PIPELINING, NULL, CS buffer, Ustrlen(CS buffer), 0,
1624       PCRE_EOPT, NULL, 0) >= 0;
1625
1626   DEBUG(D_transport) debug_printf("%susing PIPELINING\n",
1627     smtp_use_pipelining? "" : "not ");
1628
1629 #ifndef DISABLE_PRDR
1630   prdr_offered = esmtp &&
1631     pcre_exec(regex_PRDR, NULL, CS buffer, Ustrlen(CS buffer), 0,
1632       PCRE_EOPT, NULL, 0) >= 0 &&
1633     verify_check_this_host(&(ob->hosts_try_prdr), NULL, host->name,
1634       host->address, NULL) == OK;
1635
1636   if (prdr_offered)
1637     {DEBUG(D_transport) debug_printf("PRDR usable\n");}
1638 #endif
1639
1640 #ifdef EXPERIMENTAL_DSN
1641   /* Note if the server supports DSN */
1642   smtp_use_dsn = esmtp && pcre_exec(regex_DSN, NULL, CS buffer, (int)Ustrlen(CS buffer), 0,
1643        PCRE_EOPT, NULL, 0) >= 0;
1644   DEBUG(D_transport) debug_printf("use_dsn=%d\n", smtp_use_dsn);
1645 #endif
1646
1647   /* Note if the response to EHLO specifies support for the AUTH extension.
1648   If it has, check that this host is one we want to authenticate to, and do
1649   the business. The host name and address must be available when the
1650   authenticator's client driver is running. */
1651
1652   switch (yield = smtp_auth(buffer, sizeof(buffer), addrlist, host,
1653                             ob, esmtp, &inblock, &outblock))
1654     {
1655     default:            goto SEND_QUIT;
1656     case OK:            break;
1657     case FAIL_SEND:     goto SEND_FAILED;
1658     case FAIL:          goto RESPONSE_FAILED;
1659     }
1660   }
1661
1662 /* The setting up of the SMTP call is now complete. Any subsequent errors are
1663 message-specific. */
1664
1665 setting_up = FALSE;
1666
1667 /* If there is a filter command specified for this transport, we can now
1668 set it up. This cannot be done until the identify of the host is known. */
1669
1670 if (tblock->filter_command != NULL)
1671   {
1672   BOOL rc;
1673   uschar buffer[64];
1674   sprintf(CS buffer, "%.50s transport", tblock->name);
1675   rc = transport_set_up_command(&transport_filter_argv, tblock->filter_command,
1676     TRUE, DEFER, addrlist, buffer, NULL);
1677   transport_filter_timeout = tblock->filter_timeout;
1678
1679   /* On failure, copy the error to all addresses, abandon the SMTP call, and
1680   yield ERROR. */
1681
1682   if (!rc)
1683     {
1684     set_errno(addrlist->next, addrlist->basic_errno, addrlist->message, DEFER,
1685       FALSE);
1686     yield = ERROR;
1687     goto SEND_QUIT;
1688     }
1689   }
1690
1691
1692 /* For messages that have more than the maximum number of envelope recipients,
1693 we want to send several transactions down the same SMTP connection. (See
1694 comments in deliver.c as to how this reconciles, heuristically, with
1695 remote_max_parallel.) This optimization was added to Exim after the following
1696 code was already working. The simplest way to put it in without disturbing the
1697 code was to use a goto to jump back to this point when there is another
1698 transaction to handle. */
1699
1700 SEND_MESSAGE:
1701 sync_addr = first_addr;
1702 address_count = 0;
1703 ok = FALSE;
1704 send_rset = TRUE;
1705 completed_address = FALSE;
1706
1707
1708 /* Initiate a message transfer. If we know the receiving MTA supports the SIZE
1709 qualification, send it, adding something to the message size to allow for
1710 imprecision and things that get added en route. Exim keeps the number of lines
1711 in a message, so we can give an accurate value for the original message, but we
1712 need some additional to handle added headers. (Double "." characters don't get
1713 included in the count.) */
1714
1715 p = buffer;
1716 *p = 0;
1717
1718 if (smtp_use_size)
1719   {
1720   sprintf(CS p, " SIZE=%d", message_size+message_linecount+ob->size_addition);
1721   while (*p) p++;
1722   }
1723
1724 #ifndef DISABLE_PRDR
1725 prdr_active = FALSE;
1726 if (prdr_offered)
1727   {
1728   for (addr = first_addr; addr; addr = addr->next)
1729     if (addr->transport_return == PENDING_DEFER)
1730       {
1731       for (addr = addr->next; addr; addr = addr->next)
1732         if (addr->transport_return == PENDING_DEFER)
1733           {                     /* at least two recipients to send */
1734           prdr_active = TRUE;
1735           sprintf(CS p, " PRDR"); p += 5;
1736           break;
1737           }
1738       break;
1739       }
1740   }
1741 #endif
1742
1743 #ifdef EXPERIMENTAL_DSN
1744 /* check if all addresses have lasthop flag */
1745 /* do not send RET and ENVID if true */
1746 dsn_all_lasthop = TRUE;
1747 for (addr = first_addr;
1748      address_count < max_rcpt && addr != NULL;
1749      addr = addr->next)
1750   if ((addr->dsn_flags & rf_dsnlasthop) != 1)
1751     dsn_all_lasthop = FALSE;
1752
1753 /* Add any DSN flags to the mail command */
1754
1755 if ((smtp_use_dsn) && (dsn_all_lasthop == FALSE))
1756   {
1757   if (dsn_ret == dsn_ret_hdrs)
1758     {
1759     strcpy(p, " RET=HDRS");
1760     while (*p) p++;
1761     }
1762   else if (dsn_ret == dsn_ret_full)
1763     {
1764     strcpy(p, " RET=FULL");
1765     while (*p) p++;
1766     }
1767   if (dsn_envid != NULL)
1768     {
1769     string_format(p, sizeof(buffer) - (p-buffer), " ENVID=%s", dsn_envid);
1770     while (*p) p++;
1771     }
1772   }
1773 #endif
1774
1775 /* If an authenticated_sender override has been specified for this transport
1776 instance, expand it. If the expansion is forced to fail, and there was already
1777 an authenticated_sender for this message, the original value will be used.
1778 Other expansion failures are serious. An empty result is ignored, but there is
1779 otherwise no check - this feature is expected to be used with LMTP and other
1780 cases where non-standard addresses (e.g. without domains) might be required. */
1781
1782 if (smtp_mail_auth_str(p, sizeof(buffer) - (p-buffer), addrlist, ob))
1783   {
1784   yield = ERROR;
1785   goto SEND_QUIT;
1786   }
1787
1788 /* From here until we send the DATA command, we can make use of PIPELINING
1789 if the server host supports it. The code has to be able to check the responses
1790 at any point, for when the buffer fills up, so we write it totally generally.
1791 When PIPELINING is off, each command written reports that it has flushed the
1792 buffer. */
1793
1794 pending_MAIL = TRUE;     /* The block starts with MAIL */
1795
1796 rc = smtp_write_command(&outblock, smtp_use_pipelining,
1797        "MAIL FROM:<%s>%s\r\n", return_path, buffer);
1798 mail_command = string_copy(big_buffer);  /* Save for later error message */
1799
1800 switch(rc)
1801   {
1802   case -1:                /* Transmission error */
1803   goto SEND_FAILED;
1804
1805   case +1:                /* Block was sent */
1806   if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
1807        ob->command_timeout))
1808     {
1809     if (errno == 0 && buffer[0] == '4')
1810       {
1811       errno = ERRNO_MAIL4XX;
1812       addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
1813       }
1814     goto RESPONSE_FAILED;
1815     }
1816   pending_MAIL = FALSE;
1817   break;
1818   }
1819
1820 /* Pass over all the relevant recipient addresses for this host, which are the
1821 ones that have status PENDING_DEFER. If we are using PIPELINING, we can send
1822 several before we have to read the responses for those seen so far. This
1823 checking is done by a subroutine because it also needs to be done at the end.
1824 Send only up to max_rcpt addresses at a time, leaving first_addr pointing to
1825 the next one if not all are sent.
1826
1827 In the MUA wrapper situation, we want to flush the PIPELINING buffer for the
1828 last address because we want to abort if any recipients have any kind of
1829 problem, temporary or permanent. We know that all recipient addresses will have
1830 the PENDING_DEFER status, because only one attempt is ever made, and we know
1831 that max_rcpt will be large, so all addresses will be done at once. */
1832
1833 for (addr = first_addr;
1834      address_count < max_rcpt && addr != NULL;
1835      addr = addr->next)
1836   {
1837   int count;
1838   BOOL no_flush;
1839
1840 #ifdef EXPERIMENTAL_DSN
1841   addr->dsn_aware = smtp_use_dsn ? dsn_support_yes : dsn_support_no;
1842 #endif
1843
1844   if (addr->transport_return != PENDING_DEFER) continue;
1845
1846   address_count++;
1847   no_flush = smtp_use_pipelining && (!mua_wrapper || addr->next != NULL);
1848
1849 #ifdef EXPERIMENTAL_DSN
1850   /* Add any DSN flags to the rcpt command and add to the sent string */
1851
1852   p = buffer;
1853   *p = 0;
1854
1855   if (smtp_use_dsn && (addr->dsn_flags & rf_dsnlasthop) != 1)
1856     {
1857     if ((addr->dsn_flags & rf_dsnflags) != 0)
1858       {
1859       int i;
1860       BOOL first = TRUE;
1861       strcpy(p, " NOTIFY=");
1862       while (*p) p++;
1863       for (i = 0; i < 4; i++)
1864         if ((addr->dsn_flags & rf_list[i]) != 0)
1865           {
1866           if (!first) *p++ = ',';
1867           first = FALSE;
1868           strcpy(p, rf_names[i]);
1869           while (*p) p++;
1870           }
1871       }
1872
1873     if (addr->dsn_orcpt != NULL)
1874       {
1875       string_format(p, sizeof(buffer) - (p-buffer), " ORCPT=%s",
1876         addr->dsn_orcpt);
1877       while (*p) p++;
1878       }
1879     }
1880 #endif
1881
1882
1883   /* Now send the RCPT command, and process outstanding responses when
1884   necessary. After a timeout on RCPT, we just end the function, leaving the
1885   yield as OK, because this error can often mean that there is a problem with
1886   just one address, so we don't want to delay the host. */
1887
1888 #ifdef EXPERIMENTAL_DSN
1889   count = smtp_write_command(&outblock, no_flush, "RCPT TO:<%s>%s%s\r\n",
1890     transport_rcpt_address(addr, tblock->rcpt_include_affixes), igquotstr, buffer);
1891 #else
1892   count = smtp_write_command(&outblock, no_flush, "RCPT TO:<%s>%s\r\n",
1893     transport_rcpt_address(addr, tblock->rcpt_include_affixes), igquotstr);
1894 #endif
1895
1896   if (count < 0) goto SEND_FAILED;
1897   if (count > 0)
1898     {
1899     switch(sync_responses(first_addr, tblock->rcpt_include_affixes,
1900              &sync_addr, host, count, ob->address_retry_include_sender,
1901              pending_MAIL, 0, &inblock, ob->command_timeout, buffer,
1902              sizeof(buffer)))
1903       {
1904       case 3: ok = TRUE;                   /* 2xx & 5xx => OK & progress made */
1905       case 2: completed_address = TRUE;    /* 5xx (only) => progress made */
1906       break;
1907
1908       case 1: ok = TRUE;                   /* 2xx (only) => OK, but if LMTP, */
1909       if (!lmtp) completed_address = TRUE; /* can't tell about progress yet */
1910       case 0:                              /* No 2xx or 5xx, but no probs */
1911       break;
1912
1913       case -1: goto END_OFF;               /* Timeout on RCPT */
1914       default: goto RESPONSE_FAILED;       /* I/O error, or any MAIL error */
1915       }
1916     pending_MAIL = FALSE;                  /* Dealt with MAIL */
1917     }
1918   }      /* Loop for next address */
1919
1920 /* If we are an MUA wrapper, abort if any RCPTs were rejected, either
1921 permanently or temporarily. We should have flushed and synced after the last
1922 RCPT. */
1923
1924 if (mua_wrapper)
1925   {
1926   address_item *badaddr;
1927   for (badaddr = first_addr; badaddr != NULL; badaddr = badaddr->next)
1928     {
1929     if (badaddr->transport_return != PENDING_OK) break;
1930     }
1931   if (badaddr != NULL)
1932     {
1933     set_errno(addrlist, 0, badaddr->message, FAIL,
1934       testflag(badaddr, af_pass_message));
1935     ok = FALSE;
1936     }
1937   }
1938
1939 /* If ok is TRUE, we know we have got at least one good recipient, and must now
1940 send DATA, but if it is FALSE (in the normal, non-wrapper case), we may still
1941 have a good recipient buffered up if we are pipelining. We don't want to waste
1942 time sending DATA needlessly, so we only send it if either ok is TRUE or if we
1943 are pipelining. The responses are all handled by sync_responses(). */
1944
1945 if (ok || (smtp_use_pipelining && !mua_wrapper))
1946   {
1947   int count = smtp_write_command(&outblock, FALSE, "DATA\r\n");
1948   if (count < 0) goto SEND_FAILED;
1949   switch(sync_responses(first_addr, tblock->rcpt_include_affixes, &sync_addr,
1950            host, count, ob->address_retry_include_sender, pending_MAIL,
1951            ok? +1 : -1, &inblock, ob->command_timeout, buffer, sizeof(buffer)))
1952     {
1953     case 3: ok = TRUE;                   /* 2xx & 5xx => OK & progress made */
1954     case 2: completed_address = TRUE;    /* 5xx (only) => progress made */
1955     break;
1956
1957     case 1: ok = TRUE;                   /* 2xx (only) => OK, but if LMTP, */
1958     if (!lmtp) completed_address = TRUE; /* can't tell about progress yet */
1959     case 0: break;                       /* No 2xx or 5xx, but no probs */
1960
1961     case -1: goto END_OFF;               /* Timeout on RCPT */
1962     default: goto RESPONSE_FAILED;       /* I/O error, or any MAIL/DATA error */
1963     }
1964   }
1965
1966 /* Save the first address of the next batch. */
1967
1968 first_addr = addr;
1969
1970 /* If there were no good recipients (but otherwise there have been no
1971 problems), just set ok TRUE, since we have handled address-specific errors
1972 already. Otherwise, it's OK to send the message. Use the check/escape mechanism
1973 for handling the SMTP dot-handling protocol, flagging to apply to headers as
1974 well as body. Set the appropriate timeout value to be used for each chunk.
1975 (Haven't been able to make it work using select() for writing yet.) */
1976
1977 if (!ok) ok = TRUE; else
1978   {
1979   sigalrm_seen = FALSE;
1980   transport_write_timeout = ob->data_timeout;
1981   smtp_command = US"sending data block";   /* For error messages */
1982   DEBUG(D_transport|D_v)
1983     debug_printf("  SMTP>> writing message and terminating \".\"\n");
1984   transport_count = 0;
1985
1986 #ifndef DISABLE_DKIM
1987   ok = dkim_transport_write_message(addrlist, inblock.sock,
1988     topt_use_crlf | topt_end_dot | topt_escape_headers |
1989       (tblock->body_only? topt_no_headers : 0) |
1990       (tblock->headers_only? topt_no_body : 0) |
1991       (tblock->return_path_add? topt_add_return_path : 0) |
1992       (tblock->delivery_date_add? topt_add_delivery_date : 0) |
1993       (tblock->envelope_to_add? topt_add_envelope_to : 0),
1994     0,            /* No size limit */
1995     tblock->add_headers, tblock->remove_headers,
1996     US".", US"..",    /* Escaping strings */
1997     tblock->rewrite_rules, tblock->rewrite_existflags,
1998     ob->dkim_private_key, ob->dkim_domain, ob->dkim_selector,
1999     ob->dkim_canon, ob->dkim_strict, ob->dkim_sign_headers
2000     );
2001 #else
2002   ok = transport_write_message(addrlist, inblock.sock,
2003     topt_use_crlf | topt_end_dot | topt_escape_headers |
2004       (tblock->body_only? topt_no_headers : 0) |
2005       (tblock->headers_only? topt_no_body : 0) |
2006       (tblock->return_path_add? topt_add_return_path : 0) |
2007       (tblock->delivery_date_add? topt_add_delivery_date : 0) |
2008       (tblock->envelope_to_add? topt_add_envelope_to : 0),
2009     0,            /* No size limit */
2010     tblock->add_headers, tblock->remove_headers,
2011     US".", US"..",    /* Escaping strings */
2012     tblock->rewrite_rules, tblock->rewrite_existflags);
2013 #endif
2014
2015   /* transport_write_message() uses write() because it is called from other
2016   places to write to non-sockets. This means that under some OS (e.g. Solaris)
2017   it can exit with "Broken pipe" as its error. This really means that the
2018   socket got closed at the far end. */
2019
2020   transport_write_timeout = 0;   /* for subsequent transports */
2021
2022   /* Failure can either be some kind of I/O disaster (including timeout),
2023   or the failure of a transport filter or the expansion of added headers. */
2024
2025   if (!ok)
2026     {
2027     buffer[0] = 0;              /* There hasn't been a response */
2028     goto RESPONSE_FAILED;
2029     }
2030
2031   /* We used to send the terminating "." explicitly here, but because of
2032   buffering effects at both ends of TCP/IP connections, you don't gain
2033   anything by keeping it separate, so it might as well go in the final
2034   data buffer for efficiency. This is now done by setting the topt_end_dot
2035   flag above. */
2036
2037   smtp_command = US"end of data";
2038
2039 #ifndef DISABLE_PRDR
2040   /* For PRDR we optionally get a partial-responses warning
2041    * followed by the individual responses, before going on with
2042    * the overall response.  If we don't get the warning then deal
2043    * with per non-PRDR. */
2044   if(prdr_active)
2045     {
2046     ok = smtp_read_response(&inblock, buffer, sizeof(buffer), '3',
2047       ob->final_timeout);
2048     if (!ok && errno == 0)
2049       switch(buffer[0])
2050         {
2051         case '2': prdr_active = FALSE;
2052                   ok = TRUE;
2053                   break;
2054         case '4': errno = ERRNO_DATA4XX;
2055                   addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
2056                   break;
2057         }
2058     }
2059   else
2060 #endif
2061
2062   /* For non-PRDR SMTP, we now read a single response that applies to the
2063   whole message.  If it is OK, then all the addresses have been delivered. */
2064
2065   if (!lmtp)
2066     {
2067     ok = smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
2068       ob->final_timeout);
2069     if (!ok && errno == 0 && buffer[0] == '4')
2070       {
2071       errno = ERRNO_DATA4XX;
2072       addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
2073       }
2074     }
2075
2076   /* For LMTP, we get back a response for every RCPT command that we sent;
2077   some may be accepted and some rejected. For those that get a response, their
2078   status is fixed; any that are accepted have been handed over, even if later
2079   responses crash - at least, that's how I read RFC 2033.
2080
2081   If all went well, mark the recipient addresses as completed, record which
2082   host/IPaddress they were delivered to, and cut out RSET when sending another
2083   message down the same channel. Write the completed addresses to the journal
2084   now so that they are recorded in case there is a crash of hardware or
2085   software before the spool gets updated. Also record the final SMTP
2086   confirmation if needed (for SMTP only). */
2087
2088   if (ok)
2089     {
2090     int flag = '=';
2091     int delivery_time = (int)(time(NULL) - start_delivery_time);
2092     int len;
2093     host_item *thost;
2094     uschar *conf = NULL;
2095     send_rset = FALSE;
2096
2097     /* Make a copy of the host if it is local to this invocation
2098     of the transport. */
2099
2100     if (copy_host)
2101       {
2102       thost = store_get(sizeof(host_item));
2103       *thost = *host;
2104       thost->name = string_copy(host->name);
2105       thost->address = string_copy(host->address);
2106       }
2107     else thost = host;
2108
2109     /* Set up confirmation if needed - applies only to SMTP */
2110
2111     if (
2112 #ifndef EXPERIMENTAL_TPDA
2113           (log_extra_selector & LX_smtp_confirmation) != 0 &&
2114 #endif
2115           !lmtp
2116        )
2117       {
2118       uschar *s = string_printing(buffer);
2119       conf = (s == buffer)? (uschar *)string_copy(s) : s;
2120       }
2121
2122     /* Process all transported addresses - for LMTP or PRDR, read a status for
2123     each one. */
2124
2125     for (addr = addrlist; addr != first_addr; addr = addr->next)
2126       {
2127       if (addr->transport_return != PENDING_OK) continue;
2128
2129       /* LMTP - if the response fails badly (e.g. timeout), use it for all the
2130       remaining addresses. Otherwise, it's a return code for just the one
2131       address. For temporary errors, add a retry item for the address so that
2132       it doesn't get tried again too soon. */
2133
2134 #ifndef DISABLE_PRDR
2135       if (lmtp || prdr_active)
2136 #else
2137       if (lmtp)
2138 #endif
2139         {
2140         if (!smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
2141             ob->final_timeout))
2142           {
2143           if (errno != 0 || buffer[0] == 0) goto RESPONSE_FAILED;
2144           addr->message = string_sprintf(
2145 #ifndef DISABLE_PRDR
2146             "%s error after %s: %s", prdr_active ? "PRDR":"LMTP",
2147 #else
2148             "LMTP error after %s: %s",
2149 #endif
2150             big_buffer, string_printing(buffer));
2151           setflag(addr, af_pass_message);   /* Allow message to go to user */
2152           if (buffer[0] == '5')
2153             addr->transport_return = FAIL;
2154           else
2155             {
2156             errno = ERRNO_DATA4XX;
2157             addr->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
2158             addr->transport_return = DEFER;
2159 #ifndef DISABLE_PRDR
2160             if (!prdr_active)
2161 #endif
2162               retry_add_item(addr, addr->address_retry_key, 0);
2163             }
2164           continue;
2165           }
2166         completed_address = TRUE;   /* NOW we can set this flag */
2167         if ((log_extra_selector & LX_smtp_confirmation) != 0)
2168           {
2169           uschar *s = string_printing(buffer);
2170           conf = (s == buffer)? (uschar *)string_copy(s) : s;
2171           }
2172         }
2173
2174       /* SMTP, or success return from LMTP for this address. Pass back the
2175       actual host that was used. */
2176
2177       addr->transport_return = OK;
2178       addr->more_errno = delivery_time;
2179       addr->host_used = thost;
2180       addr->special_action = flag;
2181       addr->message = conf;
2182 #ifndef DISABLE_PRDR
2183       if (prdr_active) addr->flags |= af_prdr_used;
2184 #endif
2185       flag = '-';
2186
2187 #ifndef DISABLE_PRDR
2188       if (!prdr_active)
2189 #endif
2190         {
2191         /* Update the journal. For homonymic addresses, use the base address plus
2192         the transport name. See lots of comments in deliver.c about the reasons
2193         for the complications when homonyms are involved. Just carry on after
2194         write error, as it may prove possible to update the spool file later. */
2195
2196         if (testflag(addr, af_homonym))
2197           sprintf(CS buffer, "%.500s/%s\n", addr->unique + 3, tblock->name);
2198         else
2199           sprintf(CS buffer, "%.500s\n", addr->unique);
2200
2201         DEBUG(D_deliver) debug_printf("journalling %s", buffer);
2202         len = Ustrlen(CS buffer);
2203         if (write(journal_fd, buffer, len) != len)
2204           log_write(0, LOG_MAIN|LOG_PANIC, "failed to write journal for "
2205             "%s: %s", buffer, strerror(errno));
2206         }
2207       }
2208
2209 #ifndef DISABLE_PRDR
2210       if (prdr_active)
2211         {
2212         /* PRDR - get the final, overall response.  For any non-success
2213         upgrade all the address statuses. */
2214         ok = smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
2215           ob->final_timeout);
2216         if (!ok)
2217           {
2218           if(errno == 0 && buffer[0] == '4')
2219             {
2220             errno = ERRNO_DATA4XX;
2221             addrlist->more_errno |= ((buffer[1] - '0')*10 + buffer[2] - '0') << 8;
2222             }
2223           for (addr = addrlist; addr != first_addr; addr = addr->next)
2224             if (buffer[0] == '5' || addr->transport_return == OK)
2225               addr->transport_return = PENDING_OK; /* allow set_errno action */
2226           goto RESPONSE_FAILED;
2227           }
2228
2229         /* Update the journal, or setup retry. */
2230         for (addr = addrlist; addr != first_addr; addr = addr->next)
2231           if (addr->transport_return == OK)
2232           {
2233           if (testflag(addr, af_homonym))
2234             sprintf(CS buffer, "%.500s/%s\n", addr->unique + 3, tblock->name);
2235           else
2236             sprintf(CS buffer, "%.500s\n", addr->unique);
2237
2238           DEBUG(D_deliver) debug_printf("journalling(PRDR) %s", buffer);
2239           len = Ustrlen(CS buffer);
2240           if (write(journal_fd, buffer, len) != len)
2241             log_write(0, LOG_MAIN|LOG_PANIC, "failed to write journal for "
2242               "%s: %s", buffer, strerror(errno));
2243           }
2244         else if (addr->transport_return == DEFER)
2245           retry_add_item(addr, addr->address_retry_key, -2);
2246         }
2247 #endif
2248
2249     /* Ensure the journal file is pushed out to disk. */
2250
2251     if (EXIMfsync(journal_fd) < 0)
2252       log_write(0, LOG_MAIN|LOG_PANIC, "failed to fsync journal: %s",
2253         strerror(errno));
2254     }
2255   }
2256
2257
2258 /* Handle general (not specific to one address) failures here. The value of ok
2259 is used to skip over this code on the falling through case. A timeout causes a
2260 deferral. Other errors may defer or fail according to the response code, and
2261 may set up a special errno value, e.g. after connection chopped, which is
2262 assumed if errno == 0 and there is no text in the buffer. If control reaches
2263 here during the setting up phase (i.e. before MAIL FROM) then always defer, as
2264 the problem is not related to this specific message. */
2265
2266 if (!ok)
2267   {
2268   int code;
2269
2270   RESPONSE_FAILED:
2271   save_errno = errno;
2272   message = NULL;
2273   send_quit = check_response(host, &save_errno, addrlist->more_errno,
2274     buffer, &code, &message, &pass_message);
2275   goto FAILED;
2276
2277   SEND_FAILED:
2278   save_errno = errno;
2279   code = '4';
2280   message = US string_sprintf("send() to %s [%s] failed: %s",
2281     host->name, host->address, strerror(save_errno));
2282   send_quit = FALSE;
2283   goto FAILED;
2284
2285   /* This label is jumped to directly when a TLS negotiation has failed,
2286   or was not done for a host for which it is required. Values will be set
2287   in message and save_errno, and setting_up will always be true. Treat as
2288   a temporary error. */
2289
2290 #ifdef SUPPORT_TLS
2291   TLS_FAILED:
2292   code = '4';
2293 #endif
2294
2295   /* If the failure happened while setting up the call, see if the failure was
2296   a 5xx response (this will either be on connection, or following HELO - a 5xx
2297   after EHLO causes it to try HELO). If so, fail all addresses, as this host is
2298   never going to accept them. For other errors during setting up (timeouts or
2299   whatever), defer all addresses, and yield DEFER, so that the host is not
2300   tried again for a while. */
2301
2302   FAILED:
2303   ok = FALSE;                /* For when reached by GOTO */
2304
2305   if (setting_up)
2306     {
2307     if (code == '5')
2308       {
2309       set_errno(addrlist, save_errno, message, FAIL, pass_message);
2310       }
2311     else
2312       {
2313       set_errno(addrlist, save_errno, message, DEFER, pass_message);
2314       yield = DEFER;
2315       }
2316     }
2317
2318   /* We want to handle timeouts after MAIL or "." and loss of connection after
2319   "." specially. They can indicate a problem with the sender address or with
2320   the contents of the message rather than a real error on the connection. These
2321   cases are treated in the same way as a 4xx response. This next bit of code
2322   does the classification. */
2323
2324   else
2325     {
2326     BOOL message_error;
2327
2328     switch(save_errno)
2329       {
2330       case 0:
2331       case ERRNO_MAIL4XX:
2332       case ERRNO_DATA4XX:
2333       message_error = TRUE;
2334       break;
2335
2336       case ETIMEDOUT:
2337       message_error = Ustrncmp(smtp_command,"MAIL",4) == 0 ||
2338                       Ustrncmp(smtp_command,"end ",4) == 0;
2339       break;
2340
2341       case ERRNO_SMTPCLOSED:
2342       message_error = Ustrncmp(smtp_command,"end ",4) == 0;
2343       break;
2344
2345       default:
2346       message_error = FALSE;
2347       break;
2348       }
2349
2350     /* Handle the cases that are treated as message errors. These are:
2351
2352       (a) negative response or timeout after MAIL
2353       (b) negative response after DATA
2354       (c) negative response or timeout or dropped connection after "."
2355
2356     It won't be a negative response or timeout after RCPT, as that is dealt
2357     with separately above. The action in all cases is to set an appropriate
2358     error code for all the addresses, but to leave yield set to OK because the
2359     host itself has not failed. Of course, it might in practice have failed
2360     when we've had a timeout, but if so, we'll discover that at the next
2361     delivery attempt. For a temporary error, set the message_defer flag, and
2362     write to the logs for information if this is not the last host. The error
2363     for the last host will be logged as part of the address's log line. */
2364
2365     if (message_error)
2366       {
2367       if (mua_wrapper) code = '5';  /* Force hard failure in wrapper mode */
2368       set_errno(addrlist, save_errno, message, (code == '5')? FAIL : DEFER,
2369         pass_message);
2370
2371       /* If there's an errno, the message contains just the identity of
2372       the host. */
2373
2374       if (code != '5')     /* Anything other than 5 is treated as temporary */
2375         {
2376         if (save_errno > 0)
2377           message = US string_sprintf("%s: %s", message, strerror(save_errno));
2378         if (host->next != NULL) log_write(0, LOG_MAIN, "%s", message);
2379         deliver_msglog("%s %s\n", tod_stamp(tod_log), message);
2380         *message_defer = TRUE;
2381         }
2382       }
2383
2384     /* Otherwise, we have an I/O error or a timeout other than after MAIL or
2385     ".", or some other transportation error. We defer all addresses and yield
2386     DEFER, except for the case of failed add_headers expansion, or a transport
2387     filter failure, when the yield should be ERROR, to stop it trying other
2388     hosts. */
2389
2390     else
2391       {
2392       yield = (save_errno == ERRNO_CHHEADER_FAIL ||
2393                save_errno == ERRNO_FILTER_FAIL)? ERROR : DEFER;
2394       set_errno(addrlist, save_errno, message, DEFER, pass_message);
2395       }
2396     }
2397   }
2398
2399
2400 /* If all has gone well, send_quit will be set TRUE, implying we can end the
2401 SMTP session tidily. However, if there were too many addresses to send in one
2402 message (indicated by first_addr being non-NULL) we want to carry on with the
2403 rest of them. Also, it is desirable to send more than one message down the SMTP
2404 connection if there are several waiting, provided we haven't already sent so
2405 many as to hit the configured limit. The function transport_check_waiting looks
2406 for a waiting message and returns its id. Then transport_pass_socket tries to
2407 set up a continued delivery by passing the socket on to another process. The
2408 variable send_rset is FALSE if a message has just been successfully transfered.
2409
2410 If we are already sending down a continued channel, there may be further
2411 addresses not yet delivered that are aimed at the same host, but which have not
2412 been passed in this run of the transport. In this case, continue_more will be
2413 true, and all we should do is send RSET if necessary, and return, leaving the
2414 channel open.
2415
2416 However, if no address was disposed of, i.e. all addresses got 4xx errors, we
2417 do not want to continue with other messages down the same channel, because that
2418 can lead to looping between two or more messages, all with the same,
2419 temporarily failing address(es). [The retry information isn't updated yet, so
2420 new processes keep on trying.] We probably also don't want to try more of this
2421 message's addresses either.
2422
2423 If we have started a TLS session, we have to end it before passing the
2424 connection to a new process. However, not all servers can handle this (Exim
2425 can), so we do not pass such a connection on if the host matches
2426 hosts_nopass_tls. */
2427
2428 DEBUG(D_transport)
2429   debug_printf("ok=%d send_quit=%d send_rset=%d continue_more=%d "
2430     "yield=%d first_address is %sNULL\n", ok, send_quit, send_rset,
2431     continue_more, yield, (first_addr == NULL)? "":"not ");
2432
2433 if (completed_address && ok && send_quit)
2434   {
2435   BOOL more;
2436   if (first_addr != NULL || continue_more ||
2437         (
2438            (tls_out.active < 0 ||
2439            verify_check_this_host(&(ob->hosts_nopass_tls), NULL, host->name,
2440              host->address, NULL) != OK)
2441         &&
2442            transport_check_waiting(tblock->name, host->name,
2443              tblock->connection_max_messages, new_message_id, &more)
2444         ))
2445     {
2446     uschar *msg;
2447     BOOL pass_message;
2448
2449     if (send_rset)
2450       {
2451       if (! (ok = smtp_write_command(&outblock, FALSE, "RSET\r\n") >= 0))
2452         {
2453         msg = US string_sprintf("send() to %s [%s] failed: %s", host->name,
2454           host->address, strerror(save_errno));
2455         send_quit = FALSE;
2456         }
2457       else if (! (ok = smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
2458                   ob->command_timeout)))
2459         {
2460         int code;
2461         send_quit = check_response(host, &errno, 0, buffer, &code, &msg,
2462           &pass_message);
2463         if (!send_quit)
2464           {
2465           DEBUG(D_transport) debug_printf("%s\n", msg);
2466           }
2467         }
2468       }
2469
2470     /* Either RSET was not needed, or it succeeded */
2471
2472     if (ok)
2473       {
2474       if (first_addr != NULL)            /* More addresses still to be sent */
2475         {                                /*   in this run of the transport */
2476         continue_sequence++;             /* Causes * in logging */
2477         goto SEND_MESSAGE;
2478         }
2479       if (continue_more) return yield;   /* More addresses for another run */
2480
2481       /* Pass the socket to a new Exim process. Before doing so, we must shut
2482       down TLS. Not all MTAs allow for the continuation of the SMTP session
2483       when TLS is shut down. We test for this by sending a new EHLO. If we
2484       don't get a good response, we don't attempt to pass the socket on. */
2485
2486 #ifdef SUPPORT_TLS
2487       if (tls_out.active >= 0)
2488         {
2489         tls_close(FALSE, TRUE);
2490         if (smtps)
2491           ok = FALSE;
2492         else
2493           ok = smtp_write_command(&outblock,FALSE,"EHLO %s\r\n",helo_data) >= 0 &&
2494                smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
2495                  ob->command_timeout);
2496         }
2497 #endif
2498
2499       /* If the socket is successfully passed, we musn't send QUIT (or
2500       indeed anything!) from here. */
2501
2502       if (ok && transport_pass_socket(tblock->name, host->name, host->address,
2503             new_message_id, inblock.sock))
2504         {
2505         send_quit = FALSE;
2506         }
2507       }
2508
2509     /* If RSET failed and there are addresses left, they get deferred. */
2510
2511     else set_errno(first_addr, errno, msg, DEFER, FALSE);
2512     }
2513   }
2514
2515 /* End off tidily with QUIT unless the connection has died or the socket has
2516 been passed to another process. There has been discussion on the net about what
2517 to do after sending QUIT. The wording of the RFC suggests that it is necessary
2518 to wait for a response, but on the other hand, there isn't anything one can do
2519 with an error response, other than log it. Exim used to do that. However,
2520 further discussion suggested that it is positively advantageous not to wait for
2521 the response, but to close the session immediately. This is supposed to move
2522 the TCP/IP TIME_WAIT state from the server to the client, thereby removing some
2523 load from the server. (Hosts that are both servers and clients may not see much
2524 difference, of course.) Further discussion indicated that this was safe to do
2525 on Unix systems which have decent implementations of TCP/IP that leave the
2526 connection around for a while (TIME_WAIT) after the application has gone away.
2527 This enables the response sent by the server to be properly ACKed rather than
2528 timed out, as can happen on broken TCP/IP implementations on other OS.
2529
2530 This change is being made on 31-Jul-98. After over a year of trouble-free
2531 operation, the old commented-out code was removed on 17-Sep-99. */
2532
2533 SEND_QUIT:
2534 if (send_quit) (void)smtp_write_command(&outblock, FALSE, "QUIT\r\n");
2535
2536 END_OFF:
2537
2538 #ifdef SUPPORT_TLS
2539 tls_close(FALSE, TRUE);
2540 #endif
2541
2542 /* Close the socket, and return the appropriate value, first setting
2543 works because the NULL setting is passed back to the calling process, and
2544 remote_max_parallel is forced to 1 when delivering over an existing connection,
2545
2546 If all went well and continue_more is set, we shouldn't actually get here if
2547 there are further addresses, as the return above will be taken. However,
2548 writing RSET might have failed, or there may be other addresses whose hosts are
2549 specified in the transports, and therefore not visible at top level, in which
2550 case continue_more won't get set. */
2551
2552 (void)close(inblock.sock);
2553
2554 #ifdef EXPERIMENTAL_TPDA
2555 (void) tpda_raise_event(tblock->tpda_event_action, US"tcp:close", NULL);
2556 #endif
2557
2558 continue_transport = NULL;
2559 continue_hostname = NULL;
2560 return yield;
2561 }
2562
2563
2564
2565
2566 /*************************************************
2567 *              Closedown entry point             *
2568 *************************************************/
2569
2570 /* This function is called when exim is passed an open smtp channel
2571 from another incarnation, but the message which it has been asked
2572 to deliver no longer exists. The channel is on stdin.
2573
2574 We might do fancy things like looking for another message to send down
2575 the channel, but if the one we sought has gone, it has probably been
2576 delivered by some other process that itself will seek further messages,
2577 so just close down our connection.
2578
2579 Argument:   pointer to the transport instance block
2580 Returns:    nothing
2581 */
2582
2583 void
2584 smtp_transport_closedown(transport_instance *tblock)
2585 {
2586 smtp_transport_options_block *ob =
2587   (smtp_transport_options_block *)(tblock->options_block);
2588 smtp_inblock inblock;
2589 smtp_outblock outblock;
2590 uschar buffer[256];
2591 uschar inbuffer[4096];
2592 uschar outbuffer[16];
2593
2594 inblock.sock = fileno(stdin);
2595 inblock.buffer = inbuffer;
2596 inblock.buffersize = sizeof(inbuffer);
2597 inblock.ptr = inbuffer;
2598 inblock.ptrend = inbuffer;
2599
2600 outblock.sock = inblock.sock;
2601 outblock.buffersize = sizeof(outbuffer);
2602 outblock.buffer = outbuffer;
2603 outblock.ptr = outbuffer;
2604 outblock.cmd_count = 0;
2605 outblock.authenticating = FALSE;
2606
2607 (void)smtp_write_command(&outblock, FALSE, "QUIT\r\n");
2608 (void)smtp_read_response(&inblock, buffer, sizeof(buffer), '2',
2609   ob->command_timeout);
2610 (void)close(inblock.sock);
2611 }
2612
2613
2614
2615 /*************************************************
2616 *            Prepare addresses for delivery      *
2617 *************************************************/
2618
2619 /* This function is called to flush out error settings from previous delivery
2620 attempts to other hosts. It also records whether we got here via an MX record
2621 or not in the more_errno field of the address. We are interested only in
2622 addresses that are still marked DEFER - others may have got delivered to a
2623 previously considered IP address. Set their status to PENDING_DEFER to indicate
2624 which ones are relevant this time.
2625
2626 Arguments:
2627   addrlist     the list of addresses
2628   host         the host we are delivering to
2629
2630 Returns:       the first address for this delivery
2631 */
2632
2633 static address_item *
2634 prepare_addresses(address_item *addrlist, host_item *host)
2635 {
2636 address_item *first_addr = NULL;
2637 address_item *addr;
2638 for (addr = addrlist; addr != NULL; addr = addr->next)
2639   {
2640   if (addr->transport_return != DEFER) continue;
2641   if (first_addr == NULL) first_addr = addr;
2642   addr->transport_return = PENDING_DEFER;
2643   addr->basic_errno = 0;
2644   addr->more_errno = (host->mx >= 0)? 'M' : 'A';
2645   addr->message = NULL;
2646 #ifdef SUPPORT_TLS
2647   addr->cipher = NULL;
2648   addr->ourcert = NULL;
2649   addr->peercert = NULL;
2650   addr->peerdn = NULL;
2651   addr->ocsp = OCSP_NOT_REQ;
2652 #endif
2653   }
2654 return first_addr;
2655 }
2656
2657
2658
2659 /*************************************************
2660 *              Main entry point                  *
2661 *************************************************/
2662
2663 /* See local README for interface details. As this is a remote transport, it is
2664 given a chain of addresses to be delivered in one connection, if possible. It
2665 always returns TRUE, indicating that each address has its own independent
2666 status set, except if there is a setting up problem, in which case it returns
2667 FALSE. */
2668
2669 BOOL
2670 smtp_transport_entry(
2671   transport_instance *tblock,      /* data for this instantiation */
2672   address_item *addrlist)          /* addresses we are working on */
2673 {
2674 int cutoff_retry;
2675 int port;
2676 int hosts_defer = 0;
2677 int hosts_fail  = 0;
2678 int hosts_looked_up = 0;
2679 int hosts_retry = 0;
2680 int hosts_serial = 0;
2681 int hosts_total = 0;
2682 int total_hosts_tried = 0;
2683 address_item *addr;
2684 BOOL expired = TRUE;
2685 BOOL continuing = continue_hostname != NULL;
2686 uschar *expanded_hosts = NULL;
2687 uschar *pistring;
2688 uschar *tid = string_sprintf("%s transport", tblock->name);
2689 smtp_transport_options_block *ob =
2690   (smtp_transport_options_block *)(tblock->options_block);
2691 host_item *hostlist = addrlist->host_list;
2692 host_item *host = NULL;
2693
2694 DEBUG(D_transport)
2695   {
2696   debug_printf("%s transport entered\n", tblock->name);
2697   for (addr = addrlist; addr != NULL; addr = addr->next)
2698     debug_printf("  %s\n", addr->address);
2699   if (continuing) debug_printf("already connected to %s [%s]\n",
2700       continue_hostname, continue_host_address);
2701   }
2702
2703 /* Set the flag requesting that these hosts be added to the waiting
2704 database if the delivery fails temporarily or if we are running with
2705 queue_smtp or a 2-stage queue run. This gets unset for certain
2706 kinds of error, typically those that are specific to the message. */
2707
2708 update_waiting =  TRUE;
2709
2710 /* If a host list is not defined for the addresses - they must all have the
2711 same one in order to be passed to a single transport - or if the transport has
2712 a host list with hosts_override set, use the host list supplied with the
2713 transport. It is an error for this not to exist. */
2714
2715 if (hostlist == NULL || (ob->hosts_override && ob->hosts != NULL))
2716   {
2717   if (ob->hosts == NULL)
2718     {
2719     addrlist->message = string_sprintf("%s transport called with no hosts set",
2720       tblock->name);
2721     addrlist->transport_return = PANIC;
2722     return FALSE;   /* Only top address has status */
2723     }
2724
2725   DEBUG(D_transport) debug_printf("using the transport's hosts: %s\n",
2726     ob->hosts);
2727
2728   /* If the transport's host list contains no '$' characters, and we are not
2729   randomizing, it is fixed and therefore a chain of hosts can be built once
2730   and for all, and remembered for subsequent use by other calls to this
2731   transport. If, on the other hand, the host list does contain '$', or we are
2732   randomizing its order, we have to rebuild it each time. In the fixed case,
2733   as the hosts string will never be used again, it doesn't matter that we
2734   replace all the : characters with zeros. */
2735
2736   if (ob->hostlist == NULL)
2737     {
2738     uschar *s = ob->hosts;
2739
2740     if (Ustrchr(s, '$') != NULL)
2741       {
2742       expanded_hosts = expand_string(s);
2743       if (expanded_hosts == NULL)
2744         {
2745         addrlist->message = string_sprintf("failed to expand list of hosts "
2746           "\"%s\" in %s transport: %s", s, tblock->name, expand_string_message);
2747         addrlist->transport_return = search_find_defer? DEFER : PANIC;
2748         return FALSE;     /* Only top address has status */
2749         }
2750       DEBUG(D_transport) debug_printf("expanded list of hosts \"%s\" to "
2751         "\"%s\"\n", s, expanded_hosts);
2752       s = expanded_hosts;
2753       }
2754     else
2755       if (ob->hosts_randomize) s = expanded_hosts = string_copy(s);
2756
2757     host_build_hostlist(&hostlist, s, ob->hosts_randomize);
2758
2759     /* Check that the expansion yielded something useful. */
2760     if (hostlist == NULL)
2761       {
2762       addrlist->message =
2763         string_sprintf("%s transport has empty hosts setting", tblock->name);
2764       addrlist->transport_return = PANIC;
2765       return FALSE;   /* Only top address has status */
2766       }
2767
2768     /* If there was no expansion of hosts, save the host list for
2769     next time. */
2770
2771     if (expanded_hosts == NULL) ob->hostlist = hostlist;
2772     }
2773
2774   /* This is not the first time this transport has been run in this delivery;
2775   the host list was built previously. */
2776
2777   else hostlist = ob->hostlist;
2778   }
2779
2780 /* The host list was supplied with the address. If hosts_randomize is set, we
2781 must sort it into a random order if it did not come from MX records and has not
2782 already been randomized (but don't bother if continuing down an existing
2783 connection). */
2784
2785 else if (ob->hosts_randomize && hostlist->mx == MX_NONE && !continuing)
2786   {
2787   host_item *newlist = NULL;
2788   while (hostlist != NULL)
2789     {
2790     host_item *h = hostlist;
2791     hostlist = hostlist->next;
2792
2793     h->sort_key = random_number(100);
2794
2795     if (newlist == NULL)
2796       {
2797       h->next = NULL;
2798       newlist = h;
2799       }
2800     else if (h->sort_key < newlist->sort_key)
2801       {
2802       h->next = newlist;
2803       newlist = h;
2804       }
2805     else
2806       {
2807       host_item *hh = newlist;
2808       while (hh->next != NULL)
2809         {
2810         if (h->sort_key < hh->next->sort_key) break;
2811         hh = hh->next;
2812         }
2813       h->next = hh->next;
2814       hh->next = h;
2815       }
2816     }
2817
2818   hostlist = addrlist->host_list = newlist;
2819   }
2820
2821
2822 /* Sort out the default port.  */
2823
2824 if (!smtp_get_port(ob->port, addrlist, &port, tid)) return FALSE;
2825
2826
2827 /* For each host-plus-IP-address on the list:
2828
2829 .  If this is a continued delivery and the host isn't the one with the
2830    current connection, skip.
2831
2832 .  If the status is unusable (i.e. previously failed or retry checked), skip.
2833
2834 .  If no IP address set, get the address, either by turning the name into
2835    an address, calling gethostbyname if gethostbyname is on, or by calling
2836    the DNS. The DNS may yield multiple addresses, in which case insert the
2837    extra ones into the list.
2838
2839 .  Get the retry data if not previously obtained for this address and set the
2840    field which remembers the state of this address. Skip if the retry time is
2841    not reached. If not, remember whether retry data was found. The retry string
2842    contains both the name and the IP address.
2843
2844 .  Scan the list of addresses and mark those whose status is DEFER as
2845    PENDING_DEFER. These are the only ones that will be processed in this cycle
2846    of the hosts loop.
2847
2848 .  Make a delivery attempt - addresses marked PENDING_DEFER will be tried.
2849    Some addresses may be successfully delivered, others may fail, and yet
2850    others may get temporary errors and so get marked DEFER.
2851
2852 .  The return from the delivery attempt is OK if a connection was made and a
2853    valid SMTP dialogue was completed. Otherwise it is DEFER.
2854
2855 .  If OK, add a "remove" retry item for this host/IPaddress, if any.
2856
2857 .  If fail to connect, or other defer state, add a retry item.
2858
2859 .  If there are any addresses whose status is still DEFER, carry on to the
2860    next host/IPaddress, unless we have tried the number of hosts given
2861    by hosts_max_try or hosts_max_try_hardlimit; otherwise return. Note that
2862    there is some fancy logic for hosts_max_try that means its limit can be
2863    overstepped in some circumstances.
2864
2865 If we get to the end of the list, all hosts have deferred at least one address,
2866 or not reached their retry times. If delay_after_cutoff is unset, it requests a
2867 delivery attempt to those hosts whose last try was before the arrival time of
2868 the current message. To cope with this, we have to go round the loop a second
2869 time. After that, set the status and error data for any addresses that haven't
2870 had it set already. */
2871
2872 for (cutoff_retry = 0; expired &&
2873      cutoff_retry < ((ob->delay_after_cutoff)? 1 : 2);
2874      cutoff_retry++)
2875   {
2876   host_item *nexthost = NULL;
2877   int unexpired_hosts_tried = 0;
2878
2879   for (host = hostlist;
2880        host != NULL &&
2881          unexpired_hosts_tried < ob->hosts_max_try &&
2882          total_hosts_tried < ob->hosts_max_try_hardlimit;
2883        host = nexthost)
2884     {
2885     int rc;
2886     int host_af;
2887     uschar *rs;
2888     BOOL serialized = FALSE;
2889     BOOL host_is_expired = FALSE;
2890     BOOL message_defer = FALSE;
2891     BOOL ifchanges = FALSE;
2892     BOOL some_deferred = FALSE;
2893     address_item *first_addr = NULL;
2894     uschar *interface = NULL;
2895     uschar *retry_host_key = NULL;
2896     uschar *retry_message_key = NULL;
2897     uschar *serialize_key = NULL;
2898
2899     /* Default next host is next host. :-) But this can vary if the
2900     hosts_max_try limit is hit (see below). It may also be reset if a host
2901     address is looked up here (in case the host was multihomed). */
2902
2903     nexthost = host->next;
2904
2905     /* If the address hasn't yet been obtained from the host name, look it up
2906     now, unless the host is already marked as unusable. If it is marked as
2907     unusable, it means that the router was unable to find its IP address (in
2908     the DNS or wherever) OR we are in the 2nd time round the cutoff loop, and
2909     the lookup failed last time. We don't get this far if *all* MX records
2910     point to non-existent hosts; that is treated as a hard error.
2911
2912     We can just skip this host entirely. When the hosts came from the router,
2913     the address will timeout based on the other host(s); when the address is
2914     looked up below, there is an explicit retry record added.
2915
2916     Note that we mustn't skip unusable hosts if the address is not unset; they
2917     may be needed as expired hosts on the 2nd time round the cutoff loop. */
2918
2919     if (host->address == NULL)
2920       {
2921       int new_port, flags;
2922       host_item *hh;
2923       uschar *canonical_name;
2924
2925       if (host->status >= hstatus_unusable)
2926         {
2927         DEBUG(D_transport) debug_printf("%s has no address and is unusable - skipping\n",
2928           host->name);
2929         continue;
2930         }
2931
2932       DEBUG(D_transport) debug_printf("getting address for %s\n", host->name);
2933
2934       /* The host name is permitted to have an attached port. Find it, and
2935       strip it from the name. Just remember it for now. */
2936
2937       new_port = host_item_get_port(host);
2938
2939       /* Count hosts looked up */
2940
2941       hosts_looked_up++;
2942
2943       /* Find by name if so configured, or if it's an IP address. We don't
2944       just copy the IP address, because we need the test-for-local to happen. */
2945
2946       flags = HOST_FIND_BY_A;
2947       if (ob->dns_qualify_single) flags |= HOST_FIND_QUALIFY_SINGLE;
2948       if (ob->dns_search_parents) flags |= HOST_FIND_SEARCH_PARENTS;
2949
2950       if (ob->gethostbyname || string_is_ip_address(host->name, NULL) != 0)
2951         rc = host_find_byname(host, NULL, flags, &canonical_name, TRUE);
2952       else
2953         rc = host_find_bydns(host, NULL, flags, NULL, NULL, NULL,
2954           ob->dnssec_request_domains, ob->dnssec_require_domains,
2955           &canonical_name, NULL);
2956
2957       /* Update the host (and any additional blocks, resulting from
2958       multihoming) with a host-specific port, if any. */
2959
2960       for (hh = host; hh != nexthost; hh = hh->next) hh->port = new_port;
2961
2962       /* Failure to find the host at this time (usually DNS temporary failure)
2963       is really a kind of routing failure rather than a transport failure.
2964       Therefore we add a retry item of the routing kind, not to stop us trying
2965       to look this name up here again, but to ensure the address gets timed
2966       out if the failures go on long enough. A complete failure at this point
2967       commonly points to a configuration error, but the best action is still
2968       to carry on for the next host. */
2969
2970       if (rc == HOST_FIND_AGAIN || rc == HOST_FIND_FAILED)
2971         {
2972         retry_add_item(addrlist, string_sprintf("R:%s", host->name), 0);
2973         expired = FALSE;
2974         if (rc == HOST_FIND_AGAIN) hosts_defer++; else hosts_fail++;
2975         DEBUG(D_transport) debug_printf("rc = %s for %s\n", (rc == HOST_FIND_AGAIN)?
2976           "HOST_FIND_AGAIN" : "HOST_FIND_FAILED", host->name);
2977         host->status = hstatus_unusable;
2978
2979         for (addr = addrlist; addr != NULL; addr = addr->next)
2980           {
2981           if (addr->transport_return != DEFER) continue;
2982           addr->basic_errno = ERRNO_UNKNOWNHOST;
2983           addr->message =
2984             string_sprintf("failed to lookup IP address for %s", host->name);
2985           }
2986         continue;
2987         }
2988
2989       /* If the host is actually the local host, we may have a problem, or
2990       there may be some cunning configuration going on. In the problem case,
2991       log things and give up. The default transport status is already DEFER. */
2992
2993       if (rc == HOST_FOUND_LOCAL && !ob->allow_localhost)
2994         {
2995         for (addr = addrlist; addr != NULL; addr = addr->next)
2996           {
2997           addr->basic_errno = 0;
2998           addr->message = string_sprintf("%s transport found host %s to be "
2999             "local", tblock->name, host->name);
3000           }
3001         goto END_TRANSPORT;
3002         }
3003       }   /* End of block for IP address lookup */
3004
3005     /* If this is a continued delivery, we are interested only in the host
3006     which matches the name of the existing open channel. The check is put
3007     here after the local host lookup, in case the name gets expanded as a
3008     result of the lookup. Set expired FALSE, to save the outer loop executing
3009     twice. */
3010
3011     if (continuing && (Ustrcmp(continue_hostname, host->name) != 0 ||
3012                        Ustrcmp(continue_host_address, host->address) != 0))
3013       {
3014       expired = FALSE;
3015       continue;      /* With next host */
3016       }
3017
3018     /* Reset the default next host in case a multihomed host whose addresses
3019     are not looked up till just above added to the host list. */
3020
3021     nexthost = host->next;
3022
3023     /* If queue_smtp is set (-odqs or the first part of a 2-stage run), or the
3024     domain is in queue_smtp_domains, we don't actually want to attempt any
3025     deliveries. When doing a queue run, queue_smtp_domains is always unset. If
3026     there is a lookup defer in queue_smtp_domains, proceed as if the domain
3027     were not in it. We don't want to hold up all SMTP deliveries! Except when
3028     doing a two-stage queue run, don't do this if forcing. */
3029
3030     if ((!deliver_force || queue_2stage) && (queue_smtp ||
3031         match_isinlist(addrlist->domain, &queue_smtp_domains, 0,
3032           &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK))
3033       {
3034       expired = FALSE;
3035       for (addr = addrlist; addr != NULL; addr = addr->next)
3036         {
3037         if (addr->transport_return != DEFER) continue;
3038         addr->message = US"domain matches queue_smtp_domains, or -odqs set";
3039         }
3040       continue;      /* With next host */
3041       }
3042
3043     /* Count hosts being considered - purely for an intelligent comment
3044     if none are usable. */
3045
3046     hosts_total++;
3047
3048     /* Set $host and $host address now in case they are needed for the
3049     interface expansion or the serialize_hosts check; they remain set if an
3050     actual delivery happens. */
3051
3052     deliver_host = host->name;
3053     deliver_host_address = host->address;
3054     lookup_dnssec_authenticated = host->dnssec == DS_YES ? US"yes"
3055                                 : host->dnssec == DS_NO ? US"no"
3056                                 : US"";
3057
3058     /* Set up a string for adding to the retry key if the port number is not
3059     the standard SMTP port. A host may have its own port setting that overrides
3060     the default. */
3061
3062     pistring = string_sprintf(":%d", (host->port == PORT_NONE)?
3063       port : host->port);
3064     if (Ustrcmp(pistring, ":25") == 0) pistring = US"";
3065
3066     /* Select IPv4 or IPv6, and choose an outgoing interface. If the interface
3067     string changes upon expansion, we must add it to the key that is used for
3068     retries, because connections to the same host from a different interface
3069     should be treated separately. */
3070
3071     host_af = (Ustrchr(host->address, ':') == NULL)? AF_INET : AF_INET6;
3072     if (!smtp_get_interface(ob->interface, host_af, addrlist, &ifchanges,
3073          &interface, tid))
3074       return FALSE;
3075     if (ifchanges) pistring = string_sprintf("%s/%s", pistring, interface);
3076
3077     /* The first time round the outer loop, check the status of the host by
3078     inspecting the retry data. The second time round, we are interested only
3079     in expired hosts that haven't been tried since this message arrived. */
3080
3081     if (cutoff_retry == 0)
3082       {
3083       /* Ensure the status of the address is set by checking retry data if
3084       necessary. There maybe host-specific retry data (applicable to all
3085       messages) and also data for retries of a specific message at this host.
3086       If either of these retry records are actually read, the keys used are
3087       returned to save recomputing them later. */
3088
3089       host_is_expired = retry_check_address(addrlist->domain, host, pistring,
3090         ob->retry_include_ip_address, &retry_host_key, &retry_message_key);
3091
3092       DEBUG(D_transport) debug_printf("%s [%s]%s status = %s\n", host->name,
3093         (host->address == NULL)? US"" : host->address, pistring,
3094         (host->status == hstatus_usable)? "usable" :
3095         (host->status == hstatus_unusable)? "unusable" :
3096         (host->status == hstatus_unusable_expired)? "unusable (expired)" : "?");
3097
3098       /* Skip this address if not usable at this time, noting if it wasn't
3099       actually expired, both locally and in the address. */
3100
3101       switch (host->status)
3102         {
3103         case hstatus_unusable:
3104         expired = FALSE;
3105         setflag(addrlist, af_retry_skipped);
3106         /* Fall through */
3107
3108         case hstatus_unusable_expired:
3109         switch (host->why)
3110           {
3111           case hwhy_retry: hosts_retry++; break;
3112           case hwhy_failed:  hosts_fail++; break;
3113           case hwhy_deferred: hosts_defer++; break;
3114           }
3115
3116         /* If there was a retry message key, implying that previously there
3117         was a message-specific defer, we don't want to update the list of
3118         messages waiting for these hosts. */
3119
3120         if (retry_message_key != NULL) update_waiting = FALSE;
3121         continue;   /* With the next host or IP address */
3122         }
3123       }
3124
3125     /* Second time round the loop: if the address is set but expired, and
3126     the message is newer than the last try, let it through. */
3127
3128     else
3129       {
3130       if (host->address == NULL ||
3131           host->status != hstatus_unusable_expired ||
3132           host->last_try > received_time)
3133         continue;
3134       DEBUG(D_transport)
3135         debug_printf("trying expired host %s [%s]%s\n",
3136           host->name, host->address, pistring);
3137       host_is_expired = TRUE;
3138       }
3139
3140     /* Setting "expired=FALSE" doesn't actually mean not all hosts are expired;
3141     it remains TRUE only if all hosts are expired and none are actually tried.
3142     */
3143
3144     expired = FALSE;
3145
3146     /* If this host is listed as one to which access must be serialized,
3147     see if another Exim process has a connection to it, and if so, skip
3148     this host. If not, update the database to record our connection to it
3149     and remember this for later deletion. Do not do any of this if we are
3150     sending the message down a pre-existing connection. */
3151
3152     if (!continuing &&
3153         verify_check_this_host(&(ob->serialize_hosts), NULL, host->name,
3154           host->address, NULL) == OK)
3155       {
3156       serialize_key = string_sprintf("host-serialize-%s", host->name);
3157       if (!enq_start(serialize_key))
3158         {
3159         DEBUG(D_transport)
3160           debug_printf("skipping host %s because another Exim process "
3161             "is connected to it\n", host->name);
3162         hosts_serial++;
3163         continue;
3164         }
3165       serialized = TRUE;
3166       }
3167
3168     /* OK, we have an IP address that is not waiting for its retry time to
3169     arrive (it might be expired) OR (second time round the loop) we have an
3170     expired host that hasn't been tried since the message arrived. Have a go
3171     at delivering the message to it. First prepare the addresses by flushing
3172     out the result of previous attempts, and finding the first address that
3173     is still to be delivered. */
3174
3175     first_addr = prepare_addresses(addrlist, host);
3176
3177     DEBUG(D_transport) debug_printf("delivering %s to %s [%s] (%s%s)\n",
3178       message_id, host->name, host->address, addrlist->address,
3179       (addrlist->next == NULL)? "" : ", ...");
3180
3181     set_process_info("delivering %s to %s [%s] (%s%s)",
3182       message_id, host->name, host->address, addrlist->address,
3183       (addrlist->next == NULL)? "" : ", ...");
3184
3185     /* This is not for real; don't do the delivery. If there are
3186     any remaining hosts, list them. */
3187
3188     if (dont_deliver)
3189       {
3190       host_item *host2;
3191       set_errno(addrlist, 0, NULL, OK, FALSE);
3192       for (addr = addrlist; addr != NULL; addr = addr->next)
3193         {
3194         addr->host_used = host;
3195         addr->special_action = '*';
3196         addr->message = US"delivery bypassed by -N option";
3197         }
3198       DEBUG(D_transport)
3199         {
3200         debug_printf("*** delivery by %s transport bypassed by -N option\n"
3201                      "*** host and remaining hosts:\n", tblock->name);
3202         for (host2 = host; host2 != NULL; host2 = host2->next)
3203           debug_printf("    %s [%s]\n", host2->name,
3204             (host2->address == NULL)? US"unset" : host2->address);
3205         }
3206       rc = OK;
3207       }
3208
3209     /* This is for real. If the host is expired, we don't count it for
3210     hosts_max_retry. This ensures that all hosts must expire before an address
3211     is timed out, unless hosts_max_try_hardlimit (which protects against
3212     lunatic DNS configurations) is reached.
3213
3214     If the host is not expired and we are about to hit the hosts_max_retry
3215     limit, check to see if there is a subsequent hosts with a different MX
3216     value. If so, make that the next host, and don't count this one. This is a
3217     heuristic to make sure that different MXs do get tried. With a normal kind
3218     of retry rule, they would get tried anyway when the earlier hosts were
3219     delayed, but if the domain has a "retry every time" type of rule - as is
3220     often used for the the very large ISPs, that won't happen. */
3221
3222     else
3223       {
3224       if (!host_is_expired && ++unexpired_hosts_tried >= ob->hosts_max_try)
3225         {
3226         host_item *h;
3227         DEBUG(D_transport)
3228           debug_printf("hosts_max_try limit reached with this host\n");
3229         for (h = host; h != NULL; h = h->next)
3230           if (h->mx != host->mx) break;
3231         if (h != NULL)
3232           {
3233           nexthost = h;
3234           unexpired_hosts_tried--;
3235           DEBUG(D_transport) debug_printf("however, a higher MX host exists "
3236             "and will be tried\n");
3237           }
3238         }
3239
3240       /* Attempt the delivery. */
3241
3242       total_hosts_tried++;
3243       rc = smtp_deliver(addrlist, host, host_af, port, interface, tblock,
3244         expanded_hosts != NULL, &message_defer, FALSE);
3245
3246       /* Yield is one of:
3247          OK     => connection made, each address contains its result;
3248                      message_defer is set for message-specific defers (when all
3249                      recipients are marked defer)
3250          DEFER  => there was a non-message-specific delivery problem;
3251          ERROR  => there was a problem setting up the arguments for a filter,
3252                    or there was a problem with expanding added headers
3253       */
3254
3255       /* If the result is not OK, there was a non-message-specific problem.
3256       If the result is DEFER, we need to write to the logs saying what happened
3257       for this particular host, except in the case of authentication and TLS
3258       failures, where the log has already been written. If all hosts defer a
3259       general message is written at the end. */
3260
3261       if (rc == DEFER && first_addr->basic_errno != ERRNO_AUTHFAIL &&
3262                          first_addr->basic_errno != ERRNO_TLSFAILURE)
3263         write_logs(first_addr, host);
3264
3265 #ifdef EXPERIMENTAL_TPDA
3266       if (rc == DEFER)
3267         tpda_deferred(first_addr, host);
3268 #endif
3269
3270       /* If STARTTLS was accepted, but there was a failure in setting up the
3271       TLS session (usually a certificate screwup), and the host is not in
3272       hosts_require_tls, and tls_tempfail_tryclear is true, try again, with
3273       TLS forcibly turned off. We have to start from scratch with a new SMTP
3274       connection. That's why the retry is done from here, not from within
3275       smtp_deliver(). [Rejections of STARTTLS itself don't screw up the
3276       session, so the in-clear transmission after those errors, if permitted,
3277       happens inside smtp_deliver().] */
3278
3279 #ifdef SUPPORT_TLS
3280       if (rc == DEFER && first_addr->basic_errno == ERRNO_TLSFAILURE &&
3281            ob->tls_tempfail_tryclear &&
3282            verify_check_this_host(&(ob->hosts_require_tls), NULL, host->name,
3283              host->address, NULL) != OK)
3284         {
3285         log_write(0, LOG_MAIN, "TLS session failure: delivering unencrypted "
3286           "to %s [%s] (not in hosts_require_tls)", host->name, host->address);
3287         first_addr = prepare_addresses(addrlist, host);
3288         rc = smtp_deliver(addrlist, host, host_af, port, interface, tblock,
3289           expanded_hosts != NULL, &message_defer, TRUE);
3290         if (rc == DEFER && first_addr->basic_errno != ERRNO_AUTHFAIL)
3291           write_logs(first_addr, host);
3292 # ifdef EXPERIMENTAL_TPDA
3293         if (rc == DEFER)
3294           tpda_deferred(first_addr, host);
3295 # endif
3296         }
3297 #endif
3298       }
3299
3300     /* Delivery attempt finished */
3301
3302     rs = (rc == OK)? US"OK" : (rc == DEFER)? US"DEFER" : (rc == ERROR)?
3303       US"ERROR" : US"?";
3304
3305     set_process_info("delivering %s: just tried %s [%s] for %s%s: result %s",
3306       message_id, host->name, host->address, addrlist->address,
3307       (addrlist->next == NULL)? "" : " (& others)", rs);
3308
3309     /* Release serialization if set up */
3310
3311     if (serialized) enq_end(serialize_key);
3312
3313     /* If the result is DEFER, or if a host retry record is known to exist, we
3314     need to add an item to the retry chain for updating the retry database
3315     at the end of delivery. We only need to add the item to the top address,
3316     of course. Also, if DEFER, we mark the IP address unusable so as to skip it
3317     for any other delivery attempts using the same address. (It is copied into
3318     the unusable tree at the outer level, so even if different address blocks
3319     contain the same address, it still won't get tried again.) */
3320
3321     if (rc == DEFER || retry_host_key != NULL)
3322       {
3323       int delete_flag = (rc != DEFER)? rf_delete : 0;
3324       if (retry_host_key == NULL)
3325         {
3326         retry_host_key = ob->retry_include_ip_address?
3327           string_sprintf("T:%S:%s%s", host->name, host->address, pistring) :
3328           string_sprintf("T:%S%s", host->name, pistring);
3329         }
3330
3331       /* If a delivery of another message over an existing SMTP connection
3332       yields DEFER, we do NOT set up retry data for the host. This covers the
3333       case when there are delays in routing the addresses in the second message
3334       that are so long that the server times out. This is alleviated by not
3335       routing addresses that previously had routing defers when handling an
3336       existing connection, but even so, this case may occur (e.g. if a
3337       previously happily routed address starts giving routing defers). If the
3338       host is genuinely down, another non-continued message delivery will
3339       notice it soon enough. */
3340
3341       if (delete_flag != 0 || !continuing)
3342         retry_add_item(first_addr, retry_host_key, rf_host | delete_flag);
3343
3344       /* We may have tried an expired host, if its retry time has come; ensure
3345       the status reflects the expiry for the benefit of any other addresses. */
3346
3347       if (rc == DEFER)
3348         {
3349         host->status = (host_is_expired)?
3350           hstatus_unusable_expired : hstatus_unusable;
3351         host->why = hwhy_deferred;
3352         }
3353       }
3354
3355     /* If message_defer is set (host was OK, but every recipient got deferred
3356     because of some message-specific problem), or if that had happened
3357     previously so that a message retry key exists, add an appropriate item
3358     to the retry chain. Note that if there was a message defer but now there is
3359     a host defer, the message defer record gets deleted. That seems perfectly
3360     reasonable. Also, stop the message from being remembered as waiting
3361     for specific hosts. */
3362
3363     if (message_defer || retry_message_key != NULL)
3364       {
3365       int delete_flag = message_defer? 0 : rf_delete;
3366       if (retry_message_key == NULL)
3367         {
3368         retry_message_key = ob->retry_include_ip_address?
3369           string_sprintf("T:%S:%s%s:%s", host->name, host->address, pistring,
3370             message_id) :
3371           string_sprintf("T:%S%s:%s", host->name, pistring, message_id);
3372         }
3373       retry_add_item(addrlist, retry_message_key,
3374         rf_message | rf_host | delete_flag);
3375       update_waiting = FALSE;
3376       }
3377
3378     /* Any return other than DEFER (that is, OK or ERROR) means that the
3379     addresses have got their final statuses filled in for this host. In the OK
3380     case, see if any of them are deferred. */
3381
3382     if (rc == OK)
3383       {
3384       for (addr = addrlist; addr != NULL; addr = addr->next)
3385         {
3386         if (addr->transport_return == DEFER)
3387           {
3388           some_deferred = TRUE;
3389           break;
3390           }
3391         }
3392       }
3393
3394     /* If no addresses deferred or the result was ERROR, return. We do this for
3395     ERROR because a failing filter set-up or add_headers expansion is likely to
3396     fail for any host we try. */
3397
3398     if (rc == ERROR || (rc == OK && !some_deferred))
3399       {
3400       DEBUG(D_transport) debug_printf("Leaving %s transport\n", tblock->name);
3401       return TRUE;    /* Each address has its status */
3402       }
3403
3404     /* If the result was DEFER or some individual addresses deferred, let
3405     the loop run to try other hosts with the deferred addresses, except for the
3406     case when we were trying to deliver down an existing channel and failed.
3407     Don't try any other hosts in this case. */
3408
3409     if (continuing) break;
3410
3411     /* If the whole delivery, or some individual addresses, were deferred and
3412     there are more hosts that could be tried, do not count this host towards
3413     the hosts_max_try limit if the age of the message is greater than the
3414     maximum retry time for this host. This means we may try try all hosts,
3415     ignoring the limit, when messages have been around for some time. This is
3416     important because if we don't try all hosts, the address will never time
3417     out. NOTE: this does not apply to hosts_max_try_hardlimit. */
3418
3419     if ((rc == DEFER || some_deferred) && nexthost != NULL)
3420       {
3421       BOOL timedout;
3422       retry_config *retry = retry_find_config(host->name, NULL, 0, 0);
3423
3424       if (retry != NULL && retry->rules != NULL)
3425         {
3426         retry_rule *last_rule;
3427         for (last_rule = retry->rules;
3428              last_rule->next != NULL;
3429              last_rule = last_rule->next);
3430         timedout = time(NULL) - received_time > last_rule->timeout;
3431         }
3432       else timedout = TRUE;    /* No rule => timed out */
3433
3434       if (timedout)
3435         {
3436         unexpired_hosts_tried--;
3437         DEBUG(D_transport) debug_printf("temporary delivery error(s) override "
3438           "hosts_max_try (message older than host's retry time)\n");
3439         }
3440       }
3441     }   /* End of loop for trying multiple hosts. */
3442
3443   /* This is the end of the loop that repeats iff expired is TRUE and
3444   ob->delay_after_cutoff is FALSE. The second time round we will
3445   try those hosts that haven't been tried since the message arrived. */
3446
3447   DEBUG(D_transport)
3448     {
3449     debug_printf("all IP addresses skipped or deferred at least one address\n");
3450     if (expired && !ob->delay_after_cutoff && cutoff_retry == 0)
3451       debug_printf("retrying IP addresses not tried since message arrived\n");
3452     }
3453   }
3454
3455
3456 /* Get here if all IP addresses are skipped or defer at least one address. In
3457 MUA wrapper mode, this will happen only for connection or other non-message-
3458 specific failures. Force the delivery status for all addresses to FAIL. */
3459
3460 if (mua_wrapper)
3461   {
3462   for (addr = addrlist; addr != NULL; addr = addr->next)
3463     addr->transport_return = FAIL;
3464   goto END_TRANSPORT;
3465   }
3466
3467 /* In the normal, non-wrapper case, add a standard message to each deferred
3468 address if there hasn't been an error, that is, if it hasn't actually been
3469 tried this time. The variable "expired" will be FALSE if any deliveries were
3470 actually tried, or if there was at least one host that was not expired. That
3471 is, it is TRUE only if no deliveries were tried and all hosts were expired. If
3472 a delivery has been tried, an error code will be set, and the failing of the
3473 message is handled by the retry code later.
3474
3475 If queue_smtp is set, or this transport was called to send a subsequent message
3476 down an existing TCP/IP connection, and something caused the host not to be
3477 found, we end up here, but can detect these cases and handle them specially. */
3478
3479 for (addr = addrlist; addr != NULL; addr = addr->next)
3480   {
3481   /* If host is not NULL, it means that we stopped processing the host list
3482   because of hosts_max_try or hosts_max_try_hardlimit. In the former case, this
3483   means we need to behave as if some hosts were skipped because their retry
3484   time had not come. Specifically, this prevents the address from timing out.
3485   However, if we have hit hosts_max_try_hardlimit, we want to behave as if all
3486   hosts were tried. */
3487
3488   if (host != NULL)
3489     {
3490     if (total_hosts_tried >= ob->hosts_max_try_hardlimit)
3491       {
3492       DEBUG(D_transport)
3493         debug_printf("hosts_max_try_hardlimit reached: behave as if all "
3494           "hosts were tried\n");
3495       }
3496     else
3497       {
3498       DEBUG(D_transport)
3499         debug_printf("hosts_max_try limit caused some hosts to be skipped\n");
3500       setflag(addr, af_retry_skipped);
3501       }
3502     }
3503
3504   if (queue_smtp)    /* no deliveries attempted */
3505     {
3506     addr->transport_return = DEFER;
3507     addr->basic_errno = 0;
3508     addr->message = US"SMTP delivery explicitly queued";
3509     }
3510
3511   else if (addr->transport_return == DEFER &&
3512        (addr->basic_errno == ERRNO_UNKNOWNERROR || addr->basic_errno == 0) &&
3513        addr->message == NULL)
3514     {
3515     addr->basic_errno = ERRNO_HRETRY;
3516     if (continue_hostname != NULL)
3517       {
3518       addr->message = US"no host found for existing SMTP connection";
3519       }
3520     else if (expired)
3521       {
3522       setflag(addr, af_pass_message);   /* This is not a security risk */
3523       addr->message = (ob->delay_after_cutoff)?
3524         US"retry time not reached for any host after a long failure period" :
3525         US"all hosts have been failing for a long time and were last tried "
3526           "after this message arrived";
3527
3528       /* If we are already using fallback hosts, or there are no fallback hosts
3529       defined, convert the result to FAIL to cause a bounce. */
3530
3531       if (addr->host_list == addr->fallback_hosts ||
3532           addr->fallback_hosts == NULL)
3533         addr->transport_return = FAIL;
3534       }
3535     else
3536       {
3537       if (hosts_retry == hosts_total)
3538         addr->message = US"retry time not reached for any host";
3539       else if (hosts_fail == hosts_total)
3540         addr->message = US"all host address lookups failed permanently";
3541       else if (hosts_defer == hosts_total)
3542         addr->message = US"all host address lookups failed temporarily";
3543       else if (hosts_serial == hosts_total)
3544         addr->message = US"connection limit reached for all hosts";
3545       else if (hosts_fail+hosts_defer == hosts_total)
3546         addr->message = US"all host address lookups failed";
3547       else addr->message = US"some host address lookups failed and retry time "
3548         "not reached for other hosts or connection limit reached";
3549       }
3550     }
3551   }
3552
3553 /* Update the database which keeps information about which messages are waiting
3554 for which hosts to become available. For some message-specific errors, the
3555 update_waiting flag is turned off because we don't want follow-on deliveries in
3556 those cases.  If this transport instance is explicitly limited to one message
3557 per connection then follow-on deliveries are not possible and there's no need
3558 to create/update the per-transport wait-<transport_name> database. */
3559
3560 if (update_waiting && tblock->connection_max_messages != 1)
3561   transport_update_waiting(hostlist, tblock->name);
3562
3563 END_TRANSPORT:
3564
3565 DEBUG(D_transport) debug_printf("Leaving %s transport\n", tblock->name);
3566
3567 return TRUE;   /* Each address has its status */
3568 }
3569
3570 /* vi: aw ai sw=2
3571 */
3572 /* End of transport/smtp.c */