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