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