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