Transactions in retry hintsdb
[exim.git] / src / src / deliver.c
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) The Exim Maintainers 2020 - 2024 */
6 /* Copyright (c) University of Cambridge 1995 - 2018 */
7 /* See the file NOTICE for conditions of use and distribution. */
8 /* SPDX-License-Identifier: GPL-2.0-or-later */
9
10 /* The main code for delivering a message. */
11
12
13 #include "exim.h"
14 #include "transports/smtp.h"
15 #include <sys/uio.h>
16 #include <assert.h>
17
18
19 /* Data block for keeping track of subprocesses for parallel remote
20 delivery. */
21
22 typedef struct pardata {
23   address_item *addrlist;      /* chain of addresses */
24   address_item *addr;          /* next address data expected for */
25   pid_t pid;                   /* subprocess pid */
26   int fd;                      /* pipe fd for getting result from subprocess */
27   int transport_count;         /* returned transport count value */
28   BOOL done;                   /* no more data needed */
29   uschar *msg;                 /* error message */
30   const uschar *return_path;   /* return_path for these addresses */
31 } pardata;
32
33 /* Values for the process_recipients variable */
34
35 enum { RECIP_ACCEPT, RECIP_IGNORE, RECIP_DEFER,
36        RECIP_FAIL, RECIP_FAIL_FILTER, RECIP_FAIL_TIMEOUT,
37        RECIP_FAIL_LOOP};
38
39 /* Mutually recursive functions for marking addresses done. */
40
41 static void child_done(address_item *, const uschar *);
42 static void address_done(address_item *, const uschar *);
43
44 /* Table for turning base-62 numbers into binary */
45
46 static uschar tab62[] =
47           {0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,     /* 0-9 */
48            0,10,11,12,13,14,15,16,17,18,19,20,  /* A-K */
49           21,22,23,24,25,26,27,28,29,30,31,32,  /* L-W */
50           33,34,35, 0, 0, 0, 0, 0,              /* X-Z */
51            0,36,37,38,39,40,41,42,43,44,45,46,  /* a-k */
52           47,48,49,50,51,52,53,54,55,56,57,58,  /* l-w */
53           59,60,61};                            /* x-z */
54
55
56 /*************************************************
57 *            Local static variables              *
58 *************************************************/
59
60 /* addr_duplicate is global because it needs to be seen from the Envelope-To
61 writing code. */
62
63 static address_item *addr_defer = NULL;
64 static address_item *addr_failed = NULL;
65 static address_item *addr_fallback = NULL;
66 static address_item *addr_local = NULL;
67 static address_item *addr_new = NULL;
68 static address_item *addr_remote = NULL;
69 static address_item *addr_route = NULL;
70 static address_item *addr_succeed = NULL;
71
72 static FILE *message_log = NULL;
73 static BOOL update_spool;
74 static BOOL remove_journal;
75 static int  parcount = 0;
76 static pardata *parlist = NULL;
77 static struct pollfd *parpoll;
78 static int  return_count;
79 static uschar *frozen_info = US"";
80 static const uschar * used_return_path = NULL;
81
82
83
84 /*************************************************
85 *          read as much as requested             *
86 *************************************************/
87
88 /* The syscall read(2) doesn't always returns as much as we want. For
89 several reasons it might get less. (Not talking about signals, as syscalls
90 are restartable). When reading from a network or pipe connection the sender
91 might send in smaller chunks, with delays between these chunks. The read(2)
92 may return such a chunk.
93
94 The more the writer writes and the smaller the pipe between write and read is,
95 the more we get the chance of reading leass than requested. (See bug 2130)
96
97 This function read(2)s until we got all the data we *requested*.
98
99 Note: This function may block. Use it only if you're sure about the
100 amount of data you will get.
101
102 Argument:
103   fd          the file descriptor to read from
104   buffer      pointer to a buffer of size len
105   len         the requested(!) amount of bytes
106
107 Returns:      the amount of bytes read
108 */
109 static ssize_t
110 readn(int fd, void * buffer, size_t len)
111 {
112 uschar * next = buffer;
113 uschar * end = next + len;
114
115 while (next < end)
116   {
117   ssize_t got = read(fd, next, end - next);
118
119   /* I'm not sure if there are signals that can interrupt us,
120   for now I assume the worst */
121   if (got == -1 && errno == EINTR) continue;
122   if (got <= 0) return next - US buffer;
123   next += got;
124   }
125
126 return len;
127 }
128
129
130 /*************************************************
131 *             Make a new address item            *
132 *************************************************/
133
134 /* This function gets the store and initializes with default values. The
135 transport_return value defaults to DEFER, so that any unexpected failure to
136 deliver does not wipe out the message. The default unique string is set to a
137 copy of the address, so that its domain can be lowercased.
138
139 Argument:
140   address     the RFC822 address string
141   copy        force a copy of the address
142
143 Returns:      a pointer to an initialized address_item
144 */
145
146 address_item *
147 deliver_make_addr(const uschar * address, BOOL copy)
148 {
149 address_item * addr = store_get(sizeof(address_item), GET_UNTAINTED);
150 *addr = address_defaults;
151 if (copy) address = string_copy(address);
152 addr->address = address;
153 addr->unique = string_copy(address);
154 return addr;
155 }
156
157
158
159
160 /*************************************************
161 *     Set expansion values for an address        *
162 *************************************************/
163
164 /* Certain expansion variables are valid only when handling an address or
165 address list. This function sets them up or clears the values, according to its
166 argument.
167
168 Arguments:
169   addr          the address in question, or NULL to clear values
170 Returns:        nothing
171 */
172
173 void
174 deliver_set_expansions(address_item *addr)
175 {
176 if (!addr)
177   {
178   const uschar ***p = address_expansions;
179   while (*p) **p++ = NULL;
180   return;
181   }
182
183 /* Exactly what gets set depends on whether there is one or more addresses, and
184 what they contain. These first ones are always set, taking their values from
185 the first address. */
186
187 if (!addr->host_list)
188   {
189   deliver_host = deliver_host_address = US"";
190   deliver_host_port = 0;
191   }
192 else
193   {
194   deliver_host = addr->host_list->name;
195   deliver_host_address = addr->host_list->address;
196   deliver_host_port = addr->host_list->port;
197   }
198
199 deliver_recipients = addr;
200 deliver_address_data = addr->prop.address_data;
201 deliver_domain_data = addr->prop.domain_data;
202 deliver_localpart_data = addr->prop.localpart_data;
203 router_var = addr->prop.variables;
204
205 /* These may be unset for multiple addresses */
206
207 deliver_domain = addr->domain;
208 self_hostname = addr->self_hostname;
209
210 #ifdef EXPERIMENTAL_BRIGHTMAIL
211 bmi_deliver = 1;    /* deliver by default */
212 bmi_alt_location = NULL;
213 bmi_base64_verdict = NULL;
214 bmi_base64_tracker_verdict = NULL;
215 #endif
216
217 /* If there's only one address we can set everything. */
218
219 if (!addr->next)
220   {
221   address_item *addr_orig;
222
223   deliver_localpart = addr->local_part;
224   deliver_localpart_prefix = addr->prefix;
225   deliver_localpart_prefix_v = addr->prefix_v;
226   deliver_localpart_suffix = addr->suffix;
227   deliver_localpart_suffix_v = addr->suffix_v;
228
229   for (addr_orig = addr; addr_orig->parent; addr_orig = addr_orig->parent) ;
230   deliver_domain_orig = addr_orig->domain;
231
232   /* Re-instate any prefix and suffix in the original local part. In all
233   normal cases, the address will have a router associated with it, and we can
234   choose the caseful or caseless version accordingly. However, when a system
235   filter sets up a pipe, file, or autoreply delivery, no router is involved.
236   In this case, though, there won't be any prefix or suffix to worry about. */
237
238   deliver_localpart_orig = !addr_orig->router
239     ? addr_orig->local_part
240     : addr_orig->router->caseful_local_part
241     ? addr_orig->cc_local_part
242     : addr_orig->lc_local_part;
243
244   /* If there's a parent, make its domain and local part available, and if
245   delivering to a pipe or file, or sending an autoreply, get the local
246   part from the parent. For pipes and files, put the pipe or file string
247   into address_pipe and address_file. */
248
249   if (addr->parent)
250     {
251     deliver_domain_parent = addr->parent->domain;
252     deliver_localpart_parent = !addr->parent->router
253       ? addr->parent->local_part
254       : addr->parent->router->caseful_local_part
255       ? addr->parent->cc_local_part
256       : addr->parent->lc_local_part;
257
258     /* File deliveries have their own flag because they need to be picked out
259     as special more often. */
260
261     if (testflag(addr, af_pfr))
262       {
263       if (testflag(addr, af_file))          address_file = addr->local_part;
264       else if (deliver_localpart[0] == '|') address_pipe = addr->local_part;
265       deliver_localpart = addr->parent->local_part;
266       deliver_localpart_prefix = addr->parent->prefix;
267       deliver_localpart_prefix_v = addr->parent->prefix_v;
268       deliver_localpart_suffix = addr->parent->suffix;
269       deliver_localpart_suffix_v = addr->parent->suffix_v;
270       }
271     }
272
273 #ifdef EXPERIMENTAL_BRIGHTMAIL
274     /* Set expansion variables related to Brightmail AntiSpam */
275     bmi_base64_verdict = bmi_get_base64_verdict(deliver_localpart_orig, deliver_domain_orig);
276     bmi_base64_tracker_verdict = bmi_get_base64_tracker_verdict(bmi_base64_verdict);
277     /* get message delivery status (0 - don't deliver | 1 - deliver) */
278     bmi_deliver = bmi_get_delivery_status(bmi_base64_verdict);
279     /* if message is to be delivered, get eventual alternate location */
280     if (bmi_deliver == 1)
281       bmi_alt_location = bmi_get_alt_location(bmi_base64_verdict);
282 #endif
283
284   }
285
286 /* For multiple addresses, don't set local part, and leave the domain and
287 self_hostname set only if it is the same for all of them. It is possible to
288 have multiple pipe and file addresses, but only when all addresses have routed
289 to the same pipe or file. */
290
291 else
292   {
293   if (testflag(addr, af_pfr))
294     {
295     if (testflag(addr, af_file))         address_file = addr->local_part;
296     else if (addr->local_part[0] == '|') address_pipe = addr->local_part;
297     }
298   for (address_item * addr2 = addr->next; addr2; addr2 = addr2->next)
299     {
300     if (deliver_domain && Ustrcmp(deliver_domain, addr2->domain) != 0)
301       deliver_domain = NULL;
302     if (  self_hostname
303        && (  !addr2->self_hostname
304           || Ustrcmp(self_hostname, addr2->self_hostname) != 0
305        )  )
306       self_hostname = NULL;
307     if (!deliver_domain && !self_hostname) break;
308     }
309   }
310 }
311
312
313
314
315 /*************************************************
316 *                Open a msglog file              *
317 *************************************************/
318
319 /* This function is used both for normal message logs, and for files in the
320 msglog directory that are used to catch output from pipes. Try to create the
321 directory if it does not exist. From release 4.21, normal message logs should
322 be created when the message is received.
323
324 Called from deliver_message(), can be operating as root.
325
326 Argument:
327   filename  the file name
328   mode      the mode required
329   error     used for saying what failed
330
331 Returns:    a file descriptor, or -1 (with errno set)
332 */
333
334 static int
335 open_msglog_file(uschar *filename, int mode, uschar **error)
336 {
337 if (Ustrstr(filename, US"/../"))
338   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
339     "Attempt to open msglog file path with upward-traversal: '%s'\n", filename);
340
341 for (int i = 2; i > 0; i--)
342   {
343   int fd = Uopen(filename,
344                 EXIM_CLOEXEC | EXIM_NOFOLLOW | O_WRONLY|O_APPEND|O_CREAT, mode);
345   if (fd >= 0)
346     {
347     /* Set the close-on-exec flag and change the owner to the exim uid/gid (this
348     function is called as root). Double check the mode, because the group setting
349     doesn't always get set automatically. */
350
351 #ifndef O_CLOEXEC
352     (void)fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
353 #endif
354     if (exim_fchown(fd, exim_uid, exim_gid, filename) < 0)
355       {
356       *error = US"chown";
357       return -1;
358       }
359     if (fchmod(fd, mode) < 0)
360       {
361       *error = US"chmod";
362       return -1;
363       }
364     return fd;
365     }
366   if (errno != ENOENT)
367     break;
368
369   (void)directory_make(spool_directory,
370                         spool_sname(US"msglog", message_subdir),
371                         MSGLOG_DIRECTORY_MODE, TRUE);
372   }
373
374 *error = US"create or open";
375 return -1;
376 }
377
378
379
380
381 /*************************************************
382 *           Write to msglog if required          *
383 *************************************************/
384
385 /* Write to the message log, if configured. This function may also be called
386 from transports.
387
388 Arguments:
389   format       a string format
390
391 Returns:       nothing
392 */
393
394 void
395 deliver_msglog(const char *format, ...)
396 {
397 va_list ap;
398 if (!message_logs) return;
399 va_start(ap, format);
400 vfprintf(message_log, format, ap);
401 fflush(message_log);
402 va_end(ap);
403 }
404
405
406
407
408 /*************************************************
409 *            Replicate status for batch          *
410 *************************************************/
411
412 /* When a transport handles a batch of addresses, it may treat them
413 individually, or it may just put the status in the first one, and return FALSE,
414 requesting that the status be copied to all the others externally. This is the
415 replication function. As well as the status, it copies the transport pointer,
416 which may have changed if appendfile passed the addresses on to a different
417 transport.
418
419 Argument:    pointer to the first address in a chain
420 Returns:     nothing
421 */
422
423 static void
424 replicate_status(address_item *addr)
425 {
426 for (address_item * addr2 = addr->next; addr2; addr2 = addr2->next)
427   {
428   addr2->transport =        addr->transport;
429   addr2->transport_return = addr->transport_return;
430   addr2->basic_errno =      addr->basic_errno;
431   addr2->more_errno =       addr->more_errno;
432   addr2->delivery_time =    addr->delivery_time;
433   addr2->special_action =   addr->special_action;
434   addr2->message =          addr->message;
435   addr2->user_message =     addr->user_message;
436   }
437 }
438
439
440
441 /*************************************************
442 *              Compare lists of hosts            *
443 *************************************************/
444
445 /* This function is given two pointers to chains of host items, and it yields
446 TRUE if the lists refer to the same hosts in the same order, except that
447
448 (1) Multiple hosts with the same non-negative MX values are permitted to appear
449     in different orders. Round-robinning nameservers can cause this to happen.
450
451 (2) Multiple hosts with the same negative MX values less than MX_NONE are also
452     permitted to appear in different orders. This is caused by randomizing
453     hosts lists.
454
455 This enables Exim to use a single SMTP transaction for sending to two entirely
456 different domains that happen to end up pointing at the same hosts.
457
458 We do not try to batch up different A-record host names that refer to the
459 same IP.
460
461 Arguments:
462   one       points to the first host list
463   two       points to the second host list
464
465 Returns:    TRUE if the lists refer to the same host set
466 */
467
468 static BOOL
469 same_hosts(host_item *one, host_item *two)
470 {
471 while (one && two)
472   {
473   if (Ustrcmp(one->name, two->name) != 0)
474     {
475     int mx = one->mx;
476     host_item *end_one = one;
477     host_item *end_two = two;
478
479     /* Batch up only if there was no MX and the list was not randomized */
480
481     if (mx == MX_NONE) return FALSE;
482
483     /* Find the ends of the shortest sequence of identical MX values */
484
485     while (  end_one->next && end_one->next->mx == mx
486           && end_two->next && end_two->next->mx == mx)
487       {
488       end_one = end_one->next;
489       end_two = end_two->next;
490       }
491
492     /* If there aren't any duplicates, there's no match. */
493
494     if (end_one == one) return FALSE;
495
496     /* For each host in the 'one' sequence, check that it appears in the 'two'
497     sequence, returning FALSE if not. */
498
499     for (;;)
500       {
501       host_item *hi;
502       for (hi = two; hi != end_two->next; hi = hi->next)
503         if (Ustrcmp(one->name, hi->name) == 0) break;
504       if (hi == end_two->next) return FALSE;
505       if (one == end_one) break;
506       one = one->next;
507       }
508
509     /* All the hosts in the 'one' sequence were found in the 'two' sequence.
510     Ensure both are pointing at the last host, and carry on as for equality. */
511
512     two = end_two;
513     }
514
515   /* if the names matched but ports do not, mismatch */
516   else if (one->port != two->port)
517     return FALSE;
518
519 #ifdef SUPPORT_DANE
520   /* DNSSEC equality */
521   if (one->dnssec != two->dnssec) return FALSE;
522 #endif
523
524   /* Hosts matched */
525   one = one->next;
526   two = two->next;
527   }
528
529 /* True if both are NULL */
530
531 return (one == two);
532 }
533
534
535
536 /*************************************************
537 *              Compare header lines              *
538 *************************************************/
539
540 /* This function is given two pointers to chains of header items, and it yields
541 TRUE if they are the same header texts in the same order.
542
543 Arguments:
544   one       points to the first header list
545   two       points to the second header list
546
547 Returns:    TRUE if the lists refer to the same header set
548 */
549
550 static BOOL
551 same_headers(header_line *one, header_line *two)
552 {
553 for (;; one = one->next, two = two->next)
554   {
555   if (one == two) return TRUE;   /* Includes the case where both NULL */
556   if (!one || !two) return FALSE;
557   if (Ustrcmp(one->text, two->text) != 0) return FALSE;
558   }
559 }
560
561
562
563 /*************************************************
564 *            Compare string settings             *
565 *************************************************/
566
567 /* This function is given two pointers to strings, and it returns
568 TRUE if they are the same pointer, or if the two strings are the same.
569
570 Arguments:
571   one       points to the first string
572   two       points to the second string
573
574 Returns:    TRUE or FALSE
575 */
576
577 static BOOL
578 same_strings(const uschar * one, const uschar * two)
579 {
580 if (one == two) return TRUE;   /* Includes the case where both NULL */
581 if (!one || !two) return FALSE;
582 return (Ustrcmp(one, two) == 0);
583 }
584
585
586
587 /*************************************************
588 *        Compare uid/gid for addresses           *
589 *************************************************/
590
591 /* This function is given a transport and two addresses. It yields TRUE if the
592 uid/gid/initgroups settings for the two addresses are going to be the same when
593 they are delivered.
594
595 Arguments:
596   tp            the transort
597   addr1         the first address
598   addr2         the second address
599
600 Returns:        TRUE or FALSE
601 */
602
603 static BOOL
604 same_ugid(transport_instance *tp, address_item *addr1, address_item *addr2)
605 {
606 if (  !tp->uid_set && !tp->expand_uid
607    && !tp->deliver_as_creator
608    && (  testflag(addr1, af_uid_set) != testflag(addr2, af_gid_set)
609       || (  testflag(addr1, af_uid_set)
610          && (  addr1->uid != addr2->uid
611             || testflag(addr1, af_initgroups) != testflag(addr2, af_initgroups)
612    )  )  )  )
613   return FALSE;
614
615 if (  !tp->gid_set && !tp->expand_gid
616    && (  testflag(addr1, af_gid_set) != testflag(addr2, af_gid_set)
617       || (  testflag(addr1, af_gid_set)
618          && addr1->gid != addr2->gid
619    )  )  )
620   return FALSE;
621
622 return TRUE;
623 }
624
625
626
627
628 /*************************************************
629 *      Record that an address is complete        *
630 *************************************************/
631
632 /* This function records that an address is complete. This is straightforward
633 for most addresses, where the unique address is just the full address with the
634 domain lower cased. For homonyms (addresses that are the same as one of their
635 ancestors) their are complications. Their unique addresses have \x\ prepended
636 (where x = 0, 1, 2...), so that de-duplication works correctly for siblings and
637 cousins.
638
639 Exim used to record the unique addresses of homonyms as "complete". This,
640 however, fails when the pattern of redirection varies over time (e.g. if taking
641 unseen copies at only some times of day) because the prepended numbers may vary
642 from one delivery run to the next. This problem is solved by never recording
643 prepended unique addresses as complete. Instead, when a homonymic address has
644 actually been delivered via a transport, we record its basic unique address
645 followed by the name of the transport. This is checked in subsequent delivery
646 runs whenever an address is routed to a transport.
647
648 If the completed address is a top-level one (has no parent, which means it
649 cannot be homonymic) we also add the original address to the non-recipients
650 tree, so that it gets recorded in the spool file and therefore appears as
651 "done" in any spool listings. The original address may differ from the unique
652 address in the case of the domain.
653
654 Finally, this function scans the list of duplicates, marks as done any that
655 match this address, and calls child_done() for their ancestors.
656
657 Arguments:
658   addr        address item that has been completed
659   now         current time as a string
660
661 Returns:      nothing
662 */
663
664 static void
665 address_done(address_item * addr, const uschar * now)
666 {
667 update_spool = TRUE;        /* Ensure spool gets updated */
668
669 /* Top-level address */
670
671 if (!addr->parent)
672   {
673   tree_add_nonrecipient(addr->unique);
674   tree_add_nonrecipient(addr->address);
675   }
676
677 /* Homonymous child address */
678
679 else if (testflag(addr, af_homonym))
680   {
681   if (addr->transport)
682     tree_add_nonrecipient(
683       string_sprintf("%s/%s", addr->unique + 3, addr->transport->name));
684   }
685
686 /* Non-homonymous child address */
687
688 else tree_add_nonrecipient(addr->unique);
689
690 /* Check the list of duplicate addresses and ensure they are now marked
691 done as well. */
692
693 for (address_item * dup = addr_duplicate; dup; dup = dup->next)
694   if (Ustrcmp(addr->unique, dup->unique) == 0)
695     {
696     tree_add_nonrecipient(dup->unique);
697     child_done(dup, now);
698     }
699 }
700
701
702
703
704 /*************************************************
705 *      Decrease counts in parents and mark done  *
706 *************************************************/
707
708 /* This function is called when an address is complete. If there is a parent
709 address, its count of children is decremented. If there are still other
710 children outstanding, the function exits. Otherwise, if the count has become
711 zero, address_done() is called to mark the parent and its duplicates complete.
712 Then loop for any earlier ancestors.
713
714 Arguments:
715   addr      points to the completed address item
716   now       the current time as a string, for writing to the message log
717
718 Returns:    nothing
719 */
720
721 static void
722 child_done(address_item * addr, const uschar * now)
723 {
724 while (addr->parent)
725   {
726   address_item * aa;
727
728   addr = addr->parent;
729   if (--addr->child_count > 0) return;   /* Incomplete parent */
730   address_done(addr, now);
731
732   /* Log the completion of all descendents only when there is no ancestor with
733   the same original address. */
734
735   for (aa = addr->parent; aa; aa = aa->parent)
736     if (Ustrcmp(aa->address, addr->address) == 0) break;
737   if (aa) continue;
738
739   deliver_msglog("%s %s: children all complete\n", now, addr->address);
740   DEBUG(D_deliver) debug_printf("%s: children all complete\n", addr->address);
741   }
742 }
743
744
745
746 /*************************************************
747 *      Delivery logging support functions        *
748 *************************************************/
749
750 /* The LOGGING() checks in d_log_interface() are complicated for backwards
751 compatibility. When outgoing interface logging was originally added, it was
752 conditional on just incoming_interface (which is off by default). The
753 outgoing_interface option is on by default to preserve this behaviour, but
754 you can enable incoming_interface and disable outgoing_interface to get I=
755 fields on incoming lines only.
756
757 Arguments:
758   g         The log line
759   addr      The address to be logged
760
761 Returns:    New value for s
762 */
763
764 static gstring *
765 d_log_interface(gstring * g)
766 {
767 if (LOGGING(incoming_interface) && LOGGING(outgoing_interface)
768     && sending_ip_address)
769   {
770   g = string_fmt_append(g, " I=[%s]", sending_ip_address);
771   if (LOGGING(outgoing_port))
772     g = string_fmt_append(g, ":%d", sending_port);
773   }
774 return g;
775 }
776
777
778
779 static gstring *
780 d_hostlog(gstring * g, address_item * addr)
781 {
782 host_item * h = addr->host_used;
783
784 g = string_append(g, 2, US" H=", h->name);
785
786 if (LOGGING(dnssec) && h->dnssec == DS_YES)
787   g = string_catn(g, US" DS", 3);
788
789 g = string_append(g, 3, US" [", h->address, US"]");
790
791 if (LOGGING(outgoing_port))
792   g = string_fmt_append(g, ":%d", h->port);
793
794 if (continue_sequence > 1)              /*XXX this is wrong for a dropped proxyconn.  Would have to pass back from transport */
795   g = string_catn(g, US"*", 1);
796
797 #ifdef SUPPORT_SOCKS
798 if (LOGGING(proxy) && proxy_local_address)
799   {
800   g = string_append(g, 3, US" PRX=[", proxy_local_address, US"]");
801   if (LOGGING(outgoing_port))
802     g = string_fmt_append(g, ":%d", proxy_local_port);
803   }
804 #endif
805
806 g = d_log_interface(g);
807
808 if (testflag(addr, af_tcp_fastopen))
809   g = string_catn(g, US" TFO*", testflag(addr, af_tcp_fastopen_data) ? 5 : 4);
810
811 return g;
812 }
813
814
815
816
817
818 #ifndef DISABLE_TLS
819 static gstring *
820 d_tlslog(gstring * g, address_item * addr)
821 {
822 if (LOGGING(tls_cipher) && addr->cipher)
823   {
824   g = string_append(g, 2, US" X=", addr->cipher);
825 #ifndef DISABLE_TLS_RESUME
826   if (LOGGING(tls_resumption) && testflag(addr, af_tls_resume))
827     g = string_catn(g, US"*", 1);
828 #endif
829   }
830 if (LOGGING(tls_certificate_verified) && addr->cipher)
831   g = string_append(g, 2, US" CV=",
832     testflag(addr, af_cert_verified)
833     ?
834 #ifdef SUPPORT_DANE
835       testflag(addr, af_dane_verified)
836     ? "dane"
837     :
838 #endif
839       "yes"
840     : "no");
841 if (LOGGING(tls_peerdn) && addr->peerdn)
842   g = string_append(g, 3, US" DN=\"", string_printing(addr->peerdn), US"\"");
843 return g;
844 }
845 #endif
846
847
848
849
850 #ifndef DISABLE_EVENT
851 /* Distribute a named event to any listeners.
852
853 Args:   action  config option specifying listener
854         event   name of the event
855         ev_data associated data for the event
856         errnop  pointer to errno for modification, or null
857
858 Return: string expansion from listener, or NULL
859 */
860
861 uschar *
862 event_raise(const uschar * action, const uschar * event, const uschar * ev_data,
863   int * errnop)
864 {
865 const uschar * s;
866 if (action)
867   {
868   DEBUG(D_deliver)
869     debug_printf("Event(%s): event_action=|%s| delivery_IP=%s\n",
870       event,
871       action, deliver_host_address);
872
873   event_name = event;
874   event_data = ev_data;
875
876   if (!(s = expand_cstring(action)) && *expand_string_message)
877     log_write(0, LOG_MAIN|LOG_PANIC,
878       "failed to expand event_action %s in %s: %s\n",
879       event, transport_name ? transport_name : US"main", expand_string_message);
880
881   event_name = event_data = NULL;
882
883   /* If the expansion returns anything but an empty string, flag for
884   the caller to modify his normal processing.  Copy the string to
885   de-const it.
886   */
887   if (s && *s)
888     {
889     DEBUG(D_deliver)
890       debug_printf("Event(%s): event_action returned \"%s\"\n", event, s);
891     if (errnop)
892       *errnop = ERRNO_EVENT;
893     return string_copy(s);
894     }
895   }
896 return NULL;
897 }
898
899 void
900 msg_event_raise(const uschar * event, const address_item * addr)
901 {
902 const uschar * save_domain = deliver_domain;
903 const uschar * save_local =  deliver_localpart;
904 const uschar * save_host = deliver_host;
905 const uschar * save_address = deliver_host_address;
906 uschar * save_rn = router_name, * save_tn = transport_name;
907 const int      save_port =   deliver_host_port;
908
909 router_name =    addr->router ? addr->router->name : NULL;
910 deliver_domain = addr->domain;
911 deliver_localpart = addr->local_part;
912 deliver_host =   addr->host_used ? addr->host_used->name : NULL;
913
914 if (!addr->transport)
915   {
916   if (Ustrcmp(event, "msg:fail:delivery") == 0)
917     {
918      /* An address failed with no transport involved. This happens when
919      a filter was used which triggered a fail command (in such a case
920      a transport isn't needed).  Convert it to an internal fail event. */
921
922     (void) event_raise(event_action, US"msg:fail:internal", addr->message, NULL);
923     }
924   }
925 else
926   {
927   transport_name = addr->transport->name;
928
929   (void) event_raise(addr->transport->event_action, event,
930             addr->host_used
931             || Ustrcmp(addr->transport->driver_name, "smtp") == 0
932             || Ustrcmp(addr->transport->driver_name, "lmtp") == 0
933             || Ustrcmp(addr->transport->driver_name, "autoreply") == 0
934            ? addr->message : NULL,
935            NULL);
936   }
937
938 deliver_host_port =    save_port;
939 deliver_host_address = save_address;
940 deliver_host =      save_host;
941 deliver_localpart = save_local;
942 deliver_domain =    save_domain;
943 router_name = save_rn;
944 transport_name = save_tn;
945 }
946 #endif  /*DISABLE_EVENT*/
947
948
949
950 /******************************************************************************/
951
952
953 /*************************************************
954 *        Generate local part for logging         *
955 *************************************************/
956
957 static const uschar *
958 string_get_lpart_sub(const address_item * addr, const uschar * s)
959 {
960 #ifdef SUPPORT_I18N
961 if (testflag(addr, af_utf8_downcvt))
962   {
963   const uschar * t = string_localpart_utf8_to_alabel(s, NULL);
964   return t ? t : s;     /* t is NULL on a failed conversion */
965   }
966 #endif
967 return s;
968 }
969
970 /* This function is a subroutine for use in string_log_address() below.
971
972 Arguments:
973   addr        the address being logged
974   yield       the current dynamic buffer pointer
975
976 Returns:      the new value of the buffer pointer
977 */
978
979 static gstring *
980 string_get_localpart(address_item * addr, gstring * yield)
981 {
982 const uschar * s;
983
984 if (testflag(addr, af_include_affixes) && (s = addr->prefix))
985   yield = string_cat(yield, string_get_lpart_sub(addr, s));
986
987 yield = string_cat(yield, string_get_lpart_sub(addr, addr->local_part));
988
989 if (testflag(addr, af_include_affixes) && (s = addr->suffix))
990   yield = string_cat(yield, string_get_lpart_sub(addr, s));
991
992 return yield;
993 }
994
995
996 /*************************************************
997 *          Generate log address list             *
998 *************************************************/
999
1000 /* This function generates a list consisting of an address and its parents, for
1001 use in logging lines. For saved onetime aliased addresses, the onetime parent
1002 field is used. If the address was delivered by a transport with rcpt_include_
1003 affixes set, the af_include_affixes bit will be set in the address. In that
1004 case, we include the affixes here too.
1005
1006 Arguments:
1007   g             points to growing-string struct
1008   addr          bottom (ultimate) address
1009   all_parents   if TRUE, include all parents
1010   success       TRUE for successful delivery
1011
1012 Returns:        a growable string in dynamic store
1013 */
1014
1015 static gstring *
1016 string_log_address(gstring * g,
1017   address_item *addr, BOOL all_parents, BOOL success)
1018 {
1019 BOOL add_topaddr = TRUE;
1020 address_item *topaddr;
1021
1022 /* Find the ultimate parent */
1023
1024 for (topaddr = addr; topaddr->parent; topaddr = topaddr->parent) ;
1025
1026 /* We start with just the local part for pipe, file, and reply deliveries, and
1027 for successful local deliveries from routers that have the log_as_local flag
1028 set. File deliveries from filters can be specified as non-absolute paths in
1029 cases where the transport is going to complete the path. If there is an error
1030 before this happens (expansion failure) the local part will not be updated, and
1031 so won't necessarily look like a path. Add extra text for this case. */
1032
1033 if (  testflag(addr, af_pfr)
1034    || (  success
1035       && addr->router && addr->router->log_as_local
1036       && addr->transport && addr->transport->info->local
1037    )  )
1038   {
1039   if (testflag(addr, af_file) && addr->local_part[0] != '/')
1040     g = string_catn(g, CUS"save ", 5);
1041   g = string_get_localpart(addr, g);
1042   }
1043
1044 /* Other deliveries start with the full address. It we have split it into local
1045 part and domain, use those fields. Some early failures can happen before the
1046 splitting is done; in those cases use the original field. */
1047
1048 else
1049   {
1050   uschar * cmp;
1051   int off = gstring_length(g);  /* start of the "full address" */
1052
1053   if (addr->local_part)
1054     {
1055     const uschar * s;
1056     g = string_get_localpart(addr, g);
1057     g = string_catn(g, US"@", 1);
1058     s = addr->domain;
1059 #ifdef SUPPORT_I18N
1060     if (testflag(addr, af_utf8_downcvt))
1061       s = string_localpart_utf8_to_alabel(s, NULL);
1062 #endif
1063     g = string_cat(g, s);
1064     }
1065   else
1066     g = string_cat(g, addr->address);
1067
1068   /* If the address we are going to print is the same as the top address,
1069   and all parents are not being included, don't add on the top address. First
1070   of all, do a caseless comparison; if this succeeds, do a caseful comparison
1071   on the local parts. */
1072
1073   cmp = g->s + off;             /* only now, as rebuffer likely done */
1074   string_from_gstring(g);       /* ensure nul-terminated */
1075   if (  strcmpic(cmp, topaddr->address) == 0
1076      && Ustrncmp(cmp, topaddr->address, Ustrchr(cmp, '@') - cmp) == 0
1077      && !addr->onetime_parent
1078      && (!all_parents || !addr->parent || addr->parent == topaddr)
1079      )
1080     add_topaddr = FALSE;
1081   }
1082
1083 /* If all parents are requested, or this is a local pipe/file/reply, and
1084 there is at least one intermediate parent, show it in brackets, and continue
1085 with all of them if all are wanted. */
1086
1087 if (  (all_parents || testflag(addr, af_pfr))
1088    && addr->parent
1089    && addr->parent != topaddr)
1090   {
1091   uschar *s = US" (";
1092   for (address_item * addr2 = addr->parent; addr2 != topaddr; addr2 = addr2->parent)
1093     {
1094     g = string_catn(g, s, 2);
1095     g = string_cat (g, addr2->address);
1096     if (!all_parents) break;
1097     s = US", ";
1098     }
1099   g = string_catn(g, US")", 1);
1100   }
1101
1102 /* Add the top address if it is required */
1103
1104 if (add_topaddr)
1105   g = string_append(g, 3,
1106     US" <",
1107     addr->onetime_parent ? addr->onetime_parent : topaddr->address,
1108     US">");
1109
1110 return g;
1111 }
1112
1113
1114
1115 /******************************************************************************/
1116
1117
1118
1119 /* If msg is NULL this is a delivery log and logchar is used. Otherwise
1120 this is a nonstandard call; no two-character delivery flag is written
1121 but sender-host and sender are prefixed and "msg" is inserted in the log line.
1122
1123 Arguments:
1124   flags         passed to log_write()
1125 */
1126 void
1127 delivery_log(int flags, address_item * addr, int logchar, uschar * msg)
1128 {
1129 gstring * g; /* Used for a temporary, expanding buffer, for building log lines  */
1130 rmark reset_point;
1131
1132 /* Log the delivery on the main log. We use an extensible string to build up
1133 the log line, and reset the store afterwards. Remote deliveries should always
1134 have a pointer to the host item that succeeded; local deliveries can have a
1135 pointer to a single host item in their host list, for use by the transport. */
1136
1137 #ifndef DISABLE_EVENT
1138   /* presume no successful remote delivery */
1139   lookup_dnssec_authenticated = NULL;
1140 #endif
1141
1142 reset_point = store_mark();
1143 g = string_get_tainted(256, GET_TAINTED);       /* addrs will be tainted, so avoid copy */
1144
1145 if (msg)
1146   g = string_append(g, 2, host_and_ident(TRUE), US" ");
1147 else
1148   {
1149   g->s[0] = logchar; g->ptr = 1;
1150   g = string_catn(g, US"> ", 2);
1151   }
1152 g = string_log_address(g, addr, LOGGING(all_parents), TRUE);
1153
1154 if (LOGGING(sender_on_delivery) || msg)
1155   g = string_append(g, 3, US" F=<",
1156 #ifdef SUPPORT_I18N
1157     testflag(addr, af_utf8_downcvt)
1158     ? string_address_utf8_to_alabel(sender_address, NULL)
1159     :
1160 #endif
1161       sender_address,
1162   US">");
1163
1164 if (*queue_name)
1165   g = string_append(g, 2, US" Q=", queue_name);
1166
1167 /* You might think that the return path must always be set for a successful
1168 delivery; indeed, I did for some time, until this statement crashed. The case
1169 when it is not set is for a delivery to /dev/null which is optimised by not
1170 being run at all. */
1171
1172 if (used_return_path && LOGGING(return_path_on_delivery))
1173   g = string_append(g, 3, US" P=<", used_return_path, US">");
1174
1175 if (msg)
1176   g = string_append(g, 2, US" ", msg);
1177
1178 /* For a delivery from a system filter, there may not be a router */
1179 if (addr->router)
1180   g = string_append(g, 2, US" R=", addr->router->name);
1181
1182 g = string_append(g, 2, US" T=", addr->transport->name);
1183
1184 if (LOGGING(delivery_size))
1185   g = string_fmt_append(g, " S=%d", transport_count);
1186
1187 /* Local delivery */
1188
1189 if (addr->transport->info->local)
1190   {
1191   if (addr->host_list)
1192     g = string_append(g, 2, US" H=", addr->host_list->name);
1193   g = d_log_interface(g);
1194   if (addr->shadow_message)
1195     g = string_cat(g, addr->shadow_message);
1196   }
1197
1198 /* Remote delivery */
1199
1200 else
1201   {
1202   if (addr->host_used)
1203     {
1204     g = d_hostlog(g, addr);
1205
1206 #ifndef DISABLE_EVENT
1207     deliver_host_address = addr->host_used->address;
1208     deliver_host_port =    addr->host_used->port;
1209     deliver_host =         addr->host_used->name;
1210
1211     /* DNS lookup status */
1212     lookup_dnssec_authenticated = addr->host_used->dnssec==DS_YES ? US"yes"
1213                               : addr->host_used->dnssec==DS_NO ? US"no"
1214                               : NULL;
1215 #endif
1216     }
1217
1218 #ifndef DISABLE_TLS
1219   g = d_tlslog(g, addr);
1220 #endif
1221
1222   if (addr->authenticator)
1223     {
1224     g = string_append(g, 2, US" A=", addr->authenticator);
1225     if (addr->auth_id)
1226       {
1227       g = string_append(g, 2, US":", addr->auth_id);
1228       if (LOGGING(smtp_mailauth) && addr->auth_sndr)
1229         g = string_append(g, 2, US":", addr->auth_sndr);
1230       }
1231     }
1232
1233   if (LOGGING(pipelining))
1234     {
1235     if (testflag(addr, af_pipelining))
1236       g = string_catn(g, US" L", 2);
1237 #ifndef DISABLE_PIPE_CONNECT
1238     if (testflag(addr, af_early_pipe))
1239       g = string_catn(g, US"*", 1);
1240 #endif
1241     }
1242
1243 #ifndef DISABLE_PRDR
1244   if (testflag(addr, af_prdr_used))
1245     g = string_catn(g, US" PRDR", 5);
1246 #endif
1247
1248   if (testflag(addr, af_chunking_used))
1249     g = string_catn(g, US" K", 2);
1250   }
1251
1252 #ifndef DISABLE_DKIM
1253   if (addr->dkim_used && LOGGING(dkim_verbose))
1254     {
1255     g = string_catn(g, US" DKIM=", 6);
1256     g = string_cat(g, addr->dkim_used);
1257     }
1258 #endif
1259
1260 /* confirmation message (SMTP (host_used) and LMTP (driver_name)) */
1261
1262 if (  LOGGING(smtp_confirmation)
1263    && addr->message
1264    && (addr->host_used || Ustrcmp(addr->transport->driver_name, "lmtp") == 0)
1265    )
1266   {
1267   unsigned lim = big_buffer_size < 1024 ? big_buffer_size : 1024;
1268   uschar *p = big_buffer;
1269   uschar *ss = addr->message;
1270   *p++ = '\"';
1271   for (int i = 0; i < lim && ss[i] != 0; i++)   /* limit logged amount */
1272     {
1273     if (ss[i] == '\"' || ss[i] == '\\') *p++ = '\\'; /* quote \ and " */
1274     *p++ = ss[i];
1275     }
1276   *p++ = '\"';
1277   *p = 0;
1278   g = string_append(g, 2, US" C=", big_buffer);
1279   }
1280
1281 /* Time on queue and actual time taken to deliver */
1282
1283 if (LOGGING(queue_time))
1284   g = string_append(g, 2, US" QT=", string_timesince(
1285     LOGGING(queue_time_exclusive) ? &received_time_complete : &received_time));
1286
1287 if (LOGGING(deliver_time))
1288   g = string_append(g, 2, US" DT=", string_timediff(&addr->delivery_time));
1289
1290 /* string_cat() always leaves room for the terminator. Release the
1291 store we used to build the line after writing it. */
1292
1293 log_write(0, flags, "%Y", g);
1294
1295 #ifndef DISABLE_EVENT
1296 if (!msg) msg_event_raise(US"msg:delivery", addr);
1297 #endif
1298
1299 store_reset(reset_point);
1300 return;
1301 }
1302
1303
1304
1305 static void
1306 deferral_log(address_item * addr, uschar * now,
1307   int logflags, uschar * driver_name, uschar * driver_kind)
1308 {
1309 rmark reset_point = store_mark();
1310 gstring * g = string_get(256);
1311
1312 /* Build up the line that is used for both the message log and the main
1313 log. */
1314
1315 /* Create the address string for logging. Must not do this earlier, because
1316 an OK result may be changed to FAIL when a pipe returns text. */
1317
1318 g = string_log_address(g, addr, LOGGING(all_parents), FALSE);
1319
1320 if (*queue_name)
1321   g = string_append(g, 2, US" Q=", queue_name);
1322
1323 /* Either driver_name contains something and driver_kind contains
1324 " router" or " transport" (note the leading space), or driver_name is
1325 a null string and driver_kind contains "routing" without the leading
1326 space, if all routing has been deferred. When a domain has been held,
1327 so nothing has been done at all, both variables contain null strings. */
1328
1329 if (driver_name)
1330   {
1331   if (driver_kind[1] == 't' && addr->router)
1332     g = string_append(g, 2, US" R=", addr->router->name);
1333   g = string_fmt_append(g, " %c=%s", toupper(driver_kind[1]), driver_name);
1334   }
1335 else if (driver_kind)
1336   g = string_append(g, 2, US" ", driver_kind);
1337
1338 g = string_fmt_append(g, " defer (%d)", addr->basic_errno);
1339
1340 if (addr->basic_errno > 0)
1341   g = string_append(g, 2, US": ", US strerror(addr->basic_errno));
1342
1343 if (addr->host_used)
1344   g = d_hostlog(g, addr);
1345
1346 if (LOGGING(deliver_time))
1347   g = string_append(g, 2, US" DT=", string_timediff(&addr->delivery_time));
1348
1349 if (addr->message)
1350   g = string_append(g, 2, US": ", addr->message);
1351
1352 /* Log the deferment in the message log, but don't clutter it
1353 up with retry-time defers after the first delivery attempt. */
1354
1355 if (f.deliver_firsttime || addr->basic_errno > ERRNO_RETRY_BASE)
1356   deliver_msglog("%s %.*s\n", now, g->ptr, g->s);
1357
1358 /* Write the main log and reset the store.
1359 For errors of the type "retry time not reached" (also remotes skipped
1360 on queue run), logging is controlled by L_retry_defer. Note that this kind
1361 of error number is negative, and all the retry ones are less than any
1362 others. */
1363
1364
1365 log_write(addr->basic_errno <= ERRNO_RETRY_BASE ? L_retry_defer : 0, logflags,
1366   "== %Y", g);
1367
1368 store_reset(reset_point);
1369 return;
1370 }
1371
1372
1373
1374 static void
1375 failure_log(address_item * addr, uschar * driver_kind, uschar * now)
1376 {
1377 rmark reset_point = store_mark();
1378 gstring * g = string_get(256);
1379
1380 #ifndef DISABLE_EVENT
1381 /* Message failures for which we will send a DSN get their event raised
1382 later so avoid doing it here. */
1383
1384 if (  !addr->prop.ignore_error
1385    && !(addr->dsn_flags & (rf_dsnflags & ~rf_notify_failure))
1386    )
1387   msg_event_raise(US"msg:fail:delivery", addr);
1388 #endif
1389
1390 /* Build up the log line for the message and main logs */
1391
1392 /* Create the address string for logging. Must not do this earlier, because
1393 an OK result may be changed to FAIL when a pipe returns text. */
1394
1395 g = string_log_address(g, addr, LOGGING(all_parents), FALSE);
1396
1397 if (LOGGING(sender_on_delivery))
1398   g = string_append(g, 3, US" F=<", sender_address, US">");
1399
1400 if (*queue_name)
1401   g = string_append(g, 2, US" Q=", queue_name);
1402
1403 /* Return path may not be set if no delivery actually happened */
1404
1405 if (used_return_path && LOGGING(return_path_on_delivery))
1406   g = string_append(g, 3, US" P=<", used_return_path, US">");
1407
1408 if (addr->router)
1409   g = string_append(g, 2, US" R=", addr->router->name);
1410 if (addr->transport)
1411   g = string_append(g, 2, US" T=", addr->transport->name);
1412
1413 if (addr->host_used)
1414   g = d_hostlog(g, addr);
1415
1416 #ifndef DISABLE_TLS
1417 g = d_tlslog(g, addr);
1418 #endif
1419
1420 if (addr->basic_errno > 0)
1421   g = string_append(g, 2, US": ", US strerror(addr->basic_errno));
1422
1423 if (addr->message)
1424   g = string_append(g, 2, US": ", addr->message);
1425
1426 if (LOGGING(deliver_time))
1427   g = string_append(g, 2, US" DT=", string_timediff(&addr->delivery_time));
1428
1429 /* Do the logging. For the message log, "routing failed" for those cases,
1430 just to make it clearer. */
1431
1432 if (driver_kind)
1433   deliver_msglog("%s %s failed for %.*s\n", now, driver_kind, g->ptr, g->s);
1434 else
1435   deliver_msglog("%s %.*s\n", now, g->ptr, g->s);
1436
1437 log_write(0, LOG_MAIN, "** %Y", g);
1438
1439 store_reset(reset_point);
1440 return;
1441 }
1442
1443
1444
1445 /*************************************************
1446 *    Actions at the end of handling an address   *
1447 *************************************************/
1448
1449 /* This is a function for processing a single address when all that can be done
1450 with it has been done.
1451
1452 Arguments:
1453   addr         points to the address block
1454   result       the result of the delivery attempt
1455   logflags     flags for log_write() (LOG_MAIN and/or LOG_PANIC)
1456   driver_type  indicates which type of driver (transport, or router) was last
1457                  to process the address
1458   logchar      '=' or '-' for use when logging deliveries with => or ->
1459
1460 Returns:       nothing
1461 */
1462
1463 static void
1464 post_process_one(address_item * addr, int result, int logflags, int driver_type,
1465   int logchar)
1466 {
1467 uschar * now = tod_stamp(tod_log);
1468 uschar * driver_kind = NULL;
1469 uschar * driver_name = NULL;
1470
1471 DEBUG(D_deliver) debug_printf("post-process %s (%d)\n", addr->address, result);
1472
1473 /* Set up driver kind and name for logging. Disable logging if the router or
1474 transport has disabled it. */
1475
1476 if (driver_type == EXIM_DTYPE_TRANSPORT)
1477   {
1478   if (addr->transport)
1479     {
1480     driver_name = addr->transport->name;
1481     driver_kind = US" transport";
1482     f.disable_logging = addr->transport->disable_logging;
1483     }
1484   else driver_kind = US"transporting";
1485   }
1486 else if (driver_type == EXIM_DTYPE_ROUTER)
1487   {
1488   if (addr->router)
1489     {
1490     driver_name = addr->router->name;
1491     driver_kind = US" router";
1492     f.disable_logging = addr->router->disable_logging;
1493     }
1494   else driver_kind = US"routing";
1495   }
1496
1497 /* If there's an error message set, ensure that it contains only printing
1498 characters - it should, but occasionally things slip in and this at least
1499 stops the log format from getting wrecked. We also scan the message for an LDAP
1500 expansion item that has a password setting, and flatten the password. This is a
1501 fudge, but I don't know a cleaner way of doing this. (If the item is badly
1502 malformed, it won't ever have gone near LDAP.) */
1503
1504 if (addr->message)
1505   {
1506   const uschar * s = string_printing(addr->message);
1507
1508   /* deconst cast ok as string_printing known to have alloc'n'copied */
1509   addr->message = expand_hide_passwords(US s);
1510   }
1511
1512 /* If we used a transport that has one of the "return_output" options set, and
1513 if it did in fact generate some output, then for return_output we treat the
1514 message as failed if it was not already set that way, so that the output gets
1515 returned to the sender, provided there is a sender to send it to. For
1516 return_fail_output, do this only if the delivery failed. Otherwise we just
1517 unlink the file, and remove the name so that if the delivery failed, we don't
1518 try to send back an empty or unwanted file. The log_output options operate only
1519 on a non-empty file.
1520
1521 In any case, we close the message file, because we cannot afford to leave a
1522 file-descriptor for one address while processing (maybe very many) others. */
1523
1524 if (addr->return_file >= 0 && addr->return_filename)
1525   {
1526   BOOL return_output = FALSE;
1527   struct stat statbuf;
1528   (void)EXIMfsync(addr->return_file);
1529
1530   /* If there is no output, do nothing. */
1531
1532   if (fstat(addr->return_file, &statbuf) == 0 && statbuf.st_size > 0)
1533     {
1534     transport_instance *tb = addr->transport;
1535
1536     /* Handle logging options */
1537
1538     if (  tb->log_output
1539        || result == FAIL  && tb->log_fail_output
1540        || result == DEFER && tb->log_defer_output
1541        )
1542       {
1543       uschar *s;
1544       FILE *f = Ufopen(addr->return_filename, "rb");
1545       if (!f)
1546         log_write(0, LOG_MAIN|LOG_PANIC, "failed to open %s to log output "
1547           "from %s transport: %s", addr->return_filename, tb->name,
1548           strerror(errno));
1549       else
1550         if ((s = US Ufgets(big_buffer, big_buffer_size, f)))
1551           {
1552           uschar *p = big_buffer + Ustrlen(big_buffer);
1553           const uschar * sp;
1554           while (p > big_buffer && isspace(p[-1])) p--;
1555           *p = 0;
1556           sp = string_printing(big_buffer);
1557           log_write(0, LOG_MAIN, "<%s>: %s transport output: %s",
1558             addr->address, tb->name, sp);
1559           }
1560       (void)fclose(f);
1561       }
1562
1563     /* Handle returning options, but only if there is an address to return
1564     the text to. */
1565
1566     if (sender_address[0] != 0 || addr->prop.errors_address)
1567       if (tb->return_output)
1568         {
1569         addr->transport_return = result = FAIL;
1570         if (addr->basic_errno == 0 && !addr->message)
1571           addr->message = US"return message generated";
1572         return_output = TRUE;
1573         }
1574       else
1575         if (tb->return_fail_output && result == FAIL) return_output = TRUE;
1576     }
1577
1578   /* Get rid of the file unless it might be returned, but close it in
1579   all cases. */
1580
1581   if (!return_output)
1582     {
1583     Uunlink(addr->return_filename);
1584     addr->return_filename = NULL;
1585     addr->return_file = -1;
1586     }
1587
1588   (void)close(addr->return_file);
1589   }
1590
1591 /* Check if the transport notifed continue-conn status explicitly, and
1592 update our knowlege. */
1593
1594 if (testflag(addr, af_new_conn))       continue_sequence = 1;
1595 else if (testflag(addr, af_cont_conn)) continue_sequence++;
1596
1597 /* The success case happens only after delivery by a transport. */
1598
1599 if (result == OK)
1600   {
1601   addr->next = addr_succeed;
1602   addr_succeed = addr;
1603
1604   /* Call address_done() to ensure that we don't deliver to this address again,
1605   and write appropriate things to the message log. If it is a child address, we
1606   call child_done() to scan the ancestors and mark them complete if this is the
1607   last child to complete. */
1608
1609   address_done(addr, now);
1610   DEBUG(D_deliver) debug_printf("%s delivered\n", addr->address);
1611
1612   if (!addr->parent)
1613     deliver_msglog("%s %s: %s%s succeeded\n", now, addr->address,
1614       driver_name, driver_kind);
1615   else
1616     {
1617     deliver_msglog("%s %s <%s>: %s%s succeeded\n", now, addr->address,
1618       addr->parent->address, driver_name, driver_kind);
1619     child_done(addr, now);
1620     }
1621
1622   /* Certificates for logging (via events) */
1623 #ifndef DISABLE_TLS
1624   tls_out.ourcert = addr->ourcert;
1625   addr->ourcert = NULL;
1626   tls_out.peercert = addr->peercert;
1627   addr->peercert = NULL;
1628
1629   tls_out.ver = addr->tlsver;
1630   tls_out.cipher = addr->cipher;
1631   tls_out.peerdn = addr->peerdn;
1632   tls_out.ocsp = addr->ocsp;
1633 # ifdef SUPPORT_DANE
1634   tls_out.dane_verified = testflag(addr, af_dane_verified);
1635 # endif
1636 #endif
1637
1638   delivery_log(LOG_MAIN, addr, logchar, NULL);
1639
1640 #ifndef DISABLE_TLS
1641   tls_free_cert(&tls_out.ourcert);
1642   tls_free_cert(&tls_out.peercert);
1643   tls_out.ver = NULL;
1644   tls_out.cipher = NULL;
1645   tls_out.peerdn = NULL;
1646   tls_out.ocsp = OCSP_NOT_REQ;
1647 # ifdef SUPPORT_DANE
1648   tls_out.dane_verified = FALSE;
1649 # endif
1650 #endif
1651   }
1652
1653
1654 /* Soft failure, or local delivery process failed; freezing may be
1655 requested. */
1656
1657 else if (result == DEFER || result == PANIC)
1658   {
1659   if (result == PANIC) logflags |= LOG_PANIC;
1660
1661   /* This puts them on the chain in reverse order. Do not change this, because
1662   the code for handling retries assumes that the one with the retry
1663   information is last. */
1664
1665   addr->next = addr_defer;
1666   addr_defer = addr;
1667
1668   /* The only currently implemented special action is to freeze the
1669   message. Logging of this is done later, just before the -H file is
1670   updated. */
1671
1672   if (addr->special_action == SPECIAL_FREEZE)
1673     {
1674     f.deliver_freeze = TRUE;
1675     deliver_frozen_at = time(NULL);
1676     update_spool = TRUE;
1677     }
1678
1679   /* If doing a 2-stage queue run, we skip writing to either the message
1680   log or the main log for SMTP defers. */
1681
1682   if (!f.queue_2stage || addr->basic_errno != 0)
1683     deferral_log(addr, now, logflags, driver_name, driver_kind);
1684   }
1685
1686
1687 /* Hard failure. If there is an address to which an error message can be sent,
1688 put this address on the failed list. If not, put it on the deferred list and
1689 freeze the mail message for human attention. The latter action can also be
1690 explicitly requested by a router or transport. */
1691
1692 else
1693   {
1694   /* If this is a delivery error, or a message for which no replies are
1695   wanted, and the message's age is greater than ignore_bounce_errors_after,
1696   force the af_ignore_error flag. This will cause the address to be discarded
1697   later (with a log entry). */
1698
1699   if (!*sender_address && message_age >= ignore_bounce_errors_after)
1700     addr->prop.ignore_error = TRUE;
1701
1702   /* Freeze the message if requested, or if this is a bounce message (or other
1703   message with null sender) and this address does not have its own errors
1704   address. However, don't freeze if errors are being ignored. The actual code
1705   to ignore occurs later, instead of sending a message. Logging of freezing
1706   occurs later, just before writing the -H file. */
1707
1708   if (  !addr->prop.ignore_error
1709      && (  addr->special_action == SPECIAL_FREEZE
1710         || (sender_address[0] == 0 && !addr->prop.errors_address)
1711      )  )
1712     {
1713     frozen_info = addr->special_action == SPECIAL_FREEZE
1714       ? US""
1715       : f.sender_local && !f.local_error_message
1716       ? US" (message created with -f <>)"
1717       : US" (delivery error message)";
1718     f.deliver_freeze = TRUE;
1719     deliver_frozen_at = time(NULL);
1720     update_spool = TRUE;
1721
1722     /* The address is put on the defer rather than the failed queue, because
1723     the message is being retained. */
1724
1725     addr->next = addr_defer;
1726     addr_defer = addr;
1727     }
1728
1729   /* Don't put the address on the nonrecipients tree yet; wait until an
1730   error message has been successfully sent. */
1731
1732   else
1733     {
1734     addr->next = addr_failed;
1735     addr_failed = addr;
1736     }
1737
1738   failure_log(addr, driver_name ? NULL : driver_kind, now);
1739   }
1740
1741 /* Ensure logging is turned on again in all cases */
1742
1743 f.disable_logging = FALSE;
1744 }
1745
1746
1747
1748
1749 /*************************************************
1750 *            Address-independent error           *
1751 *************************************************/
1752
1753 /* This function is called when there's an error that is not dependent on a
1754 particular address, such as an expansion string failure. It puts the error into
1755 all the addresses in a batch, logs the incident on the main and panic logs, and
1756 clears the expansions. It is mostly called from local_deliver(), but can be
1757 called for a remote delivery via findugid().
1758
1759 Arguments:
1760   logit        TRUE if (MAIN+PANIC) logging required
1761   addr         the first of the chain of addresses
1762   code         the error code
1763   format       format string for error message, or NULL if already set in addr
1764   ...          arguments for the format
1765
1766 Returns:       nothing
1767 */
1768
1769 static void
1770 common_error(BOOL logit, address_item *addr, int code, uschar *format, ...)
1771 {
1772 addr->basic_errno = code;
1773
1774 if (format)
1775   {
1776   va_list ap;
1777   gstring * g;
1778
1779   va_start(ap, format);
1780   g = string_vformat(NULL, SVFMT_EXTEND|SVFMT_REBUFFER, CS format, ap);
1781   va_end(ap);
1782   addr->message = string_from_gstring(g);
1783   }
1784
1785 for (address_item * addr2 = addr->next; addr2; addr2 = addr2->next)
1786   {
1787   addr2->basic_errno = code;
1788   addr2->message = addr->message;
1789   }
1790
1791 if (logit) log_write(0, LOG_MAIN|LOG_PANIC, "%s", addr->message);
1792 deliver_set_expansions(NULL);
1793 }
1794
1795
1796
1797
1798 /*************************************************
1799 *         Check a "never users" list             *
1800 *************************************************/
1801
1802 /* This function is called to check whether a uid is on one of the two "never
1803 users" lists.
1804
1805 Arguments:
1806   uid         the uid to be checked
1807   nusers      the list to be scanned; the first item in the list is the count
1808
1809 Returns:      TRUE if the uid is on the list
1810 */
1811
1812 static BOOL
1813 check_never_users(uid_t uid, uid_t *nusers)
1814 {
1815 if (!nusers) return FALSE;
1816 for (int i = 1; i <= (int)(nusers[0]); i++) if (nusers[i] == uid) return TRUE;
1817 return FALSE;
1818 }
1819
1820
1821
1822 /*************************************************
1823 *          Find uid and gid for a transport      *
1824 *************************************************/
1825
1826 /* This function is called for both local and remote deliveries, to find the
1827 uid/gid under which to run the delivery. The values are taken preferentially
1828 from the transport (either explicit or deliver_as_creator), then from the
1829 address (i.e. the router), and if nothing is set, the exim uid/gid are used. If
1830 the resulting uid is on the "never_users" or the "fixed_never_users" list, a
1831 panic error is logged, and the function fails (which normally leads to delivery
1832 deferral).
1833
1834 Arguments:
1835   addr         the address (possibly a chain)
1836   tp           the transport
1837   uidp         pointer to uid field
1838   gidp         pointer to gid field
1839   igfp         pointer to the use_initgroups field
1840
1841 Returns:       FALSE if failed - error has been set in address(es)
1842 */
1843
1844 static BOOL
1845 findugid(address_item *addr, transport_instance *tp, uid_t *uidp, gid_t *gidp,
1846   BOOL *igfp)
1847 {
1848 uschar *nuname;
1849 BOOL gid_set = FALSE;
1850
1851 /* Default initgroups flag comes from the transport */
1852
1853 *igfp = tp->initgroups;
1854
1855 /* First see if there's a gid on the transport, either fixed or expandable.
1856 The expanding function always logs failure itself. */
1857
1858 if (tp->gid_set)
1859   {
1860   *gidp = tp->gid;
1861   gid_set = TRUE;
1862   }
1863 else if (tp->expand_gid)
1864   {
1865   GET_OPTION("group");
1866   if (!route_find_expanded_group(tp->expand_gid, tp->name, US"transport", gidp,
1867     &addr->message))
1868     {
1869     common_error(FALSE, addr, ERRNO_GIDFAIL, NULL);
1870     return FALSE;
1871     }
1872   gid_set = TRUE;
1873   }
1874
1875 /* If the transport did not set a group, see if the router did. */
1876
1877 if (!gid_set && testflag(addr, af_gid_set))
1878   {
1879   *gidp = addr->gid;
1880   gid_set = TRUE;
1881   }
1882
1883 /* Pick up a uid from the transport if one is set. */
1884
1885 if (tp->uid_set) *uidp = tp->uid;
1886
1887 /* Otherwise, try for an expandable uid field. If it ends up as a numeric id,
1888 it does not provide a passwd value from which a gid can be taken. */
1889
1890 else if (tp->expand_uid)
1891   {
1892   struct passwd *pw;
1893   GET_OPTION("user");
1894   if (!route_find_expanded_user(tp->expand_uid, tp->name, US"transport", &pw,
1895        uidp, &(addr->message)))
1896     {
1897     common_error(FALSE, addr, ERRNO_UIDFAIL, NULL);
1898     return FALSE;
1899     }
1900   if (!gid_set && pw)
1901     {
1902     *gidp = pw->pw_gid;
1903     gid_set = TRUE;
1904     }
1905   }
1906
1907 /* If the transport doesn't set the uid, test the deliver_as_creator flag. */
1908
1909 else if (tp->deliver_as_creator)
1910   {
1911   *uidp = originator_uid;
1912   if (!gid_set)
1913     {
1914     *gidp = originator_gid;
1915     gid_set = TRUE;
1916     }
1917   }
1918
1919 /* Otherwise see if the address specifies the uid and if so, take it and its
1920 initgroups flag. */
1921
1922 else if (testflag(addr, af_uid_set))
1923   {
1924   *uidp = addr->uid;
1925   *igfp = testflag(addr, af_initgroups);
1926   }
1927
1928 /* Nothing has specified the uid - default to the Exim user, and group if the
1929 gid is not set. */
1930
1931 else
1932   {
1933   *uidp = exim_uid;
1934   if (!gid_set)
1935     {
1936     *gidp = exim_gid;
1937     gid_set = TRUE;
1938     }
1939   }
1940
1941 /* If no gid is set, it is a disaster. We default to the Exim gid only if
1942 defaulting to the Exim uid. In other words, if the configuration has specified
1943 a uid, it must also provide a gid. */
1944
1945 if (!gid_set)
1946   {
1947   common_error(TRUE, addr, ERRNO_GIDFAIL, US"User set without group for "
1948     "%s transport", tp->name);
1949   return FALSE;
1950   }
1951
1952 /* Check that the uid is not on the lists of banned uids that may not be used
1953 for delivery processes. */
1954
1955 nuname = check_never_users(*uidp, never_users)
1956   ? US"never_users"
1957   : check_never_users(*uidp, fixed_never_users)
1958   ? US"fixed_never_users"
1959   : NULL;
1960 if (nuname)
1961   {
1962   common_error(TRUE, addr, ERRNO_UIDFAIL, US"User %ld set for %s transport "
1963     "is on the %s list", (long int)(*uidp), tp->name, nuname);
1964   return FALSE;
1965   }
1966
1967 /* All is well */
1968
1969 return TRUE;
1970 }
1971
1972
1973
1974
1975 /*************************************************
1976 *   Check the size of a message for a transport  *
1977 *************************************************/
1978
1979 /* Checks that the message isn't too big for the selected transport.
1980 This is called only when it is known that the limit is set.
1981
1982 Arguments:
1983   tp          the transport
1984   addr        the (first) address being delivered
1985
1986 Returns:      OK
1987               DEFER   expansion failed or did not yield an integer
1988               FAIL    message too big
1989 */
1990
1991 int
1992 check_message_size(transport_instance *tp, address_item *addr)
1993 {
1994 int rc = OK;
1995 int size_limit;
1996
1997 GET_OPTION("message_size_limit");
1998 deliver_set_expansions(addr);
1999 size_limit = expand_string_integer(tp->message_size_limit, TRUE);
2000 deliver_set_expansions(NULL);
2001
2002 if (expand_string_message)
2003   {
2004   rc = DEFER;
2005   addr->message = size_limit == -1
2006     ? string_sprintf("failed to expand message_size_limit "
2007       "in %s transport: %s", tp->name, expand_string_message)
2008     : string_sprintf("invalid message_size_limit "
2009       "in %s transport: %s", tp->name, expand_string_message);
2010   }
2011 else if (size_limit > 0 && message_size > size_limit)
2012   {
2013   rc = FAIL;
2014   addr->message =
2015     string_sprintf("message is too big (transport limit = %d)",
2016       size_limit);
2017   }
2018
2019 return rc;
2020 }
2021
2022
2023
2024 /*************************************************
2025 *  Transport-time check for a previous delivery  *
2026 *************************************************/
2027
2028 /* Check that this base address hasn't previously been delivered to its routed
2029 transport. If it has been delivered, mark it done. The check is necessary at
2030 delivery time in order to handle homonymic addresses correctly in cases where
2031 the pattern of redirection changes between delivery attempts (so the unique
2032 fields change). Non-homonymic previous delivery is detected earlier, at routing
2033 time (which saves unnecessary routing).
2034
2035 Arguments:
2036   addr      the address item
2037   testing   TRUE if testing wanted only, without side effects
2038
2039 Returns:    TRUE if previously delivered by the transport
2040 */
2041
2042 static BOOL
2043 previously_transported(address_item *addr, BOOL testing)
2044 {
2045 uschar * s = string_sprintf("%s/%s",
2046   addr->unique + (testflag(addr, af_homonym) ? 3:0), addr->transport->name);
2047
2048 if (tree_search(tree_nonrecipients, s) != 0)
2049   {
2050   DEBUG(D_deliver|D_route|D_transport)
2051     debug_printf("%s was previously delivered (%s transport): discarded\n",
2052     addr->address, addr->transport->name);
2053   if (!testing) child_done(addr, tod_stamp(tod_log));
2054   return TRUE;
2055   }
2056
2057 return FALSE;
2058 }
2059
2060
2061
2062 /******************************************************
2063 *      Check for a given header in a header string    *
2064 ******************************************************/
2065
2066 /* This function is used when generating quota warnings. The configuration may
2067 specify any header lines it likes in quota_warn_message. If certain of them are
2068 missing, defaults are inserted, so we need to be able to test for the presence
2069 of a given header.
2070
2071 Arguments:
2072   hdr         the required header name
2073   hstring     the header string
2074
2075 Returns:      TRUE  the header is in the string
2076               FALSE the header is not in the string
2077 */
2078
2079 static BOOL
2080 contains_header(uschar *hdr, uschar *hstring)
2081 {
2082 int len = Ustrlen(hdr);
2083 uschar *p = hstring;
2084 while (*p != 0)
2085   {
2086   if (strncmpic(p, hdr, len) == 0)
2087     {
2088     p += len;
2089     while (*p == ' ' || *p == '\t') p++;
2090     if (*p == ':') return TRUE;
2091     }
2092   while (*p != 0 && *p != '\n') p++;
2093   if (*p == '\n') p++;
2094   }
2095 return FALSE;
2096 }
2097
2098
2099
2100
2101 /*************************************************
2102 *           Perform a local delivery             *
2103 *************************************************/
2104
2105 /* Each local delivery is performed in a separate process which sets its
2106 uid and gid as specified. This is a safer way than simply changing and
2107 restoring using seteuid(); there is a body of opinion that seteuid()
2108 cannot be used safely. From release 4, Exim no longer makes any use of
2109 it for delivery. Besides, not all systems have seteuid().
2110
2111 If the uid/gid are specified in the transport_instance, they are used; the
2112 transport initialization must ensure that either both or neither are set.
2113 Otherwise, the values associated with the address are used. If neither are set,
2114 it is a configuration error.
2115
2116 The transport or the address may specify a home directory (transport over-
2117 rides), and if they do, this is set as $home. If neither have set a working
2118 directory, this value is used for that as well. Otherwise $home is left unset
2119 and the cwd is set to "/" - a directory that should be accessible to all users.
2120
2121 Using a separate process makes it more complicated to get error information
2122 back. We use a pipe to pass the return code and also an error code and error
2123 text string back to the parent process.
2124
2125 Arguments:
2126   addr       points to an address block for this delivery; for "normal" local
2127              deliveries this is the only address to be delivered, but for
2128              pseudo-remote deliveries (e.g. by batch SMTP to a file or pipe)
2129              a number of addresses can be handled simultaneously, and in this
2130              case addr will point to a chain of addresses with the same
2131              characteristics.
2132
2133   shadowing  TRUE if running a shadow transport; this causes output from pipes
2134              to be ignored.
2135
2136 Returns:     nothing
2137 */
2138
2139 void
2140 deliver_local(address_item *addr, BOOL shadowing)
2141 {
2142 BOOL use_initgroups;
2143 uid_t uid;
2144 gid_t gid;
2145 int status, len, rc;
2146 int pfd[2];
2147 pid_t pid;
2148 uschar *working_directory;
2149 address_item *addr2;
2150 transport_instance *tp = addr->transport;
2151
2152 /* Set up the return path from the errors or sender address. If the transport
2153 has its own return path setting, expand it and replace the existing value. */
2154
2155 if(addr->prop.errors_address)
2156   return_path = addr->prop.errors_address;
2157 else
2158   return_path = sender_address;
2159
2160 GET_OPTION("return_path");
2161 if (tp->return_path)
2162   {
2163   uschar * new_return_path = expand_string(tp->return_path);
2164   if (new_return_path)
2165     return_path = new_return_path;
2166   else if (!f.expand_string_forcedfail)
2167     {
2168     common_error(TRUE, addr, ERRNO_EXPANDFAIL,
2169       US"Failed to expand return path \"%s\" in %s transport: %s",
2170       tp->return_path, tp->name, expand_string_message);
2171     return;
2172     }
2173   }
2174
2175 /* For local deliveries, one at a time, the value used for logging can just be
2176 set directly, once and for all. */
2177
2178 used_return_path = return_path;
2179
2180 /* Sort out the uid, gid, and initgroups flag. If an error occurs, the message
2181 gets put into the address(es), and the expansions are unset, so we can just
2182 return. */
2183
2184 if (!findugid(addr, tp, &uid, &gid, &use_initgroups)) return;
2185
2186 /* See if either the transport or the address specifies a home directory. A
2187 home directory set in the address may already be expanded; a flag is set to
2188 indicate that. In other cases we must expand it. */
2189
2190 GET_OPTION("home_directory");
2191 if (  (deliver_home = tp->home_dir)             /* Set in transport, or */
2192    || (  (deliver_home = addr->home_dir)        /* Set in address and */
2193       && !testflag(addr, af_home_expanded)      /*   not expanded */
2194    )  )
2195   {
2196   uschar *rawhome = deliver_home;
2197   deliver_home = NULL;                      /* in case it contains $home */
2198   if (!(deliver_home = expand_string(rawhome)))
2199     {
2200     common_error(TRUE, addr, ERRNO_EXPANDFAIL, US"home directory \"%s\" failed "
2201       "to expand for %s transport: %s", rawhome, tp->name,
2202       expand_string_message);
2203     return;
2204     }
2205   if (*deliver_home != '/')
2206     {
2207     common_error(TRUE, addr, ERRNO_NOTABSOLUTE, US"home directory path \"%s\" "
2208       "is not absolute for %s transport", deliver_home, tp->name);
2209     return;
2210     }
2211   }
2212
2213 /* See if either the transport or the address specifies a current directory,
2214 and if so, expand it. If nothing is set, use the home directory, unless it is
2215 also unset in which case use "/", which is assumed to be a directory to which
2216 all users have access. It is necessary to be in a visible directory for some
2217 operating systems when running pipes, as some commands (e.g. "rm" under Solaris
2218 2.5) require this. */
2219
2220 GET_OPTION("current_directory");
2221 working_directory = tp->current_dir ? tp->current_dir : addr->current_dir;
2222 if (working_directory)
2223   {
2224   uschar *raw = working_directory;
2225   if (!(working_directory = expand_string(raw)))
2226     {
2227     common_error(TRUE, addr, ERRNO_EXPANDFAIL, US"current directory \"%s\" "
2228       "failed to expand for %s transport: %s", raw, tp->name,
2229       expand_string_message);
2230     return;
2231     }
2232   if (*working_directory != '/')
2233     {
2234     common_error(TRUE, addr, ERRNO_NOTABSOLUTE, US"current directory path "
2235       "\"%s\" is not absolute for %s transport", working_directory, tp->name);
2236     return;
2237     }
2238   }
2239 else working_directory = deliver_home ? deliver_home : US"/";
2240
2241 /* If one of the return_output flags is set on the transport, create and open a
2242 file in the message log directory for the transport to write its output onto.
2243 This is mainly used by pipe transports. The file needs to be unique to the
2244 address. This feature is not available for shadow transports. */
2245
2246 if (  !shadowing
2247    && (  tp->return_output || tp->return_fail_output
2248       || tp->log_output || tp->log_fail_output || tp->log_defer_output
2249    )  )
2250   {
2251   uschar * error;
2252
2253   addr->return_filename =
2254     spool_fname(US"msglog", message_subdir, message_id,
2255       string_sprintf("-%d-%d", getpid(), return_count++));
2256
2257   if ((addr->return_file = open_msglog_file(addr->return_filename, 0400, &error)) < 0)
2258     {
2259     common_error(TRUE, addr, errno, US"Unable to %s file for %s transport "
2260       "to return message: %s", error, tp->name, strerror(errno));
2261     return;
2262     }
2263   }
2264
2265 /* Create the pipe for inter-process communication. */
2266
2267 if (pipe(pfd) != 0)
2268   {
2269   common_error(TRUE, addr, ERRNO_PIPEFAIL, US"Creation of pipe failed: %s",
2270     strerror(errno));
2271   return;
2272   }
2273
2274 /* Now fork the process to do the real work in the subprocess, but first
2275 ensure that all cached resources are freed so that the subprocess starts with
2276 a clean slate and doesn't interfere with the parent process. */
2277
2278 search_tidyup();
2279
2280 if ((pid = exim_fork(US"delivery-local")) == 0)
2281   {
2282   BOOL replicate = TRUE;
2283
2284   /* Prevent core dumps, as we don't want them in users' home directories.
2285   HP-UX doesn't have RLIMIT_CORE; I don't know how to do this in that
2286   system. Some experimental/developing systems (e.g. GNU/Hurd) may define
2287   RLIMIT_CORE but not support it in setrlimit(). For such systems, do not
2288   complain if the error is "not supported".
2289
2290   There are two scenarios where changing the max limit has an effect.  In one,
2291   the user is using a .forward and invoking a command of their choice via pipe;
2292   for these, we do need the max limit to be 0 unless the admin chooses to
2293   permit an increased limit.  In the other, the command is invoked directly by
2294   the transport and is under administrator control, thus being able to raise
2295   the limit aids in debugging.  So there's no general always-right answer.
2296
2297   Thus we inhibit core-dumps completely but let individual transports, while
2298   still root, re-raise the limits back up to aid debugging.  We make the
2299   default be no core-dumps -- few enough people can use core dumps in
2300   diagnosis that it's reasonable to make them something that has to be explicitly requested.
2301   */
2302
2303 #ifdef RLIMIT_CORE
2304   struct rlimit rl;
2305   rl.rlim_cur = 0;
2306   rl.rlim_max = 0;
2307   if (setrlimit(RLIMIT_CORE, &rl) < 0)
2308     {
2309 # ifdef SETRLIMIT_NOT_SUPPORTED
2310     if (errno != ENOSYS && errno != ENOTSUP)
2311 # endif
2312       log_write(0, LOG_MAIN|LOG_PANIC, "setrlimit(RLIMIT_CORE) failed: %s",
2313         strerror(errno));
2314     }
2315 #endif
2316
2317   /* Reset the random number generator, so different processes don't all
2318   have the same sequence. */
2319
2320   random_seed = 0;
2321
2322   /* If the transport has a setup entry, call this first, while still
2323   privileged. (Appendfile uses this to expand quota, for example, while
2324   able to read private files.) */
2325
2326   if (addr->transport->setup)
2327     switch((addr->transport->setup)(addr->transport, addr, NULL, uid, gid,
2328            &addr->message))
2329       {
2330       case DEFER:
2331         addr->transport_return = DEFER;
2332         goto PASS_BACK;
2333
2334       case FAIL:
2335         addr->transport_return = PANIC;
2336         goto PASS_BACK;
2337       }
2338
2339   /* Ignore SIGINT and SIGTERM during delivery. Also ignore SIGUSR1, as
2340   when the process becomes unprivileged, it won't be able to write to the
2341   process log. SIGHUP is ignored throughout exim, except when it is being
2342   run as a daemon. */
2343
2344   signal(SIGINT, SIG_IGN);
2345   signal(SIGTERM, SIG_IGN);
2346   signal(SIGUSR1, SIG_IGN);
2347
2348   /* Close the unwanted half of the pipe, and set close-on-exec for the other
2349   half - for transports that exec things (e.g. pipe). Then set the required
2350   gid/uid. */
2351
2352   (void)close(pfd[pipe_read]);
2353   (void)fcntl(pfd[pipe_write], F_SETFD, fcntl(pfd[pipe_write], F_GETFD) |
2354     FD_CLOEXEC);
2355   exim_setugid(uid, gid, use_initgroups,
2356     string_sprintf("local delivery to %s <%s> transport=%s", addr->local_part,
2357       addr->address, addr->transport->name));
2358
2359   DEBUG(D_deliver)
2360     {
2361     debug_printf("  home=%s current=%s\n", deliver_home, working_directory);
2362     for (address_item * batched = addr->next; batched; batched = batched->next)
2363       debug_printf("additional batched address: %s\n", batched->address);
2364     }
2365
2366   /* Set an appropriate working directory. */
2367
2368   if (Uchdir(working_directory) < 0)
2369     {
2370     addr->transport_return = DEFER;
2371     addr->basic_errno = errno;
2372     addr->message = string_sprintf("failed to chdir to %s", working_directory);
2373     }
2374
2375   /* If successful, call the transport */
2376
2377   else
2378     {
2379     BOOL ok = TRUE;
2380     set_process_info("delivering %s to %s using %s", message_id,
2381      addr->local_part, tp->name);
2382
2383     /* Setting these globals in the subprocess means we need never clear them */
2384
2385     transport_name = tp->name;
2386     if (addr->router) router_name = addr->router->name;
2387     driver_srcfile = tp->srcfile;
2388     driver_srcline = tp->srcline;
2389
2390     /* If a transport filter has been specified, set up its argument list.
2391     Any errors will get put into the address, and FALSE yielded. */
2392
2393     if (tp->filter_command)
2394       {
2395       ok = transport_set_up_command(&transport_filter_argv,
2396         tp->filter_command,
2397         TSUC_EXPAND_ARGS, PANIC, addr, US"transport filter", NULL);
2398       transport_filter_timeout = tp->filter_timeout;
2399       }
2400     else transport_filter_argv = NULL;
2401
2402     if (ok)
2403       {
2404       debug_print_string(tp->debug_string);
2405       replicate = !(tp->info->code)(addr->transport, addr);
2406       }
2407     }
2408
2409   /* Pass the results back down the pipe. If necessary, first replicate the
2410   status in the top address to the others in the batch. The label is the
2411   subject of a goto when a call to the transport's setup function fails. We
2412   pass the pointer to the transport back in case it got changed as a result of
2413   file_format in appendfile. */
2414
2415   PASS_BACK:
2416
2417   if (replicate) replicate_status(addr);
2418   for (addr2 = addr; addr2; addr2 = addr2->next)
2419     {
2420     int i;
2421     int local_part_length = Ustrlen(addr2->local_part);
2422     uschar *s;
2423     int ret;
2424
2425     if(  (i = addr2->transport_return, (ret = write(pfd[pipe_write], &i, sizeof(int))) != sizeof(int))
2426       || (ret = write(pfd[pipe_write], &transport_count, sizeof(transport_count))) != sizeof(transport_count)
2427       || (ret = write(pfd[pipe_write], &addr2->flags, sizeof(addr2->flags))) != sizeof(addr2->flags)
2428       || (ret = write(pfd[pipe_write], &addr2->basic_errno,    sizeof(int))) != sizeof(int)
2429       || (ret = write(pfd[pipe_write], &addr2->more_errno,     sizeof(int))) != sizeof(int)
2430       || (ret = write(pfd[pipe_write], &addr2->delivery_time,  sizeof(struct timeval))) != sizeof(struct timeval)
2431       || (i = addr2->special_action, (ret = write(pfd[pipe_write], &i, sizeof(int))) != sizeof(int))
2432       || (ret = write(pfd[pipe_write], &addr2->transport,
2433         sizeof(transport_instance *))) != sizeof(transport_instance *)
2434
2435     /* For a file delivery, pass back the local part, in case the original
2436     was only part of the final delivery path. This gives more complete
2437     logging. */
2438
2439       || (testflag(addr2, af_file)
2440           && (  (ret = write(pfd[pipe_write], &local_part_length, sizeof(int))) != sizeof(int)
2441              || (ret = write(pfd[pipe_write], addr2->local_part, local_part_length)) != local_part_length
2442              )
2443          )
2444       )
2445       log_write(0, LOG_MAIN|LOG_PANIC, "Failed writing transport results to pipe: %s",
2446         ret == -1 ? strerror(errno) : "short write");
2447
2448     /* Now any messages */
2449
2450     for (i = 0, s = addr2->message; i < 2; i++, s = addr2->user_message)
2451       {
2452       int message_length = s ? Ustrlen(s) + 1 : 0;
2453       if(  (ret = write(pfd[pipe_write], &message_length, sizeof(int))) != sizeof(int)
2454         || message_length > 0  && (ret = write(pfd[pipe_write], s, message_length)) != message_length
2455         )
2456         log_write(0, LOG_MAIN|LOG_PANIC, "Failed writing transport results to pipe: %s",
2457           ret == -1 ? strerror(errno) : "short write");
2458       }
2459     }
2460
2461   /* OK, this process is now done. Free any cached resources that it opened,
2462   and close the pipe we were writing down before exiting. */
2463
2464   (void)close(pfd[pipe_write]);
2465   exim_exit(EXIT_SUCCESS);
2466   }
2467
2468 /* Back in the main process: panic if the fork did not succeed. This seems
2469 better than returning an error - if forking is failing it is probably best
2470 not to try other deliveries for this message. */
2471
2472 if (pid < 0)
2473   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Fork failed for local delivery to %s",
2474     addr->address);
2475
2476 /* Read the pipe to get the delivery status codes and error messages. Our copy
2477 of the writing end must be closed first, as otherwise read() won't return zero
2478 on an empty pipe. We check that a status exists for each address before
2479 overwriting the address structure. If data is missing, the default DEFER status
2480 will remain. Afterwards, close the reading end. */
2481
2482 (void)close(pfd[pipe_write]);
2483
2484 for (addr2 = addr; addr2; addr2 = addr2->next)
2485   {
2486   if ((len = read(pfd[pipe_read], &status, sizeof(int))) > 0)
2487     {
2488     int i;
2489     uschar **sptr;
2490
2491     addr2->transport_return = status;
2492     len = read(pfd[pipe_read], &transport_count,
2493       sizeof(transport_count));
2494     len = read(pfd[pipe_read], &addr2->flags, sizeof(addr2->flags));
2495     len = read(pfd[pipe_read], &addr2->basic_errno,    sizeof(int));
2496     len = read(pfd[pipe_read], &addr2->more_errno,     sizeof(int));
2497     len = read(pfd[pipe_read], &addr2->delivery_time,  sizeof(struct timeval));
2498     len = read(pfd[pipe_read], &i, sizeof(int)); addr2->special_action = i;
2499     len = read(pfd[pipe_read], &addr2->transport,
2500       sizeof(transport_instance *));
2501
2502     if (testflag(addr2, af_file))
2503       {
2504       int llen;
2505       if (  read(pfd[pipe_read], &llen, sizeof(int)) != sizeof(int)
2506          || llen > 64*4 /* limit from rfc 5821, times I18N factor */
2507          )
2508         {
2509         log_write(0, LOG_MAIN|LOG_PANIC, "bad local_part length read"
2510           " from delivery subprocess");
2511         break;
2512         }
2513       /* sanity-checked llen so disable the Coverity error */
2514       /* coverity[tainted_data] */
2515       if (read(pfd[pipe_read], big_buffer, llen) != llen)
2516         {
2517         log_write(0, LOG_MAIN|LOG_PANIC, "bad local_part read"
2518           " from delivery subprocess");
2519         break;
2520         }
2521       big_buffer[llen] = 0;
2522       addr2->local_part = string_copy(big_buffer);
2523       }
2524
2525     for (i = 0, sptr = &addr2->message; i < 2; i++, sptr = &addr2->user_message)
2526       {
2527       int message_length;
2528       len = read(pfd[pipe_read], &message_length, sizeof(int));
2529       if (message_length > 0)
2530         {
2531         len = read(pfd[pipe_read], big_buffer, message_length);
2532         big_buffer[big_buffer_size-1] = '\0';           /* guard byte */
2533         if (len > 0) *sptr = string_copy(big_buffer);
2534         }
2535       }
2536     }
2537
2538   else
2539     {
2540     log_write(0, LOG_MAIN|LOG_PANIC, "failed to read delivery status for %s "
2541       "from delivery subprocess", addr2->unique);
2542     break;
2543     }
2544   }
2545
2546 (void)close(pfd[pipe_read]);
2547
2548 /* Unless shadowing, write all successful addresses immediately to the journal
2549 file, to ensure they are recorded asap. For homonymic addresses, use the base
2550 address plus the transport name. Failure to write the journal is panic-worthy,
2551 but don't stop, as it may prove possible subsequently to update the spool file
2552 in order to record the delivery. */
2553
2554 if (!shadowing)
2555   {
2556   for (addr2 = addr; addr2; addr2 = addr2->next)
2557     if (addr2->transport_return == OK)
2558       {
2559       if (testflag(addr2, af_homonym))
2560         sprintf(CS big_buffer, "%.500s/%s\n", addr2->unique + 3, tp->name);
2561       else
2562         sprintf(CS big_buffer, "%.500s\n", addr2->unique);
2563
2564       /* In the test harness, wait just a bit to let the subprocess finish off
2565       any debug output etc first. */
2566
2567       testharness_pause_ms(300);
2568
2569       DEBUG(D_deliver) debug_printf("journalling %s", big_buffer);
2570       len = Ustrlen(big_buffer);
2571       if (write(journal_fd, big_buffer, len) != len)
2572         log_write(0, LOG_MAIN|LOG_PANIC, "failed to update journal for %s: %s",
2573           big_buffer, strerror(errno));
2574       }
2575
2576   /* Ensure the journal file is pushed out to disk. */
2577
2578   if (EXIMfsync(journal_fd) < 0)
2579     log_write(0, LOG_MAIN|LOG_PANIC, "failed to fsync journal: %s",
2580       strerror(errno));
2581   }
2582
2583 /* Wait for the process to finish. If it terminates with a non-zero code,
2584 freeze the message (except for SIGTERM, SIGKILL and SIGQUIT), but leave the
2585 status values of all the addresses as they are. Take care to handle the case
2586 when the subprocess doesn't seem to exist. This has been seen on one system
2587 when Exim was called from an MUA that set SIGCHLD to SIG_IGN. When that
2588 happens, wait() doesn't recognize the termination of child processes. Exim now
2589 resets SIGCHLD to SIG_DFL, but this code should still be robust. */
2590
2591 while ((rc = wait(&status)) != pid)
2592   if (rc < 0 && errno == ECHILD)      /* Process has vanished */
2593     {
2594     log_write(0, LOG_MAIN, "%s transport process vanished unexpectedly",
2595       addr->transport->driver_name);
2596     status = 0;
2597     break;
2598     }
2599
2600 if ((status & 0xffff) != 0)
2601   {
2602   int msb = (status >> 8) & 255;
2603   int lsb = status & 255;
2604   int code = (msb == 0)? (lsb & 0x7f) : msb;
2605   if (msb != 0 || (code != SIGTERM && code != SIGKILL && code != SIGQUIT))
2606     addr->special_action = SPECIAL_FREEZE;
2607   log_write(0, LOG_MAIN|LOG_PANIC, "%s transport process returned non-zero "
2608     "status 0x%04x: %s %d",
2609     addr->transport->driver_name,
2610     status,
2611     msb == 0 ? "terminated by signal" : "exit code",
2612     code);
2613   }
2614
2615 /* If SPECIAL_WARN is set in the top address, send a warning message. */
2616
2617 if (addr->special_action == SPECIAL_WARN)
2618   {
2619   uschar * warn_message = addr->transport->warn_message;
2620   GET_OPTION("quota_warn_message");
2621   if (warn_message)
2622     {
2623     int fd;
2624     pid_t pid;
2625
2626     DEBUG(D_deliver) debug_printf("Warning message requested by transport\n");
2627
2628     if (!(warn_message = expand_string(warn_message)))
2629       log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand \"%s\" (warning "
2630         "message for %s transport): %s", addr->transport->warn_message,
2631         addr->transport->name, expand_string_message);
2632
2633     else if ((pid = child_open_exim(&fd, US"tpt-warning-message")) > 0)
2634       {
2635       FILE * f = fdopen(fd, "wb");
2636       if (errors_reply_to && !contains_header(US"Reply-To", warn_message))
2637         fprintf(f, "Reply-To: %s\n", errors_reply_to);
2638       fprintf(f, "Auto-Submitted: auto-replied\n");
2639       if (!contains_header(US"From", warn_message))
2640         moan_write_from(f);
2641       fprintf(f, "%s", CS warn_message);
2642
2643       /* Close and wait for child process to complete, without a timeout. */
2644
2645       (void)fclose(f);
2646       (void)child_close(pid, 0);
2647       }
2648
2649     addr->special_action = SPECIAL_NONE;
2650     }
2651   }
2652 }
2653
2654
2655
2656
2657 /* Check transport for the given concurrency limit.  Return TRUE if over
2658 the limit (or an expansion failure), else FALSE and if there was a limit,
2659 the key for the hints database used for the concurrency count. */
2660
2661 static BOOL
2662 tpt_parallel_check(transport_instance * tp, address_item * addr, uschar ** key)
2663 {
2664 unsigned max_parallel;
2665
2666 GET_OPTION("max_parallel");
2667 if (!tp->max_parallel) return FALSE;
2668
2669 max_parallel = (unsigned) expand_string_integer(tp->max_parallel, TRUE);
2670 if (expand_string_message)
2671   {
2672   log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand max_parallel option "
2673         "in %s transport (%s): %s", tp->name, addr->address,
2674         expand_string_message);
2675   return TRUE;
2676   }
2677
2678 if (max_parallel > 0)
2679   {
2680   uschar * serialize_key = string_sprintf("tpt-serialize-%s", tp->name);
2681   if (!enq_start(serialize_key, max_parallel))
2682     {
2683     address_item * next;
2684     DEBUG(D_transport)
2685       debug_printf("skipping tpt %s because concurrency limit %u reached\n",
2686                   tp->name, max_parallel);
2687     do
2688       {
2689       next = addr->next;
2690       addr->message = US"concurrency limit reached for transport";
2691       addr->basic_errno = ERRNO_TRETRY;
2692       post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_TRANSPORT, 0);
2693       } while ((addr = next));
2694     return TRUE;
2695     }
2696   *key = serialize_key;
2697   }
2698 return FALSE;
2699 }
2700
2701
2702
2703 /*************************************************
2704 *              Do local deliveries               *
2705 *************************************************/
2706
2707 /* This function processes the list of addresses in addr_local. True local
2708 deliveries are always done one address at a time. However, local deliveries can
2709 be batched up in some cases. Typically this is when writing batched SMTP output
2710 files for use by some external transport mechanism, or when running local
2711 deliveries over LMTP.
2712
2713 Arguments:   None
2714 Returns:     Nothing
2715 */
2716
2717 static void
2718 do_local_deliveries(void)
2719 {
2720 open_db dbblock, * dbm_file = NULL;
2721 time_t now = time(NULL);
2722
2723 /* Loop until we have exhausted the supply of local deliveries */
2724
2725 while (addr_local)
2726   {
2727   struct timeval delivery_start;
2728   struct timeval deliver_time;
2729   address_item *addr2, *addr3, *nextaddr;
2730   int logflags = LOG_MAIN;
2731   int logchar = f.dont_deliver? '*' : '=';
2732   transport_instance *tp;
2733   uschar * serialize_key = NULL;
2734
2735   /* Pick the first undelivered address off the chain */
2736
2737   address_item *addr = addr_local;
2738   addr_local = addr->next;
2739   addr->next = NULL;
2740
2741   DEBUG(D_deliver|D_transport)
2742     debug_printf("--------> %s <--------\n", addr->address);
2743
2744   /* An internal disaster if there is no transport. Should not occur! */
2745
2746   if (!(tp = addr->transport))
2747     {
2748     logflags |= LOG_PANIC;
2749     f.disable_logging = FALSE;  /* Jic */
2750     addr->message = addr->router
2751       ? string_sprintf("No transport set by %s router", addr->router->name)
2752       : US"No transport set by system filter";
2753     post_process_one(addr, DEFER, logflags, EXIM_DTYPE_TRANSPORT, 0);
2754     continue;
2755     }
2756
2757   /* Check that this base address hasn't previously been delivered to this
2758   transport. The check is necessary at this point to handle homonymic addresses
2759   correctly in cases where the pattern of redirection changes between delivery
2760   attempts. Non-homonymic previous delivery is detected earlier, at routing
2761   time. */
2762
2763   if (previously_transported(addr, FALSE)) continue;
2764
2765   /* There are weird cases where logging is disabled */
2766
2767   f.disable_logging = tp->disable_logging;
2768
2769   /* Check for batched addresses and possible amalgamation. Skip all the work
2770   if either batch_max <= 1 or there aren't any other addresses for local
2771   delivery. */
2772
2773   if (tp->batch_max > 1 && addr_local)
2774     {
2775     int batch_count = 1;
2776     BOOL uses_dom = readconf_depends((driver_instance *)tp, US"domain");
2777     BOOL uses_lp = (  testflag(addr, af_pfr)
2778                    && (testflag(addr, af_file) || addr->local_part[0] == '|')
2779                    )
2780                 || readconf_depends((driver_instance *)tp, US"local_part");
2781     uschar *batch_id = NULL;
2782     address_item **anchor = &addr_local;
2783     address_item *last = addr;
2784     address_item *next;
2785
2786     /* Expand the batch_id string for comparison with other addresses.
2787     Expansion failure suppresses batching. */
2788
2789     GET_OPTION("batch_id");
2790     if (tp->batch_id)
2791       {
2792       deliver_set_expansions(addr);
2793       batch_id = expand_string(tp->batch_id);
2794       deliver_set_expansions(NULL);
2795       if (!batch_id)
2796         {
2797         log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand batch_id option "
2798           "in %s transport (%s): %s", tp->name, addr->address,
2799           expand_string_message);
2800         batch_count = tp->batch_max;
2801         }
2802       }
2803
2804     /* Until we reach the batch_max limit, pick off addresses which have the
2805     same characteristics. These are:
2806
2807       same transport
2808       not previously delivered (see comment about 50 lines above)
2809       same local part if the transport's configuration contains $local_part
2810         or if this is a file or pipe delivery from a redirection
2811       same domain if the transport's configuration contains $domain
2812       same errors address
2813       same additional headers
2814       same headers to be removed
2815       same uid/gid for running the transport
2816       same first host if a host list is set
2817     */
2818
2819     while ((next = *anchor) && batch_count < tp->batch_max)
2820       {
2821       BOOL ok =
2822            tp == next->transport
2823         && !previously_transported(next, TRUE)
2824         && testflag(addr, af_pfr) == testflag(next, af_pfr)
2825         && testflag(addr, af_file) == testflag(next, af_file)
2826         && (!uses_lp  || Ustrcmp(next->local_part, addr->local_part) == 0)
2827         && (!uses_dom || Ustrcmp(next->domain, addr->domain) == 0)
2828         && same_strings(next->prop.errors_address, addr->prop.errors_address)
2829         && same_headers(next->prop.extra_headers, addr->prop.extra_headers)
2830         && same_strings(next->prop.remove_headers, addr->prop.remove_headers)
2831         && same_ugid(tp, addr, next)
2832         && (  !addr->host_list && !next->host_list
2833            ||    addr->host_list
2834               && next->host_list
2835               && Ustrcmp(addr->host_list->name, next->host_list->name) == 0
2836            );
2837
2838       /* If the transport has a batch_id setting, batch_id will be non-NULL
2839       from the expansion outside the loop. Expand for this address and compare.
2840       Expansion failure makes this address ineligible for batching. */
2841
2842       if (ok && batch_id)
2843         {
2844         uschar * bid;
2845         address_item * save_nextnext = next->next;
2846         next->next = NULL;            /* Expansion for a single address */
2847         deliver_set_expansions(next);
2848         next->next = save_nextnext;
2849         GET_OPTION("batch_id");
2850         bid = expand_string(tp->batch_id);
2851         deliver_set_expansions(NULL);
2852         if (!bid)
2853           {
2854           log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand batch_id option "
2855             "in %s transport (%s): %s", tp->name, next->address,
2856             expand_string_message);
2857           ok = FALSE;
2858           }
2859         else ok = (Ustrcmp(batch_id, bid) == 0);
2860         }
2861
2862       /* Take address into batch if OK. */
2863
2864       if (ok)
2865         {
2866         *anchor = next->next;           /* Include the address */
2867         next->next = NULL;
2868         last->next = next;
2869         last = next;
2870         batch_count++;
2871         }
2872       else anchor = &next->next;        /* Skip the address */
2873       }
2874     }
2875
2876   /* We now have one or more addresses that can be delivered in a batch. Check
2877   whether the transport is prepared to accept a message of this size. If not,
2878   fail them all forthwith. If the expansion fails, or does not yield an
2879   integer, defer delivery. */
2880
2881   if (tp->message_size_limit)
2882     {
2883     int rc = check_message_size(tp, addr);
2884     if (rc != OK)
2885       {
2886       replicate_status(addr);
2887       while (addr)
2888         {
2889         addr2 = addr->next;
2890         post_process_one(addr, rc, logflags, EXIM_DTYPE_TRANSPORT, 0);
2891         addr = addr2;
2892         }
2893       continue;    /* With next batch of addresses */
2894       }
2895     }
2896
2897   /* If we are not running the queue, or if forcing, all deliveries will be
2898   attempted. Otherwise, we must respect the retry times for each address. Even
2899   when not doing this, we need to set up the retry key string, and determine
2900   whether a retry record exists, because after a successful delivery, a delete
2901   retry item must be set up. Keep the retry database open only for the duration
2902   of these checks, rather than for all local deliveries, because some local
2903   deliveries (e.g. to pipes) can take a substantial time. */
2904
2905   if (!(dbm_file = dbfn_open(US"retry", O_RDONLY, &dbblock, FALSE, TRUE)))
2906     DEBUG(D_deliver|D_retry|D_hints_lookup)
2907       debug_printf("no retry data available\n");
2908
2909   addr2 = addr;
2910   addr3 = NULL;
2911   while (addr2)
2912     {
2913     BOOL ok = TRUE;   /* to deliver this address */
2914     uschar *retry_key;
2915
2916     /* Set up the retry key to include the domain or not, and change its
2917     leading character from "R" to "T". Must make a copy before doing this,
2918     because the old key may be pointed to from a "delete" retry item after
2919     a routing delay. */
2920
2921     retry_key = string_copy(
2922       tp->retry_use_local_part ? addr2->address_retry_key :
2923         addr2->domain_retry_key);
2924     *retry_key = 'T';
2925
2926     /* Inspect the retry data. If there is no hints file, delivery happens. */
2927
2928     if (dbm_file)
2929       {
2930       dbdata_retry *retry_record = dbfn_read(dbm_file, retry_key);
2931
2932       /* If there is no retry record, delivery happens. If there is,
2933       remember it exists so it can be deleted after a successful delivery. */
2934
2935       if (retry_record)
2936         {
2937         setflag(addr2, af_lt_retry_exists);
2938
2939         /* A retry record exists for this address. If queue running and not
2940         forcing, inspect its contents. If the record is too old, or if its
2941         retry time has come, or if it has passed its cutoff time, delivery
2942         will go ahead. */
2943
2944         DEBUG(D_retry)
2945           {
2946           debug_printf("retry record exists: age=%s ",
2947             readconf_printtime(now - retry_record->time_stamp));
2948           debug_printf("(max %s)\n", readconf_printtime(retry_data_expire));
2949           debug_printf("  time to retry = %s expired = %d\n",
2950             readconf_printtime(retry_record->next_try - now),
2951             retry_record->expired);
2952           }
2953
2954         if (f.queue_running && !f.deliver_force)
2955           {
2956           ok = (now - retry_record->time_stamp > retry_data_expire)
2957             || (now >= retry_record->next_try)
2958             || retry_record->expired;
2959
2960           /* If we haven't reached the retry time, there is one more check
2961           to do, which is for the ultimate address timeout. */
2962
2963           if (!ok)
2964             ok = retry_ultimate_address_timeout(retry_key, addr2->domain,
2965                 retry_record, now);
2966           }
2967         }
2968       else DEBUG(D_retry) debug_printf("no retry record exists\n");
2969       }
2970
2971     /* This address is to be delivered. Leave it on the chain. */
2972
2973     if (ok)
2974       {
2975       addr3 = addr2;
2976       addr2 = addr2->next;
2977       }
2978
2979     /* This address is to be deferred. Take it out of the chain, and
2980     post-process it as complete. Must take it out of the chain first,
2981     because post processing puts it on another chain. */
2982
2983     else
2984       {
2985       address_item *this = addr2;
2986       this->message = US"Retry time not yet reached";
2987       this->basic_errno = ERRNO_LRETRY;
2988       addr2 = addr3 ? (addr3->next = addr2->next)
2989                     : (addr = addr2->next);
2990       post_process_one(this, DEFER, logflags, EXIM_DTYPE_TRANSPORT, 0);
2991       }
2992     }
2993
2994   if (dbm_file) dbfn_close(dbm_file);
2995
2996   /* If there are no addresses left on the chain, they all deferred. Loop
2997   for the next set of addresses. */
2998
2999   if (!addr) continue;
3000
3001   /* If the transport is limited for parallellism, enforce that here.
3002   We use a hints DB entry, incremented here and decremented after
3003   the transport (and any shadow transport) completes. */
3004
3005   if (tpt_parallel_check(tp, addr, &serialize_key))
3006     {
3007     if (expand_string_message)
3008       {
3009       logflags |= LOG_PANIC;
3010       do
3011         {
3012         addr = addr->next;
3013         post_process_one(addr, DEFER, logflags, EXIM_DTYPE_TRANSPORT, 0);
3014         } while ((addr = addr2));
3015       }
3016     continue;                   /* Loop for the next set of addresses. */
3017     }
3018
3019
3020   /* So, finally, we do have some addresses that can be passed to the
3021   transport. Before doing so, set up variables that are relevant to a
3022   single delivery. */
3023
3024   deliver_set_expansions(addr);
3025
3026   gettimeofday(&delivery_start, NULL);
3027   deliver_local(addr, FALSE);
3028   timesince(&deliver_time, &delivery_start);
3029
3030   /* If a shadow transport (which must perforce be another local transport), is
3031   defined, and its condition is met, we must pass the message to the shadow
3032   too, but only those addresses that succeeded. We do this by making a new
3033   chain of addresses - also to keep the original chain uncontaminated. We must
3034   use a chain rather than doing it one by one, because the shadow transport may
3035   batch.
3036
3037   NOTE: if the condition fails because of a lookup defer, there is nothing we
3038   can do! */
3039
3040   if (  tp->shadow
3041      && (  !tp->shadow_condition
3042         || expand_check_condition(tp->shadow_condition, tp->name, US"transport")
3043      )  )
3044     {
3045     transport_instance *stp;
3046     address_item *shadow_addr = NULL;
3047     address_item **last = &shadow_addr;
3048
3049     for (stp = transports; stp; stp = stp->next)
3050       if (Ustrcmp(stp->name, tp->shadow) == 0) break;
3051
3052     if (!stp)
3053       log_write(0, LOG_MAIN|LOG_PANIC, "shadow transport \"%s\" not found ",
3054         tp->shadow);
3055
3056     /* Pick off the addresses that have succeeded, and make clones. Put into
3057     the shadow_message field a pointer to the shadow_message field of the real
3058     address. */
3059
3060     else for (addr2 = addr; addr2; addr2 = addr2->next)
3061       if (addr2->transport_return == OK)
3062         {
3063         addr3 = store_get(sizeof(address_item), GET_UNTAINTED);
3064         *addr3 = *addr2;
3065         addr3->next = NULL;
3066         addr3->shadow_message = US &addr2->shadow_message;
3067         addr3->transport = stp;
3068         addr3->transport_return = DEFER;
3069         addr3->return_filename = NULL;
3070         addr3->return_file = -1;
3071         *last = addr3;
3072         last = &addr3->next;
3073         }
3074
3075     /* If we found any addresses to shadow, run the delivery, and stick any
3076     message back into the shadow_message field in the original. */
3077
3078     if (shadow_addr)
3079       {
3080       int save_count = transport_count;
3081
3082       DEBUG(D_deliver|D_transport)
3083         debug_printf(">>>>>>>>>>>>>>>> Shadow delivery >>>>>>>>>>>>>>>>\n");
3084       deliver_local(shadow_addr, TRUE);
3085
3086       for(; shadow_addr; shadow_addr = shadow_addr->next)
3087         {
3088         int sresult = shadow_addr->transport_return;
3089         *(uschar **)shadow_addr->shadow_message =
3090           sresult == OK
3091           ? string_sprintf(" ST=%s", stp->name)
3092           : string_sprintf(" ST=%s (%s%s%s)", stp->name,
3093               shadow_addr->basic_errno <= 0
3094               ? US""
3095               : US strerror(shadow_addr->basic_errno),
3096               shadow_addr->basic_errno <= 0 || !shadow_addr->message
3097               ? US""
3098               : US": ",
3099               shadow_addr->message
3100               ? shadow_addr->message
3101               : shadow_addr->basic_errno <= 0
3102               ? US"unknown error"
3103               : US"");
3104
3105         DEBUG(D_deliver|D_transport)
3106           debug_printf("%s shadow transport returned %s for %s\n",
3107             stp->name, rc_to_string(sresult), shadow_addr->address);
3108         }
3109
3110       DEBUG(D_deliver|D_transport)
3111         debug_printf(">>>>>>>>>>>>>>>> End shadow delivery >>>>>>>>>>>>>>>>\n");
3112
3113       transport_count = save_count;   /* Restore original transport count */
3114       }
3115     }
3116
3117   /* Cancel the expansions that were set up for the delivery. */
3118
3119   deliver_set_expansions(NULL);
3120
3121   /* If the transport was parallelism-limited, decrement the hints DB record. */
3122
3123   if (serialize_key) enq_end(serialize_key);
3124
3125   /* Now we can process the results of the real transport. We must take each
3126   address off the chain first, because post_process_one() puts it on another
3127   chain. */
3128
3129   for (addr2 = addr; addr2; addr2 = nextaddr)
3130     {
3131     int result = addr2->transport_return;
3132     nextaddr = addr2->next;
3133
3134     DEBUG(D_deliver|D_transport)
3135       debug_printf("%s transport returned %s for %s\n",
3136         tp->name, rc_to_string(result), addr2->address);
3137
3138     /* If there is a retry_record, or if delivery is deferred, build a retry
3139     item for setting a new retry time or deleting the old retry record from
3140     the database. These items are handled all together after all addresses
3141     have been handled (so the database is open just for a short time for
3142     updating). */
3143
3144     if (result == DEFER || testflag(addr2, af_lt_retry_exists))
3145       {
3146       int flags = result == DEFER ? 0 : rf_delete;
3147       uschar * retry_key = string_copy(tp->retry_use_local_part
3148         ? addr2->address_retry_key : addr2->domain_retry_key);
3149       *retry_key = 'T';
3150       retry_add_item(addr2, retry_key, flags);
3151       }
3152
3153     /* Done with this address */
3154
3155     addr2->delivery_time = deliver_time;
3156     post_process_one(addr2, result, logflags, EXIM_DTYPE_TRANSPORT, logchar);
3157
3158     /* If a pipe delivery generated text to be sent back, the result may be
3159     changed to FAIL, and we must copy this for subsequent addresses in the
3160     batch. */
3161
3162     if (addr2->transport_return != result)
3163       {
3164       for (addr3 = nextaddr; addr3; addr3 = addr3->next)
3165         {
3166         addr3->transport_return = addr2->transport_return;
3167         addr3->basic_errno = addr2->basic_errno;
3168         addr3->message = addr2->message;
3169         }
3170       result = addr2->transport_return;
3171       }
3172
3173     /* Whether or not the result was changed to FAIL, we need to copy the
3174     return_file value from the first address into all the addresses of the
3175     batch, so they are all listed in the error message. */
3176
3177     addr2->return_file = addr->return_file;
3178
3179     /* Change log character for recording successful deliveries. */
3180
3181     if (result == OK) logchar = '-';
3182     }
3183   }        /* Loop back for next batch of addresses */
3184 }
3185
3186
3187
3188
3189 /*************************************************
3190 *           Sort remote deliveries               *
3191 *************************************************/
3192
3193 /* This function is called if remote_sort_domains is set. It arranges that the
3194 chain of addresses for remote deliveries is ordered according to the strings
3195 specified. Try to make this shuffling reasonably efficient by handling
3196 sequences of addresses rather than just single ones.
3197
3198 Arguments:  None
3199 Returns:    Nothing
3200 */
3201
3202 static void
3203 sort_remote_deliveries(void)
3204 {
3205 int sep = 0;
3206 address_item **aptr = &addr_remote;
3207 const uschar *listptr = remote_sort_domains;
3208 uschar *pattern;
3209 uschar patbuf[256];
3210
3211 /*XXX The list is used before expansion. Not sure how that ties up with the docs */
3212 while (  *aptr
3213       && (pattern = string_nextinlist(&listptr, &sep, patbuf, sizeof(patbuf)))
3214       )
3215   {
3216   address_item *moved = NULL;
3217   address_item **bptr = &moved;
3218
3219   while (*aptr)
3220     {
3221     address_item **next;
3222     deliver_domain = (*aptr)->domain;   /* set $domain */
3223     if (match_isinlist(deliver_domain, (const uschar **)&pattern, UCHAR_MAX+1,
3224           &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK)
3225       {
3226       aptr = &(*aptr)->next;
3227       continue;
3228       }
3229
3230     next = &(*aptr)->next;
3231     while (  *next
3232           && (deliver_domain = (*next)->domain,  /* Set $domain */
3233             match_isinlist(deliver_domain, (const uschar **)&pattern, UCHAR_MAX+1,
3234               &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL)) != OK
3235           )
3236       next = &(*next)->next;
3237
3238     /* If the batch of non-matchers is at the end, add on any that were
3239     extracted further up the chain, and end this iteration. Otherwise,
3240     extract them from the chain and hang on the moved chain. */
3241
3242     if (!*next)
3243       {
3244       *next = moved;
3245       break;
3246       }
3247
3248     *bptr = *aptr;
3249     *aptr = *next;
3250     *next = NULL;
3251     bptr = next;
3252     aptr = &(*aptr)->next;
3253     }
3254
3255   /* If the loop ended because the final address matched, *aptr will
3256   be NULL. Add on to the end any extracted non-matching addresses. If
3257   *aptr is not NULL, the loop ended via "break" when *next is null, that
3258   is, there was a string of non-matching addresses at the end. In this
3259   case the extracted addresses have already been added on the end. */
3260
3261   if (!*aptr) *aptr = moved;
3262   }
3263
3264 DEBUG(D_deliver)
3265   {
3266   debug_printf("remote addresses after sorting:\n");
3267   for (address_item * addr = addr_remote; addr; addr = addr->next)
3268     debug_printf("  %s\n", addr->address);
3269   }
3270 }
3271
3272
3273
3274 /*************************************************
3275 *  Read from pipe for remote delivery subprocess *
3276 *************************************************/
3277
3278 /* This function is called when the subprocess is complete, but can also be
3279 called before it is complete, in order to empty a pipe that is full (to prevent
3280 deadlock). It must therefore keep track of its progress in the parlist data
3281 block.
3282
3283 We read the pipe to get the delivery status codes and a possible error message
3284 for each address, optionally preceded by unusability data for the hosts and
3285 also by optional retry data.
3286
3287 Read in large chunks into the big buffer and then scan through, interpreting
3288 the data therein. In most cases, only a single read will be necessary. No
3289 individual item will ever be anywhere near 2500 bytes in length, so by ensuring
3290 that we read the next chunk when there is less than 2500 bytes left in the
3291 non-final chunk, we can assume each item is complete in the buffer before
3292 handling it. Each item is written using a single write(), which is atomic for
3293 small items (less than PIPE_BUF, which seems to be at least 512 in any Unix and
3294 often bigger) so even if we are reading while the subprocess is still going, we
3295 should never have only a partial item in the buffer.
3296
3297 hs12: This assumption is not true anymore, since we get quite large items (certificate
3298 information and such).
3299
3300 Argument:
3301   poffset     the offset of the parlist item
3302   eop         TRUE if the process has completed
3303
3304 Returns:      TRUE if the terminating 'Z' item has been read,
3305               or there has been a disaster (i.e. no more data needed);
3306               FALSE otherwise
3307 */
3308
3309 static BOOL
3310 par_read_pipe(int poffset, BOOL eop)
3311 {
3312 host_item *h;
3313 pardata *p = parlist + poffset;
3314 address_item *addrlist = p->addrlist;
3315 address_item *addr = p->addr;
3316 pid_t pid = p->pid;
3317 int fd = p->fd;
3318
3319 uschar *msg = p->msg;
3320 BOOL done = p->done;
3321
3322 /* Loop through all items, reading from the pipe when necessary. The pipe
3323 used to be non-blocking. But I do not see a reason for using non-blocking I/O
3324 here, as the preceding poll() tells us, if data is available for reading.
3325
3326 A read() on a "selected" handle should never block, but(!) it may return
3327 less data then we expected. (The buffer size we pass to read() shouldn't be
3328 understood as a "request", but as a "limit".)
3329
3330 Each separate item is written to the pipe in a timely manner. But, especially for
3331 larger items, the read(2) may already return partial data from the write(2).
3332
3333 The write is atomic mostly (depending on the amount written), but atomic does
3334 not imply "all or noting", it just is "not intermixed" with other writes on the
3335 same channel (pipe).
3336
3337 */
3338
3339 DEBUG(D_deliver) debug_printf("reading pipe for subprocess %d (%s)\n",
3340   (int)p->pid, eop? "ended" : "not ended yet");
3341
3342 while (!done)
3343   {
3344   retry_item *r, **rp;
3345   uschar pipeheader[PIPE_HEADER_SIZE+1];
3346   uschar *id = &pipeheader[0];
3347   uschar *subid = &pipeheader[1];
3348   uschar *ptr = big_buffer;
3349   size_t required = PIPE_HEADER_SIZE; /* first the pipehaeder, later the data */
3350   ssize_t got;
3351
3352   DEBUG(D_deliver) debug_printf(
3353     "expect %lu bytes (pipeheader) from tpt process %d\n", (u_long)required, pid);
3354
3355   /* We require(!) all the PIPE_HEADER_SIZE bytes here, as we know,
3356   they're written in a timely manner, so waiting for the write shouldn't hurt a lot.
3357   If we get less, we can assume the subprocess do be done and do not expect any further
3358   information from it. */
3359
3360   if ((got = readn(fd, pipeheader, required)) != required)
3361     {
3362     msg = string_sprintf("got " SSIZE_T_FMT " of %d bytes (pipeheader) "
3363       "from transport process %d for transport %s",
3364       got, PIPE_HEADER_SIZE, pid, addr->transport->driver_name);
3365     done = TRUE;
3366     break;
3367     }
3368
3369   pipeheader[PIPE_HEADER_SIZE] = '\0';
3370   DEBUG(D_deliver)
3371     debug_printf("got %ld bytes (pipeheader) '%c' from transport process %d\n",
3372       (long) got, *id, pid);
3373
3374   {
3375   /* If we can't decode the pipeheader, the subprocess seems to have a
3376   problem, we do not expect any furher information from it. */
3377   char *endc;
3378   required = Ustrtol(pipeheader+2, &endc, 10);
3379   if (*endc)
3380     {
3381     msg = string_sprintf("failed to read pipe "
3382       "from transport process %d for transport %s: error decoding size from header",
3383       pid, addr->transport->driver_name);
3384     done = TRUE;
3385     break;
3386     }
3387   }
3388
3389   DEBUG(D_deliver)
3390     debug_printf("expect %lu bytes (pipedata) from transport process %d\n",
3391       (u_long)required, pid);
3392
3393   /* Same as above, the transport process will write the bytes announced
3394   in a timely manner, so we can just wait for the bytes, getting less than expected
3395   is considered a problem of the subprocess, we do not expect anything else from it. */
3396   if ((got = readn(fd, big_buffer, required)) != required)
3397     {
3398     msg = string_sprintf("got only " SSIZE_T_FMT " of " SIZE_T_FMT
3399       " bytes (pipedata) from transport process %d for transport %s",
3400       got, required, pid, addr->transport->driver_name);
3401     done = TRUE;
3402     break;
3403     }
3404
3405   /* Handle each possible type of item, assuming the complete item is
3406   available in store. */
3407
3408   switch (*id)
3409     {
3410     /* Host items exist only if any hosts were marked unusable. Match
3411     up by checking the IP address. */
3412
3413     case 'H':
3414       for (h = addrlist->host_list; h; h = h->next)
3415         {
3416         if (!h->address || Ustrcmp(h->address, ptr+2) != 0) continue;
3417         h->status = ptr[0];
3418         h->why = ptr[1];
3419         }
3420       ptr += 2;
3421       while (*ptr++);
3422       break;
3423
3424     /* Retry items are sent in a preceding R item for each address. This is
3425     kept separate to keep each message short enough to guarantee it won't
3426     be split in the pipe. Hopefully, in the majority of cases, there won't in
3427     fact be any retry items at all.
3428
3429     The complete set of retry items might include an item to delete a
3430     routing retry if there was a previous routing delay. However, routing
3431     retries are also used when a remote transport identifies an address error.
3432     In that case, there may also be an "add" item for the same key. Arrange
3433     that a "delete" item is dropped in favour of an "add" item. */
3434
3435     case 'R':
3436       if (!addr) goto ADDR_MISMATCH;
3437
3438       DEBUG(D_deliver|D_retry)
3439         debug_printf("reading retry information for %s from subprocess\n",
3440           ptr+1);
3441
3442       /* Cut out any "delete" items on the list. */
3443
3444       for (rp = &addr->retries; (r = *rp); rp = &r->next)
3445         if (Ustrcmp(r->key, ptr+1) == 0)           /* Found item with same key */
3446           {
3447           if (!(r->flags & rf_delete)) break;      /* It was not "delete" */
3448           *rp = r->next;                           /* Excise a delete item */
3449           DEBUG(D_deliver|D_retry)
3450             debug_printf("  existing delete item dropped\n");
3451           }
3452
3453       /* We want to add a delete item only if there is no non-delete item;
3454       however we still have to step ptr through the data. */
3455
3456       if (!r || !(*ptr & rf_delete))
3457         {
3458         r = store_get(sizeof(retry_item), GET_UNTAINTED);
3459         r->next = addr->retries;
3460         addr->retries = r;
3461         r->flags = *ptr++;
3462         r->key = string_copy(ptr);
3463         while (*ptr++);
3464         memcpy(&r->basic_errno, ptr, sizeof(r->basic_errno));
3465         ptr += sizeof(r->basic_errno);
3466         memcpy(&r->more_errno, ptr, sizeof(r->more_errno));
3467         ptr += sizeof(r->more_errno);
3468         r->message = *ptr ? string_copy(ptr) : NULL;
3469         DEBUG(D_deliver|D_retry) debug_printf("  added %s item\n",
3470             r->flags & rf_delete ? "delete" : "retry");
3471         }
3472
3473       else
3474         {
3475         DEBUG(D_deliver|D_retry)
3476           debug_printf("  delete item not added: non-delete item exists\n");
3477         ptr++;
3478         while(*ptr++);
3479         ptr += sizeof(r->basic_errno) + sizeof(r->more_errno);
3480         }
3481
3482       while(*ptr++);
3483       break;
3484
3485     /* Put the amount of data written into the parlist block */
3486
3487     case 'S':           /* Size */
3488       memcpy(&(p->transport_count), ptr, sizeof(transport_count));
3489       ptr += sizeof(transport_count);
3490       break;
3491
3492     /* Address items are in the order of items on the address chain. We
3493     remember the current address value in case this function is called
3494     several times to empty the pipe in stages. Information about delivery
3495     over TLS is sent in a preceding X item for each address. We don't put
3496     it in with the other info, in order to keep each message short enough to
3497     guarantee it won't be split in the pipe. */
3498
3499 #ifndef DISABLE_TLS
3500     case 'X':           /* TLS details */
3501       if (!addr) goto ADDR_MISMATCH;          /* Below, in 'A' handler */
3502       switch (*subid)
3503         {
3504         case '1':
3505           addr->tlsver = addr->cipher = addr->peerdn = NULL;
3506
3507           if (*ptr)
3508             {
3509             addr->cipher = string_copy(ptr);
3510             addr->tlsver = string_copyn(ptr, Ustrchr(ptr, ':') - ptr);
3511             }
3512           while (*ptr++);
3513           if (*ptr)
3514             addr->peerdn = string_copy(ptr);
3515           break;
3516
3517         case '2':
3518           if (*ptr)
3519             (void) tls_import_cert(ptr, &addr->peercert);
3520           else
3521             addr->peercert = NULL;
3522           break;
3523
3524         case '3':
3525           if (*ptr)
3526             (void) tls_import_cert(ptr, &addr->ourcert);
3527           else
3528             addr->ourcert = NULL;
3529           break;
3530
3531 # ifndef DISABLE_OCSP
3532         case '4':
3533           addr->ocsp = *ptr ? *ptr - '0' : OCSP_NOT_REQ;
3534           break;
3535 # endif
3536         }
3537       while (*ptr++);
3538       break;
3539 #endif  /*DISABLE_TLS*/
3540
3541     case 'C':   /* client authenticator information */
3542       switch (*subid)
3543         {
3544         case '1': addr->authenticator = *ptr ? string_copy(ptr) : NULL; break;
3545         case '2': addr->auth_id = *ptr ? string_copy(ptr) : NULL;       break;
3546         case '3': addr->auth_sndr = *ptr ? string_copy(ptr) : NULL;     break;
3547         }
3548       while (*ptr++);
3549       break;
3550
3551 #ifndef DISABLE_PRDR
3552     case 'P':
3553       setflag(addr, af_prdr_used);
3554       break;
3555 #endif
3556
3557     case 'L':
3558       switch (*subid)
3559         {
3560 #ifndef DISABLE_PIPE_CONNECT
3561         case 2: setflag(addr, af_early_pipe);   /*FALLTHROUGH*/
3562 #endif
3563         case 1: setflag(addr, af_pipelining); break;
3564         }
3565       break;
3566
3567     case 'K':
3568       setflag(addr, af_chunking_used);
3569       break;
3570
3571     case 'T':
3572       setflag(addr, af_tcp_fastopen_conn);
3573       if (*subid > '0') setflag(addr, af_tcp_fastopen);
3574       if (*subid > '1') setflag(addr, af_tcp_fastopen_data);
3575       break;
3576
3577     case 'D':           /* DSN */
3578       if (!addr) goto ADDR_MISMATCH;
3579       memcpy(&(addr->dsn_aware), ptr, sizeof(addr->dsn_aware));
3580       ptr += sizeof(addr->dsn_aware);
3581       DEBUG(D_deliver) debug_printf("DSN read: addr->dsn_aware = %d\n", addr->dsn_aware);
3582       break;
3583
3584     case 'A':           /* Per-address info */
3585       if (!addr)
3586         {
3587         ADDR_MISMATCH:
3588         msg = string_sprintf("address count mismatch for data read from pipe "
3589           "for transport process %d for transport %s", pid,
3590             addrlist->transport->driver_name);
3591         done = TRUE;
3592         break;
3593         }
3594
3595       switch (*subid)
3596         {
3597 #ifndef DISABLE_DKIM
3598         case '4':       /* DKIM information */
3599           addr->dkim_used = string_copy(ptr);
3600           while(*ptr++);
3601           break;
3602 #endif
3603
3604         case '3':       /* explicit notification of continued-connection (non)use;
3605                         overrides caller's knowlege. */
3606           if (*ptr & BIT(1))      setflag(addr, af_new_conn);
3607           else if (*ptr & BIT(2)) setflag(addr, af_cont_conn);
3608           break;
3609
3610 #ifdef SUPPORT_SOCKS
3611         case '2':       /* proxy information; must arrive before A0 and applies to that addr XXX oops*/
3612           proxy_session = TRUE; /*XXX should this be cleared somewhere? */
3613           if (*ptr == 0)
3614             ptr++;
3615           else
3616             {
3617             proxy_local_address = string_copy(ptr);
3618             while(*ptr++);
3619             memcpy(&proxy_local_port, ptr, sizeof(proxy_local_port));
3620             ptr += sizeof(proxy_local_port);
3621             }
3622           break;
3623 #endif
3624
3625 #ifdef EXPERIMENTAL_DSN_INFO
3626         case '1':       /* must arrive before A0, and applies to that addr */
3627                         /* Two strings: smtp_greeting and helo_response */
3628           addr->smtp_greeting = string_copy(ptr);
3629           while(*ptr++);
3630           addr->helo_response = string_copy(ptr);
3631           while(*ptr++);
3632           break;
3633 #endif
3634
3635         case '0':       /* results of trying to send to this address */
3636           DEBUG(D_deliver) debug_printf("A0 %s tret %d\n", addr->address, *ptr);
3637           addr->transport_return = *ptr++;
3638           addr->special_action = *ptr++;
3639           memcpy(&addr->basic_errno, ptr, sizeof(addr->basic_errno));
3640           ptr += sizeof(addr->basic_errno);
3641           memcpy(&addr->more_errno, ptr, sizeof(addr->more_errno));
3642           ptr += sizeof(addr->more_errno);
3643           memcpy(&addr->delivery_time, ptr, sizeof(addr->delivery_time));
3644           ptr += sizeof(addr->delivery_time);
3645           memcpy(&addr->flags, ptr, sizeof(addr->flags));
3646           ptr += sizeof(addr->flags);
3647           addr->message = *ptr ? string_copy(ptr) : NULL;
3648           while(*ptr++);
3649           addr->user_message = *ptr ? string_copy(ptr) : NULL;
3650           while(*ptr++);
3651
3652           /* Always two strings for host information, followed by the port number and DNSSEC mark */
3653
3654           if (*ptr)
3655             {
3656             h = store_get(sizeof(host_item), GET_UNTAINTED);
3657             h->name = string_copy(ptr);
3658             while (*ptr++);
3659             h->address = string_copy(ptr);
3660             while(*ptr++);
3661             memcpy(&h->port, ptr, sizeof(h->port));
3662             ptr += sizeof(h->port);
3663             h->dnssec = *ptr == '2' ? DS_YES
3664                       : *ptr == '1' ? DS_NO
3665                       : DS_UNK;
3666             ptr++;
3667             addr->host_used = h;
3668             }
3669           else ptr++;
3670
3671           /* Finished with this address */
3672
3673           addr = addr->next;
3674           break;
3675         }
3676       break;
3677
3678     /* Local interface address/port */
3679     case 'I':
3680       if (*ptr) sending_ip_address = string_copy(ptr);
3681       while (*ptr++) ;
3682       if (*ptr) sending_port = atoi(CS ptr);
3683       while (*ptr++) ;
3684       break;
3685
3686     /* Z0 marks the logical end of the data. It is followed by '0' if
3687     continue_transport was NULL at the end of transporting, otherwise '1'.
3688     We need to know when it becomes NULL during a delivery down a passed SMTP
3689     channel so that we don't try to pass anything more down it. Of course, for
3690     most normal messages it will remain NULL all the time.
3691
3692     Z1 is a suggested message_id to handle next, used during a
3693     continued-transport sequence. */
3694
3695     case 'Z':
3696       switch (*subid)
3697         {
3698         case '0':
3699           if (*ptr == '0')
3700             {
3701             continue_transport = NULL;
3702             continue_hostname = NULL;
3703             }
3704           done = TRUE;
3705           DEBUG(D_deliver) debug_printf("Z0%c item read\n", *ptr);
3706           break;
3707         case '1':
3708           if (continue_hostname)
3709             {
3710             Ustrncpy(continue_next_id, ptr, MESSAGE_ID_LENGTH);
3711             continue_sequence++;
3712             }
3713           DEBUG(D_deliver) debug_printf("continue_next_id: %s%s\n",
3714             continue_next_id, continue_hostname ? "" : " (ignored)");
3715           break;
3716         }
3717       break;
3718
3719     /* Anything else is a disaster. */
3720
3721     default:
3722       msg = string_sprintf("malformed data (%d) read from pipe for transport "
3723         "process %d for transport %s", ptr[-1], pid,
3724           addr->transport->driver_name);
3725       done = TRUE;
3726       break;
3727     }
3728   }
3729
3730 /* The done flag is inspected externally, to determine whether or not to
3731 call the function again when the process finishes. */
3732
3733 p->done = done;
3734
3735 /* If the process hadn't finished, and we haven't seen the end of the data
3736 or if we suffered a disaster, update the rest of the state, and return FALSE to
3737 indicate "not finished". */
3738
3739 if (!eop && !done)
3740   {
3741   p->addr = addr;
3742   p->msg = msg;
3743   return FALSE;
3744   }
3745
3746 /* Close our end of the pipe, to prevent deadlock if the far end is still
3747 pushing stuff into it. */
3748
3749 (void)close(fd);
3750 p->fd = -1;
3751
3752 /* If we have finished without error, but haven't had data for every address,
3753 something is wrong. */
3754
3755 if (!msg && addr)
3756   msg = string_sprintf("insufficient address data read from pipe "
3757     "for transport process %d for transport %s", pid,
3758       addr->transport->driver_name);
3759
3760 /* If an error message is set, something has gone wrong in getting back
3761 the delivery data. Put the message into each address and freeze it. */
3762
3763 if (msg)
3764   for (addr = addrlist; addr; addr = addr->next)
3765     {
3766     addr->transport_return = DEFER;
3767     addr->special_action = SPECIAL_FREEZE;
3768     addr->message = msg;
3769     log_write(0, LOG_MAIN|LOG_PANIC, "Delivery status for %s: %s\n", addr->address, addr->message);
3770     }
3771
3772 /* Return TRUE to indicate we have got all we need from this process, even
3773 if it hasn't actually finished yet. */
3774
3775 return TRUE;
3776 }
3777
3778
3779
3780 /*************************************************
3781 *   Post-process a set of remote addresses       *
3782 *************************************************/
3783
3784 /* Do what has to be done immediately after a remote delivery for each set of
3785 addresses, then re-write the spool if necessary. Note that post_process_one
3786 puts the address on an appropriate queue; hence we must fish off the next
3787 one first. This function is also called if there is a problem with setting
3788 up a subprocess to do a remote delivery in parallel. In this case, the final
3789 argument contains a message, and the action must be forced to DEFER.
3790
3791 Argument:
3792    addr      pointer to chain of address items
3793    logflags  flags for logging
3794    msg       NULL for normal cases; -> error message for unexpected problems
3795    fallback  TRUE if processing fallback hosts
3796
3797 Returns:     nothing
3798 */
3799
3800 static void
3801 remote_post_process(address_item * addr, int logflags, uschar * msg,
3802   BOOL fallback)
3803 {
3804 /* If any host addresses were found to be unusable, add them to the unusable
3805 tree so that subsequent deliveries don't try them. */
3806
3807 for (host_item * h = addr->host_list; h; h = h->next)
3808   if (h->address)
3809     if (h->status >= hstatus_unusable) tree_add_unusable(h);
3810
3811 /* Now handle each address on the chain. The transport has placed '=' or '-'
3812 into the special_action field for each successful delivery. */
3813
3814 while (addr)
3815   {
3816   address_item * next = addr->next;
3817
3818   /* If msg == NULL (normal processing) and the result is DEFER and we are
3819   processing the main hosts and there are fallback hosts available, put the
3820   address on the list for fallback delivery. */
3821
3822   if (  addr->transport_return == DEFER
3823      && addr->fallback_hosts
3824      && !fallback
3825      && !msg
3826      )
3827     {
3828     addr->host_list = addr->fallback_hosts;
3829     addr->next = addr_fallback;
3830     addr_fallback = addr;
3831     DEBUG(D_deliver) debug_printf("%s queued for fallback host(s)\n", addr->address);
3832     }
3833
3834   /* If msg is set (=> unexpected problem), set it in the address before
3835   doing the ordinary post processing. */
3836
3837   else
3838     {
3839     if (msg)
3840       {
3841       addr->message = msg;
3842       addr->transport_return = DEFER;
3843       }
3844     (void)post_process_one(addr, addr->transport_return, logflags,
3845       EXIM_DTYPE_TRANSPORT, addr->special_action);
3846     }
3847
3848   /* Next address */
3849
3850   addr = next;
3851   }
3852
3853 /* If we have just delivered down a passed SMTP channel, and that was
3854 the last address, the channel will have been closed down. Now that
3855 we have logged that delivery, set continue_sequence to 1 so that
3856 any subsequent deliveries don't get "*" incorrectly logged. */
3857
3858 if (!continue_transport) continue_sequence = 1;
3859 }
3860
3861
3862
3863 /*************************************************
3864 *     Wait for one remote delivery subprocess    *
3865 *************************************************/
3866
3867 /* This function is called while doing remote deliveries when either the
3868 maximum number of processes exist and we need one to complete so that another
3869 can be created, or when waiting for the last ones to complete. It must wait for
3870 the completion of one subprocess, empty the control block slot, and return a
3871 pointer to the address chain.
3872
3873 Arguments:    none
3874 Returns:      pointer to the chain of addresses handled by the process;
3875               NULL if no subprocess found - this is an unexpected error
3876 */
3877
3878 static address_item *
3879 par_wait(void)
3880 {
3881 int poffset, status;
3882 address_item * addr, * addrlist;
3883 pid_t pid;
3884
3885 set_process_info("delivering %s: waiting for a remote delivery subprocess "
3886   "to finish", message_id);
3887
3888 /* Loop until either a subprocess completes, or there are no subprocesses in
3889 existence - in which case give an error return. We cannot proceed just by
3890 waiting for a completion, because a subprocess may have filled up its pipe, and
3891 be waiting for it to be emptied. Therefore, if no processes have finished, we
3892 wait for one of the pipes to acquire some data by calling poll(), with a
3893 timeout just in case.
3894
3895 The simple approach is just to iterate after reading data from a ready pipe.
3896 This leads to non-ideal behaviour when the subprocess has written its final Z
3897 item, closed the pipe, and is in the process of exiting (the common case). A
3898 call to waitpid() yields nothing completed, but poll() shows the pipe ready -
3899 reading it yields EOF, so you end up with busy-waiting until the subprocess has
3900 actually finished.
3901
3902 To avoid this, if all the data that is needed has been read from a subprocess
3903 after poll(), an explicit wait() for it is done. We know that all it is doing
3904 is writing to the pipe and then exiting, so the wait should not be long.
3905
3906 The non-blocking waitpid() is to some extent just insurance; if we could
3907 reliably detect end-of-file on the pipe, we could always know when to do a
3908 blocking wait() for a completed process. However, because some systems use
3909 NDELAY, which doesn't distinguish between EOF and pipe empty, it is easier to
3910 use code that functions without the need to recognize EOF.
3911
3912 There's a double loop here just in case we end up with a process that is not in
3913 the list of remote delivery processes. Something has obviously gone wrong if
3914 this is the case. (For example, a process that is incorrectly left over from
3915 routing or local deliveries might be found.) The damage can be minimized by
3916 looping back and looking for another process. If there aren't any, the error
3917 return will happen. */
3918
3919 for (;;)   /* Normally we do not repeat this loop */
3920   {
3921   while ((pid = waitpid(-1, &status, WNOHANG)) <= 0)
3922     {
3923     int readycount;
3924
3925     /* A return value of -1 can mean several things. If errno != ECHILD, it
3926     either means invalid options (which we discount), or that this process was
3927     interrupted by a signal. Just loop to try the waitpid() again.
3928
3929     If errno == ECHILD, waitpid() is telling us that there are no subprocesses
3930     in existence. This should never happen, and is an unexpected error.
3931     However, there is a nasty complication when running under Linux. If "strace
3932     -f" is being used under Linux to trace this process and its children,
3933     subprocesses are "stolen" from their parents and become the children of the
3934     tracing process. A general wait such as the one we've just obeyed returns
3935     as if there are no children while subprocesses are running. Once a
3936     subprocess completes, it is restored to the parent, and waitpid(-1) finds
3937     it. Thanks to Joachim Wieland for finding all this out and suggesting a
3938     palliative.
3939
3940     This does not happen using "truss" on Solaris, nor (I think) with other
3941     tracing facilities on other OS. It seems to be specific to Linux.
3942
3943     What we do to get round this is to use kill() to see if any of our
3944     subprocesses are still in existence. If kill() gives an OK return, we know
3945     it must be for one of our processes - it can't be for a re-use of the pid,
3946     because if our process had finished, waitpid() would have found it. If any
3947     of our subprocesses are in existence, we proceed to use poll() as if
3948     waitpid() had returned zero. I think this is safe. */
3949
3950     if (pid < 0)
3951       {
3952       if (errno != ECHILD) continue;   /* Repeats the waitpid() */
3953
3954       DEBUG(D_deliver)
3955         debug_printf("waitpid() returned -1/ECHILD: checking explicitly "
3956           "for process existence\n");
3957
3958       for (poffset = 0; poffset < remote_max_parallel; poffset++)
3959         {
3960         if ((pid = parlist[poffset].pid) != 0 && kill(pid, 0) == 0)
3961           {
3962           DEBUG(D_deliver) debug_printf("process %d still exists: assume "
3963             "stolen by strace\n", (int)pid);
3964           break;   /* With poffset set */
3965           }
3966         }
3967
3968       if (poffset >= remote_max_parallel)
3969         {
3970         DEBUG(D_deliver) debug_printf("*** no delivery children found\n");
3971         return NULL;    /* This is the error return */
3972         }
3973       }
3974
3975     /* A pid value greater than 0 breaks the "while" loop. A negative value has
3976     been handled above. A return value of zero means that there is at least one
3977     subprocess, but there are no completed subprocesses. See if any pipes are
3978     ready with any data for reading. */
3979
3980     DEBUG(D_deliver) debug_printf("polling subprocess pipes\n");
3981
3982     for (poffset = 0; poffset < remote_max_parallel; poffset++)
3983       if (parlist[poffset].pid != 0)
3984         {
3985         parpoll[poffset].fd = parlist[poffset].fd;
3986         parpoll[poffset].events = POLLIN;
3987         }
3988       else
3989         parpoll[poffset].fd = -1;
3990
3991     /* Stick in a 60-second timeout, just in case. */
3992
3993     readycount = poll(parpoll, remote_max_parallel, 60 * 1000);
3994
3995     /* Scan through the pipes and read any that are ready; use the count
3996     returned by poll() to stop when there are no more. Select() can return
3997     with no processes (e.g. if interrupted). This shouldn't matter.
3998
3999     If par_read_pipe() returns TRUE, it means that either the terminating Z was
4000     read, or there was a disaster. In either case, we are finished with this
4001     process. Do an explicit wait() for the process and break the main loop if
4002     it succeeds.
4003
4004     It turns out that we have to deal with the case of an interrupted system
4005     call, which can happen on some operating systems if the signal handling is
4006     set up to do that by default. */
4007
4008     for (poffset = 0;
4009          readycount > 0 && poffset < remote_max_parallel;
4010          poffset++)
4011       {
4012       if (  (pid = parlist[poffset].pid) != 0
4013          && parpoll[poffset].revents
4014          )
4015         {
4016         readycount--;
4017         if (par_read_pipe(poffset, FALSE))    /* Finished with this pipe */
4018           for (;;)                            /* Loop for signals */
4019             {
4020             pid_t endedpid = waitpid(pid, &status, 0);
4021             if (endedpid == pid) goto PROCESS_DONE;
4022             if (endedpid != (pid_t)(-1) || errno != EINTR)
4023               log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Unexpected error return "
4024                 "%d (errno = %d) from waitpid() for process %d",
4025                 (int)endedpid, errno, (int)pid);
4026             }
4027         }
4028       }
4029
4030     /* Now go back and look for a completed subprocess again. */
4031     }
4032
4033   /* A completed process was detected by the non-blocking waitpid(). Find the
4034   data block that corresponds to this subprocess. */
4035
4036   for (poffset = 0; poffset < remote_max_parallel; poffset++)
4037     if (pid == parlist[poffset].pid) break;
4038
4039   /* Found the data block; this is a known remote delivery process. We don't
4040   need to repeat the outer loop. This should be what normally happens. */
4041
4042   if (poffset < remote_max_parallel) break;
4043
4044   /* This situation is an error, but it's probably better to carry on looking
4045   for another process than to give up (as we used to do). */
4046
4047   log_write(0, LOG_MAIN|LOG_PANIC, "Process %d finished: not found in remote "
4048     "transport process list", pid);
4049   }  /* End of the "for" loop */
4050
4051 /* Come here when all the data was completely read after a poll(), and
4052 the process in pid has been wait()ed for. */
4053
4054 PROCESS_DONE:
4055
4056 DEBUG(D_deliver)
4057   {
4058   if (status == 0)
4059     debug_printf("remote delivery process %d ended\n", (int)pid);
4060   else
4061     debug_printf("remote delivery process %d ended: status=%04x\n", (int)pid,
4062       status);
4063   }
4064
4065 set_process_info("delivering %s", message_id);
4066
4067 /* Get the chain of processed addresses */
4068
4069 addrlist = parlist[poffset].addrlist;
4070
4071 /* If the process did not finish cleanly, record an error and freeze (except
4072 for SIGTERM, SIGKILL and SIGQUIT), and also ensure the journal is not removed,
4073 in case the delivery did actually happen. */
4074
4075 if ((status & 0xffff) != 0)
4076   {
4077   uschar *msg;
4078   int msb = (status >> 8) & 255;
4079   int lsb = status & 255;
4080   int code = (msb == 0)? (lsb & 0x7f) : msb;
4081
4082   msg = string_sprintf("%s transport process returned non-zero status 0x%04x: "
4083     "%s %d",
4084     addrlist->transport->driver_name,
4085     status,
4086     msb == 0 ? "terminated by signal" : "exit code",
4087     code);
4088
4089   if (msb != 0 || (code != SIGTERM && code != SIGKILL && code != SIGQUIT))
4090     addrlist->special_action = SPECIAL_FREEZE;
4091
4092   for (addr = addrlist; addr; addr = addr->next)
4093     {
4094     addr->transport_return = DEFER;
4095     addr->message = msg;
4096     }
4097
4098   remove_journal = FALSE;
4099   }
4100
4101 /* Else complete reading the pipe to get the result of the delivery, if all
4102 the data has not yet been obtained. */
4103
4104 else if (!parlist[poffset].done)
4105   (void) par_read_pipe(poffset, TRUE);
4106
4107 /* Put the data count and return path into globals, mark the data slot unused,
4108 decrement the count of subprocesses, and return the address chain. */
4109
4110 transport_count = parlist[poffset].transport_count;
4111 used_return_path = parlist[poffset].return_path;
4112 parlist[poffset].pid = 0;
4113 parcount--;
4114 return addrlist;
4115 }
4116
4117
4118
4119 /*************************************************
4120 *      Wait for subprocesses and post-process    *
4121 *************************************************/
4122
4123 /* This function waits for subprocesses until the number that are still running
4124 is below a given threshold. For each complete subprocess, the addresses are
4125 post-processed. If we can't find a running process, there is some shambles.
4126 Better not bomb out, as that might lead to multiple copies of the message. Just
4127 log and proceed as if all done.
4128
4129 Arguments:
4130   max         maximum number of subprocesses to leave running
4131   fallback    TRUE if processing fallback hosts
4132
4133 Returns:      nothing
4134 */
4135
4136 static void
4137 par_reduce(int max, BOOL fallback)
4138 {
4139 while (parcount > max)
4140   {
4141   address_item * doneaddr = par_wait();
4142   if (!doneaddr)
4143     {
4144     log_write(0, LOG_MAIN|LOG_PANIC,
4145       "remote delivery process count got out of step");
4146     parcount = 0;
4147     }
4148   else
4149     {
4150     transport_instance * tp = doneaddr->transport;
4151     if (tp->max_parallel)
4152       enq_end(string_sprintf("tpt-serialize-%s", tp->name));
4153
4154     remote_post_process(doneaddr, LOG_MAIN, NULL, fallback);
4155     }
4156   }
4157 }
4158
4159 static void
4160 rmt_dlv_checked_write(int fd, char id, char subid, void * buf, ssize_t size)
4161 {
4162 uschar pipe_header[PIPE_HEADER_SIZE+1];
4163 size_t total_len = PIPE_HEADER_SIZE + size;
4164
4165 struct iovec iov[2] = {
4166   { pipe_header, PIPE_HEADER_SIZE },  /* indication about the data to expect */
4167   { buf, size }                       /* *the* data */
4168 };
4169
4170 ssize_t ret;
4171
4172 /* we assume that size can't get larger then BIG_BUFFER_SIZE which currently is set to 16k */
4173 /* complain to log if someone tries with buffer sizes we can't handle*/
4174
4175 if (size > BIG_BUFFER_SIZE-1)
4176   {
4177   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
4178     "Failed writing transport result to pipe: can't handle buffers > %d bytes. truncating!\n",
4179       BIG_BUFFER_SIZE-1);
4180   size = BIG_BUFFER_SIZE;
4181   }
4182
4183 /* Should we check that we do not write more than PIPE_BUF? What would
4184 that help? */
4185
4186 /* convert size to human readable string prepended by id and subid */
4187 if (PIPE_HEADER_SIZE != snprintf(CS pipe_header, PIPE_HEADER_SIZE+1, "%c%c%05ld",
4188     id, subid, (long)size))
4189   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "header snprintf failed\n");
4190
4191 DEBUG(D_deliver) debug_printf("header write id:%c,subid:%c,size:%ld,final:%s\n",
4192                                  id, subid, (long)size, pipe_header);
4193
4194 if ((ret = writev(fd, iov, 2)) != total_len)
4195   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
4196     "Failed writing transport result to pipe (%ld of %ld bytes): %s",
4197     (long)ret, (long)total_len, ret == -1 ? strerror(errno) : "short write");
4198 }
4199
4200 /*************************************************
4201 *           Do remote deliveries                 *
4202 *************************************************/
4203
4204 /* This function is called to process the addresses in addr_remote. We must
4205 pick off the queue all addresses that have the same transport, remote
4206 destination, and errors address, and hand them to the transport in one go,
4207 subject to some configured limitations. If this is a run to continue delivering
4208 to an existing delivery channel, skip all but those addresses that can go to
4209 that channel. The skipped addresses just get deferred.
4210
4211 If mua_wrapper is set, all addresses must be able to be sent in a single
4212 transaction. If not, this function yields FALSE.
4213
4214 In Exim 4, remote deliveries are always done in separate processes, even
4215 if remote_max_parallel = 1 or if there's only one delivery to do. The reason
4216 is so that the base process can retain privilege. This makes the
4217 implementation of fallback transports feasible (though not initially done.)
4218
4219 We create up to the configured number of subprocesses, each of which passes
4220 back the delivery state via a pipe. (However, when sending down an existing
4221 connection, remote_max_parallel is forced to 1.)
4222
4223 Arguments:
4224   fallback  TRUE if processing fallback hosts
4225
4226 Returns:    TRUE normally
4227             FALSE if mua_wrapper is set and the addresses cannot all be sent
4228               in one transaction
4229 */
4230
4231 static BOOL
4232 do_remote_deliveries(BOOL fallback)
4233 {
4234 int parmax;
4235 int poffset;
4236
4237 parcount = 0;    /* Number of executing subprocesses */
4238
4239 /* When sending down an existing channel, only do one delivery at a time.
4240 We use a local variable (parmax) to hold the maximum number of processes;
4241 this gets reduced from remote_max_parallel if we can't create enough pipes. */
4242
4243 if (continue_transport) remote_max_parallel = 1;
4244 parmax = remote_max_parallel;
4245
4246 /* If the data for keeping a list of processes hasn't yet been
4247 set up, do so. */
4248
4249 if (!parlist)
4250   {
4251   parlist = store_get(remote_max_parallel * sizeof(pardata), GET_UNTAINTED);
4252   for (poffset = 0; poffset < remote_max_parallel; poffset++)
4253     parlist[poffset].pid = 0;
4254   parpoll = store_get(remote_max_parallel * sizeof(struct pollfd), GET_UNTAINTED);
4255   }
4256
4257 /* Now loop for each remote delivery */
4258
4259 for (int delivery_count = 0; addr_remote; delivery_count++)
4260   {
4261   pid_t pid;
4262   uid_t uid;
4263   gid_t gid;
4264   int pfd[2];
4265   int address_count = 1;
4266   int address_count_max;
4267   BOOL multi_domain;
4268   BOOL use_initgroups;
4269   BOOL pipe_done = FALSE;
4270   transport_instance *tp;
4271   address_item **anchor = &addr_remote;
4272   address_item *addr = addr_remote;
4273   address_item *last = addr;
4274   address_item *next;
4275   uschar * panicmsg;
4276   uschar * serialize_key = NULL;
4277
4278   /* Pull the first address right off the list. */
4279
4280   addr_remote = addr->next;
4281   addr->next = NULL;
4282
4283   DEBUG(D_deliver|D_transport)
4284     debug_printf("--------> %s <--------\n", addr->address);
4285
4286   /* If no transport has been set, there has been a big screw-up somewhere. */
4287
4288   if (!(tp = addr->transport))
4289     {
4290     f.disable_logging = FALSE;  /* Jic */
4291     panicmsg = US"No transport set by router";
4292     goto panic_continue;
4293     }
4294
4295   /* Check that this base address hasn't previously been delivered to this
4296   transport. The check is necessary at this point to handle homonymic addresses
4297   correctly in cases where the pattern of redirection changes between delivery
4298   attempts. Non-homonymic previous delivery is detected earlier, at routing
4299   time. */
4300
4301   if (previously_transported(addr, FALSE)) continue;
4302
4303   /* Force failure if the message is too big. */
4304
4305   if (tp->message_size_limit)
4306     {
4307     int rc = check_message_size(tp, addr);
4308     if (rc != OK)
4309       {
4310       addr->transport_return = rc;
4311       remote_post_process(addr, LOG_MAIN, NULL, fallback);
4312       continue;
4313       }
4314     }
4315
4316 /*XXX need to defeat this when DANE is used - but we don't know that yet.
4317 So look out for the place it gets used.
4318 */
4319
4320   /* Get the flag which specifies whether the transport can handle different
4321   domains that nevertheless resolve to the same set of hosts. If it needs
4322   expanding, get variables set: $address_data, $domain_data, $localpart_data,
4323   $host, $host_address, $host_port. */
4324   if (tp->expand_multi_domain)
4325     deliver_set_expansions(addr);
4326
4327   if (exp_bool(addr, US"transport", tp->name, D_transport,
4328                 US"multi_domain", tp->multi_domain, tp->expand_multi_domain,
4329                 &multi_domain) != OK)
4330     {
4331     deliver_set_expansions(NULL);
4332     panicmsg = addr->message;
4333     goto panic_continue;
4334     }
4335
4336   /* Get the maximum it can handle in one envelope, with zero meaning
4337   unlimited, which is forced for the MUA wrapper case and if the
4338   value could vary depending on the messages.
4339   For those, we only split (below) by (tpt,dest,erraddr,hdrs) and rely on the
4340   transport splitting further by max_rcp.  So we potentially lose some
4341   parallellism. */
4342
4343   address_count_max = mua_wrapper || Ustrchr(tp->max_addresses, '$')
4344     ? UNLIMITED_ADDRS : expand_max_rcpt(tp->max_addresses);
4345
4346
4347   /************************************************************************/
4348   /*****    This is slightly experimental code, but should be safe.   *****/
4349
4350   /* The address_count_max value is the maximum number of addresses that the
4351   transport can send in one envelope. However, the transport must be capable of
4352   dealing with any number of addresses. If the number it gets exceeds its
4353   envelope limitation, it must send multiple copies of the message. This can be
4354   done over a single connection for SMTP, so uses less resources than making
4355   multiple connections. On the other hand, if remote_max_parallel is greater
4356   than one, it is perhaps a good idea to use parallel processing to move the
4357   message faster, even if that results in multiple simultaneous connections to
4358   the same host.
4359
4360   How can we come to some compromise between these two ideals? What we do is to
4361   limit the number of addresses passed to a single instance of a transport to
4362   the greater of (a) its address limit (rcpt_max for SMTP) and (b) the total
4363   number of addresses routed to remote transports divided by
4364   remote_max_parallel. For example, if the message has 100 remote recipients,
4365   remote max parallel is 2, and rcpt_max is 10, we'd never send more than 50 at
4366   once. But if rcpt_max is 100, we could send up to 100.
4367
4368   Of course, not all the remotely addresses in a message are going to go to the
4369   same set of hosts (except in smarthost configurations), so this is just a
4370   heuristic way of dividing up the work.
4371
4372   Furthermore (1), because this may not be wanted in some cases, and also to
4373   cope with really pathological cases, there is also a limit to the number of
4374   messages that are sent over one connection. This is the same limit that is
4375   used when sending several different messages over the same connection.
4376   Continue_sequence is set when in this situation, to the number sent so
4377   far, including this message.
4378
4379   Furthermore (2), when somebody explicitly sets the maximum value to 1, it
4380   is probably because they are using VERP, in which case they want to pass only
4381   one address at a time to the transport, in order to be able to use
4382   $local_part and $domain in constructing a new return path. We could test for
4383   the use of these variables, but as it is so likely they will be used when the
4384   maximum is 1, we don't bother. Just leave the value alone. */
4385
4386   if (  address_count_max != 1
4387      && address_count_max < remote_delivery_count/remote_max_parallel
4388      )
4389     {
4390     int new_max = remote_delivery_count/remote_max_parallel;
4391     int message_max = tp->connection_max_messages;
4392     if (connection_max_messages >= 0) message_max = connection_max_messages;
4393     message_max -= continue_sequence - 1;
4394     if (message_max > 0 && new_max > address_count_max * message_max)
4395       new_max = address_count_max * message_max;
4396     address_count_max = new_max;
4397     }
4398
4399   /************************************************************************/
4400
4401
4402 /*XXX don't know yet if DANE will be used.  So tpt will have to
4403 check at the point if gets next addr from list, and skip/defer any
4404 nonmatch domains
4405 */
4406
4407   /* Pick off all addresses which have the same transport, errors address,
4408   destination, and extra headers. In some cases they point to the same host
4409   list, but we also need to check for identical host lists generated from
4410   entirely different domains. The host list pointers can be NULL in the case
4411   where the hosts are defined in the transport. There is also a configured
4412   maximum limit of addresses that can be handled at once (see comments above
4413   for how it is computed).
4414   If the transport does not handle multiple domains, enforce that also,
4415   and if it might need a per-address check for this, re-evaluate it.
4416   */
4417
4418   while ((next = *anchor) && address_count < address_count_max)
4419     {
4420     BOOL md;
4421     if (  (multi_domain || Ustrcmp(next->domain, addr->domain) == 0)
4422        && tp == next->transport
4423        && same_hosts(next->host_list, addr->host_list)
4424        && same_strings(next->prop.errors_address, addr->prop.errors_address)
4425        && same_headers(next->prop.extra_headers, addr->prop.extra_headers)
4426        && same_ugid(tp, next, addr)
4427        && (  next->prop.remove_headers == addr->prop.remove_headers
4428           || (  next->prop.remove_headers
4429              && addr->prop.remove_headers
4430              && Ustrcmp(next->prop.remove_headers, addr->prop.remove_headers) == 0
4431           )  )
4432        && (  !multi_domain
4433           || (  (
4434                 (void)(!tp->expand_multi_domain || ((void)deliver_set_expansions(next), 1)),
4435                 exp_bool(addr,
4436                     US"transport", next->transport->name, D_transport,
4437                     US"multi_domain", next->transport->multi_domain,
4438                     next->transport->expand_multi_domain, &md) == OK
4439                 )
4440              && md
4441        )  )  )
4442       {
4443       *anchor = next->next;
4444       next->next = NULL;
4445       next->first = addr;  /* remember top one (for retry processing) */
4446       last->next = next;
4447       last = next;
4448       address_count++;
4449       }
4450     else anchor = &(next->next);
4451     deliver_set_expansions(NULL);
4452     }
4453
4454   /* If we are acting as an MUA wrapper, all addresses must go in a single
4455   transaction. If not, put them back on the chain and yield FALSE. */
4456
4457   if (mua_wrapper && addr_remote)
4458     {
4459     last->next = addr_remote;
4460     addr_remote = addr;
4461     return FALSE;
4462     }
4463
4464   /* If the transport is limited for parallellism, enforce that here.
4465   The hints DB entry is decremented in par_reduce(), when we reap the
4466   transport process. */
4467
4468   if (tpt_parallel_check(tp, addr, &serialize_key))
4469     if ((panicmsg = expand_string_message))
4470       goto panic_continue;
4471     else
4472       continue;                 /* Loop for the next set of addresses. */
4473
4474   /* Set up the expansion variables for this set of addresses */
4475
4476   deliver_set_expansions(addr);
4477
4478   /* Ensure any transport-set auth info is fresh */
4479   addr->authenticator = addr->auth_id = addr->auth_sndr = NULL;
4480
4481   /* Compute the return path, expanding a new one if required. The old one
4482   must be set first, as it might be referred to in the expansion. */
4483
4484   if(addr->prop.errors_address)
4485     return_path = addr->prop.errors_address;
4486   else
4487     return_path = sender_address;
4488
4489   GET_OPTION("return_path");
4490   if (tp->return_path)
4491     {
4492     uschar * new_return_path = expand_string(tp->return_path);
4493     if (new_return_path)
4494       return_path = new_return_path;
4495     else if (!f.expand_string_forcedfail)
4496       {
4497       panicmsg = string_sprintf("Failed to expand return path \"%s\": %s",
4498         tp->return_path, expand_string_message);
4499       goto enq_continue;
4500       }
4501     }
4502
4503   /* Find the uid, gid, and use_initgroups setting for this transport. Failure
4504   logs and sets up error messages, so we just post-process and continue with
4505   the next address. */
4506
4507   if (!findugid(addr, tp, &uid, &gid, &use_initgroups))
4508     {
4509     panicmsg = NULL;
4510     goto enq_continue;
4511     }
4512
4513   /* If this transport has a setup function, call it now so that it gets
4514   run in this process and not in any subprocess. That way, the results of
4515   any setup that are retained by the transport can be reusable. One of the
4516   things the setup does is to set the fallback host lists in the addresses.
4517   That is why it is called at this point, before the continue delivery
4518   processing, because that might use the fallback hosts. */
4519
4520   if (tp->setup)
4521     (void)((tp->setup)(addr->transport, addr, NULL, uid, gid, NULL));
4522
4523   /* If we have a connection still open from a verify stage (lazy-close)
4524   treat it as if it is a continued connection (apart from the counter used
4525   for the log line mark). */
4526
4527   if (cutthrough.cctx.sock >= 0 && cutthrough.callout_hold_only)
4528     {
4529     DEBUG(D_deliver)
4530       debug_printf("lazy-callout-close: have conn still open from verification\n");
4531     continue_transport = cutthrough.transport;
4532     continue_hostname = string_copy(cutthrough.host.name);
4533     continue_host_address = string_copy(cutthrough.host.address);
4534     continue_sequence = 1;
4535     sending_ip_address = cutthrough.snd_ip;
4536     sending_port = cutthrough.snd_port;
4537     smtp_peer_options = cutthrough.peer_options;
4538     }
4539
4540   /* If this is a run to continue delivery down an already-established
4541   channel, check that this set of addresses matches the transport and
4542   the channel. If it does not, defer the addresses. If a host list exists,
4543   we must check that the continue host is on the list. Otherwise, the
4544   host is set in the transport. */
4545
4546   f.continue_more = FALSE;           /* In case got set for the last lot */
4547   if (continue_transport)
4548     {
4549     BOOL ok = Ustrcmp(continue_transport, tp->name) == 0;
4550 /*XXX do we need to check for a DANEd conn vs. a change of domain? */
4551
4552     /* If the transport is about to override the host list do not check
4553     it here but take the cost of running the transport process to discover
4554     if the continued_hostname connection is suitable.  This is a layering
4555     violation which is unfortunate as it requires we haul in the smtp
4556     include file. */
4557
4558     if (ok)
4559       {
4560       smtp_transport_options_block * ob;
4561
4562       if (  !(  Ustrcmp(tp->info->driver_name, "smtp") == 0
4563              && (ob = (smtp_transport_options_block *)tp->options_block)
4564              && ob->hosts_override && ob->hosts
4565              )
4566          && addr->host_list
4567          )
4568         {
4569         ok = FALSE;
4570         for (host_item * h = addr->host_list; h; h = h->next)
4571           if (Ustrcmp(h->name, continue_hostname) == 0)
4572   /*XXX should also check port here */
4573             { ok = TRUE; break; }
4574         }
4575       }
4576
4577     /* Addresses not suitable; defer or queue for fallback hosts (which
4578     might be the continue host) and skip to next address. */
4579
4580     if (!ok)
4581       {
4582       DEBUG(D_deliver) debug_printf("not suitable for continue_transport (%s)\n",
4583         Ustrcmp(continue_transport, tp->name) != 0
4584         ? string_sprintf("tpt %s vs %s", continue_transport, tp->name)
4585         : string_sprintf("no host matching %s", continue_hostname));
4586       if (serialize_key) enq_end(serialize_key);
4587
4588       if (addr->fallback_hosts && !fallback)
4589         {
4590         for (next = addr; ; next = next->next)
4591           {
4592           next->host_list = next->fallback_hosts;
4593           DEBUG(D_deliver) debug_printf("%s queued for fallback host(s)\n", next->address);
4594           if (!next->next) break;
4595           }
4596         next->next = addr_fallback;
4597         addr_fallback = addr;
4598         }
4599
4600       else
4601         {
4602         for (next = addr; ; next = next->next)
4603           {
4604           DEBUG(D_deliver) debug_printf(" %s to def list\n", next->address);
4605           if (!next->next) break;
4606           }
4607         next->next = addr_defer;
4608         addr_defer = addr;
4609         }
4610
4611       continue;
4612       }
4613
4614     /* Set a flag indicating whether there are further addresses that list
4615     the continued host. This tells the transport to leave the channel open,
4616     but not to pass it to another delivery process. We'd like to do that
4617     for non-continue_transport cases too but the knowlege of which host is
4618     connected to is too hard to manage.  Perhaps we need a finer-grain
4619     interface to the transport. */
4620
4621     for (next = addr_remote; next && !f.continue_more; next = next->next)
4622       for (host_item * h = next->host_list; h; h = h->next)
4623         if (Ustrcmp(h->name, continue_hostname) == 0)
4624           { f.continue_more = TRUE; break; }
4625     }
4626
4627   /* The transports set up the process info themselves as they may connect
4628   to more than one remote machine. They also have to set up the filter
4629   arguments, if required, so that the host name and address are available
4630   for expansion. */
4631
4632   transport_filter_argv = NULL;
4633
4634   /* Create the pipe for inter-process communication. If pipe creation
4635   fails, it is probably because the value of remote_max_parallel is so
4636   large that too many file descriptors for pipes have been created. Arrange
4637   to wait for a process to finish, and then try again. If we still can't
4638   create a pipe when all processes have finished, break the retry loop. */
4639
4640   while (!pipe_done)
4641     {
4642     if (pipe(pfd) == 0) pipe_done = TRUE;
4643       else if (parcount > 0) parmax = parcount;
4644         else break;
4645
4646     /* We need to make the reading end of the pipe non-blocking. There are
4647     two different options for this. Exim is cunningly (I hope!) coded so
4648     that it can use either of them, though it prefers O_NONBLOCK, which
4649     distinguishes between EOF and no-more-data. */
4650
4651 /* The data appears in a timely manner and we already did a poll on
4652 all pipes, so I do not see a reason to use non-blocking IO here
4653
4654 #ifdef O_NONBLOCK
4655     (void)fcntl(pfd[pipe_read], F_SETFL, O_NONBLOCK);
4656 #else
4657     (void)fcntl(pfd[pipe_read], F_SETFL, O_NDELAY);
4658 #endif
4659 */
4660
4661     /* If the maximum number of subprocesses already exist, wait for a process
4662     to finish. If we ran out of file descriptors, parmax will have been reduced
4663     from its initial value of remote_max_parallel. */
4664
4665     par_reduce(parmax - 1, fallback);
4666     }
4667
4668   /* If we failed to create a pipe and there were no processes to wait
4669   for, we have to give up on this one. Do this outside the above loop
4670   so that we can continue the main loop. */
4671
4672   if (!pipe_done)
4673     {
4674     panicmsg = string_sprintf("unable to create pipe: %s", strerror(errno));
4675     goto enq_continue;
4676     }
4677
4678   /* Find a free slot in the pardata list. Must do this after the possible
4679   waiting for processes to finish, because a terminating process will free
4680   up a slot. */
4681
4682   for (poffset = 0; poffset < remote_max_parallel; poffset++)
4683     if (parlist[poffset].pid == 0)
4684       break;
4685
4686   /* If there isn't one, there has been a horrible disaster. */
4687
4688   if (poffset >= remote_max_parallel)
4689     {
4690     (void)close(pfd[pipe_write]);
4691     (void)close(pfd[pipe_read]);
4692     panicmsg = US"Unexpectedly no free subprocess slot";
4693     goto enq_continue;
4694     }
4695
4696   /* Now fork a subprocess to do the remote delivery, but before doing so,
4697   ensure that any cached resources are released so as not to interfere with
4698   what happens in the subprocess. */
4699
4700   search_tidyup();
4701
4702 /*
4703 A continued-tpt will, in the tpt parent here, call par_reduce for
4704 the one child. But we are hoping to never do continued-transport...
4705 SO.... we may have called par_reduce for a single child, above when we'd
4706 hit the limit on child-count. Possibly multiple times with different
4707 transports and target hosts.  Does it matter if several return a suggested
4708 next-id, and we lose all but the last?  Hmm.  Less parallel working would
4709 happen. Perhaps still do continued-tpt once one has been set? No, that won't
4710 work for all cases.
4711 BAH.
4712 Could take the initial continued-tpt hit, and then do the next-id thing?
4713
4714 do_remote_deliveries par_reduce par_wait par_read_pipe
4715 */
4716
4717 if (continue_transport && !exim_lockfile_needed())
4718   if (!continue_wait_db)
4719     {
4720     continue_wait_db = dbfn_open_multi(
4721                   string_sprintf("wait-%.200s", continue_transport),
4722                   O_RDWR,
4723                   (open_db *) store_get(sizeof(open_db), GET_UNTAINTED));
4724     continue_next_id[0] = '\0';
4725     }
4726
4727   if ((pid = exim_fork(US"transport")) == 0)
4728     {
4729     int fd = pfd[pipe_write];
4730     host_item *h;
4731
4732     /* Setting these globals in the subprocess means we need never clear them */
4733
4734     transport_name = tp->name;
4735     if (addr->router) router_name = addr->router->name;
4736     driver_srcfile = tp->srcfile;
4737     driver_srcline = tp->srcline;
4738
4739     /* There are weird circumstances in which logging is disabled */
4740     f.disable_logging = tp->disable_logging;
4741
4742     /* Show pids on debug output if parallelism possible */
4743
4744     if (parmax > 1 && (parcount > 0 || addr_remote))
4745       DEBUG(D_any|D_v) debug_selector |= D_pid;
4746
4747     /* Reset the random number generator, so different processes don't all
4748     have the same sequence. In the test harness we want different, but
4749     predictable settings for each delivery process, so do something explicit
4750     here rather they rely on the fixed reset in the random number function. */
4751
4752     random_seed = f.running_in_test_harness ? 42 + 2*delivery_count : 0;
4753
4754     /* Set close-on-exec on the pipe so that it doesn't get passed on to
4755     a new process that may be forked to do another delivery down the same
4756     SMTP connection. */
4757
4758     (void)fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
4759
4760     /* Close open file descriptors for the pipes of other processes
4761     that are running in parallel. */
4762
4763     for (poffset = 0; poffset < remote_max_parallel; poffset++)
4764       if (parlist[poffset].pid != 0) (void)close(parlist[poffset].fd);
4765
4766     /* This process has inherited a copy of the file descriptor
4767     for the data file, but its file pointer is shared with all the
4768     other processes running in parallel. Therefore, we have to re-open
4769     the file in order to get a new file descriptor with its own
4770     file pointer. We don't need to lock it, as the lock is held by
4771     the parent process. There doesn't seem to be any way of doing
4772     a dup-with-new-file-pointer. */
4773
4774     (void)close(deliver_datafile);
4775     {
4776     uschar * fname = spool_fname(US"input", message_subdir, message_id, US"-D");
4777
4778     if (  (deliver_datafile = Uopen(fname, EXIM_CLOEXEC | O_RDWR | O_APPEND, 0))
4779         < 0)
4780       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Failed to reopen %s for remote "
4781         "parallel delivery: %s", fname, strerror(errno));
4782     }
4783
4784 #ifndef O_CLOEXEC                       /* Set the close-on-exec flag */
4785     (void)fcntl(deliver_datafile, F_SETFD, fcntl(deliver_datafile, F_GETFD) |
4786       FD_CLOEXEC);
4787 #endif
4788
4789     /* Set the uid/gid of this process; bombs out on failure. */
4790
4791     exim_setugid(uid, gid, use_initgroups,
4792       string_sprintf("remote delivery to %s with transport=%s",
4793         addr->address, tp->name));
4794
4795     /* Close the unwanted half of this process' pipe, set the process state,
4796     and run the transport. Afterwards, transport_count will contain the number
4797     of bytes written. */
4798
4799     (void)close(pfd[pipe_read]);
4800     set_process_info("delivering %s using %s", message_id, tp->name);
4801     debug_print_string(tp->debug_string);
4802     if (!(tp->info->code)(addr->transport, addr)) replicate_status(addr);
4803
4804     set_process_info("delivering %s (just run %s for %s%s in subprocess)",
4805       message_id, tp->name, addr->address, addr->next ? ", ..." : "");
4806
4807     /* Ensure any cached resources that we used are now released */
4808
4809     search_tidyup();
4810
4811     /* Pass the result back down the pipe. This is a lot more information
4812     than is needed for a local delivery. We have to send back the error
4813     status for each address, the usability status for each host that is
4814     flagged as unusable, and all the retry items. When TLS is in use, we
4815     send also the cipher and peerdn information. Each type of information
4816     is flagged by an identifying byte, and is then in a fixed format (with
4817     strings terminated by zeros), and there is a final terminator at the
4818     end. The host information and retry information is all attached to
4819     the first address, so that gets sent at the start.
4820
4821     Result item tags:
4822       A C D H I K L P R S T X Z
4823     */
4824
4825     /* Host unusability information: for most success cases this will
4826     be null. */
4827
4828     for (h = addr->host_list; h; h = h->next)
4829       {
4830       if (!h->address || h->status < hstatus_unusable) continue;
4831       sprintf(CS big_buffer, "%c%c%s", h->status, h->why, h->address);
4832       rmt_dlv_checked_write(fd, 'H','0', big_buffer, Ustrlen(big_buffer+2) + 3);
4833       }
4834
4835     /* The number of bytes written. This is the same for each address. Even
4836     if we sent several copies of the message down the same connection, the
4837     size of each one is the same, and it's that value we have got because
4838     transport_count gets reset before calling transport_write_message(). */
4839
4840     memcpy(big_buffer, &transport_count, sizeof(transport_count));
4841     rmt_dlv_checked_write(fd, 'S', '0', big_buffer, sizeof(transport_count));
4842
4843     /* Information about what happened to each address. Four item types are
4844     used: an optional 'X' item first, for TLS information, then an optional "C"
4845     item for any client-auth info followed by 'R' items for any retry settings,
4846     and finally an 'A' item for the remaining data. */
4847
4848     for(; addr; addr = addr->next)
4849       {
4850       uschar *ptr;
4851
4852       /* The certificate verification status goes into the flags */
4853       if (tls_out.certificate_verified) setflag(addr, af_cert_verified);
4854 #ifdef SUPPORT_DANE
4855       if (tls_out.dane_verified)        setflag(addr, af_dane_verified);
4856 #endif
4857 # ifndef DISABLE_TLS_RESUME
4858       if (tls_out.resumption & RESUME_USED) setflag(addr, af_tls_resume);
4859 # endif
4860
4861       /* Use an X item only if there's something to send */
4862 #ifndef DISABLE_TLS
4863       if (addr->cipher)
4864         {
4865         ptr = big_buffer + sprintf(CS big_buffer, "%.128s", addr->cipher) + 1;
4866         if (!addr->peerdn)
4867           *ptr++ = 0;
4868         else
4869           ptr += sprintf(CS ptr, "%.512s", addr->peerdn) + 1;
4870
4871         rmt_dlv_checked_write(fd, 'X', '1', big_buffer, ptr - big_buffer);
4872         }
4873       else if (continue_proxy_cipher)
4874         {
4875         ptr = big_buffer + sprintf(CS big_buffer, "%.128s", continue_proxy_cipher) + 1;
4876         *ptr++ = 0;
4877         rmt_dlv_checked_write(fd, 'X', '1', big_buffer, ptr - big_buffer);
4878         }
4879
4880       if (addr->peercert)
4881         {
4882         ptr = big_buffer;
4883         if (tls_export_cert(ptr, big_buffer_size-2, addr->peercert))
4884           while(*ptr++);
4885         else
4886           *ptr++ = 0;
4887         rmt_dlv_checked_write(fd, 'X', '2', big_buffer, ptr - big_buffer);
4888         }
4889       if (addr->ourcert)
4890         {
4891         ptr = big_buffer;
4892         if (tls_export_cert(ptr, big_buffer_size-2, addr->ourcert))
4893           while(*ptr++);
4894         else
4895           *ptr++ = 0;
4896         rmt_dlv_checked_write(fd, 'X', '3', big_buffer, ptr - big_buffer);
4897         }
4898 # ifndef DISABLE_OCSP
4899       if (addr->ocsp > OCSP_NOT_REQ)
4900         {
4901         ptr = big_buffer + sprintf(CS big_buffer, "%c", addr->ocsp + '0') + 1;
4902         rmt_dlv_checked_write(fd, 'X', '4', big_buffer, ptr - big_buffer);
4903         }
4904 # endif
4905 #endif  /*DISABLE_TLS*/
4906
4907       if (client_authenticator)
4908         {
4909         ptr = big_buffer + sprintf(CS big_buffer, "%.64s", client_authenticator) + 1;
4910         rmt_dlv_checked_write(fd, 'C', '1', big_buffer, ptr - big_buffer);
4911         }
4912       if (client_authenticated_id)
4913         {
4914         ptr = big_buffer + sprintf(CS big_buffer, "%.64s", client_authenticated_id) + 1;
4915         rmt_dlv_checked_write(fd, 'C', '2', big_buffer, ptr - big_buffer);
4916         }
4917       if (client_authenticated_sender)
4918         {
4919         ptr = big_buffer + sprintf(CS big_buffer, "%.64s", client_authenticated_sender) + 1;
4920         rmt_dlv_checked_write(fd, 'C', '3', big_buffer, ptr - big_buffer);
4921         }
4922
4923 #ifndef DISABLE_PRDR
4924       if (testflag(addr, af_prdr_used))
4925         rmt_dlv_checked_write(fd, 'P', '0', NULL, 0);
4926 #endif
4927
4928       if (testflag(addr, af_pipelining))
4929 #ifndef DISABLE_PIPE_CONNECT
4930         if (testflag(addr, af_early_pipe))
4931           rmt_dlv_checked_write(fd, 'L', '2', NULL, 0);
4932         else
4933 #endif
4934           rmt_dlv_checked_write(fd, 'L', '1', NULL, 0);
4935
4936       if (testflag(addr, af_chunking_used))
4937         rmt_dlv_checked_write(fd, 'K', '0', NULL, 0);
4938
4939       if (testflag(addr, af_tcp_fastopen_conn))
4940         rmt_dlv_checked_write(fd, 'T',
4941           testflag(addr, af_tcp_fastopen) ? testflag(addr, af_tcp_fastopen_data)
4942           ? '2' : '1' : '0',
4943           NULL, 0);
4944
4945       memcpy(big_buffer, &addr->dsn_aware, sizeof(addr->dsn_aware));
4946       rmt_dlv_checked_write(fd, 'D', '0', big_buffer, sizeof(addr->dsn_aware));
4947
4948       /* Retry information: for most success cases this will be null. */
4949
4950       for (retry_item * r = addr->retries; r; r = r->next)
4951         {
4952         sprintf(CS big_buffer, "%c%.500s", r->flags, r->key);
4953         ptr = big_buffer + Ustrlen(big_buffer+2) + 3;
4954         memcpy(ptr, &r->basic_errno, sizeof(r->basic_errno));
4955         ptr += sizeof(r->basic_errno);
4956         memcpy(ptr, &r->more_errno, sizeof(r->more_errno));
4957         ptr += sizeof(r->more_errno);
4958         if (!r->message) *ptr++ = 0; else
4959           {
4960           sprintf(CS ptr, "%.512s", r->message);
4961           while(*ptr++);
4962           }
4963         rmt_dlv_checked_write(fd, 'R', '0', big_buffer, ptr - big_buffer);
4964         }
4965
4966 #ifndef DISABLE_DKIM
4967       if (addr->dkim_used && LOGGING(dkim_verbose))
4968         {
4969         DEBUG(D_deliver) debug_printf("dkim used: %s\n", addr->dkim_used);
4970         ptr = big_buffer + sprintf(CS big_buffer, "%.128s", addr->dkim_used) + 1;
4971         rmt_dlv_checked_write(fd, 'A', '4', big_buffer, ptr - big_buffer);
4972         }
4973 #endif
4974
4975       if (testflag(addr, af_new_conn) || testflag(addr, af_cont_conn))
4976         {
4977         DEBUG(D_deliver) debug_printf("%scontinued-connection\n",
4978           testflag(addr, af_new_conn) ? "non-" : "");
4979         big_buffer[0] = testflag(addr, af_new_conn) ? BIT(1) : BIT(2);
4980         rmt_dlv_checked_write(fd, 'A', '3', big_buffer, 1);
4981         }
4982
4983 #ifdef SUPPORT_SOCKS
4984       if (LOGGING(proxy) && proxy_session)
4985         {
4986         ptr = big_buffer;
4987         if (proxy_local_address)
4988           {
4989           DEBUG(D_deliver) debug_printf("proxy_local_address '%s'\n", proxy_local_address);
4990           ptr = big_buffer + sprintf(CS ptr, "%.128s", proxy_local_address) + 1;
4991           DEBUG(D_deliver) debug_printf("proxy_local_port %d\n", proxy_local_port);
4992           memcpy(ptr, &proxy_local_port, sizeof(proxy_local_port));
4993           ptr += sizeof(proxy_local_port);
4994           }
4995         else
4996           *ptr++ = '\0';
4997         rmt_dlv_checked_write(fd, 'A', '2', big_buffer, ptr - big_buffer);
4998         }
4999 #endif
5000
5001 #ifdef EXPERIMENTAL_DSN_INFO
5002 /*um, are they really per-addr?  Other per-conn stuff is not (auth, tls).  But host_used is! */
5003       if (addr->smtp_greeting)
5004         {
5005         DEBUG(D_deliver) debug_printf("smtp_greeting '%s'\n", addr->smtp_greeting);
5006         ptr = big_buffer + sprintf(CS big_buffer, "%.128s", addr->smtp_greeting) + 1;
5007         if (addr->helo_response)
5008           {
5009           DEBUG(D_deliver) debug_printf("helo_response '%s'\n", addr->helo_response);
5010           ptr += sprintf(CS ptr, "%.128s", addr->helo_response) + 1;
5011           }
5012         else
5013           *ptr++ = '\0';
5014         rmt_dlv_checked_write(fd, 'A', '1', big_buffer, ptr - big_buffer);
5015         }
5016 #endif
5017
5018       /* The rest of the information goes in an 'A0' item. */
5019
5020       sprintf(CS big_buffer, "%c%c", addr->transport_return, addr->special_action);
5021       ptr = big_buffer + 2;
5022       memcpy(ptr, &addr->basic_errno, sizeof(addr->basic_errno));
5023       ptr += sizeof(addr->basic_errno);
5024       memcpy(ptr, &addr->more_errno, sizeof(addr->more_errno));
5025       ptr += sizeof(addr->more_errno);
5026       memcpy(ptr, &addr->delivery_time, sizeof(addr->delivery_time));
5027       ptr += sizeof(addr->delivery_time);
5028       memcpy(ptr, &addr->flags, sizeof(addr->flags));
5029       ptr += sizeof(addr->flags);
5030
5031       if (!addr->message) *ptr++ = 0; else
5032         ptr += sprintf(CS ptr, "%.1024s", addr->message) + 1;
5033
5034       if (!addr->user_message) *ptr++ = 0; else
5035         ptr += sprintf(CS ptr, "%.1024s", addr->user_message) + 1;
5036
5037       if (!addr->host_used) *ptr++ = 0; else
5038         {
5039         ptr += sprintf(CS ptr, "%.256s", addr->host_used->name) + 1;
5040         ptr += sprintf(CS ptr, "%.64s", addr->host_used->address) + 1;
5041         memcpy(ptr, &addr->host_used->port, sizeof(addr->host_used->port));
5042         ptr += sizeof(addr->host_used->port);
5043
5044         /* DNS lookup status */
5045         *ptr++ = addr->host_used->dnssec==DS_YES ? '2'
5046                : addr->host_used->dnssec==DS_NO ? '1' : '0';
5047
5048         }
5049       rmt_dlv_checked_write(fd, 'A', '0', big_buffer, ptr - big_buffer);
5050       }
5051
5052     /* Local interface address/port */
5053 #ifdef EXPERIMENTAL_DSN_INFO
5054     if (sending_ip_address)
5055 #else
5056     if (LOGGING(incoming_interface) && sending_ip_address)
5057 #endif
5058       {
5059       uschar * ptr;
5060       ptr = big_buffer + sprintf(CS big_buffer, "%.128s", sending_ip_address) + 1;
5061       ptr += sprintf(CS ptr, "%d", sending_port) + 1;
5062       rmt_dlv_checked_write(fd, 'I', '0', big_buffer, ptr - big_buffer);
5063       }
5064
5065 /*XXX new code*/
5066     /* Continuation message-id */
5067     if (*continue_next_id)
5068       rmt_dlv_checked_write(fd, 'Z', '1', continue_next_id, MESSAGE_ID_LENGTH);
5069
5070     /* Add termination flag, close the pipe, and that's it. The character
5071     after "Z0" indicates whether continue_transport is now NULL or not.
5072     A change from non-NULL to NULL indicates a problem with a continuing
5073     connection. */
5074
5075     big_buffer[0] = continue_transport ? '1' : '0';
5076     rmt_dlv_checked_write(fd, 'Z', '0', big_buffer, 1);
5077     (void)close(fd);
5078     exim_exit(EXIT_SUCCESS);
5079     }
5080
5081   /* Back in the mainline: close the unwanted half of the pipe. */
5082
5083   (void)close(pfd[pipe_write]);
5084
5085   /* If we have a connection still open from a verify stage (lazy-close)
5086   release its TLS library context (if any) as responsibility was passed to
5087   the delivery child process. */
5088
5089   if (cutthrough.cctx.sock >= 0 && cutthrough.callout_hold_only)
5090     {
5091 #ifndef DISABLE_TLS
5092     if (cutthrough.is_tls)
5093       tls_close(cutthrough.cctx.tls_ctx, TLS_NO_SHUTDOWN);
5094 #endif
5095     (void) close(cutthrough.cctx.sock);
5096     release_cutthrough_connection(US"passed to transport proc");
5097     }
5098
5099   /* Fork failed; defer with error message */
5100
5101   if (pid == -1)
5102     {
5103     (void)close(pfd[pipe_read]);
5104     panicmsg = string_sprintf("fork failed for remote delivery to %s: %s",
5105         addr->domain, strerror(errno));
5106     goto enq_continue;
5107     }
5108
5109   /* Fork succeeded; increment the count, and remember relevant data for
5110   when the process finishes. */
5111
5112   parcount++;
5113   parlist[poffset].addrlist = parlist[poffset].addr = addr;
5114   parlist[poffset].pid = pid;
5115   parlist[poffset].fd = pfd[pipe_read];
5116   parlist[poffset].done = FALSE;
5117   parlist[poffset].msg = NULL;
5118   parlist[poffset].return_path = return_path;
5119
5120   /* If the process we've just started is sending a message down an existing
5121   channel, wait for it now. This ensures that only one such process runs at
5122   once, whatever the value of remote_max parallel. Otherwise, we might try to
5123   send two or more messages simultaneously down the same channel. This could
5124   happen if there are different domains that include the same host in otherwise
5125   different host lists.
5126
5127   Also, if the transport closes down the channel, this information gets back
5128   (continue_transport gets set to NULL) before we consider any other addresses
5129   in this message. */
5130
5131   if (continue_transport)
5132     {
5133     par_reduce(0, fallback);
5134     if (!continue_next_id && continue_wait_db)
5135         { dbfn_close_multi(continue_wait_db); continue_wait_db = NULL; }
5136     }
5137
5138   /* Otherwise, if we are running in the test harness, wait a bit, to let the
5139   newly created process get going before we create another process. This should
5140   ensure repeatability in the tests. Wait long enough for most cases to complete
5141   the transport. */
5142
5143   else
5144     testharness_pause_ms(600);
5145
5146   continue;
5147
5148 enq_continue:
5149   if (serialize_key) enq_end(serialize_key);
5150 panic_continue:
5151   remote_post_process(addr, LOG_MAIN|LOG_PANIC, panicmsg, fallback);
5152   continue;
5153   }
5154
5155 /* Reached the end of the list of addresses. Wait for all the subprocesses that
5156 are still running and post-process their addresses. */
5157
5158 par_reduce(0, fallback);
5159 return TRUE;
5160 }
5161
5162
5163
5164
5165 /*************************************************
5166 *   Split an address into local part and domain  *
5167 *************************************************/
5168
5169 /* This function initializes an address for routing by splitting it up into a
5170 local part and a domain. The local part is set up twice - once in its original
5171 casing, and once in lower case, and it is dequoted. We also do the "percent
5172 hack" for configured domains. This may lead to a DEFER result if a lookup
5173 defers. When a percent-hacking takes place, we insert a copy of the original
5174 address as a new parent of this address, as if we have had a redirection.
5175
5176 Argument:
5177   addr      points to an addr_item block containing the address
5178
5179 Returns:    OK
5180             DEFER   - could not determine if domain is %-hackable
5181 */
5182
5183 int
5184 deliver_split_address(address_item * addr)
5185 {
5186 const uschar * address = addr->address;
5187 uschar * domain;
5188 uschar * t;
5189 int len;
5190
5191 if (!(domain = Ustrrchr(address, '@')))
5192   return DEFER;         /* should always have a domain, but just in case... */
5193
5194 len = domain - address;
5195 addr->domain = string_copylc(domain+1);    /* Domains are always caseless */
5196
5197 /* The implication in the RFCs (though I can't say I've seen it spelled out
5198 explicitly) is that quoting should be removed from local parts at the point
5199 where they are locally interpreted. [The new draft "821" is more explicit on
5200 this, Jan 1999.] We know the syntax is valid, so this can be done by simply
5201 removing quoting backslashes and any unquoted doublequotes. */
5202
5203 addr->cc_local_part = t = store_get(len+1, address);
5204 while(len-- > 0)
5205   {
5206   int c = *address++;
5207   if (c == '\"') continue;
5208   if (c == '\\')
5209     {
5210     *t++ = *address++;
5211     len--;
5212     }
5213   else *t++ = c;
5214   }
5215 *t = '\0';
5216
5217 /* We do the percent hack only for those domains that are listed in
5218 percent_hack_domains. A loop is required, to copy with multiple %-hacks. */
5219
5220 if (percent_hack_domains)
5221   {
5222   int rc;
5223   uschar * new_address = NULL;
5224   const uschar * local_part = addr->cc_local_part;
5225
5226   deliver_domain = addr->domain;  /* set $domain */
5227
5228   while (  (rc = match_isinlist(deliver_domain, (const uschar **)&percent_hack_domains, 0,
5229                &domainlist_anchor, addr->domain_cache, MCL_DOMAIN, TRUE, NULL))
5230              == OK
5231         && (t = Ustrrchr(local_part, '%')) != NULL
5232         )
5233     {
5234     new_address = string_copy(local_part);
5235     new_address[t - local_part] = '@';
5236     deliver_domain = string_copylc(t+1);
5237     local_part = string_copyn(local_part, t - local_part);
5238     }
5239
5240   if (rc == DEFER) return DEFER;   /* lookup deferred */
5241
5242   /* If hackery happened, set up new parent and alter the current address. */
5243
5244   if (new_address)
5245     {
5246     address_item * new_parent = store_get(sizeof(address_item), GET_UNTAINTED);
5247     *new_parent = *addr;
5248     addr->parent = new_parent;
5249     new_parent->child_count = 1;
5250     addr->address = new_address;
5251     addr->unique = string_copy(new_address);
5252     addr->domain = deliver_domain;
5253     addr->cc_local_part = local_part;
5254     DEBUG(D_deliver) debug_printf("%%-hack changed address to: %s\n",
5255       addr->address);
5256     }
5257   }
5258
5259 /* Create the lowercased version of the final local part, and make that the
5260 default one to be used. */
5261
5262 addr->local_part = addr->lc_local_part = string_copylc(addr->cc_local_part);
5263 return OK;
5264 }
5265
5266
5267
5268
5269 /*************************************************
5270 *      Get next error message text               *
5271 *************************************************/
5272
5273 /* If f is not NULL, read the next "paragraph", from a customized error message
5274 text file, terminated by a line containing ****, and expand it.
5275
5276 Arguments:
5277   f          NULL or a file to read from
5278   which      string indicating which string (for errors)
5279
5280 Returns:     NULL or an expanded string
5281 */
5282
5283 static uschar *
5284 next_emf(FILE *f, uschar *which)
5285 {
5286 uschar *yield;
5287 gstring * para;
5288 uschar buffer[256];
5289
5290 if (!f) return NULL;
5291
5292 if (!Ufgets(buffer, sizeof(buffer), f) || Ustrcmp(buffer, "****\n") == 0)
5293   return NULL;
5294
5295 para = string_get(256);
5296 for (;;)
5297   {
5298   para = string_cat(para, buffer);
5299   if (!Ufgets(buffer, sizeof(buffer), f) || Ustrcmp(buffer, "****\n") == 0)
5300     break;
5301   }
5302 if ((yield = expand_string(string_from_gstring(para))))
5303   return yield;
5304
5305 log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand string from "
5306   "bounce_message_file or warn_message_file (%s): %s", which,
5307   expand_string_message);
5308 return NULL;
5309 }
5310
5311
5312
5313
5314 /*************************************************
5315 *      Close down a passed transport channel     *
5316 *************************************************/
5317
5318 /* This function is called when a passed transport channel cannot be used.
5319 It attempts to close it down tidily. The yield is always DELIVER_NOT_ATTEMPTED
5320 so that the function call can be the argument of a "return" statement.
5321
5322 Arguments:  None
5323 Returns:    DELIVER_NOT_ATTEMPTED
5324 */
5325
5326 static int
5327 continue_closedown(void)
5328 {
5329 if (continue_transport)
5330   for (transport_instance * t = transports; t; t = t->next)
5331     if (Ustrcmp(t->name, continue_transport) == 0)
5332       {
5333       if (t->info->closedown) (t->info->closedown)(t);
5334       break;
5335       }
5336 return DELIVER_NOT_ATTEMPTED;
5337 }
5338
5339
5340
5341
5342 /*************************************************
5343 *           Print address information            *
5344 *************************************************/
5345
5346 /* This function is called to output an address, or information about an
5347 address, for bounce or defer messages. If the hide_child flag is set, all we
5348 output is the original ancestor address.
5349
5350 Arguments:
5351   addr         points to the address
5352   f            the FILE to print to
5353   si           an initial string
5354   sc           a continuation string for before "generated"
5355   se           an end string
5356
5357 Returns:       TRUE if the address is not hidden
5358 */
5359
5360 static BOOL
5361 print_address_information(address_item * addr, FILE * f, uschar * si,
5362   uschar * sc, uschar * se)
5363 {
5364 BOOL yield = TRUE;
5365 const uschar * printed = US"";
5366 address_item * ancestor = addr;
5367 while (ancestor->parent) ancestor = ancestor->parent;
5368
5369 fprintf(f, "%s", CS si);
5370
5371 if (addr->parent && testflag(addr, af_hide_child))
5372   {
5373   printed = US"an undisclosed address";
5374   yield = FALSE;
5375   }
5376 else if (!testflag(addr, af_pfr) || !addr->parent)
5377   printed = addr->address;
5378
5379 else
5380   {
5381   const uschar * s = addr->address;
5382   const uschar * ss;
5383
5384   if (addr->address[0] == '>') { ss = US"mail"; s++; }
5385   else if (addr->address[0] == '|') ss = US"pipe";
5386   else ss = US"save";
5387
5388   fprintf(f, "%s to %s%sgenerated by ", ss, s, sc);
5389   printed = addr->parent->address;
5390   }
5391
5392 fprintf(f, "%s", CS string_printing(printed));
5393
5394 if (ancestor != addr)
5395   {
5396   const uschar * original = ancestor->onetime_parent;
5397   if (!original) original= ancestor->address;
5398   if (strcmpic(original, printed) != 0)
5399     fprintf(f, "%s(%sgenerated from %s)", sc,
5400       ancestor != addr->parent ? "ultimately " : "",
5401       string_printing(original));
5402   }
5403
5404 if (addr->host_used)
5405   fprintf(f, "\n    host %s [%s]",
5406           addr->host_used->name, addr->host_used->address);
5407
5408 fprintf(f, "%s", CS se);
5409 return yield;
5410 }
5411
5412
5413
5414
5415
5416 /*************************************************
5417 *         Print error for an address             *
5418 *************************************************/
5419
5420 /* This function is called to print the error information out of an address for
5421 a bounce or a warning message. It tries to format the message reasonably by
5422 introducing newlines. All lines are indented by 4; the initial printing
5423 position must be set before calling.
5424
5425 This function used always to print the error. Nowadays we want to restrict it
5426 to cases such as LMTP/SMTP errors from a remote host, and errors from :fail:
5427 and filter "fail". We no longer pass other information willy-nilly in bounce
5428 and warning messages. Text in user_message is always output; text in message
5429 only if the af_pass_message flag is set.
5430
5431 Arguments:
5432   addr         the address
5433   f            the FILE to print on
5434   t            some leading text
5435
5436 Returns:       nothing
5437 */
5438
5439 static void
5440 print_address_error(address_item * addr, FILE * f, const uschar * t)
5441 {
5442 int count = Ustrlen(t);
5443 uschar * s = testflag(addr, af_pass_message) ? addr->message : NULL;
5444
5445 if (!s && !(s = addr->user_message))
5446   return;
5447
5448 fprintf(f, "\n    %s", t);
5449
5450 while (*s)
5451   if (*s == '\\' && s[1] == 'n')
5452     {
5453     fprintf(f, "\n    ");
5454     s += 2;
5455     count = 0;
5456     }
5457   else
5458     {
5459     fputc(*s, f);
5460     count++;
5461     if (*s++ == ':' && isspace(*s) && count > 45)
5462       {
5463       fprintf(f, "\n   ");  /* sic (because space follows) */
5464       count = 0;
5465       }
5466     else if (count > 254)       /* arbitrary limit */
5467       {
5468       fprintf(f, "[truncated]");
5469       do s++; while (*s && !(*s == '\\' && s[1] == '\n'));
5470       }
5471     }
5472 }
5473
5474
5475 /***********************************************************
5476 *         Print Diagnostic-Code for an address             *
5477 ************************************************************/
5478
5479 /* This function is called to print the error information out of an address for
5480 a bounce or a warning message. It tries to format the message reasonably as
5481 required by RFC 3461 by adding a space after each newline
5482
5483 it uses the same logic as print_address_error() above. if af_pass_message is true
5484 and addr->message is set it uses the remote host answer. if not addr->user_message
5485 is used instead if available.
5486
5487 Arguments:
5488   addr         the address
5489   f            the FILE to print on
5490
5491 Returns:       nothing
5492 */
5493
5494 static void
5495 print_dsn_diagnostic_code(const address_item *addr, FILE *f)
5496 {
5497 uschar * s = testflag(addr, af_pass_message) ? addr->message : NULL;
5498 unsigned cnt;
5499
5500 /* af_pass_message and addr->message set ? print remote host answer */
5501 if (!s)
5502   return;
5503
5504 DEBUG(D_deliver)
5505   debug_printf("DSN Diagnostic-Code: addr->message = %s\n", addr->message);
5506
5507 /* search first ": ". we assume to find the remote-MTA answer there */
5508 if (!(s = Ustrstr(addr->message, ": ")))
5509   return;                               /* not found, bail out */
5510
5511 s += 2;  /* skip ": " */
5512 cnt = fprintf(f, "Diagnostic-Code: smtp; ");
5513
5514 while (*s)
5515   {
5516   if (cnt > 950)        /* RFC line length limit: 998 */
5517     {
5518     DEBUG(D_deliver) debug_printf("print_dsn_diagnostic_code() truncated line\n");
5519     fputs("[truncated]", f);
5520     break;
5521     }
5522
5523   if (*s == '\\' && s[1] == 'n')
5524     {
5525     fputs("\n ", f);    /* as defined in RFC 3461 */
5526     s += 2;
5527     cnt += 2;
5528     }
5529   else
5530     {
5531     fputc(*s++, f);
5532     cnt++;
5533     }
5534   }
5535
5536 fputc('\n', f);
5537 }
5538
5539
5540 /*************************************************
5541 *     Check list of addresses for duplication    *
5542 *************************************************/
5543
5544 /* This function was introduced when the test for duplicate addresses that are
5545 not pipes, files, or autoreplies was moved from the middle of routing to when
5546 routing was complete. That was to fix obscure cases when the routing history
5547 affects the subsequent routing of identical addresses. This function is called
5548 after routing, to check that the final routed addresses are not duplicates.
5549
5550 If we detect a duplicate, we remember what it is a duplicate of. Note that
5551 pipe, file, and autoreply de-duplication is handled during routing, so we must
5552 leave such "addresses" alone here, as otherwise they will incorrectly be
5553 discarded.
5554
5555 Argument:     address of list anchor
5556 Returns:      nothing
5557 */
5558
5559 static void
5560 do_duplicate_check(address_item ** anchor)
5561 {
5562 address_item * addr;
5563 while ((addr = *anchor))
5564   {
5565   tree_node * tnode;
5566   if (testflag(addr, af_pfr))
5567     anchor = &addr->next;
5568   else if ((tnode = tree_search(tree_duplicates, addr->unique)))
5569     {
5570     DEBUG(D_deliver|D_route)
5571       debug_printf("%s is a duplicate address: discarded\n", addr->unique);
5572     *anchor = addr->next;
5573     addr->dupof = tnode->data.ptr;
5574     addr->next = addr_duplicate;
5575     addr_duplicate = addr;
5576     }
5577   else
5578     {
5579     tree_add_duplicate(addr->unique, addr);
5580     anchor = &addr->next;
5581     }
5582   }
5583 }
5584
5585
5586
5587
5588 /************************************************/
5589
5590 static void
5591 print_dsn_addr_action(FILE * f, address_item * addr,
5592   uschar * action, uschar * status)
5593 {
5594 address_item * pa;
5595
5596 if (addr->dsn_orcpt)
5597   fprintf(f,"Original-Recipient: %s\n", addr->dsn_orcpt);
5598
5599 for (pa = addr; pa->parent; ) pa = pa->parent;
5600 fprintf(f, "Action: %s\n"
5601     "Final-Recipient: rfc822;%s\n"
5602     "Status: %s\n",
5603   action, pa->address, status);
5604 }
5605
5606
5607
5608 /* When running in the test harness, there's an option that allows us to
5609 fudge this time so as to get repeatability of the tests. Take the first
5610 time off the list. In queue runs, the list pointer gets updated in the
5611 calling process. */
5612
5613 int
5614 test_harness_fudged_queue_time(int actual_time)
5615 {
5616 int qt;
5617 if (  f.running_in_test_harness && *fudged_queue_times
5618    && (qt = readconf_readtime(fudged_queue_times, '/', FALSE)) >= 0)
5619   {
5620   DEBUG(D_deliver) debug_printf("fudged queue_times = %s\n",
5621     fudged_queue_times);
5622   return qt;
5623   }
5624 return actual_time;
5625 }
5626
5627 /************************************************/
5628
5629 static FILE *
5630 expand_open(const uschar * filename,
5631   const uschar * optname, const uschar * reason)
5632 {
5633 const uschar * s = expand_cstring(filename);
5634 FILE * fp = NULL;
5635
5636 if (!s || !*s)
5637   log_write(0, LOG_MAIN|LOG_PANIC,
5638     "Failed to expand %s: '%s'\n", optname, filename);
5639 else if (*s != '/' || is_tainted(s))
5640   log_write(0, LOG_MAIN|LOG_PANIC,
5641     "%s is not %s after expansion: '%s'\n",
5642     optname, *s == '/' ? "untainted" : "absolute", s);
5643 else if (!(fp = Ufopen(s, "rb")))
5644   log_write(0, LOG_MAIN|LOG_PANIC, "Failed to open %s for %s "
5645     "message texts: %s", s, reason, strerror(errno));
5646 return fp;
5647 }
5648
5649
5650 /* Output the given header and string, converting either
5651 the sequence "\n" or a real newline into newline plus space.
5652 If that still takes us past column 78, look for the last space
5653 and split there too.
5654 Append a newline if string did not have one.
5655 Limit to about 1024 chars total. */
5656
5657 static void
5658 dsn_put_wrapped(FILE * fp, const uschar * header, const uschar * s)
5659 {
5660 gstring * g = string_cat(NULL, header);
5661
5662 g = string_cat(g, s);
5663 gstring_release_unused(g);
5664 fprintf(fp, "%s\n", wrap_header(string_from_gstring(g), 79, 1023, US" ", 1));
5665 }
5666
5667
5668
5669
5670 /*************************************************
5671 *              Send a bounce message             *
5672 *************************************************/
5673
5674 /* Find the error address for the first address, then send a message that
5675 includes all failed addresses that have the same error address. Note the
5676 bounce_recipient is a global so that it can be accessed by $bounce_recipient
5677 while creating a customized error message. */
5678
5679 static void
5680 send_bounce_message(time_t now, const uschar * logtod)
5681 {
5682 pid_t pid;
5683 int fd;
5684
5685 if (!(bounce_recipient = addr_failed->prop.errors_address))
5686   bounce_recipient = sender_address;
5687
5688 /* Make a subprocess to send a message, using its stdin */
5689
5690 if ((pid = child_open_exim(&fd, US"bounce-message")) < 0)
5691   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Process %d (parent %d) failed to "
5692     "create child process to send failure message: %s", getpid(),
5693     getppid(), strerror(errno));
5694
5695 /* Creation of child succeeded */
5696
5697 else
5698   {
5699   int ch, rc, filecount = 0, rcount = 0;
5700   uschar * bcc, * emf_text;
5701   FILE * fp = fdopen(fd, "wb"), * emf = NULL;
5702   BOOL to_sender = strcmpic(sender_address, bounce_recipient) == 0;
5703   int max = (bounce_return_size_limit/DELIVER_IN_BUFFER_SIZE + 1) *
5704     DELIVER_IN_BUFFER_SIZE;
5705   uschar * bound, * dsnlimitmsg, * dsnnotifyhdr;
5706   int topt;
5707   address_item ** paddr;
5708   address_item * msgchain = NULL, ** pmsgchain = &msgchain;
5709   address_item * handled_addr = NULL;
5710
5711   DEBUG(D_deliver)
5712     debug_printf("sending error message to: %s\n", bounce_recipient);
5713
5714   /* Scan the addresses for all that have the same errors address, removing
5715   them from the addr_failed chain, and putting them on msgchain. */
5716
5717   paddr = &addr_failed;
5718   for (address_item * addr = addr_failed; addr; addr = *paddr)
5719     if (Ustrcmp(bounce_recipient, addr->prop.errors_address
5720           ? addr->prop.errors_address : sender_address) == 0)
5721       {                          /* The same - dechain */
5722       *paddr = addr->next;
5723       *pmsgchain = addr;
5724       addr->next = NULL;
5725       pmsgchain = &addr->next;
5726       }
5727     else
5728       paddr = &addr->next;        /* Not the same; skip */
5729
5730   /* Include X-Failed-Recipients: for automatic interpretation, but do
5731   not let any one header line get too long. We do this by starting a
5732   new header every 50 recipients. Omit any addresses for which the
5733   "hide_child" flag is set. */
5734
5735   for (address_item * addr = msgchain; addr; addr = addr->next)
5736     {
5737     if (testflag(addr, af_hide_child)) continue;
5738     if (rcount >= 50)
5739       {
5740       fprintf(fp, "\n");
5741       rcount = 0;
5742       }
5743     fprintf(fp, "%s%s",
5744       rcount++ == 0
5745       ? "X-Failed-Recipients: "
5746       : ",\n  ",
5747       testflag(addr, af_pfr) && addr->parent
5748       ? string_printing(addr->parent->address)
5749       : string_printing(addr->address));
5750     }
5751   if (rcount > 0) fprintf(fp, "\n");
5752
5753   /* Output the standard headers */
5754
5755   if (errors_reply_to)
5756     fprintf(fp, "Reply-To: %s\n", errors_reply_to);
5757   fprintf(fp, "Auto-Submitted: auto-replied\n");
5758   moan_write_from(fp);
5759   fprintf(fp, "To: %s\n", bounce_recipient);
5760   moan_write_references(fp, NULL);
5761
5762   /* generate boundary string and output MIME-Headers */
5763   bound = string_sprintf(TIME_T_FMT "-eximdsn-%d", time(NULL), rand());
5764
5765   fprintf(fp, "Content-Type: multipart/report;"
5766         " report-type=delivery-status; boundary=%s\n"
5767       "MIME-Version: 1.0\n",
5768     bound);
5769
5770   /* Open a template file if one is provided. Log failure to open, but
5771   carry on - default texts will be used. */
5772
5773   GET_OPTION("bounce_message_file");
5774   if (bounce_message_file)
5775     emf = expand_open(bounce_message_file,
5776             US"bounce_message_file", US"error");
5777
5778   /* Quietly copy to configured additional addresses if required. */
5779
5780   if ((bcc = moan_check_errorcopy(bounce_recipient)))
5781     fprintf(fp, "Bcc: %s\n", bcc);
5782
5783   /* The texts for the message can be read from a template file; if there
5784   isn't one, or if it is too short, built-in texts are used. The first
5785   emf text is a Subject: and any other headers. */
5786
5787   if ((emf_text = next_emf(emf, US"header")))
5788     fprintf(fp, "%s\n", emf_text);
5789   else
5790     fprintf(fp, "Subject: Mail delivery failed%s\n\n",
5791       to_sender? ": returning message to sender" : "");
5792
5793   /* output human readable part as text/plain section */
5794   fprintf(fp, "--%s\n"
5795       "Content-type: text/plain; charset=us-ascii\n\n",
5796     bound);
5797
5798   if ((emf_text = next_emf(emf, US"intro")))
5799     fprintf(fp, "%s", CS emf_text);
5800   else
5801     {
5802     fprintf(fp,
5803 /* This message has been reworded several times. It seems to be confusing to
5804 somebody, however it is worded. I have retreated to the original, simple
5805 wording. */
5806 "This message was created automatically by mail delivery software.\n");
5807
5808     if (bounce_message_text)
5809       fprintf(fp, "%s", CS bounce_message_text);
5810     if (to_sender)
5811       fprintf(fp,
5812 "\nA message that you sent could not be delivered to one or more of its\n"
5813 "recipients. This is a permanent error. The following address(es) failed:\n");
5814     else
5815       fprintf(fp,
5816 "\nA message sent by\n\n  <%s>\n\n"
5817 "could not be delivered to one or more of its recipients. The following\n"
5818 "address(es) failed:\n", sender_address);
5819     }
5820   fputc('\n', fp);
5821
5822   /* Process the addresses, leaving them on the msgchain if they have a
5823   file name for a return message. (There has already been a check in
5824   post_process_one() for the existence of data in the message file.) A TRUE
5825   return from print_address_information() means that the address is not
5826   hidden. */
5827
5828   paddr = &msgchain;
5829   for (address_item * addr = msgchain; addr; addr = *paddr)
5830     {
5831     if (print_address_information(addr, fp, US"  ", US"\n    ", US""))
5832       print_address_error(addr, fp, US"");
5833
5834     /* End the final line for the address */
5835
5836     fputc('\n', fp);
5837
5838     /* Leave on msgchain if there's a return file. */
5839
5840     if (addr->return_file >= 0)
5841       {
5842       paddr = &addr->next;
5843       filecount++;
5844       }
5845
5846     /* Else save so that we can tick off the recipient when the
5847     message is sent. */
5848
5849     else
5850       {
5851       *paddr = addr->next;
5852       addr->next = handled_addr;
5853       handled_addr = addr;
5854       }
5855     }
5856
5857   fputc('\n', fp);
5858
5859   /* Get the next text, whether we need it or not, so as to be
5860   positioned for the one after. */
5861
5862   emf_text = next_emf(emf, US"generated text");
5863
5864   /* If there were any file messages passed by the local transports,
5865   include them in the message. Then put the address on the handled chain.
5866   In the case of a batch of addresses that were all sent to the same
5867   transport, the return_file field in all of them will contain the same
5868   fd, and the return_filename field in the *last* one will be set (to the
5869   name of the file). */
5870
5871   if (msgchain)
5872     {
5873     address_item * nextaddr;
5874
5875     if (emf_text)
5876       fprintf(fp, "%s", CS emf_text);
5877     else
5878       fprintf(fp,
5879         "The following text was generated during the delivery "
5880         "attempt%s:\n", (filecount > 1)? "s" : "");
5881
5882     for (address_item * addr = msgchain; addr; addr = nextaddr)
5883       {
5884       FILE *fm;
5885       address_item *topaddr = addr;
5886
5887       /* List all the addresses that relate to this file */
5888
5889       fputc('\n', fp);
5890       while(addr)                   /* Insurance */
5891         {
5892         print_address_information(addr, fp, US"------ ",  US"\n       ",
5893           US" ------\n");
5894         if (addr->return_filename) break;
5895         addr = addr->next;
5896         }
5897       fputc('\n', fp);
5898
5899       /* Now copy the file */
5900
5901       if (!(fm = Ufopen(addr->return_filename, "rb")))
5902         fprintf(fp, "    +++ Exim error... failed to open text file: %s\n",
5903           strerror(errno));
5904       else
5905         {
5906         while ((ch = fgetc(fm)) != EOF) fputc(ch, fp);
5907         (void)fclose(fm);
5908         }
5909       Uunlink(addr->return_filename);
5910
5911       /* Can now add to handled chain, first fishing off the next
5912       address on the msgchain. */
5913
5914       nextaddr = addr->next;
5915       addr->next = handled_addr;
5916       handled_addr = topaddr;
5917       }
5918     fputc('\n', fp);
5919     }
5920
5921   /* output machine readable part */
5922 #ifdef SUPPORT_I18N
5923   if (message_smtputf8)
5924     fprintf(fp, "--%s\n"
5925         "Content-type: message/global-delivery-status\n\n"
5926         "Reporting-MTA: dns; %s\n",
5927       bound, smtp_active_hostname);
5928   else
5929 #endif
5930     fprintf(fp, "--%s\n"
5931         "Content-type: message/delivery-status\n\n"
5932         "Reporting-MTA: dns; %s\n",
5933       bound, smtp_active_hostname);
5934
5935   if (dsn_envid)
5936     {
5937     /* must be decoded from xtext: see RFC 3461:6.3a */
5938     uschar * xdec_envid;
5939     if (auth_xtextdecode(dsn_envid, &xdec_envid) > 0)
5940       fprintf(fp, "Original-Envelope-ID: %s\n", dsn_envid);
5941     else
5942       fprintf(fp, "X-Original-Envelope-ID: error decoding xtext formatted ENVID\n");
5943     }
5944   fputc('\n', fp);
5945
5946   for (address_item * addr = handled_addr; addr; addr = addr->next)
5947     {
5948     host_item * hu;
5949 #ifdef EXPERIMENTAL_DSN_INFO
5950     const uschar * s;
5951 #endif
5952
5953     print_dsn_addr_action(fp, addr, US"failed", US"5.0.0");
5954
5955     if ((hu = addr->host_used) && hu->name)
5956       {
5957       fprintf(fp, "Remote-MTA: dns; %s\n", hu->name);
5958 #ifdef EXPERIMENTAL_DSN_INFO
5959       if (hu->address)
5960         {
5961         uschar * p = hu->port == 25
5962           ? US"" : string_sprintf(":%d", hu->port);
5963         fprintf(fp, "Remote-MTA: X-ip; [%s]%s\n", hu->address, p);
5964         }
5965       if ((s = addr->smtp_greeting) && *s)
5966         dsn_put_wrapped(fp, US"X-Remote-MTA-smtp-greeting: X-str; ", s);
5967       if ((s = addr->helo_response) && *s)
5968         dsn_put_wrapped(fp, US"X-Remote-MTA-helo-response: X-str; ", s);
5969       if (testflag(addr, af_pass_message) && (s = addr->message) && *s)
5970         dsn_put_wrapped(fp, US"X-Exim-Diagnostic: X-str; ", s);
5971 #endif
5972       print_dsn_diagnostic_code(addr, fp);
5973       }
5974 #ifdef EXPERIMENTAL_DSN_INFO
5975       else if (testflag(addr, af_pass_message) && (s = addr->message) && *s)
5976         dsn_put_wrapped(fp, US"X-Exim-Diagnostic: X-str; ", s);
5977 #endif
5978     fputc('\n', fp);
5979     }
5980
5981   /* Now copy the message, trying to give an intelligible comment if
5982   it is too long for it all to be copied. The limit isn't strictly
5983   applied because of the buffering. There is, however, an option
5984   to suppress copying altogether. */
5985
5986   emf_text = next_emf(emf, US"copy");
5987
5988   /* add message body
5989      we ignore the intro text from template and add
5990      the text for bounce_return_size_limit at the end.
5991
5992      bounce_return_message is ignored
5993      in case RET= is defined we honor these values
5994      otherwise bounce_return_body is honored.
5995
5996      bounce_return_size_limit is always honored.
5997   */
5998
5999   fprintf(fp, "--%s\n", bound);
6000
6001   dsnlimitmsg = US"X-Exim-DSN-Information: Due to administrative limits only headers are returned";
6002   dsnnotifyhdr = NULL;
6003   topt = topt_add_return_path;
6004
6005   /* RET=HDRS? top priority */
6006   if (dsn_ret == dsn_ret_hdrs)
6007     topt |= topt_no_body;
6008   else
6009     {
6010     struct stat statbuf;
6011
6012     /* no full body return at all? */
6013     if (!bounce_return_body)
6014       {
6015       topt |= topt_no_body;
6016       /* add header if we overrule RET=FULL */
6017       if (dsn_ret == dsn_ret_full)
6018         dsnnotifyhdr = dsnlimitmsg;
6019       }
6020     /* line length limited... return headers only if oversize */
6021     /* size limited ... return headers only if limit reached */
6022     else if (  max_received_linelength > bounce_return_linesize_limit
6023             || (  bounce_return_size_limit > 0
6024                && fstat(deliver_datafile, &statbuf) == 0
6025                && statbuf.st_size > max
6026             )  )
6027       {
6028       topt |= topt_no_body;
6029       dsnnotifyhdr = dsnlimitmsg;
6030       }
6031     }
6032
6033 #ifdef SUPPORT_I18N
6034   if (message_smtputf8)
6035     fputs(topt & topt_no_body ? "Content-type: message/global-headers\n\n"
6036                               : "Content-type: message/global\n\n",
6037           fp);
6038   else
6039 #endif
6040     fputs(topt & topt_no_body ? "Content-type: text/rfc822-headers\n\n"
6041                               : "Content-type: message/rfc822\n\n",
6042           fp);
6043
6044   fflush(fp);
6045   transport_filter_argv = NULL;   /* Just in case */
6046   return_path = sender_address;   /* In case not previously set */
6047     {                         /* Dummy transport for headers add */
6048     transport_ctx tctx = {{0}};
6049     transport_instance tb = {0};
6050
6051     tctx.u.fd = fileno(fp);
6052     tctx.tblock = &tb;
6053     tctx.options = topt | topt_truncate_headers;
6054     tb.add_headers = dsnnotifyhdr;
6055
6056     /*XXX no checking for failure!  buggy! */
6057     transport_write_message(&tctx, 0);
6058     }
6059   fflush(fp);
6060
6061   /* we never add the final text. close the file */
6062   if (emf)
6063     (void)fclose(emf);
6064
6065   fprintf(fp, "\n--%s--\n", bound);
6066
6067   /* Close the file, which should send an EOF to the child process
6068   that is receiving the message. Wait for it to finish. */
6069
6070   (void)fclose(fp);
6071   rc = child_close(pid, 0);     /* Waits for child to close, no timeout */
6072
6073   /* If the process failed, there was some disaster in setting up the
6074   error message. Unless the message is very old, ensure that addr_defer
6075   is non-null, which will have the effect of leaving the message on the
6076   spool. The failed addresses will get tried again next time. However, we
6077   don't really want this to happen too often, so freeze the message unless
6078   there are some genuine deferred addresses to try. To do this we have
6079   to call spool_write_header() here, because with no genuine deferred
6080   addresses the normal code below doesn't get run. */
6081
6082   if (rc != 0)
6083     {
6084     uschar * s = US"";
6085     if (now - received_time.tv_sec < retry_maximum_timeout && !addr_defer)
6086       {
6087       addr_defer = (address_item *)(+1);
6088       f.deliver_freeze = TRUE;
6089       deliver_frozen_at = time(NULL);
6090       /* Panic-dies on error */
6091       (void)spool_write_header(message_id, SW_DELIVERING, NULL);
6092       s = US" (frozen)";
6093       }
6094     deliver_msglog("Process failed (%d) when writing error message "
6095       "to %s%s", rc, bounce_recipient, s);
6096     log_write(0, LOG_MAIN, "Process failed (%d) when writing error message "
6097       "to %s%s", rc, bounce_recipient, s);
6098     }
6099
6100   /* The message succeeded. Ensure that the recipients that failed are
6101   now marked finished with on the spool and their parents updated. */
6102
6103   else
6104     {
6105     for (address_item * addr = handled_addr; addr; addr = addr->next)
6106       {
6107       address_done(addr, logtod);
6108       child_done(addr, logtod);
6109       }
6110     /* Panic-dies on error */
6111     (void)spool_write_header(message_id, SW_DELIVERING, NULL);
6112     }
6113   }
6114 }
6115
6116 /*************************************************
6117 *              Send a warning message            *
6118 *************************************************/
6119 /* Return: boolean success */
6120
6121 static BOOL
6122 send_warning_message(const uschar * recipients, int queue_time, int show_time)
6123 {
6124 int fd;
6125 pid_t pid = child_open_exim(&fd, US"delay-warning-message");
6126 FILE * wmf = NULL, * f = fdopen(fd, "wb");
6127 uschar * wmf_text, * bound;
6128 transport_ctx tctx = {{0}};
6129
6130
6131 if (pid <= 0) return FALSE;
6132
6133 GET_OPTION("warn_message_file");
6134 if (warn_message_file)
6135   wmf = expand_open(warn_message_file,
6136           US"warn_message_file", US"warning");
6137
6138 warnmsg_recipients = recipients;
6139 warnmsg_delay = queue_time < 120*60
6140   ? string_sprintf("%d minutes", show_time/60)
6141   : string_sprintf("%d hours", show_time/3600);
6142
6143 if (errors_reply_to)
6144   fprintf(f, "Reply-To: %s\n", errors_reply_to);
6145 fprintf(f, "Auto-Submitted: auto-replied\n");
6146 moan_write_from(f);
6147 fprintf(f, "To: %s\n", recipients);
6148 moan_write_references(f, NULL);
6149
6150 /* generated boundary string and output MIME-Headers */
6151 bound = string_sprintf(TIME_T_FMT "-eximdsn-%d", time(NULL), rand());
6152
6153 fprintf(f, "Content-Type: multipart/report;"
6154     " report-type=delivery-status; boundary=%s\n"
6155     "MIME-Version: 1.0\n",
6156   bound);
6157
6158 if ((wmf_text = next_emf(wmf, US"header")))
6159   fprintf(f, "%s\n", wmf_text);
6160 else
6161   fprintf(f, "Subject: Warning: message %s delayed %s\n\n",
6162     message_id, warnmsg_delay);
6163
6164 /* output human readable part as text/plain section */
6165 fprintf(f, "--%s\n"
6166     "Content-type: text/plain; charset=us-ascii\n\n",
6167   bound);
6168
6169 if ((wmf_text = next_emf(wmf, US"intro")))
6170   fprintf(f, "%s", CS wmf_text);
6171 else
6172   {
6173   fprintf(f,
6174 "This message was created automatically by mail delivery software.\n");
6175
6176   if (Ustrcmp(recipients, sender_address) == 0)
6177     fprintf(f,
6178 "A message that you sent has not yet been delivered to one or more of its\n"
6179 "recipients after more than ");
6180
6181   else
6182     fprintf(f,
6183 "A message sent by\n\n  <%s>\n\n"
6184 "has not yet been delivered to one or more of its recipients after more than \n",
6185       sender_address);
6186
6187   fprintf(f, "%s on the queue on %s.\n\n"
6188       "The message identifier is:     %s\n",
6189     warnmsg_delay, primary_hostname, message_id);
6190
6191   for (header_line * h = header_list; h; h = h->next)
6192     if (strncmpic(h->text, US"Subject:", 8) == 0)
6193       fprintf(f, "The subject of the message is: %s", h->text + 9);
6194     else if (strncmpic(h->text, US"Date:", 5) == 0)
6195       fprintf(f, "The date of the message is:    %s", h->text + 6);
6196   fputc('\n', f);
6197
6198   fprintf(f, "The address%s to which the message has not yet been "
6199     "delivered %s:\n",
6200     !addr_defer->next ? "" : "es",
6201     !addr_defer->next ? "is": "are");
6202   }
6203
6204 /* List the addresses, with error information if allowed */
6205
6206 fputc('\n', f);
6207 for (address_item * addr = addr_defer; addr; addr = addr->next)
6208   {
6209   if (print_address_information(addr, f, US"  ", US"\n    ", US""))
6210     print_address_error(addr, f, US"Delay reason: ");
6211   fputc('\n', f);
6212   }
6213 fputc('\n', f);
6214
6215 /* Final text */
6216
6217 if (wmf)
6218   {
6219   if ((wmf_text = next_emf(wmf, US"final")))
6220     fprintf(f, "%s", CS wmf_text);
6221   (void)fclose(wmf);
6222   }
6223 else
6224   {
6225   fprintf(f,
6226 "No action is required on your part. Delivery attempts will continue for\n"
6227 "some time, and this warning may be repeated at intervals if the message\n"
6228 "remains undelivered. Eventually the mail delivery software will give up,\n"
6229 "and when that happens, the message will be returned to you.\n");
6230   }
6231
6232 /* output machine readable part */
6233 fprintf(f, "\n--%s\n"
6234     "Content-type: message/delivery-status\n\n"
6235     "Reporting-MTA: dns; %s\n",
6236   bound,
6237   smtp_active_hostname);
6238
6239
6240 if (dsn_envid)
6241   {
6242   /* must be decoded from xtext: see RFC 3461:6.3a */
6243   uschar *xdec_envid;
6244   if (auth_xtextdecode(dsn_envid, &xdec_envid) > 0)
6245     fprintf(f,"Original-Envelope-ID: %s\n", dsn_envid);
6246   else
6247     fprintf(f,"X-Original-Envelope-ID: error decoding xtext formatted ENVID\n");
6248   }
6249 fputc('\n', f);
6250
6251 for (address_item * addr = addr_defer; addr; addr = addr->next)
6252   {
6253   host_item * hu;
6254
6255   print_dsn_addr_action(f, addr, US"delayed", US"4.0.0");
6256
6257   if ((hu = addr->host_used) && hu->name)
6258     {
6259     fprintf(f, "Remote-MTA: dns; %s\n", hu->name);
6260     print_dsn_diagnostic_code(addr, f);
6261     }
6262   fputc('\n', f);
6263   }
6264
6265 fprintf(f, "--%s\n"
6266     "Content-type: text/rfc822-headers\n\n",
6267   bound);
6268
6269 fflush(f);
6270 /* header only as required by RFC. only failure DSN needs to honor RET=FULL */
6271 tctx.u.fd = fileno(f);
6272 tctx.options = topt_add_return_path | topt_truncate_headers | topt_no_body;
6273 transport_filter_argv = NULL;   /* Just in case */
6274 return_path = sender_address;   /* In case not previously set */
6275
6276 /* Write the original email out */
6277 /*XXX no checking for failure!  buggy! */
6278 transport_write_message(&tctx, 0);
6279 fflush(f);
6280
6281 fprintf(f,"\n--%s--\n", bound);
6282
6283 fflush(f);
6284
6285 /* Close and wait for child process to complete, without a timeout.
6286 If there's an error, don't update the count. */
6287
6288 (void)fclose(f);
6289 return child_close(pid, 0) == 0;
6290 }
6291
6292 /*************************************************
6293 *              Send a success-DSN                *
6294 *************************************************/
6295
6296 static void
6297 maybe_send_dsn(const address_item * const addr_succeed)
6298 {
6299 address_item * addr_senddsn = NULL;
6300
6301 for (const address_item * a = addr_succeed; a; a = a->next)
6302   {
6303   /* af_ignore_error not honored here. it's not an error */
6304   DEBUG(D_deliver) debug_printf("DSN: processing router : %s\n"
6305       "DSN: processing successful delivery address: %s\n"
6306       "DSN: Sender_address: %s\n"
6307       "DSN: orcpt: %s  flags: 0x%x\n"
6308       "DSN: envid: %s  ret: %d\n"
6309       "DSN: Final recipient: %s\n"
6310       "DSN: Remote SMTP server supports DSN: %d\n",
6311       a->router ? a->router->name : US"(unknown)",
6312       a->address,
6313       sender_address,
6314       a->dsn_orcpt ? a->dsn_orcpt : US"NULL",
6315       a->dsn_flags,
6316       dsn_envid ? dsn_envid : US"NULL", dsn_ret,
6317       a->address,
6318       a->dsn_aware
6319       );
6320
6321   /* send report if next hop not DSN aware or a router flagged "last DSN hop"
6322   and a report was requested */
6323
6324   if (  (a->dsn_aware != dsn_support_yes || a->dsn_flags & rf_dsnlasthop)
6325      && a->dsn_flags & rf_notify_success
6326      )
6327     {
6328     /* copy and relink address_item and send report with all of them at once later */
6329     address_item * addr_next = addr_senddsn;
6330     addr_senddsn = store_get(sizeof(address_item), GET_UNTAINTED);
6331     *addr_senddsn = *a;
6332     addr_senddsn->next = addr_next;
6333     }
6334   else
6335     DEBUG(D_deliver) debug_printf("DSN: not sending DSN success message\n");
6336   }
6337
6338 if (addr_senddsn)
6339   {                             /* create exim process to send message */
6340   int fd;
6341   pid_t pid = child_open_exim(&fd, US"DSN");
6342
6343   DEBUG(D_deliver) debug_printf("DSN: child_open_exim returns: %d\n", pid);
6344
6345   if (pid < 0)  /* Creation of child failed */
6346     {
6347     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Process %d (parent %d) failed to "
6348       "create child process to send success-dsn message: %s", getpid(),
6349       getppid(), strerror(errno));
6350
6351     DEBUG(D_deliver) debug_printf("DSN: child_open_exim failed\n");
6352     }
6353   else  /* Creation of child succeeded */
6354     {
6355     FILE * f = fdopen(fd, "wb");
6356     /* header only as required by RFC. only failure DSN needs to honor RET=FULL */
6357     uschar * bound;
6358     transport_ctx tctx = {{0}};
6359
6360     DEBUG(D_deliver)
6361       debug_printf("sending success-dsn to: %s\n", sender_address);
6362
6363     /* build unique id for MIME boundary */
6364     bound = string_sprintf(TIME_T_FMT "-eximdsn-%d", time(NULL), rand());
6365     DEBUG(D_deliver) debug_printf("DSN: MIME boundary: %s\n", bound);
6366
6367     if (errors_reply_to)
6368       fprintf(f, "Reply-To: %s\n", errors_reply_to);
6369
6370     moan_write_from(f);
6371     fprintf(f, "Auto-Submitted: auto-generated\n"
6372         "To: %s\n"
6373         "Subject: Delivery Status Notification\n",
6374       sender_address);
6375     moan_write_references(f, NULL);
6376     fprintf(f, "Content-Type: multipart/report;"
6377                 " report-type=delivery-status; boundary=%s\n"
6378         "MIME-Version: 1.0\n\n"
6379
6380         "--%s\n"
6381         "Content-type: text/plain; charset=us-ascii\n\n"
6382
6383         "This message was created automatically by mail delivery software.\n"
6384         " ----- The following addresses had successful delivery notifications -----\n",
6385       bound, bound);
6386
6387     for (address_item * a = addr_senddsn; a; a = a->next)
6388       fprintf(f, "<%s> (relayed %s)\n\n",
6389         a->address,
6390         a->dsn_flags & rf_dsnlasthop ? "via non DSN router"
6391         : a->dsn_aware == dsn_support_no ? "to non-DSN-aware mailer"
6392         : "via non \"Remote SMTP\" router"
6393         );
6394
6395     fprintf(f, "--%s\n"
6396         "Content-type: message/delivery-status\n\n"
6397         "Reporting-MTA: dns; %s\n",
6398       bound, smtp_active_hostname);
6399
6400     if (dsn_envid)
6401       {                 /* must be decoded from xtext: see RFC 3461:6.3a */
6402       uschar * xdec_envid;
6403       if (auth_xtextdecode(dsn_envid, &xdec_envid) > 0)
6404         fprintf(f, "Original-Envelope-ID: %s\n", dsn_envid);
6405       else
6406         fprintf(f, "X-Original-Envelope-ID: error decoding xtext formatted ENVID\n");
6407       }
6408     fputc('\n', f);
6409
6410     for (address_item * a = addr_senddsn; a; a = a->next)
6411       {
6412       host_item * hu;
6413
6414       print_dsn_addr_action(f, a, US"delivered", US"2.0.0");
6415
6416       if ((hu = a->host_used) && hu->name)
6417         fprintf(f, "Remote-MTA: dns; %s\nDiagnostic-Code: smtp; 250 Ok\n\n",
6418           hu->name);
6419       else
6420         fprintf(f, "Diagnostic-Code: X-Exim; relayed via non %s router\n\n",
6421           a->dsn_flags & rf_dsnlasthop ? "DSN" : "SMTP");
6422       }
6423
6424     fprintf(f, "--%s\nContent-type: text/rfc822-headers\n\n", bound);
6425
6426     fflush(f);
6427     transport_filter_argv = NULL;   /* Just in case */
6428     return_path = sender_address;   /* In case not previously set */
6429
6430     /* Write the original email out */
6431
6432     tctx.u.fd = fd;
6433     tctx.options = topt_add_return_path | topt_truncate_headers | topt_no_body;
6434     /*XXX hmm, FALSE(fail) retval ignored.
6435     Could error for any number of reasons, and they are not handled. */
6436     transport_write_message(&tctx, 0);
6437     fflush(f);
6438
6439     fprintf(f,"\n--%s--\n", bound);
6440
6441     fflush(f);
6442     fclose(f);
6443     (void) child_close(pid, 0);     /* Waits for child to close, no timeout */
6444     }
6445   }
6446 }
6447
6448 /*************************************************
6449 *              Deliver one message               *
6450 *************************************************/
6451
6452 /* This is the function which is called when a message is to be delivered. It
6453 is passed the id of the message. It is possible that the message no longer
6454 exists, if some other process has delivered it, and it is also possible that
6455 the message is being worked on by another process, in which case the data file
6456 will be locked.
6457
6458 If no delivery is attempted for any of the above reasons, the function returns
6459 DELIVER_NOT_ATTEMPTED.
6460
6461 If the give_up flag is set true, do not attempt any deliveries, but instead
6462 fail all outstanding addresses and return the message to the sender (or
6463 whoever).
6464
6465 A delivery operation has a process all to itself; we never deliver more than
6466 one message in the same process. Therefore we needn't worry too much about
6467 store leakage.
6468
6469 Liable to be called as root.
6470
6471 Arguments:
6472   id          the id of the message to be delivered
6473   forced      TRUE if delivery was forced by an administrator; this overrides
6474               retry delays and causes a delivery to be tried regardless
6475   give_up     TRUE if an administrator has requested that delivery attempts
6476               be abandoned
6477
6478 Returns:      When the global variable mua_wrapper is FALSE:
6479                 DELIVER_ATTEMPTED_NORMAL   if a delivery attempt was made
6480                 DELIVER_NOT_ATTEMPTED      otherwise (see comment above)
6481               When the global variable mua_wrapper is TRUE:
6482                 DELIVER_MUA_SUCCEEDED      if delivery succeeded
6483                 DELIVER_MUA_FAILED         if delivery failed
6484                 DELIVER_NOT_ATTEMPTED      if not attempted (should not occur)
6485 */
6486
6487 int
6488 deliver_message(const uschar * id, BOOL forced, BOOL give_up)
6489 {
6490 int i, rc, final_yield, process_recipients;
6491 time_t now;
6492 address_item * addr_last;
6493 uschar * filter_message, * info;
6494 open_db dbblock, * dbm_file;
6495 extern int acl_where;
6496
6497 CONTINUED_ID:
6498 final_yield = DELIVER_ATTEMPTED_NORMAL;
6499 now = time(NULL);
6500 addr_last = NULL;
6501 filter_message = NULL;
6502 process_recipients = RECIP_ACCEPT;
6503
6504 #ifdef MEASURE_TIMING
6505 report_time_since(&timestamp_startup, US"delivery start");      /* testcase 0022, 2100 */
6506 #endif
6507
6508 info = queue_run_pid == (pid_t)0
6509   ? string_sprintf("delivering %s", id)
6510   : string_sprintf("delivering %s (queue run pid %d)", id, queue_run_pid);
6511
6512 /* If the D_process_info bit is on, set_process_info() will output debugging
6513 information. If not, we want to show this initial information if D_deliver or
6514 D_queue_run is set or in verbose mode. */
6515
6516 set_process_info("%s", info);
6517
6518 if (  !(debug_selector & D_process_info)
6519    && (debug_selector & (D_deliver|D_queue_run|D_v))
6520    )
6521   debug_printf("%s\n", info);
6522
6523 /* Ensure that we catch any subprocesses that are created. Although Exim
6524 sets SIG_DFL as its initial default, some routes through the code end up
6525 here with it set to SIG_IGN - cases where a non-synchronous delivery process
6526 has been forked, but no re-exec has been done. We use sigaction rather than
6527 plain signal() on those OS where SA_NOCLDWAIT exists, because we want to be
6528 sure it is turned off. (There was a problem on AIX with this.) */
6529
6530 #ifdef SA_NOCLDWAIT
6531   {
6532   struct sigaction act;
6533   act.sa_handler = SIG_DFL;
6534   sigemptyset(&(act.sa_mask));
6535   act.sa_flags = 0;
6536   sigaction(SIGCHLD, &act, NULL);
6537   }
6538 #else
6539 signal(SIGCHLD, SIG_DFL);
6540 #endif
6541
6542 /* Make the forcing flag available for routers and transports, set up the
6543 global message id field, and initialize the count for returned files and the
6544 message size. This use of strcpy() is OK because the length id is checked when
6545 it is obtained from a command line (the -M or -q options), and otherwise it is
6546 known to be a valid message id. */
6547
6548 if (id != message_id)
6549   Ustrcpy(message_id, id);
6550 f.deliver_force = forced;
6551 return_count = 0;
6552 message_size = 0;
6553
6554 /* Initialize some flags */
6555
6556 update_spool = FALSE;
6557 remove_journal = TRUE;
6558
6559 /* Set a known context for any ACLs we call via expansions */
6560 acl_where = ACL_WHERE_DELIVERY;
6561
6562 /* Reset the random number generator, so that if several delivery processes are
6563 started from a queue runner that has already used random numbers (for sorting),
6564 they don't all get the same sequence. */
6565
6566 random_seed = 0;
6567
6568 /* Open and lock the message's data file. Exim locks on this one because the
6569 header file may get replaced as it is re-written during the delivery process.
6570 Any failures cause messages to be written to the log, except for missing files
6571 while queue running - another process probably completed delivery. As part of
6572 opening the data file, message_subdir gets set. */
6573
6574 if ((deliver_datafile = spool_open_datafile(id)) < 0)
6575   return continue_closedown();  /* yields DELIVER_NOT_ATTEMPTED */
6576
6577 /* The value of message_size at this point has been set to the data length,
6578 plus one for the blank line that notionally precedes the data. */
6579
6580 /* Now read the contents of the header file, which will set up the headers in
6581 store, and also the list of recipients and the tree of non-recipients and
6582 assorted flags. It updates message_size. If there is a reading or format error,
6583 give up; if the message has been around for sufficiently long, remove it. */
6584
6585   {
6586   uschar * spoolname = string_sprintf("%s-H", id);
6587   if ((rc = spool_read_header(spoolname, TRUE, TRUE)) != spool_read_OK)
6588     {
6589     if (errno == ERRNO_SPOOLFORMAT)
6590       {
6591       struct stat statbuf;
6592       if (Ustat(spool_fname(US"input", message_subdir, spoolname, US""),
6593                 &statbuf) == 0)
6594         log_write(0, LOG_MAIN, "Format error in spool file %s: "
6595           "size=" OFF_T_FMT, spoolname, statbuf.st_size);
6596       else
6597         log_write(0, LOG_MAIN, "Format error in spool file %s", spoolname);
6598       }
6599     else
6600       log_write(0, LOG_MAIN, "Error reading spool file %s: %s", spoolname,
6601         strerror(errno));
6602
6603     /* If we managed to read the envelope data, received_time contains the
6604     time the message was received. Otherwise, we can calculate it from the
6605     message id. */
6606
6607     if (rc != spool_read_hdrerror)
6608       {
6609       received_time.tv_sec = received_time.tv_usec = 0;
6610       /*III subsec precision?*/
6611       for (i = 0; i < MESSAGE_ID_TIME_LEN; i++)
6612         received_time.tv_sec = received_time.tv_sec * BASE_62 + tab62[id[i] - '0'];
6613       }
6614
6615     /* If we've had this malformed message too long, sling it. */
6616
6617     if (now - received_time.tv_sec > keep_malformed)
6618       {
6619       Uunlink(spool_fname(US"msglog", message_subdir, id, US""));
6620       Uunlink(spool_fname(US"input", message_subdir, id, US"-D"));
6621       Uunlink(spool_fname(US"input", message_subdir, id, US"-H"));
6622       Uunlink(spool_fname(US"input", message_subdir, id, US"-J"));
6623       log_write(0, LOG_MAIN, "Message removed because older than %s",
6624         readconf_printtime(keep_malformed));
6625       }
6626
6627     (void)close(deliver_datafile);
6628     deliver_datafile = -1;
6629     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6630     }
6631   }
6632
6633 /* The spool header file has been read. Look to see if there is an existing
6634 journal file for this message. If there is, it means that a previous delivery
6635 attempt crashed (program or host) before it could update the spool header file.
6636 Read the list of delivered addresses from the journal and add them to the
6637 nonrecipients tree. Then update the spool file. We can leave the journal in
6638 existence, as it will get further successful deliveries added to it in this
6639 run, and it will be deleted if this function gets to its end successfully.
6640 Otherwise it might be needed again. */
6641
6642   {
6643   uschar * fname = spool_fname(US"input", message_subdir, id, US"-J");
6644   FILE * jread;
6645
6646   if (  (journal_fd = Uopen(fname,
6647               O_RDWR|O_APPEND | EXIM_CLOEXEC | EXIM_NOFOLLOW, SPOOL_MODE)) >= 0
6648      && lseek(journal_fd, 0, SEEK_SET) == 0
6649      && (jread = fdopen(journal_fd, "rb"))
6650      )
6651     {
6652     while (Ufgets(big_buffer, big_buffer_size, jread))
6653       {
6654       int n = Ustrlen(big_buffer);
6655       big_buffer[n-1] = 0;
6656       tree_add_nonrecipient(big_buffer);
6657       DEBUG(D_deliver) debug_printf("Previously delivered address %s taken from "
6658         "journal file\n", big_buffer);
6659       }
6660     rewind(jread);
6661     if ((journal_fd = dup(fileno(jread))) < 0)
6662       journal_fd = fileno(jread);
6663     else
6664       (void) fclose(jread);     /* Try to not leak the FILE resource */
6665
6666     /* Panic-dies on error */
6667     (void)spool_write_header(message_id, SW_DELIVERING, NULL);
6668     }
6669   else if (errno != ENOENT)
6670     {
6671     log_write(0, LOG_MAIN|LOG_PANIC, "attempt to open journal for reading gave: "
6672       "%s", strerror(errno));
6673     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6674     }
6675
6676   /* A null recipients list indicates some kind of disaster. */
6677
6678   if (!recipients_list)
6679     {
6680     (void)close(deliver_datafile);
6681     deliver_datafile = -1;
6682     log_write(0, LOG_MAIN, "Spool error: no recipients for %s", fname);
6683     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6684     }
6685   }
6686
6687
6688 /* Handle a message that is frozen. There are a number of different things that
6689 can happen, but in the default situation, unless forced, no delivery is
6690 attempted. */
6691
6692 if (f.deliver_freeze)
6693   {
6694 #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
6695   /* Moving to another directory removes the message from Exim's view. Other
6696   tools must be used to deal with it. Logging of this action happens in
6697   spool_move_message() and its subfunctions. */
6698
6699   if (  move_frozen_messages
6700      && spool_move_message(id, message_subdir, US"", US"F")
6701      )
6702     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6703 #endif
6704
6705   /* For all frozen messages (bounces or not), timeout_frozen_after sets the
6706   maximum time to keep messages that are frozen. Thaw if we reach it, with a
6707   flag causing all recipients to be failed. The time is the age of the
6708   message, not the time since freezing. */
6709
6710   if (timeout_frozen_after > 0 && message_age >= timeout_frozen_after)
6711     {
6712     log_write(0, LOG_MAIN, "cancelled by timeout_frozen_after");
6713     process_recipients = RECIP_FAIL_TIMEOUT;
6714     }
6715
6716   /* For bounce messages (and others with no sender), thaw if the error message
6717   ignore timer is exceeded. The message will be discarded if this delivery
6718   fails. */
6719
6720   else if (!*sender_address && message_age >= ignore_bounce_errors_after)
6721     log_write(0, LOG_MAIN, "Unfrozen by errmsg timer");
6722
6723   /* If this is a bounce message, or there's no auto thaw, or we haven't
6724   reached the auto thaw time yet, and this delivery is not forced by an admin
6725   user, do not attempt delivery of this message. Note that forced is set for
6726   continuing messages down the same channel, in order to skip load checking and
6727   ignore hold domains, but we don't want unfreezing in that case. */
6728
6729   else
6730     {
6731     if (  (  sender_address[0] == 0
6732           || auto_thaw <= 0
6733           || now <= deliver_frozen_at + auto_thaw
6734           )
6735        && (  !forced || !f.deliver_force_thaw
6736           || !f.admin_user || continue_hostname
6737        )  )
6738       {
6739       (void)close(deliver_datafile);
6740       deliver_datafile = -1;
6741       log_write(L_skip_delivery, LOG_MAIN, "Message is frozen");
6742       return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6743       }
6744
6745     /* If delivery was forced (by an admin user), assume a manual thaw.
6746     Otherwise it's an auto thaw. */
6747
6748     if (forced)
6749       {
6750       f.deliver_manual_thaw = TRUE;
6751       log_write(0, LOG_MAIN, "Unfrozen by forced delivery");
6752       }
6753     else log_write(0, LOG_MAIN, "Unfrozen by auto-thaw");
6754     }
6755
6756   /* We get here if any of the rules for unfreezing have triggered. */
6757
6758   f.deliver_freeze = FALSE;
6759   update_spool = TRUE;
6760   }
6761
6762
6763 /* Open the message log file if we are using them. This records details of
6764 deliveries, deferments, and failures for the benefit of the mail administrator.
6765 The log is not used by exim itself to track the progress of a message; that is
6766 done by rewriting the header spool file. */
6767
6768 if (message_logs)
6769   {
6770   uschar * fname = spool_fname(US"msglog", message_subdir, id, US"");
6771   uschar * error;
6772   int fd;
6773
6774   if ((fd = open_msglog_file(fname, SPOOL_MODE, &error)) < 0)
6775     {
6776     log_write(0, LOG_MAIN|LOG_PANIC, "Couldn't %s message log %s: %s", error,
6777       fname, strerror(errno));
6778     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6779     }
6780
6781   /* Make a stdio stream out of it. */
6782
6783   if (!(message_log = fdopen(fd, "a")))
6784     {
6785     log_write(0, LOG_MAIN|LOG_PANIC, "Couldn't fdopen message log %s: %s",
6786       fname, strerror(errno));
6787     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6788     }
6789   }
6790
6791
6792 /* If asked to give up on a message, log who did it, and set the action for all
6793 the addresses. */
6794
6795 if (give_up)
6796   {
6797   struct passwd *pw = getpwuid(real_uid);
6798   log_write(0, LOG_MAIN, "cancelled by %s",
6799       pw ? US pw->pw_name : string_sprintf("uid %ld", (long int)real_uid));
6800   process_recipients = RECIP_FAIL;
6801   }
6802
6803 /* Otherwise, if there are too many Received: headers, fail all recipients. */
6804
6805 else if (received_count > received_headers_max)
6806   process_recipients = RECIP_FAIL_LOOP;
6807
6808 /* Otherwise, if a system-wide, address-independent message filter is
6809 specified, run it now, except in the case when we are failing all recipients as
6810 a result of timeout_frozen_after. If the system filter yields "delivered", then
6811 ignore the true recipients of the message. Failure of the filter file is
6812 logged, and the delivery attempt fails. */
6813
6814 else if (system_filter && process_recipients != RECIP_FAIL_TIMEOUT)
6815   {
6816   int rc;
6817   int filtertype;
6818   ugid_block ugid;
6819   redirect_block redirect;
6820
6821   if (system_filter_uid_set)
6822     {
6823     ugid.uid = system_filter_uid;
6824     ugid.gid = system_filter_gid;
6825     ugid.uid_set = ugid.gid_set = TRUE;
6826     }
6827   else
6828     ugid.uid_set = ugid.gid_set = FALSE;
6829
6830   return_path = sender_address;
6831   f.enable_dollar_recipients = TRUE;   /* Permit $recipients in system filter */
6832   f.system_filtering = TRUE;
6833
6834   /* Any error in the filter file causes a delivery to be abandoned. */
6835
6836   GET_OPTION("system_filter");
6837   redirect.string = system_filter;
6838   redirect.isfile = TRUE;
6839   redirect.check_owner = redirect.check_group = FALSE;
6840   redirect.owners = NULL;
6841   redirect.owngroups = NULL;
6842   redirect.pw = NULL;
6843   redirect.modemask = 0;
6844
6845   DEBUG(D_deliver|D_filter) debug_printf("running system filter\n");
6846
6847   rc = rda_interpret(
6848     &redirect,              /* Where the data is */
6849     RDO_DEFER |             /* Turn on all the enabling options */
6850       RDO_FAIL |            /* Leave off all the disabling options */
6851       RDO_FILTER |
6852       RDO_FREEZE |
6853       RDO_REALLOG |
6854       RDO_REWRITE,
6855     NULL,                   /* No :include: restriction (not used in filter) */
6856     NULL,                   /* No sieve vacation directory (not sieve!) */
6857     NULL,                   /* No sieve enotify mailto owner (not sieve!) */
6858     NULL,                   /* No sieve user address (not sieve!) */
6859     NULL,                   /* No sieve subaddress (not sieve!) */
6860     &ugid,                  /* uid/gid data */
6861     &addr_new,              /* Where to hang generated addresses */
6862     &filter_message,        /* Where to put error message */
6863     NULL,                   /* Don't skip syntax errors */
6864     &filtertype,            /* Will always be set to FILTER_EXIM for this call */
6865     US"system filter");     /* For error messages */
6866
6867   DEBUG(D_deliver|D_filter) debug_printf("system filter returned %d\n", rc);
6868
6869   if (rc == FF_ERROR || rc == FF_NONEXIST)
6870     {
6871     (void)close(deliver_datafile);
6872     deliver_datafile = -1;
6873     log_write(0, LOG_MAIN|LOG_PANIC, "Error in system filter: %s",
6874       string_printing(filter_message));
6875     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
6876     }
6877
6878   /* Reset things. If the filter message is an empty string, which can happen
6879   for a filter "fail" or "freeze" command with no text, reset it to NULL. */
6880
6881   f.system_filtering = FALSE;
6882   f.enable_dollar_recipients = FALSE;
6883   if (filter_message && filter_message[0] == 0) filter_message = NULL;
6884
6885   /* Save the values of the system filter variables so that user filters
6886   can use them. */
6887
6888   memcpy(filter_sn, filter_n, sizeof(filter_sn));
6889
6890   /* The filter can request that delivery of the original addresses be
6891   deferred. */
6892
6893   if (rc == FF_DEFER)
6894     {
6895     process_recipients = RECIP_DEFER;
6896     deliver_msglog("Delivery deferred by system filter\n");
6897     log_write(0, LOG_MAIN, "Delivery deferred by system filter");
6898     }
6899
6900   /* The filter can request that a message be frozen, but this does not
6901   take place if the message has been manually thawed. In that case, we must
6902   unset "delivered", which is forced by the "freeze" command to make -bF
6903   work properly. */
6904
6905   else if (rc == FF_FREEZE && !f.deliver_manual_thaw)
6906     {
6907     f.deliver_freeze = TRUE;
6908     deliver_frozen_at = time(NULL);
6909     process_recipients = RECIP_DEFER;
6910     frozen_info = string_sprintf(" by the system filter%s%s",
6911       filter_message ? US": " : US"",
6912       filter_message ? filter_message : US"");
6913     }
6914
6915   /* The filter can request that a message be failed. The error message may be
6916   quite long - it is sent back to the sender in the bounce - but we don't want
6917   to fill up the log with repetitions of it. If it starts with << then the text
6918   between << and >> is written to the log, with the rest left for the bounce
6919   message. */
6920
6921   else if (rc == FF_FAIL)
6922     {
6923     uschar *colon = US"";
6924     uschar *logmsg = US"";
6925     int loglen = 0;
6926
6927     process_recipients = RECIP_FAIL_FILTER;
6928
6929     if (filter_message)
6930       {
6931       uschar *logend;
6932       colon = US": ";
6933       if (  filter_message[0] == '<'
6934          && filter_message[1] == '<'
6935          && (logend = Ustrstr(filter_message, ">>"))
6936          )
6937         {
6938         logmsg = filter_message + 2;
6939         loglen = logend - logmsg;
6940         filter_message = logend + 2;
6941         if (filter_message[0] == 0) filter_message = NULL;
6942         }
6943       else
6944         {
6945         logmsg = filter_message;
6946         loglen = Ustrlen(filter_message);
6947         }
6948       }
6949
6950     log_write(0, LOG_MAIN, "cancelled by system filter%s%.*s", colon, loglen,
6951       logmsg);
6952     }
6953
6954   /* Delivery can be restricted only to those recipients (if any) that the
6955   filter specified. */
6956
6957   else if (rc == FF_DELIVERED)
6958     {
6959     process_recipients = RECIP_IGNORE;
6960     if (addr_new)
6961       log_write(0, LOG_MAIN, "original recipients ignored (system filter)");
6962     else
6963       log_write(0, LOG_MAIN, "=> discarded (system filter)");
6964     }
6965
6966   /* If any new addresses were created by the filter, fake up a "parent"
6967   for them. This is necessary for pipes, etc., which are expected to have
6968   parents, and it also gives some sensible logging for others. Allow
6969   pipes, files, and autoreplies, and run them as the filter uid if set,
6970   otherwise as the current uid. */
6971
6972   if (addr_new)
6973     {
6974     int uid = system_filter_uid_set ? system_filter_uid : geteuid();
6975     int gid = system_filter_gid_set ? system_filter_gid : getegid();
6976
6977     /* The text "system-filter" is tested in transport_set_up_command() and in
6978     set_up_shell_command() in the pipe transport, to enable them to permit
6979     $recipients, so don't change it here without also changing it there. */
6980
6981     address_item *p = addr_new;
6982     address_item *parent = deliver_make_addr(US"system-filter", FALSE);
6983
6984     parent->domain = string_copylc(qualify_domain_recipient);
6985     parent->local_part = US"system-filter";
6986
6987     /* As part of this loop, we arrange for addr_last to end up pointing
6988     at the final address. This is used if we go on to add addresses for the
6989     original recipients. */
6990
6991     while (p)
6992       {
6993       if (parent->child_count == USHRT_MAX)
6994         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "system filter generated more "
6995           "than %d delivery addresses", USHRT_MAX);
6996       parent->child_count++;
6997       p->parent = parent;
6998
6999       if (testflag(p, af_pfr))
7000         {
7001         uschar *tpname;
7002         uschar *type;
7003         p->uid = uid;
7004         p->gid = gid;
7005         setflag(p, af_uid_set);
7006         setflag(p, af_gid_set);
7007         setflag(p, af_allow_file);
7008         setflag(p, af_allow_pipe);
7009         setflag(p, af_allow_reply);
7010
7011         /* Find the name of the system filter's appropriate pfr transport */
7012
7013         if (p->address[0] == '|')
7014           {
7015           type = US"pipe";
7016           GET_OPTION("system_filter_pipe_transport");
7017           tpname = system_filter_pipe_transport;
7018           address_pipe = p->address;
7019           }
7020         else if (p->address[0] == '>')
7021           {
7022           type = US"reply";
7023           GET_OPTION("system_filter_reply_transport");
7024           tpname = system_filter_reply_transport;
7025           }
7026         else
7027           {
7028           if (p->address[Ustrlen(p->address)-1] == '/')
7029             {
7030             type = US"directory";
7031             GET_OPTION("system_filter_directory_transport");
7032             tpname = system_filter_directory_transport;
7033             }
7034           else
7035             {
7036             type = US"file";
7037             GET_OPTION("system_filter_file_transport");
7038             tpname = system_filter_file_transport;
7039             }
7040           address_file = p->address;
7041           }
7042
7043         /* Now find the actual transport, first expanding the name. We have
7044         set address_file or address_pipe above. */
7045
7046         if (tpname)
7047           {
7048           uschar *tmp = expand_string(tpname);
7049           address_file = address_pipe = NULL;
7050           if (!tmp)
7051             p->message = string_sprintf("failed to expand \"%s\" as a "
7052               "system filter transport name", tpname);
7053           if (is_tainted(tmp))
7054             p->message = string_sprintf("attempt to used tainted value '%s' for"
7055               "transport '%s' as a system filter", tmp, tpname);
7056           tpname = tmp;
7057           }
7058         else
7059           p->message = string_sprintf("system_filter_%s_transport is unset",
7060             type);
7061
7062         if (tpname)
7063           {
7064           transport_instance *tp;
7065           for (tp = transports; tp; tp = tp->next)
7066             if (Ustrcmp(tp->name, tpname) == 0)
7067               {
7068               p->transport = tp;
7069               break;
7070               }
7071           if (!tp)
7072             p->message = string_sprintf("failed to find \"%s\" transport "
7073               "for system filter delivery", tpname);
7074           }
7075
7076         /* If we couldn't set up a transport, defer the delivery, putting the
7077         error on the panic log as well as the main log. */
7078
7079         if (!p->transport)
7080           {
7081           address_item * badp = p;
7082           p = p->next;
7083           if (!addr_last) addr_new = p; else addr_last->next = p;
7084           badp->local_part = badp->address;   /* Needed for log line */
7085           post_process_one(badp, DEFER, LOG_MAIN|LOG_PANIC, EXIM_DTYPE_ROUTER, 0);
7086           continue;
7087           }
7088         }    /* End of pfr handling */
7089
7090       /* Either a non-pfr delivery, or we found a transport */
7091
7092       DEBUG(D_deliver|D_filter)
7093         debug_printf("system filter added %s\n", p->address);
7094
7095       addr_last = p;
7096       p = p->next;
7097       }    /* Loop through all addr_new addresses */
7098     }
7099   }
7100
7101
7102 /* Scan the recipients list, and for every one that is not in the non-
7103 recipients tree, add an addr item to the chain of new addresses. If the pno
7104 value is non-negative, we must set the onetime parent from it. This which
7105 points to the relevant entry in the recipients list.
7106
7107 This processing can be altered by the setting of the process_recipients
7108 variable, which is changed if recipients are to be ignored, failed, or
7109 deferred. This can happen as a result of system filter activity, or if the -Mg
7110 option is used to fail all of them.
7111
7112 Duplicate addresses are handled later by a different tree structure; we can't
7113 just extend the non-recipients tree, because that will be re-written to the
7114 spool if the message is deferred, and in any case there are casing
7115 complications for local addresses. */
7116
7117 if (process_recipients != RECIP_IGNORE)
7118   for (i = 0; i < recipients_count; i++)
7119     if (!tree_search(tree_nonrecipients, recipients_list[i].address))
7120       {
7121       recipient_item * r = recipients_list + i;
7122       address_item * new = deliver_make_addr(r->address, FALSE);
7123
7124       new->prop.errors_address = r->errors_to;
7125 #ifdef SUPPORT_I18N
7126       if ((new->prop.utf8_msg = message_smtputf8))
7127         {
7128         new->prop.utf8_downcvt =       message_utf8_downconvert == 1;
7129         new->prop.utf8_downcvt_maybe = message_utf8_downconvert == -1;
7130         DEBUG(D_deliver) debug_printf("utf8, downconvert %s\n",
7131           new->prop.utf8_downcvt ? "yes"
7132           : new->prop.utf8_downcvt_maybe ? "ifneeded"
7133           : "no");
7134         }
7135 #endif
7136
7137       if (r->pno >= 0)
7138         new->onetime_parent = recipients_list[r->pno].address;
7139
7140       /* If DSN support is enabled, set the dsn flags and the original receipt
7141       to be passed on to other DSN enabled MTAs */
7142
7143       new->dsn_flags = r->dsn_flags & rf_dsnflags;
7144       new->dsn_orcpt = r->orcpt;
7145       DEBUG(D_deliver) debug_printf("DSN: set orcpt: %s  flags: 0x%x\n",
7146         new->dsn_orcpt ? new->dsn_orcpt : US"", new->dsn_flags);
7147
7148       switch (process_recipients)
7149         {
7150         /* RECIP_DEFER is set when a system filter freezes a message. */
7151
7152         case RECIP_DEFER:
7153           new->next = addr_defer;
7154           addr_defer = new;
7155           break;
7156
7157
7158         /* RECIP_FAIL_FILTER is set when a system filter has obeyed a "fail"
7159         command. */
7160
7161         case RECIP_FAIL_FILTER:
7162           new->message =
7163             filter_message ? filter_message : US"delivery cancelled";
7164           setflag(new, af_pass_message);
7165           goto RECIP_QUEUE_FAILED;   /* below */
7166
7167
7168         /* RECIP_FAIL_TIMEOUT is set when a message is frozen, but is older
7169         than the value in timeout_frozen_after. Treat non-bounce messages
7170         similarly to -Mg; for bounce messages we just want to discard, so
7171         don't put the address on the failed list. The timeout has already
7172         been logged. */
7173
7174         case RECIP_FAIL_TIMEOUT:
7175           new->message  = US"delivery cancelled; message timed out";
7176           goto RECIP_QUEUE_FAILED;   /* below */
7177
7178
7179         /* RECIP_FAIL is set when -Mg has been used. */
7180
7181         case RECIP_FAIL:
7182           new->message  = US"delivery cancelled by administrator";
7183           /* not setting af_pass_message here means that will not
7184           appear in the bounce message */
7185           /* Fall through */
7186
7187         /* Common code for the failure cases above. If this is not a bounce
7188         message, put the address on the failed list so that it is used to
7189         create a bounce. Otherwise do nothing - this just discards the address.
7190         The incident has already been logged. */
7191
7192         RECIP_QUEUE_FAILED:
7193           if (*sender_address)
7194             {
7195             new->next = addr_failed;
7196             addr_failed = new;
7197             }
7198         break;
7199
7200
7201         /* RECIP_FAIL_LOOP is set when there are too many Received: headers
7202         in the message. Process each address as a routing failure; if this
7203         is a bounce message, it will get frozen. */
7204
7205         case RECIP_FAIL_LOOP:
7206           new->message = US"Too many \"Received\" headers - suspected mail loop";
7207           post_process_one(new, FAIL, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7208           break;
7209
7210
7211         /* Value should be RECIP_ACCEPT; take this as the safe default. */
7212
7213         default:
7214           if (!addr_new) addr_new = new; else addr_last->next = new;
7215           addr_last = new;
7216           break;
7217         }
7218
7219 #ifndef DISABLE_EVENT
7220       if (process_recipients != RECIP_ACCEPT && event_action)
7221         {
7222         const uschar * save_local =  deliver_localpart;
7223         const uschar * save_domain = deliver_domain;
7224         const uschar * addr = new->address;
7225         uschar * errmsg = NULL;
7226         int start, end, dom;
7227
7228         if (!parse_extract_address(addr, &errmsg, &start, &end, &dom, TRUE))
7229           log_write(0, LOG_MAIN|LOG_PANIC,
7230                 "failed to parse address '%.100s': %s\n", addr, errmsg);
7231         else
7232           {
7233           deliver_localpart =
7234             string_copyn(addr+start, dom ? (dom-1) - start : end - start);
7235           deliver_domain = dom ? CUS string_copyn(addr+dom, end - dom) : CUS"";
7236
7237           (void) event_raise(event_action, US"msg:fail:internal", new->message, NULL);
7238
7239           deliver_localpart = save_local;
7240           deliver_domain = save_domain;
7241           }
7242         }
7243 #endif
7244       }
7245
7246 DEBUG(D_deliver)
7247   {
7248   debug_printf("Delivery address list:\n");
7249   for (address_item * p = addr_new; p; p = p->next)
7250     debug_printf("  %s %s\n", p->address,
7251       p->onetime_parent ? p->onetime_parent : US"");
7252   }
7253
7254 /* Set up the buffers used for copying over the file when delivering. */
7255
7256 deliver_in_buffer = store_malloc(DELIVER_IN_BUFFER_SIZE);
7257 deliver_out_buffer = store_malloc(DELIVER_OUT_BUFFER_SIZE);
7258
7259
7260
7261 /* Until there are no more new addresses, handle each one as follows:
7262
7263  . If this is a generated address (indicated by the presence of a parent
7264    pointer) then check to see whether it is a pipe, file, or autoreply, and
7265    if so, handle it directly here. The router that produced the address will
7266    have set the allow flags into the address, and also set the uid/gid required.
7267    Having the routers generate new addresses and then checking them here at
7268    the outer level is tidier than making each router do the checking, and
7269    means that routers don't need access to the failed address queue.
7270
7271  . Break up the address into local part and domain, and make lowercased
7272    versions of these strings. We also make unquoted versions of the local part.
7273
7274  . Handle the percent hack for those domains for which it is valid.
7275
7276  . For child addresses, determine if any of the parents have the same address.
7277    If so, generate a different string for previous delivery checking. Without
7278    this code, if the address spqr generates spqr via a forward or alias file,
7279    delivery of the generated spqr stops further attempts at the top level spqr,
7280    which is not what is wanted - it may have generated other addresses.
7281
7282  . Check on the retry database to see if routing was previously deferred, but
7283    only if in a queue run. Addresses that are to be routed are put on the
7284    addr_route chain. Addresses that are to be deferred are put on the
7285    addr_defer chain. We do all the checking first, so as not to keep the
7286    retry database open any longer than necessary.
7287
7288  . Now we run the addresses through the routers. A router may put the address
7289    on either the addr_local or the addr_remote chain for local or remote
7290    delivery, respectively, or put it on the addr_failed chain if it is
7291    undeliveable, or it may generate child addresses and put them on the
7292    addr_new chain, or it may defer an address. All the chain anchors are
7293    passed as arguments so that the routers can be called for verification
7294    purposes as well.
7295
7296  . If new addresses have been generated by the routers, da capo.
7297 */
7298
7299 f.header_rewritten = FALSE;          /* No headers rewritten yet */
7300 while (addr_new)           /* Loop until all addresses dealt with */
7301   {
7302   address_item * addr, * parent;
7303
7304   /* Failure to open the retry database is treated the same as if it does
7305   not exist. In both cases, dbm_file is NULL.  For the first stage of a 2-phase
7306   queue run don't bother checking domain- or address-retry info; they will take
7307   effect on the second stage. */
7308
7309   if (f.queue_2stage)
7310     dbm_file = NULL;
7311   else
7312     {
7313     /* If we have transaction-capable hintsdbs, open the retry db without
7314     locking, and leave open for the transport process and for subsequent
7315     deliveries. If the open fails, tag that explicitly for the transport but
7316     retry the open next time around, in case it was created in the interim. */
7317
7318     if (continue_retry_db == (open_db *)-1)
7319       continue_retry_db = NULL;
7320
7321     if (continue_retry_db)
7322       dbm_file = continue_retry_db;
7323     else if (!exim_lockfile_needed() && continue_transport)
7324       {
7325       dbm_file = dbfn_open_multi(US"retry", O_RDONLY, &dbblock);
7326       continue_retry_db = dbm_file ? dbm_file : (open_db *)-1;
7327       }
7328     else
7329       dbm_file = dbfn_open(US"retry", O_RDONLY, &dbblock, FALSE, TRUE);
7330
7331     if (!dbm_file)
7332       DEBUG(D_deliver|D_retry|D_route|D_hints_lookup)
7333         debug_printf("no retry data available\n");
7334     }
7335
7336   /* Scan the current batch of new addresses, to handle pipes, files and
7337   autoreplies, and determine which others are ready for routing. */
7338
7339   while (addr_new)
7340     {
7341     int rc;
7342     tree_node * tnode;
7343     dbdata_retry * domain_retry_record, * address_retry_record;
7344
7345     addr = addr_new;
7346     addr_new = addr->next;
7347
7348     DEBUG(D_deliver|D_retry|D_route)
7349       {
7350       debug_printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
7351       debug_printf("Considering: %s\n", addr->address);
7352       }
7353
7354     /* Handle generated address that is a pipe or a file or an autoreply. */
7355
7356     if (testflag(addr, af_pfr))
7357       {
7358       /* If an autoreply in a filter could not generate a syntactically valid
7359       address, give up forthwith. Set af_ignore_error so that we don't try to
7360       generate a bounce. */
7361
7362       if (testflag(addr, af_bad_reply))
7363         {
7364         addr->basic_errno = ERRNO_BADADDRESS2;
7365         addr->local_part = addr->address;
7366         addr->message =
7367           US"filter autoreply generated syntactically invalid recipient";
7368         addr->prop.ignore_error = TRUE;
7369         (void) post_process_one(addr, FAIL, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7370         continue;   /* with the next new address */
7371         }
7372
7373       /* If two different users specify delivery to the same pipe or file or
7374       autoreply, there should be two different deliveries, so build a unique
7375       string that incorporates the original address, and use this for
7376       duplicate testing and recording delivery, and also for retrying. */
7377
7378       addr->unique =
7379         string_sprintf("%s:%s", addr->address, addr->parent->unique +
7380           (testflag(addr->parent, af_homonym) ? 3:0));
7381
7382       addr->address_retry_key = addr->domain_retry_key =
7383         string_sprintf("T:%s", addr->unique);
7384
7385       /* If a filter file specifies two deliveries to the same pipe or file,
7386       we want to de-duplicate, but this is probably not wanted for two mail
7387       commands to the same address, where probably both should be delivered.
7388       So, we have to invent a different unique string in that case. Just
7389       keep piling '>' characters on the front. */
7390
7391       if (addr->address[0] == '>')
7392         while (tree_search(tree_duplicates, addr->unique))
7393           addr->unique = string_sprintf(">%s", addr->unique);
7394
7395       else if ((tnode = tree_search(tree_duplicates, addr->unique)))
7396         {
7397         DEBUG(D_deliver|D_route)
7398           debug_printf("%s is a duplicate address: discarded\n", addr->address);
7399         addr->dupof = tnode->data.ptr;
7400         addr->next = addr_duplicate;
7401         addr_duplicate = addr;
7402         continue;
7403         }
7404
7405       DEBUG(D_deliver|D_route) debug_printf("unique = %s\n", addr->unique);
7406
7407       /* Check for previous delivery */
7408
7409       if (tree_search(tree_nonrecipients, addr->unique))
7410         {
7411         DEBUG(D_deliver|D_route)
7412           debug_printf("%s was previously delivered: discarded\n", addr->address);
7413         child_done(addr, tod_stamp(tod_log));
7414         continue;
7415         }
7416
7417       /* Save for checking future duplicates */
7418
7419       tree_add_duplicate(addr->unique, addr);
7420
7421       /* Set local part and domain */
7422
7423       addr->local_part = addr->address;
7424       addr->domain = addr->parent->domain;
7425
7426       /* Ensure that the delivery is permitted. */
7427
7428       if (testflag(addr, af_file))
7429         {
7430         if (!testflag(addr, af_allow_file))
7431           {
7432           addr->basic_errno = ERRNO_FORBIDFILE;
7433           addr->message = US"delivery to file forbidden";
7434           (void)post_process_one(addr, FAIL, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7435           continue;   /* with the next new address */
7436           }
7437         }
7438       else if (addr->address[0] == '|')
7439         {
7440         if (!testflag(addr, af_allow_pipe))
7441           {
7442           addr->basic_errno = ERRNO_FORBIDPIPE;
7443           addr->message = US"delivery to pipe forbidden";
7444           (void)post_process_one(addr, FAIL, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7445           continue;   /* with the next new address */
7446           }
7447         }
7448       else if (!testflag(addr, af_allow_reply))
7449         {
7450         addr->basic_errno = ERRNO_FORBIDREPLY;
7451         addr->message = US"autoreply forbidden";
7452         (void)post_process_one(addr, FAIL, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7453         continue;     /* with the next new address */
7454         }
7455
7456       /* If the errno field is already set to BADTRANSPORT, it indicates
7457       failure to expand a transport string, or find the associated transport,
7458       or an unset transport when one is required. Leave this test till now so
7459       that the forbid errors are given in preference. */
7460
7461       if (addr->basic_errno == ERRNO_BADTRANSPORT)
7462         {
7463         (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7464         continue;
7465         }
7466
7467       /* Treat /dev/null as a special case and abandon the delivery. This
7468       avoids having to specify a uid on the transport just for this case.
7469       Arrange for the transport name to be logged as "**bypassed**".
7470       Copy the transport for this fairly unusual case rather than having
7471       to make all transports mutable. */
7472
7473       if (Ustrcmp(addr->address, "/dev/null") == 0)
7474         {
7475         transport_instance * save_t = addr->transport;
7476         transport_instance * t = store_get(sizeof(*t), save_t);
7477         *t = *save_t;
7478         t->name = US"**bypassed**";
7479         addr->transport = t;
7480         (void)post_process_one(addr, OK, LOG_MAIN, EXIM_DTYPE_TRANSPORT, '=');
7481         addr->transport= save_t;
7482         continue;   /* with the next new address */
7483         }
7484
7485       /* Pipe, file, or autoreply delivery is to go ahead as a normal local
7486       delivery. */
7487
7488       DEBUG(D_deliver|D_route)
7489         debug_printf("queued for %s transport\n", addr->transport->name);
7490       addr->next = addr_local;
7491       addr_local = addr;
7492       continue;       /* with the next new address */
7493       }
7494
7495     /* Handle normal addresses. First, split up into local part and domain,
7496     handling the %-hack if necessary. There is the possibility of a defer from
7497     a lookup in percent_hack_domains. */
7498
7499     if ((rc = deliver_split_address(addr)) == DEFER)
7500       {
7501       addr->message = US"cannot check percent_hack_domains";
7502       addr->basic_errno = ERRNO_LISTDEFER;
7503       (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_NONE, 0);
7504       continue;
7505       }
7506
7507     /* Check to see if the domain is held. If so, proceed only if the
7508     delivery was forced by hand. */
7509
7510     deliver_domain = addr->domain;  /* set $domain */
7511     if (  !forced && hold_domains
7512        && (rc = match_isinlist(addr->domain, (const uschar **)&hold_domains, 0,
7513            &domainlist_anchor, addr->domain_cache, MCL_DOMAIN, TRUE,
7514            NULL)) != FAIL
7515        )
7516       {
7517       if (rc == DEFER)
7518         {
7519         addr->message = US"hold_domains lookup deferred";
7520         addr->basic_errno = ERRNO_LISTDEFER;
7521         }
7522       else
7523         {
7524         addr->message = US"domain is held";
7525         addr->basic_errno = ERRNO_HELD;
7526         }
7527       (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_NONE, 0);
7528       continue;
7529       }
7530
7531     /* Now we can check for duplicates and previously delivered addresses. In
7532     order to do this, we have to generate a "unique" value for each address,
7533     because there may be identical actual addresses in a line of descendents.
7534     The "unique" field is initialized to the same value as the "address" field,
7535     but gets changed here to cope with identically-named descendents. */
7536
7537     for (parent = addr->parent; parent; parent = parent->parent)
7538       if (strcmpic(addr->address, parent->address) == 0) break;
7539
7540     /* If there's an ancestor with the same name, set the homonym flag. This
7541     influences how deliveries are recorded. Then add a prefix on the front of
7542     the unique address. We use \n\ where n starts at 0 and increases each time.
7543     It is unlikely to pass 9, but if it does, it may look odd but will still
7544     work. This means that siblings or cousins with the same names are treated
7545     as duplicates, which is what we want. */
7546
7547     if (parent)
7548       {
7549       setflag(addr, af_homonym);
7550       if (parent->unique[0] != '\\')
7551         addr->unique = string_sprintf("\\0\\%s", addr->address);
7552       else
7553         addr->unique = string_sprintf("\\%c\\%s", parent->unique[1] + 1,
7554           addr->address);
7555       }
7556
7557     /* Ensure that the domain in the unique field is lower cased, because
7558     domains are always handled caselessly. */
7559
7560     for (uschar * p = Ustrrchr(addr->unique, '@'); *p; p++) *p = tolower(*p);
7561
7562     DEBUG(D_deliver|D_route) debug_printf("unique = %s\n", addr->unique);
7563
7564     if (tree_search(tree_nonrecipients, addr->unique))
7565       {
7566       DEBUG(D_deliver|D_route)
7567         debug_printf("%s was previously delivered: discarded\n", addr->unique);
7568       child_done(addr, tod_stamp(tod_log));
7569       continue;
7570       }
7571
7572     /* Get the routing retry status, saving the two retry keys (with and
7573     without the local part) for subsequent use. If there is no retry record for
7574     the standard address routing retry key, we look for the same key with the
7575     sender attached, because this form is used by the smtp transport after a
7576     4xx response to RCPT when address_retry_include_sender is true. */
7577
7578     addr->domain_retry_key = string_sprintf("R:%s", addr->domain);
7579     addr->address_retry_key = string_sprintf("R:%s@%s", addr->local_part,
7580       addr->domain);
7581
7582     if (dbm_file)
7583       {
7584       domain_retry_record = dbfn_read(dbm_file, addr->domain_retry_key);
7585       if (  domain_retry_record
7586          && now - domain_retry_record->time_stamp > retry_data_expire
7587          )
7588         {
7589         DEBUG(D_deliver|D_retry)
7590           debug_printf("domain retry record present but expired\n");
7591         domain_retry_record = NULL;    /* Ignore if too old */
7592         }
7593
7594       address_retry_record = dbfn_read(dbm_file, addr->address_retry_key);
7595       if (  address_retry_record
7596          && now - address_retry_record->time_stamp > retry_data_expire
7597          )
7598         {
7599         DEBUG(D_deliver|D_retry)
7600           debug_printf("address retry record present but expired\n");
7601         address_retry_record = NULL;   /* Ignore if too old */
7602         }
7603
7604       if (!address_retry_record)
7605         {
7606         uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
7607           sender_address);
7608         address_retry_record = dbfn_read(dbm_file, altkey);
7609         if (  address_retry_record
7610            && now - address_retry_record->time_stamp > retry_data_expire)
7611           {
7612           DEBUG(D_deliver|D_retry)
7613             debug_printf("address<sender> retry record present but expired\n");
7614           address_retry_record = NULL;   /* Ignore if too old */
7615           }
7616         }
7617       }
7618     else
7619       domain_retry_record = address_retry_record = NULL;
7620
7621     DEBUG(D_deliver|D_retry)
7622       {
7623       if (!domain_retry_record)
7624         debug_printf("no   domain  retry record\n");
7625       else
7626         debug_printf("have domain  retry record; next_try = now%+d\n",
7627                       f.running_in_test_harness ? 0 :
7628                       (int)(domain_retry_record->next_try - now));
7629
7630       if (!address_retry_record)
7631         debug_printf("no   address retry record\n");
7632       else
7633         debug_printf("have address retry record; next_try = now%+d\n",
7634                       f.running_in_test_harness ? 0 :
7635                       (int)(address_retry_record->next_try - now));
7636       }
7637
7638     /* If we are sending a message down an existing SMTP connection, we must
7639     assume that the message which created the connection managed to route
7640     an address to that connection. We do not want to run the risk of taking
7641     a long time over routing here, because if we do, the server at the other
7642     end of the connection may time it out. This is especially true for messages
7643     with lots of addresses. For this kind of delivery, queue_running is not
7644     set, so we would normally route all addresses. We take a pragmatic approach
7645     and defer routing any addresses that have any kind of domain retry record.
7646     That is, we don't even look at their retry times. It doesn't matter if this
7647     doesn't work occasionally. This is all just an optimization, after all.
7648
7649     The reason for not doing the same for address retries is that they normally
7650     arise from 4xx responses, not DNS timeouts. */
7651
7652     if (continue_hostname && domain_retry_record)
7653       {
7654       addr->message = US"reusing SMTP connection skips previous routing defer";
7655       addr->basic_errno = ERRNO_RRETRY;
7656       (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7657
7658       addr->message = domain_retry_record->text;
7659       setflag(addr, af_pass_message);
7660       }
7661
7662     /* If we are in a queue run, defer routing unless there is no retry data or
7663     we've passed the next retry time, or this message is forced. In other
7664     words, ignore retry data when not in a queue run.
7665
7666     However, if the domain retry time has expired, always allow the routing
7667     attempt. If it fails again, the address will be failed. This ensures that
7668     each address is routed at least once, even after long-term routing
7669     failures.
7670
7671     If there is an address retry, check that too; just wait for the next
7672     retry time. This helps with the case when the temporary error on the
7673     address was really message-specific rather than address specific, since
7674     it allows other messages through.
7675
7676     We also wait for the next retry time if this is a message sent down an
7677     existing SMTP connection (even though that will be forced). Otherwise there
7678     will be far too many attempts for an address that gets a 4xx error. In
7679     fact, after such an error, we should not get here because, the host should
7680     not be remembered as one this message needs. However, there was a bug that
7681     used to cause this to  happen, so it is best to be on the safe side.
7682
7683     Even if we haven't reached the retry time in the hints, there is one more
7684     check to do, which is for the ultimate address timeout. We only do this
7685     check if there is an address retry record and there is not a domain retry
7686     record; this implies that previous attempts to handle the address had the
7687     retry_use_local_parts option turned on. We use this as an approximation
7688     for the destination being like a local delivery, for example delivery over
7689     LMTP to an IMAP message store. In this situation users are liable to bump
7690     into their quota and thereby have intermittently successful deliveries,
7691     which keep the retry record fresh, which can lead to us perpetually
7692     deferring messages. */
7693
7694     else if (  (  f.queue_running && !f.deliver_force
7695                || continue_hostname
7696                )
7697             && (  (  domain_retry_record
7698                   && now < domain_retry_record->next_try
7699                   && !domain_retry_record->expired
7700                   )
7701                || (  address_retry_record
7702                   && now < address_retry_record->next_try
7703                )  )
7704             && (  domain_retry_record
7705                || !address_retry_record
7706                || !retry_ultimate_address_timeout(addr->address_retry_key,
7707                                  addr->domain, address_retry_record, now)
7708             )  )
7709       {
7710       addr->message = US"retry time not reached";
7711       addr->basic_errno = ERRNO_RRETRY;
7712       (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7713
7714       /* For remote-retry errors (here and just above) that we've not yet
7715       hit the retry time, use the error recorded in the retry database
7716       as info in the warning message.  This lets us send a message even
7717       when we're not failing on a fresh attempt.  We assume that this
7718       info is not sensitive. */
7719
7720       addr->message = domain_retry_record
7721         ? domain_retry_record->text : address_retry_record->text;
7722       setflag(addr, af_pass_message);
7723       }
7724
7725     /* The domain is OK for routing. Remember if retry data exists so it
7726     can be cleaned up after a successful delivery. */
7727
7728     else
7729       {
7730       if (domain_retry_record || address_retry_record)
7731         setflag(addr, af_dr_retry_exists);
7732       addr->next = addr_route;
7733       addr_route = addr;
7734       DEBUG(D_deliver|D_route)
7735         debug_printf("%s: queued for routing\n", addr->address);
7736       }
7737     }
7738
7739   /* The database is closed while routing is actually happening. Requests to
7740   update it are put on a chain and all processed together at the end. */
7741
7742   if (dbm_file && !continue_retry_db)
7743     { dbfn_close(dbm_file); dbm_file = NULL; }
7744
7745   /* If queue_domains is set, we don't even want to try routing addresses in
7746   those domains. During queue runs, queue_domains is forced to be unset.
7747   Optimize by skipping this pass through the addresses if nothing is set. */
7748
7749   if (!f.deliver_force && queue_domains)
7750     {
7751     address_item *okaddr = NULL;
7752     while (addr_route)
7753       {
7754       address_item *addr = addr_route;
7755       addr_route = addr->next;
7756
7757       deliver_domain = addr->domain;  /* set $domain */
7758       if ((rc = match_isinlist(addr->domain, CUSS &queue_domains, 0,
7759             &domainlist_anchor, addr->domain_cache, MCL_DOMAIN, TRUE, NULL))
7760               != OK)
7761         if (rc == DEFER)
7762           {
7763           addr->basic_errno = ERRNO_LISTDEFER;
7764           addr->message = US"queue_domains lookup deferred";
7765           (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7766           }
7767         else
7768           {
7769           addr->next = okaddr;
7770           okaddr = addr;
7771           }
7772       else
7773         {
7774         addr->basic_errno = ERRNO_QUEUE_DOMAIN;
7775         addr->message = US"domain is in queue_domains";
7776         (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7777         }
7778       }
7779
7780     addr_route = okaddr;
7781     }
7782
7783   /* Now route those addresses that are not deferred. */
7784
7785   while (addr_route)
7786     {
7787     int rc;
7788     address_item *addr = addr_route;
7789     const uschar *old_domain = addr->domain;
7790     uschar *old_unique = addr->unique;
7791     addr_route = addr->next;
7792     addr->next = NULL;
7793
7794     /* Just in case some router parameter refers to it. */
7795
7796     if (!(return_path = addr->prop.errors_address))
7797       return_path = sender_address;
7798
7799     /* If a router defers an address, add a retry item. Whether or not to
7800     use the local part in the key is a property of the router. */
7801
7802     if ((rc = route_address(addr, &addr_local, &addr_remote, &addr_new,
7803          &addr_succeed, v_none)) == DEFER)
7804       retry_add_item(addr,
7805         addr->router->retry_use_local_part
7806           ? string_sprintf("R:%s@%s", addr->local_part, addr->domain)
7807           : string_sprintf("R:%s", addr->domain),
7808         0);
7809
7810     /* Otherwise, if there is an existing retry record in the database, add
7811     retry items to delete both forms. We must also allow for the possibility
7812     of a routing retry that includes the sender address. Since the domain might
7813     have been rewritten (expanded to fully qualified) as a result of routing,
7814     ensure that the rewritten form is also deleted. */
7815
7816     else if (testflag(addr, af_dr_retry_exists))
7817       {
7818       uschar * altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
7819         sender_address);
7820       retry_add_item(addr, altkey, rf_delete);
7821       retry_add_item(addr, addr->address_retry_key, rf_delete);
7822       retry_add_item(addr, addr->domain_retry_key, rf_delete);
7823       if (Ustrcmp(addr->domain, old_domain) != 0)
7824         retry_add_item(addr, string_sprintf("R:%s", old_domain), rf_delete);
7825       }
7826
7827     /* DISCARD is given for :blackhole: and "seen finish". The event has been
7828     logged, but we need to ensure the address (and maybe parents) is marked
7829     done. */
7830
7831     if (rc == DISCARD)
7832       {
7833       address_done(addr, tod_stamp(tod_log));
7834       continue;  /* route next address */
7835       }
7836
7837     /* The address is finished with (failed or deferred). */
7838
7839     if (rc != OK)
7840       {
7841       (void)post_process_one(addr, rc, LOG_MAIN, EXIM_DTYPE_ROUTER, 0);
7842       continue;  /* route next address */
7843       }
7844
7845     /* The address has been routed. If the router changed the domain, it will
7846     also have changed the unique address. We have to test whether this address
7847     has already been delivered, because it's the unique address that finally
7848     gets recorded. */
7849
7850     if (  addr->unique != old_unique
7851        && tree_search(tree_nonrecipients, addr->unique) != 0
7852        )
7853       {
7854       DEBUG(D_deliver|D_route) debug_printf("%s was previously delivered: "
7855         "discarded\n", addr->address);
7856       if (addr_remote == addr) addr_remote = addr->next;
7857       else if (addr_local == addr) addr_local = addr->next;
7858       }
7859
7860     /* If the router has same_domain_copy_routing set, we are permitted to copy
7861     the routing for any other addresses with the same domain. This is an
7862     optimisation to save repeated DNS lookups for "standard" remote domain
7863     routing. The option is settable only on routers that generate host lists.
7864     We play it very safe, and do the optimization only if the address is routed
7865     to a remote transport, there are no header changes, and the domain was not
7866     modified by the router. */
7867
7868     if (  addr_remote == addr
7869        && addr->router->same_domain_copy_routing
7870        && !addr->prop.extra_headers
7871        && !addr->prop.remove_headers
7872        && old_domain == addr->domain
7873        )
7874       {
7875       address_item **chain = &addr_route;
7876       while (*chain)
7877         {
7878         address_item *addr2 = *chain;
7879         if (Ustrcmp(addr2->domain, addr->domain) != 0)
7880           {
7881           chain = &(addr2->next);
7882           continue;
7883           }
7884
7885         /* Found a suitable address; take it off the routing list and add it to
7886         the remote delivery list. */
7887
7888         *chain = addr2->next;
7889         addr2->next = addr_remote;
7890         addr_remote = addr2;
7891
7892         /* Copy the routing data */
7893
7894         addr2->domain = addr->domain;
7895         addr2->router = addr->router;
7896         addr2->transport = addr->transport;
7897         addr2->host_list = addr->host_list;
7898         addr2->fallback_hosts = addr->fallback_hosts;
7899         addr2->prop.errors_address = addr->prop.errors_address;
7900         copyflag(addr2, addr, af_hide_child);
7901         copyflag(addr2, addr, af_local_host_removed);
7902
7903         DEBUG(D_deliver|D_route)
7904           debug_printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"
7905                        "routing %s\n"
7906                        "Routing for %s copied from %s\n",
7907             addr2->address, addr2->address, addr->address);
7908         }
7909       }
7910     }  /* Continue with routing the next address. */
7911   }    /* Loop to process any child addresses that the routers created, and
7912        any rerouted addresses that got put back on the new chain. */
7913
7914 if (dbm_file)           /* Can only be continue_retry_db */
7915   { dbfn_close_multi(continue_retry_db); continue_retry_db = dbm_file = NULL; }
7916
7917 /* Debugging: show the results of the routing */
7918
7919 DEBUG(D_deliver|D_retry|D_route)
7920   {
7921   debug_printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
7922   debug_printf("After routing:\n  Local deliveries:\n");
7923   for (address_item * p = addr_local; p; p = p->next)
7924     debug_printf("    %s\n", p->address);
7925
7926   debug_printf("  Remote deliveries:\n");
7927   for (address_item * p = addr_remote; p; p = p->next)
7928     debug_printf("    %s\n", p->address);
7929
7930   debug_printf("  Failed addresses:\n");
7931   for (address_item * p = addr_failed; p; p = p->next)
7932     debug_printf("    %s\n", p->address);
7933
7934   debug_printf("  Deferred addresses:\n");
7935   for (address_item * p = addr_defer; p; p = p->next)
7936     debug_printf("    %s\n", p->address);
7937   }
7938
7939 /* Free any resources that were cached during routing. */
7940
7941 search_tidyup();
7942 route_tidyup();
7943
7944 /* These two variables are set only during routing, after check_local_user.
7945 Ensure they are not set in transports. */
7946
7947 local_user_gid = (gid_t)(-1);
7948 local_user_uid = (uid_t)(-1);
7949
7950 /* Check for any duplicate addresses. This check is delayed until after
7951 routing, because the flexibility of the routing configuration means that
7952 identical addresses with different parentage may end up being redirected to
7953 different addresses. Checking for duplicates too early (as we previously used
7954 to) makes this kind of thing not work. */
7955
7956 do_duplicate_check(&addr_local);
7957 do_duplicate_check(&addr_remote);
7958
7959 /* When acting as an MUA wrapper, we proceed only if all addresses route to a
7960 remote transport. The check that they all end up in one transaction happens in
7961 the do_remote_deliveries() function. */
7962
7963 if (  mua_wrapper
7964    && (addr_local || addr_failed || addr_defer)
7965    )
7966   {
7967   address_item *addr;
7968   uschar *which, *colon, *msg;
7969
7970   if (addr_local)
7971     {
7972     addr = addr_local;
7973     which = US"local";
7974     }
7975   else if (addr_defer)
7976     {
7977     addr = addr_defer;
7978     which = US"deferred";
7979     }
7980   else
7981     {
7982     addr = addr_failed;
7983     which = US"failed";
7984     }
7985
7986   while (addr->parent) addr = addr->parent;
7987
7988   if (addr->message)
7989     {
7990     colon = US": ";
7991     msg = addr->message;
7992     }
7993   else colon = msg = US"";
7994
7995   /* We don't need to log here for a forced failure as it will already
7996   have been logged. Defer will also have been logged, but as a defer, so we do
7997   need to do the failure logging. */
7998
7999   if (addr != addr_failed)
8000     log_write(0, LOG_MAIN, "** %s routing yielded a %s delivery",
8001       addr->address, which);
8002
8003   /* Always write an error to the caller */
8004
8005   fprintf(stderr, "routing %s yielded a %s delivery%s%s\n", addr->address,
8006     which, colon, msg);
8007
8008   final_yield = DELIVER_MUA_FAILED;
8009   addr_failed = addr_defer = NULL;   /* So that we remove the message */
8010   goto DELIVERY_TIDYUP;
8011   }
8012
8013
8014 /* If this is a run to continue deliveries to an external channel that is
8015 already set up, defer any local deliveries.
8016
8017 jgh 2020/12/20: I don't see why; locals should be quick.
8018 The defer goes back to version 1.62 in 1997.  A local being still deliverable
8019 during a continued run might result from something like a defer during the
8020 original delivery, eg. in a DB lookup.  Unlikely but possible.
8021
8022 To avoid delaying a local when combined with a callout-hold for a remote
8023 delivery, test continue_sequence rather than continue_transport. */
8024
8025 if (continue_sequence > 1 && addr_local)
8026   {
8027   DEBUG(D_deliver|D_retry|D_route)
8028     debug_printf("deferring local deliveries due to continued-transport\n");
8029   if (addr_defer)
8030     {
8031     address_item * addr = addr_defer;
8032     while (addr->next) addr = addr->next;
8033     addr->next = addr_local;
8034     }
8035   else
8036     addr_defer = addr_local;
8037   addr_local = NULL;
8038   }
8039
8040
8041 /* Because address rewriting can happen in the routers, we should not really do
8042 ANY deliveries until all addresses have been routed, so that all recipients of
8043 the message get the same headers. However, this is in practice not always
8044 possible, since sometimes remote addresses give DNS timeouts for days on end.
8045 The pragmatic approach is to deliver what we can now, saving any rewritten
8046 headers so that at least the next lot of recipients benefit from the rewriting
8047 that has already been done.
8048
8049 If any headers have been rewritten during routing, update the spool file to
8050 remember them for all subsequent deliveries. This can be delayed till later if
8051 there is only address to be delivered - if it succeeds the spool write need not
8052 happen. */
8053
8054 if (  f.header_rewritten
8055    && (  addr_local && (addr_local->next || addr_remote)
8056       || addr_remote && addr_remote->next
8057    )  )
8058   {
8059   /* Panic-dies on error */
8060   (void)spool_write_header(message_id, SW_DELIVERING, NULL);
8061   f.header_rewritten = FALSE;
8062   }
8063
8064
8065 /* If there are any deliveries to do and we do not already have the journal
8066 file, create it. This is used to record successful deliveries as soon as
8067 possible after each delivery is known to be complete. A file opened with
8068 O_APPEND is used so that several processes can run simultaneously.
8069
8070 The journal is just insurance against crashes. When the spool file is
8071 ultimately updated at the end of processing, the journal is deleted. If a
8072 journal is found to exist at the start of delivery, the addresses listed
8073 therein are added to the non-recipients. */
8074
8075 if (addr_local || addr_remote)
8076   {
8077   if (journal_fd < 0)
8078     {
8079     uschar * fname = spool_fname(US"input", message_subdir, id, US"-J");
8080
8081     if ((journal_fd = Uopen(fname,
8082               EXIM_CLOEXEC | O_WRONLY|O_APPEND|O_CREAT|O_EXCL, SPOOL_MODE)) < 0)
8083       {
8084       log_write(0, LOG_MAIN|LOG_PANIC, "Couldn't open journal file %s: %s",
8085         fname, strerror(errno));
8086       return DELIVER_NOT_ATTEMPTED;
8087       }
8088
8089     /* Set the close-on-exec flag, make the file owned by Exim, and ensure
8090     that the mode is correct - the group setting doesn't always seem to get
8091     set automatically. */
8092
8093     if(  exim_fchown(journal_fd, exim_uid, exim_gid, fname)
8094       || fchmod(journal_fd, SPOOL_MODE)
8095 #ifndef O_CLOEXEC
8096       || fcntl(journal_fd, F_SETFD, fcntl(journal_fd, F_GETFD) | FD_CLOEXEC)
8097 #endif
8098       )
8099       {
8100       int ret = Uunlink(fname);
8101       log_write(0, LOG_MAIN|LOG_PANIC, "Couldn't set perms on journal file %s: %s",
8102         fname, strerror(errno));
8103       if(ret  &&  errno != ENOENT)
8104         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s: %s",
8105           fname, strerror(errno));
8106       return DELIVER_NOT_ATTEMPTED;
8107       }
8108     }
8109   }
8110 else if (journal_fd >= 0)
8111   {
8112   close(journal_fd);
8113   journal_fd = -1;
8114   }
8115
8116
8117
8118 /* Now we can get down to the business of actually doing deliveries. Local
8119 deliveries are done first, then remote ones. If ever the problems of how to
8120 handle fallback transports are figured out, this section can be put into a loop
8121 for handling fallbacks, though the uid switching will have to be revised. */
8122
8123 /* Precompile a regex that is used to recognize a parameter in response
8124 to an LHLO command, if is isn't already compiled. This may be used on both
8125 local and remote LMTP deliveries. */
8126
8127 if (!regex_IGNOREQUOTA)
8128   regex_IGNOREQUOTA =
8129     regex_must_compile(US"\\n250[\\s\\-]IGNOREQUOTA(\\s|\\n|$)", MCS_NOFLAGS, TRUE);
8130
8131 /* Handle local deliveries */
8132
8133 if (addr_local)
8134   {
8135   DEBUG(D_deliver|D_transport)
8136     debug_printf(">>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>\n");
8137   do_local_deliveries();
8138   f.disable_logging = FALSE;
8139   }
8140
8141 /* If queue_run_local is set, we do not want to attempt any remote deliveries,
8142 so just queue them all. */
8143
8144 if (f.queue_run_local)
8145   while (addr_remote)
8146     {
8147     address_item *addr = addr_remote;
8148     addr_remote = addr->next;
8149     addr->next = NULL;
8150     addr->basic_errno = ERRNO_LOCAL_ONLY;
8151     addr->message = US"remote deliveries suppressed";
8152     (void)post_process_one(addr, DEFER, LOG_MAIN, EXIM_DTYPE_TRANSPORT, 0);
8153     }
8154
8155 /* Handle remote deliveries */
8156
8157 if (addr_remote)
8158   {
8159   DEBUG(D_deliver|D_transport)
8160     debug_printf(">>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>\n");
8161
8162   /* Precompile some regex that are used to recognize parameters in response
8163   to an EHLO command, if they aren't already compiled. */
8164
8165   smtp_deliver_init();
8166
8167   /* Now sort the addresses if required, and do the deliveries. The yield of
8168   do_remote_deliveries is FALSE when mua_wrapper is set and all addresses
8169   cannot be delivered in one transaction. */
8170
8171   if (remote_sort_domains) sort_remote_deliveries();
8172   if (!do_remote_deliveries(FALSE))
8173     {
8174     log_write(0, LOG_MAIN, "** mua_wrapper is set but recipients cannot all "
8175       "be delivered in one transaction");
8176     fprintf(stderr, "delivery to smarthost failed (configuration problem)\n");
8177
8178     final_yield = DELIVER_MUA_FAILED;
8179     addr_failed = addr_defer = NULL;   /* So that we remove the message */
8180     goto DELIVERY_TIDYUP;
8181     }
8182
8183   /* See if any of the addresses that failed got put on the queue for delivery
8184   to their fallback hosts. We do it this way because often the same fallback
8185   host is used for many domains, so all can be sent in a single transaction
8186   (if appropriately configured). */
8187
8188   if (addr_fallback && !mua_wrapper)
8189     {
8190     DEBUG(D_deliver) debug_printf("Delivering to fallback hosts\n");
8191     addr_remote = addr_fallback;
8192     addr_fallback = NULL;
8193     if (remote_sort_domains) sort_remote_deliveries();
8194     do_remote_deliveries(TRUE);
8195     }
8196   f.disable_logging = FALSE;
8197   }
8198
8199
8200 /* All deliveries are now complete. Ignore SIGTERM during this tidying up
8201 phase, to minimize cases of half-done things. */
8202
8203 DEBUG(D_deliver)
8204   debug_printf(">>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>>\n");
8205 cancel_cutthrough_connection(TRUE, US"deliveries are done");
8206
8207 /* Root privilege is no longer needed */
8208
8209 exim_setugid(exim_uid, exim_gid, FALSE, US"post-delivery tidying");
8210
8211 set_process_info("tidying up after delivering %s", message_id);
8212 signal(SIGTERM, SIG_IGN);
8213
8214 /* When we are acting as an MUA wrapper, the smtp transport will either have
8215 succeeded for all addresses, or failed them all in normal cases. However, there
8216 are some setup situations (e.g. when a named port does not exist) that cause an
8217 immediate exit with deferral of all addresses. Convert those into failures. We
8218 do not ever want to retry, nor do we want to send a bounce message. */
8219
8220 if (mua_wrapper)
8221   {
8222   if (addr_defer)
8223     {
8224     address_item * nextaddr;
8225     for (address_item * addr = addr_defer; addr; addr = nextaddr)
8226       {
8227       log_write(0, LOG_MAIN, "** %s mua_wrapper forced failure for deferred "
8228         "delivery", addr->address);
8229       nextaddr = addr->next;
8230       addr->next = addr_failed;
8231       addr_failed = addr;
8232       }
8233     addr_defer = NULL;
8234     }
8235
8236   /* Now all should either have succeeded or failed. */
8237
8238   if (!addr_failed)
8239     final_yield = DELIVER_MUA_SUCCEEDED;
8240   else
8241     {
8242     host_item * host;
8243     uschar *s = addr_failed->user_message;
8244
8245     if (!s) s = addr_failed->message;
8246
8247     fprintf(stderr, "Delivery failed: ");
8248     if (addr_failed->basic_errno > 0)
8249       {
8250       fprintf(stderr, "%s", strerror(addr_failed->basic_errno));
8251       if (s) fprintf(stderr, ": ");
8252       }
8253     if ((host = addr_failed->host_used))
8254       fprintf(stderr, "H=%s [%s]: ", host->name, host->address);
8255     if (s)
8256       fprintf(stderr, "%s", CS s);
8257     else if (addr_failed->basic_errno <= 0)
8258       fprintf(stderr, "unknown error");
8259     fprintf(stderr, "\n");
8260
8261     final_yield = DELIVER_MUA_FAILED;
8262     addr_failed = NULL;
8263     }
8264   }
8265
8266 /* In a normal configuration, we now update the retry database. This is done in
8267 one fell swoop at the end in order not to keep opening and closing (and
8268 locking) the database. The code for handling retries is hived off into a
8269 separate module for convenience. We pass it the addresses of the various
8270 chains, because deferred addresses can get moved onto the failed chain if the
8271 retry cutoff time has expired for all alternative destinations. Bypass the
8272 updating of the database if the -N flag is set, which is a debugging thing that
8273 prevents actual delivery. */
8274
8275 else if (!f.dont_deliver)
8276   retry_update(&addr_defer, &addr_failed, &addr_succeed);
8277
8278 /* Send DSN for successful messages if requested */
8279
8280 maybe_send_dsn(addr_succeed);
8281
8282 /* If any addresses failed, we must send a message to somebody, unless
8283 af_ignore_error is set, in which case no action is taken. It is possible for
8284 several messages to get sent if there are addresses with different
8285 requirements. */
8286
8287 while (addr_failed)
8288   {
8289   const uschar * logtod = tod_stamp(tod_log);
8290   address_item * addr;
8291
8292   /* There are weird cases when logging is disabled in the transport. However,
8293   there may not be a transport (address failed by a router). */
8294
8295   f.disable_logging = FALSE;
8296   if (addr_failed->transport)
8297     f.disable_logging = addr_failed->transport->disable_logging;
8298
8299   DEBUG(D_deliver)
8300     debug_printf("processing failed address %s\n", addr_failed->address);
8301
8302   /* There are only two ways an address in a bounce message can get here:
8303
8304   (1) When delivery was initially deferred, but has now timed out (in the call
8305       to retry_update() above). We can detect this by testing for
8306       af_retry_timedout. If the address does not have its own errors address,
8307       we arrange to ignore the error.
8308
8309   (2) If delivery failures for bounce messages are being ignored. We can detect
8310       this by testing for af_ignore_error. This will also be set if a bounce
8311       message has been autothawed and the ignore_bounce_errors_after time has
8312       passed. It might also be set if a router was explicitly configured to
8313       ignore errors (errors_to = "").
8314
8315   If neither of these cases obtains, something has gone wrong. Log the
8316   incident, but then ignore the error. */
8317
8318   if (sender_address[0] == 0 && !addr_failed->prop.errors_address)
8319     {
8320     if (  !testflag(addr_failed, af_retry_timedout)
8321        && !addr_failed->prop.ignore_error)
8322       log_write(0, LOG_MAIN|LOG_PANIC, "internal error: bounce message "
8323         "failure is neither frozen nor ignored (it's been ignored)");
8324
8325     addr_failed->prop.ignore_error = TRUE;
8326     }
8327
8328   /* If the first address on the list has af_ignore_error set, just remove
8329   it from the list, throw away any saved message file, log it, and
8330   mark the recipient done. */
8331
8332   if (  addr_failed->prop.ignore_error
8333      ||    addr_failed->dsn_flags & rf_dsnflags
8334         && !(addr_failed->dsn_flags & rf_notify_failure)
8335      )
8336     {
8337     addr = addr_failed;
8338     addr_failed = addr->next;
8339     if (addr->return_filename) Uunlink(addr->return_filename);
8340
8341 #ifndef DISABLE_EVENT
8342     msg_event_raise(US"msg:fail:delivery", addr);
8343 #endif
8344     log_write(0, LOG_MAIN, "%s%s%s%s: error ignored%s",
8345       addr->address,
8346       !addr->parent ? US"" : US" <",
8347       !addr->parent ? US"" : addr->parent->address,
8348       !addr->parent ? US"" : US">",
8349       addr->prop.ignore_error
8350       ? US"" : US": RFC 3461 DSN, failure notify not requested");
8351
8352     address_done(addr, logtod);
8353     child_done(addr, logtod);
8354     /* Panic-dies on error */
8355     (void)spool_write_header(message_id, SW_DELIVERING, NULL);
8356     }
8357
8358   /* Otherwise, handle the sending of a message. Find the error address for
8359   the first address, then send a message that includes all failed addresses
8360   that have the same error address. */
8361
8362   else
8363     send_bounce_message(now, logtod);
8364   }
8365
8366 f.disable_logging = FALSE;  /* In case left set */
8367
8368 /* Come here from the mua_wrapper case if routing goes wrong */
8369
8370 DELIVERY_TIDYUP:
8371
8372 /* If there are now no deferred addresses, we are done. Preserve the
8373 message log if so configured, and we are using them. Otherwise, sling it.
8374 Then delete the message itself. */
8375
8376 if (!addr_defer)
8377   {
8378   uschar * fname;
8379
8380   if (message_logs)
8381     {
8382     fname = spool_fname(US"msglog", message_subdir, id, US"");
8383     if (preserve_message_logs)
8384       {
8385       int rc;
8386       uschar * moname = spool_fname(US"msglog.OLD", US"", id, US"");
8387
8388       if ((rc = Urename(fname, moname)) < 0)
8389         {
8390         (void)directory_make(spool_directory,
8391                               spool_sname(US"msglog.OLD", US""),
8392                               MSGLOG_DIRECTORY_MODE, TRUE);
8393         rc = Urename(fname, moname);
8394         }
8395       if (rc < 0)
8396         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to move %s to the "
8397           "msglog.OLD directory", fname);
8398       }
8399     else
8400       if (Uunlink(fname) < 0)
8401         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s: %s",
8402                   fname, strerror(errno));
8403     }
8404
8405   /* Remove the two message files. */
8406
8407   fname = spool_fname(US"input", message_subdir, id, US"-D");
8408   if (Uunlink(fname) < 0)
8409     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s: %s",
8410       fname, strerror(errno));
8411   fname = spool_fname(US"input", message_subdir, id, US"-H");
8412   if (Uunlink(fname) < 0)
8413     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s: %s",
8414       fname, strerror(errno));
8415
8416   /* Log the end of this message, with queue time if requested. */
8417
8418   if (LOGGING(queue_time_overall))
8419     log_write(0, LOG_MAIN, "Completed QT=%s", string_timesince(&received_time));
8420   else
8421     log_write(0, LOG_MAIN, "Completed");
8422
8423   /* Unset deliver_freeze so that we won't try to move the spool files further down */
8424   f.deliver_freeze = FALSE;
8425
8426 #ifndef DISABLE_EVENT
8427   (void) event_raise(event_action, US"msg:complete", NULL, NULL);
8428 #endif
8429   }
8430
8431 /* If there are deferred addresses, we are keeping this message because it is
8432 not yet completed. Lose any temporary files that were catching output from
8433 pipes for any of the deferred addresses, handle one-time aliases, and see if
8434 the message has been on the queue for so long that it is time to send a warning
8435 message to the sender, unless it is a mailer-daemon. If all deferred addresses
8436 have the same domain, we can set deliver_domain for the expansion of
8437 delay_warning_ condition - if any of them are pipes, files, or autoreplies, use
8438 the parent's domain.
8439
8440 If all the deferred addresses have an error number that indicates "retry time
8441 not reached", skip sending the warning message, because it won't contain the
8442 reason for the delay. It will get sent at the next real delivery attempt.
8443   Exception: for retries caused by a remote peer we use the error message
8444   store in the retry DB as the reason.
8445 However, if at least one address has tried, we'd better include all of them in
8446 the message.
8447
8448 If we can't make a process to send the message, don't worry.
8449
8450 For mailing list expansions we want to send the warning message to the
8451 mailing list manager. We can't do a perfect job here, as some addresses may
8452 have different errors addresses, but if we take the errors address from
8453 each deferred address it will probably be right in most cases.
8454
8455 If addr_defer == +1, it means there was a problem sending an error message
8456 for failed addresses, and there were no "real" deferred addresses. The value
8457 was set just to keep the message on the spool, so there is nothing to do here.
8458 */
8459
8460 else if (addr_defer != (address_item *)(+1))
8461   {
8462   uschar * recipients = US"";
8463   BOOL want_warning_msg = FALSE;
8464
8465   deliver_domain = testflag(addr_defer, af_pfr)
8466     ? addr_defer->parent->domain : addr_defer->domain;
8467
8468   for (address_item * addr = addr_defer; addr; addr = addr->next)
8469     {
8470     address_item * otaddr;
8471
8472     if (addr->basic_errno > ERRNO_WARN_BASE) want_warning_msg = TRUE;
8473
8474     if (deliver_domain)
8475       {
8476       const uschar *d = testflag(addr, af_pfr)
8477         ? addr->parent->domain : addr->domain;
8478
8479       /* The domain may be unset for an address that has never been routed
8480       because the system filter froze the message. */
8481
8482       if (!d || Ustrcmp(d, deliver_domain) != 0)
8483         deliver_domain = NULL;
8484       }
8485
8486     if (addr->return_filename) Uunlink(addr->return_filename);
8487
8488     /* Handle the case of one-time aliases. If any address in the ancestry
8489     of this one is flagged, ensure it is in the recipients list, suitably
8490     flagged, and that its parent is marked delivered. */
8491
8492     for (otaddr = addr; otaddr; otaddr = otaddr->parent)
8493       if (otaddr->onetime_parent) break;
8494
8495     if (otaddr)
8496       {
8497       int i;
8498       int t = recipients_count;
8499
8500       for (i = 0; i < recipients_count; i++)
8501         {
8502         const uschar * r = recipients_list[i].address;
8503         if (Ustrcmp(otaddr->onetime_parent, r) == 0) t = i;
8504         if (Ustrcmp(otaddr->address, r) == 0) break;
8505         }
8506
8507       /* Didn't find the address already in the list, and did find the
8508       ultimate parent's address in the list, and they really are different
8509       (i.e. not from an identity-redirect). After adding the recipient,
8510       update the errors address in the recipients list. */
8511
8512       if (  i >= recipients_count && t < recipients_count
8513          && Ustrcmp(otaddr->address, otaddr->parent->address) != 0)
8514         {
8515         DEBUG(D_deliver) debug_printf("one_time: adding %s in place of %s\n",
8516           otaddr->address, otaddr->parent->address);
8517         receive_add_recipient(otaddr->address, t);
8518         recipients_list[recipients_count-1].errors_to = otaddr->prop.errors_address;
8519         tree_add_nonrecipient(otaddr->parent->address);
8520         update_spool = TRUE;
8521         }
8522       }
8523
8524     /* Except for error messages, ensure that either the errors address for
8525     this deferred address or, if there is none, the sender address, is on the
8526     list of recipients for a warning message. */
8527
8528     if (sender_address[0])
8529       {
8530       const uschar * s = addr->prop.errors_address;
8531       if (!s) s = sender_address;
8532       if (Ustrstr(recipients, s) == NULL)
8533         recipients = string_sprintf("%s%s%s", recipients,
8534           recipients[0] ? "," : "", s);
8535       }
8536     }
8537
8538   /* Send a warning message if the conditions are right. If the condition check
8539   fails because of a lookup defer, there is nothing we can do. The warning
8540   is not sent. Another attempt will be made at the next delivery attempt (if
8541   it also defers). */
8542
8543   if (  !f.queue_2stage
8544      && want_warning_msg
8545      && (  !(addr_defer->dsn_flags & rf_dsnflags)
8546         || addr_defer->dsn_flags & rf_notify_delay
8547         )
8548      && delay_warning[1] > 0
8549      && sender_address[0] != 0)
8550     {
8551     GET_OPTION("delay_warning_condition");
8552     if ( (  !delay_warning_condition
8553             || expand_check_condition(delay_warning_condition,
8554                 US"delay_warning", US"option")
8555           )
8556        )
8557       {
8558       int count;
8559       int show_time;
8560       int queue_time = time(NULL) - received_time.tv_sec;
8561
8562       queue_time = test_harness_fudged_queue_time(queue_time);
8563
8564       /* See how many warnings we should have sent by now */
8565
8566       for (count = 0; count < delay_warning[1]; count++)
8567         if (queue_time < delay_warning[count+2]) break;
8568
8569       show_time = delay_warning[count+1];
8570
8571       if (count >= delay_warning[1])
8572         {
8573         int extra;
8574         int last_gap = show_time;
8575         if (count > 1) last_gap -= delay_warning[count];
8576         extra = (queue_time - delay_warning[count+1])/last_gap;
8577         show_time += last_gap * extra;
8578         count += extra;
8579         }
8580
8581       DEBUG(D_deliver)
8582         {
8583         debug_printf("time on queue = %s  id %s  addr %s\n",
8584           readconf_printtime(queue_time), message_id, addr_defer->address);
8585         debug_printf("warning counts: required %d done %d\n", count,
8586           warning_count);
8587         }
8588
8589       /* We have computed the number of warnings there should have been by now.
8590       If there haven't been enough, send one, and up the count to what it should
8591       have been. */
8592
8593       if (warning_count < count)
8594         if (send_warning_message(recipients, queue_time, show_time))
8595           {
8596           warning_count = count;
8597           update_spool = TRUE;    /* Ensure spool rewritten */
8598           }
8599       }
8600     }
8601
8602   /* Clear deliver_domain */
8603
8604   deliver_domain = NULL;
8605
8606   /* If this was a first delivery attempt, unset the first time flag, and
8607   ensure that the spool gets updated. */
8608
8609   if (f.deliver_firsttime && !f.queue_2stage)
8610     {
8611     f.deliver_firsttime = FALSE;
8612     update_spool = TRUE;
8613     }
8614
8615   /* If delivery was frozen and freeze_tell is set, generate an appropriate
8616   message, unless the message is a local error message (to avoid loops). Then
8617   log the freezing. If the text in "frozen_info" came from a system filter,
8618   it has been escaped into printing characters so as not to mess up log lines.
8619   For the "tell" message, we turn \n back into newline. Also, insert a newline
8620   near the start instead of the ": " string. */
8621
8622   if (f.deliver_freeze)
8623     {
8624     if (freeze_tell && *freeze_tell && !f.local_error_message)
8625       {
8626       uschar * s = string_copy(frozen_info);
8627       uschar * ss = Ustrstr(s, " by the system filter: ");
8628
8629       if (ss)
8630         {
8631         ss[21] = '.';
8632         ss[22] = '\n';
8633         }
8634
8635       for (ss = s; *ss; )
8636         if (*ss == '\\' && ss[1] == 'n')
8637           { *ss++ = ' '; *ss++ = '\n'; }
8638         else
8639           ss++;
8640
8641       moan_tell_someone(freeze_tell, addr_defer, US"Message frozen",
8642         "Message %s has been frozen%s.\nThe sender is <%s>.\n", message_id,
8643         s, sender_address);
8644       }
8645
8646     /* Log freezing just before we update the -H file, to minimize the chance
8647     of a race problem. */
8648
8649     deliver_msglog("*** Frozen%s\n", frozen_info);
8650     log_write(0, LOG_MAIN, "Frozen%s", frozen_info);
8651     }
8652
8653   /* If there have been any updates to the non-recipients list, or other things
8654   that get written to the spool, we must now update the spool header file so
8655   that it has the right information for the next delivery attempt. If there
8656   was more than one address being delivered, the header_change update is done
8657   earlier, in case one succeeds and then something crashes. */
8658
8659   DEBUG(D_deliver)
8660     debug_printf("delivery deferred: update_spool=%d header_rewritten=%d\n",
8661       update_spool, f.header_rewritten);
8662
8663   if (update_spool || f.header_rewritten)
8664     /* Panic-dies on error */
8665     (void)spool_write_header(message_id, SW_DELIVERING, NULL);
8666   }
8667
8668 /* Finished with the message log. If the message is complete, it will have
8669 been unlinked or renamed above. */
8670
8671 if (message_logs) (void)fclose(message_log);
8672
8673 /* Now we can close and remove the journal file. Its only purpose is to record
8674 successfully completed deliveries asap so that this information doesn't get
8675 lost if Exim (or the machine) crashes. Forgetting about a failed delivery is
8676 not serious, as trying it again is not harmful. The journal might not be open
8677 if all addresses were deferred at routing or directing. Nevertheless, we must
8678 remove it if it exists (may have been lying around from a crash during the
8679 previous delivery attempt). We don't remove the journal if a delivery
8680 subprocess failed to pass back delivery information; this is controlled by
8681 the remove_journal flag. When the journal is left, we also don't move the
8682 message off the main spool if frozen and the option is set. It should get moved
8683 at the next attempt, after the journal has been inspected. */
8684
8685 if (journal_fd >= 0) (void)close(journal_fd);
8686
8687 if (remove_journal)
8688   {
8689   uschar * fname = spool_fname(US"input", message_subdir, id, US"-J");
8690
8691   if (Uunlink(fname) < 0 && errno != ENOENT)
8692     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s: %s", fname,
8693       strerror(errno));
8694
8695   /* Move the message off the spool if requested */
8696
8697 #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
8698   if (f.deliver_freeze && move_frozen_messages)
8699     (void)spool_move_message(id, message_subdir, US"", US"F");
8700 #endif
8701   }
8702
8703 /* Closing the data file frees the lock; if the file has been unlinked it
8704 will go away. Otherwise the message becomes available for another process
8705 to try delivery. */
8706
8707 (void)close(deliver_datafile);
8708 deliver_datafile = -1;
8709 DEBUG(D_deliver) debug_printf("end delivery of %s\n", id);
8710 #ifdef MEASURE_TIMING
8711 report_time_since(&timestamp_startup, US"delivery end"); /* testcase 0005 */
8712 #endif
8713
8714 /* If the transport suggested another message to deliver, go round again. */
8715
8716 if (final_yield == DELIVER_ATTEMPTED_NORMAL && *continue_next_id)
8717   {
8718   addr_defer = addr_failed = addr_succeed = NULL;
8719   tree_duplicates = NULL;       /* discard dups info from old message */
8720   id = string_copyn(continue_next_id, MESSAGE_ID_LENGTH);
8721   continue_next_id[0] = '\0';
8722   goto CONTINUED_ID;
8723   }
8724
8725 /* It is unlikely that there will be any cached resources, since they are
8726 released after routing, and in the delivery subprocesses. However, it's
8727 possible for an expansion for something afterwards (for example,
8728 expand_check_condition) to do a lookup. We must therefore be sure everything is
8729 released. */
8730
8731 search_tidyup();
8732 acl_where = ACL_WHERE_UNKNOWN;
8733 return final_yield;
8734 }
8735
8736
8737
8738 void
8739 tcp_init(void)
8740 {
8741 #ifdef EXIM_TFO_PROBE
8742 tfo_probe();
8743 #else
8744 f.tcp_fastopen_ok = TRUE;
8745 #endif
8746 }
8747
8748
8749
8750 /* Called from a commandline, or from the daemon, to do a delivery.
8751 We need to regain privs; do this by exec of the exim binary. */
8752
8753 void
8754 delivery_re_exec(int exec_type)
8755 {
8756 uschar * where;
8757
8758 if (cutthrough.cctx.sock >= 0 && cutthrough.callout_hold_only)
8759   {
8760   int channel_fd = cutthrough.cctx.sock;
8761
8762   smtp_peer_options = cutthrough.peer_options;
8763   continue_sequence = 0;
8764
8765 #ifndef DISABLE_TLS
8766   if (cutthrough.is_tls)
8767     {
8768     int pfd[2], pid;
8769
8770     smtp_peer_options |= OPTION_TLS;
8771     sending_ip_address = cutthrough.snd_ip;
8772     sending_port = cutthrough.snd_port;
8773
8774     where = US"socketpair";
8775     if (socketpair(AF_UNIX, SOCK_STREAM, 0, pfd) != 0)
8776       goto fail;
8777
8778     where = US"fork";
8779     testharness_pause_ms(150);
8780     if ((pid = exim_fork(US"tls-proxy-interproc")) < 0)
8781       goto fail;
8782
8783     if (pid == 0)       /* child: will fork again to totally disconnect */
8784       {
8785       smtp_proxy_tls(cutthrough.cctx.tls_ctx, big_buffer, big_buffer_size,
8786                       pfd, 5*60, cutthrough.host.name);
8787       /* does not return */
8788       }
8789
8790     close(pfd[0]);
8791     waitpid(pid, NULL, 0);
8792     (void) close(channel_fd);   /* release the client socket */
8793     channel_fd = pfd[1];
8794     }
8795 #endif
8796
8797   transport_do_pass_socket(cutthrough.transport, cutthrough.host.name,
8798     cutthrough.host.address, message_id, channel_fd);
8799   }
8800 else
8801   {
8802   cancel_cutthrough_connection(TRUE, US"non-continued delivery");
8803   (void) child_exec_exim(exec_type, FALSE, NULL, FALSE, 2, US"-Mc", message_id);
8804   }
8805 return;         /* compiler quietening; control does not reach here. */
8806
8807 #ifndef DISABLE_TLS
8808 fail:
8809   log_write(0,
8810     LOG_MAIN | (exec_type == CEE_EXEC_EXIT ? LOG_PANIC : LOG_PANIC_DIE),
8811     "delivery re-exec %s failed: %s", where, strerror(errno));
8812
8813   /* Get here if exec_type == CEE_EXEC_EXIT.
8814   Note: this must be _exit(), not exit(). */
8815
8816   _exit(EX_EXECFAILED);
8817 #endif
8818 }
8819
8820 /* vi: aw ai sw=2
8821 */
8822 /* End of deliver.c */