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