Update all copyright messages to cover 1995 - 2009. Remove tab from exim_checkaccess.src
[exim.git] / src / src / deliver.c
1 /* $Cambridge: exim/src/src/deliver.c,v 1.47 2009/11/16 19:50:36 nm4 Exp $ */
2
3 /*************************************************
4 *     Exim - an Internet mail transport agent    *
5 *************************************************/
6
7 /* Copyright (c) University of Cambridge 1995 - 2009 */
8 /* See the file NOTICE for conditions of use and distribution. */
9
10 /* The main code for delivering a message. */
11
12
13 #include "exim.h"
14
15
16 /* Data block for keeping track of subprocesses for parallel remote
17 delivery. */
18
19 typedef struct pardata {
20   address_item *addrlist;      /* chain of addresses */
21   address_item *addr;          /* next address data expected for */
22   pid_t pid;                   /* subprocess pid */
23   int fd;                      /* pipe fd for getting result from subprocess */
24   int transport_count;         /* returned transport count value */
25   BOOL done;                   /* no more data needed */
26   uschar *msg;                 /* error message */
27   uschar *return_path;         /* return_path for these addresses */
28 } pardata;
29
30 /* Values for the process_recipients variable */
31
32 enum { RECIP_ACCEPT, RECIP_IGNORE, RECIP_DEFER,
33        RECIP_FAIL, RECIP_FAIL_FILTER, RECIP_FAIL_TIMEOUT,
34        RECIP_FAIL_LOOP};
35
36 /* Mutually recursive functions for marking addresses done. */
37
38 static void child_done(address_item *, uschar *);
39 static void address_done(address_item *, uschar *);
40
41 /* Table for turning base-62 numbers into binary */
42
43 static uschar tab62[] =
44           {0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,     /* 0-9 */
45            0,10,11,12,13,14,15,16,17,18,19,20,  /* A-K */
46           21,22,23,24,25,26,27,28,29,30,31,32,  /* L-W */
47           33,34,35, 0, 0, 0, 0, 0,              /* X-Z */
48            0,36,37,38,39,40,41,42,43,44,45,46,  /* a-k */
49           47,48,49,50,51,52,53,54,55,56,57,58,  /* l-w */
50           59,60,61};                            /* x-z */
51
52
53 /*************************************************
54 *            Local static variables              *
55 *************************************************/
56
57 /* addr_duplicate is global because it needs to be seen from the Envelope-To
58 writing code. */
59
60 static address_item *addr_defer = NULL;
61 static address_item *addr_failed = NULL;
62 static address_item *addr_fallback = NULL;
63 static address_item *addr_local = NULL;
64 static address_item *addr_new = NULL;
65 static address_item *addr_remote = NULL;
66 static address_item *addr_route = NULL;
67 static address_item *addr_succeed = NULL;
68
69 static FILE *message_log = NULL;
70 static BOOL update_spool;
71 static BOOL remove_journal;
72 static int  parcount = 0;
73 static pardata *parlist = NULL;
74 static int  return_count;
75 static uschar *frozen_info = US"";
76 static uschar *used_return_path = NULL;
77
78 static uschar spoolname[PATH_MAX];
79
80
81
82 /*************************************************
83 *             Make a new address item            *
84 *************************************************/
85
86 /* This function gets the store and initializes with default values. The
87 transport_return value defaults to DEFER, so that any unexpected failure to
88 deliver does not wipe out the message. The default unique string is set to a
89 copy of the address, so that its domain can be lowercased.
90
91 Argument:
92   address     the RFC822 address string
93   copy        force a copy of the address
94
95 Returns:      a pointer to an initialized address_item
96 */
97
98 address_item *
99 deliver_make_addr(uschar *address, BOOL copy)
100 {
101 address_item *addr = store_get(sizeof(address_item));
102 *addr = address_defaults;
103 if (copy) address = string_copy(address);
104 addr->address = address;
105 addr->unique = string_copy(address);
106 return addr;
107 }
108
109
110
111
112 /*************************************************
113 *     Set expansion values for an address        *
114 *************************************************/
115
116 /* Certain expansion variables are valid only when handling an address or
117 address list. This function sets them up or clears the values, according to its
118 argument.
119
120 Arguments:
121   addr          the address in question, or NULL to clear values
122 Returns:        nothing
123 */
124
125 void
126 deliver_set_expansions(address_item *addr)
127 {
128 if (addr == NULL)
129   {
130   uschar ***p = address_expansions;
131   while (*p != NULL) **p++ = NULL;
132   return;
133   }
134
135 /* Exactly what gets set depends on whether there is one or more addresses, and
136 what they contain. These first ones are always set, taking their values from
137 the first address. */
138
139 if (addr->host_list == NULL)
140   {
141   deliver_host = deliver_host_address = US"";
142   }
143 else
144   {
145   deliver_host = addr->host_list->name;
146   deliver_host_address = addr->host_list->address;
147   }
148
149 deliver_recipients = addr;
150 deliver_address_data = addr->p.address_data;
151 deliver_domain_data = addr->p.domain_data;
152 deliver_localpart_data = addr->p.localpart_data;
153
154 /* These may be unset for multiple addresses */
155
156 deliver_domain = addr->domain;
157 self_hostname = addr->self_hostname;
158
159 #ifdef EXPERIMENTAL_BRIGHTMAIL
160 bmi_deliver = 1;    /* deliver by default */
161 bmi_alt_location = NULL;
162 bmi_base64_verdict = NULL;
163 bmi_base64_tracker_verdict = NULL;
164 #endif
165
166 /* If there's only one address we can set everything. */
167
168 if (addr->next == NULL)
169   {
170   address_item *addr_orig;
171
172   deliver_localpart = addr->local_part;
173   deliver_localpart_prefix = addr->prefix;
174   deliver_localpart_suffix = addr->suffix;
175
176   for (addr_orig = addr; addr_orig->parent != NULL;
177     addr_orig = addr_orig->parent);
178   deliver_domain_orig = addr_orig->domain;
179
180   /* Re-instate any prefix and suffix in the original local part. In all
181   normal cases, the address will have a router associated with it, and we can
182   choose the caseful or caseless version accordingly. However, when a system
183   filter sets up a pipe, file, or autoreply delivery, no router is involved.
184   In this case, though, there won't be any prefix or suffix to worry about. */
185
186   deliver_localpart_orig = (addr_orig->router == NULL)? addr_orig->local_part :
187     addr_orig->router->caseful_local_part?
188       addr_orig->cc_local_part : addr_orig->lc_local_part;
189
190   /* If there's a parent, make its domain and local part available, and if
191   delivering to a pipe or file, or sending an autoreply, get the local
192   part from the parent. For pipes and files, put the pipe or file string
193   into address_pipe and address_file. */
194
195   if (addr->parent != NULL)
196     {
197     deliver_domain_parent = addr->parent->domain;
198     deliver_localpart_parent = (addr->parent->router == NULL)?
199       addr->parent->local_part :
200         addr->parent->router->caseful_local_part?
201           addr->parent->cc_local_part : addr->parent->lc_local_part;
202
203     /* File deliveries have their own flag because they need to be picked out
204     as special more often. */
205
206     if (testflag(addr, af_pfr))
207       {
208       if (testflag(addr, af_file)) address_file = addr->local_part;
209         else if (deliver_localpart[0] == '|') address_pipe = addr->local_part;
210       deliver_localpart = addr->parent->local_part;
211       deliver_localpart_prefix = addr->parent->prefix;
212       deliver_localpart_suffix = addr->parent->suffix;
213       }
214     }
215
216 #ifdef EXPERIMENTAL_BRIGHTMAIL
217     /* Set expansion variables related to Brightmail AntiSpam */
218     bmi_base64_verdict = bmi_get_base64_verdict(deliver_localpart_orig, deliver_domain_orig);
219     bmi_base64_tracker_verdict = bmi_get_base64_tracker_verdict(bmi_base64_verdict);
220     /* get message delivery status (0 - don't deliver | 1 - deliver) */
221     bmi_deliver = bmi_get_delivery_status(bmi_base64_verdict);
222     /* if message is to be delivered, get eventual alternate location */
223     if (bmi_deliver == 1) {
224       bmi_alt_location = bmi_get_alt_location(bmi_base64_verdict);
225     };
226 #endif
227
228   }
229
230 /* For multiple addresses, don't set local part, and leave the domain and
231 self_hostname set only if it is the same for all of them. It is possible to
232 have multiple pipe and file addresses, but only when all addresses have routed
233 to the same pipe or file. */
234
235 else
236   {
237   address_item *addr2;
238   if (testflag(addr, af_pfr))
239     {
240     if (testflag(addr, af_file)) address_file = addr->local_part;
241       else if (addr->local_part[0] == '|') address_pipe = addr->local_part;
242     }
243   for (addr2 = addr->next; addr2 != NULL; addr2 = addr2->next)
244     {
245     if (deliver_domain != NULL &&
246         Ustrcmp(deliver_domain, addr2->domain) != 0)
247       deliver_domain = NULL;
248     if (self_hostname != NULL && (addr2->self_hostname == NULL ||
249         Ustrcmp(self_hostname, addr2->self_hostname) != 0))
250       self_hostname = NULL;
251     if (deliver_domain == NULL && self_hostname == NULL) break;
252     }
253   }
254 }
255
256
257
258
259 /*************************************************
260 *                Open a msglog file              *
261 *************************************************/
262
263 /* This function is used both for normal message logs, and for files in the
264 msglog directory that are used to catch output from pipes. Try to create the
265 directory if it does not exist. From release 4.21, normal message logs should
266 be created when the message is received.
267
268 Argument:
269   filename  the file name
270   mode      the mode required
271   error     used for saying what failed
272
273 Returns:    a file descriptor, or -1 (with errno set)
274 */
275
276 static int
277 open_msglog_file(uschar *filename, int mode, uschar **error)
278 {
279 int fd = Uopen(filename, O_WRONLY|O_APPEND|O_CREAT, mode);
280
281 if (fd < 0 && errno == ENOENT)
282   {
283   uschar temp[16];
284   sprintf(CS temp, "msglog/%s", message_subdir);
285   if (message_subdir[0] == 0) temp[6] = 0;
286   (void)directory_make(spool_directory, temp, MSGLOG_DIRECTORY_MODE, TRUE);
287   fd = Uopen(filename, O_WRONLY|O_APPEND|O_CREAT, mode);
288   }
289
290 /* Set the close-on-exec flag and change the owner to the exim uid/gid (this
291 function is called as root). Double check the mode, because the group setting
292 doesn't always get set automatically. */
293
294 if (fd >= 0)
295   {
296   (void)fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
297   if (fchown(fd, exim_uid, exim_gid) < 0)
298     {
299     *error = US"chown";
300     return -1;
301     }
302   if (fchmod(fd, mode) < 0)
303     {
304     *error = US"chmod";
305     return -1;
306     }
307   }
308 else *error = US"create";
309
310 return fd;
311 }
312
313
314
315
316 /*************************************************
317 *           Write to msglog if required          *
318 *************************************************/
319
320 /* Write to the message log, if configured. This function may also be called
321 from transports.
322
323 Arguments:
324   format       a string format
325
326 Returns:       nothing
327 */
328
329 void
330 deliver_msglog(const char *format, ...)
331 {
332 va_list ap;
333 if (!message_logs) return;
334 va_start(ap, format);
335 vfprintf(message_log, format, ap);
336 fflush(message_log);
337 va_end(ap);
338 }
339
340
341
342
343 /*************************************************
344 *            Replicate status for batch          *
345 *************************************************/
346
347 /* When a transport handles a batch of addresses, it may treat them
348 individually, or it may just put the status in the first one, and return FALSE,
349 requesting that the status be copied to all the others externally. This is the
350 replication function. As well as the status, it copies the transport pointer,
351 which may have changed if appendfile passed the addresses on to a different
352 transport.
353
354 Argument:    pointer to the first address in a chain
355 Returns:     nothing
356 */
357
358 static void
359 replicate_status(address_item *addr)
360 {
361 address_item *addr2;
362 for (addr2 = addr->next; addr2 != NULL; addr2 = addr2->next)
363   {
364   addr2->transport = addr->transport;
365   addr2->transport_return = addr->transport_return;
366   addr2->basic_errno = addr->basic_errno;
367   addr2->more_errno = addr->more_errno;
368   addr2->special_action = addr->special_action;
369   addr2->message = addr->message;
370   addr2->user_message = addr->user_message;
371   }
372 }
373
374
375
376 /*************************************************
377 *              Compare lists of hosts            *
378 *************************************************/
379
380 /* This function is given two pointers to chains of host items, and it yields
381 TRUE if the lists refer to the same hosts in the same order, except that
382
383 (1) Multiple hosts with the same non-negative MX values are permitted to appear
384     in different orders. Round-robinning nameservers can cause this to happen.
385
386 (2) Multiple hosts with the same negative MX values less than MX_NONE are also
387     permitted to appear in different orders. This is caused by randomizing
388     hosts lists.
389
390 This enables Exim to use a single SMTP transaction for sending to two entirely
391 different domains that happen to end up pointing at the same hosts.
392
393 Arguments:
394   one       points to the first host list
395   two       points to the second host list
396
397 Returns:    TRUE if the lists refer to the same host set
398 */
399
400 static BOOL
401 same_hosts(host_item *one, host_item *two)
402 {
403 while (one != NULL && two != NULL)
404   {
405   if (Ustrcmp(one->name, two->name) != 0)
406     {
407     int mx = one->mx;
408     host_item *end_one = one;
409     host_item *end_two = two;
410
411     /* Batch up only if there was no MX and the list was not randomized */
412
413     if (mx == MX_NONE) return FALSE;
414
415     /* Find the ends of the shortest sequence of identical MX values */
416
417     while (end_one->next != NULL && end_one->next->mx == mx &&
418            end_two->next != NULL && end_two->next->mx == mx)
419       {
420       end_one = end_one->next;
421       end_two = end_two->next;
422       }
423
424     /* If there aren't any duplicates, there's no match. */
425
426     if (end_one == one) return FALSE;
427
428     /* For each host in the 'one' sequence, check that it appears in the 'two'
429     sequence, returning FALSE if not. */
430
431     for (;;)
432       {
433       host_item *hi;
434       for (hi = two; hi != end_two->next; hi = hi->next)
435         if (Ustrcmp(one->name, hi->name) == 0) break;
436       if (hi == end_two->next) return FALSE;
437       if (one == end_one) break;
438       one = one->next;
439       }
440
441     /* All the hosts in the 'one' sequence were found in the 'two' sequence.
442     Ensure both are pointing at the last host, and carry on as for equality. */
443
444     two = end_two;
445     }
446
447   /* Hosts matched */
448
449   one = one->next;
450   two = two->next;
451   }
452
453 /* True if both are NULL */
454
455 return (one == two);
456 }
457
458
459
460 /*************************************************
461 *              Compare header lines              *
462 *************************************************/
463
464 /* This function is given two pointers to chains of header items, and it yields
465 TRUE if they are the same header texts in the same order.
466
467 Arguments:
468   one       points to the first header list
469   two       points to the second header list
470
471 Returns:    TRUE if the lists refer to the same header set
472 */
473
474 static BOOL
475 same_headers(header_line *one, header_line *two)
476 {
477 for (;;)
478   {
479   if (one == two) return TRUE;   /* Includes the case where both NULL */
480   if (one == NULL || two == NULL) return FALSE;
481   if (Ustrcmp(one->text, two->text) != 0) return FALSE;
482   one = one->next;
483   two = two->next;
484   }
485 }
486
487
488
489 /*************************************************
490 *            Compare string settings             *
491 *************************************************/
492
493 /* This function is given two pointers to strings, and it returns
494 TRUE if they are the same pointer, or if the two strings are the same.
495
496 Arguments:
497   one       points to the first string
498   two       points to the second string
499
500 Returns:    TRUE or FALSE
501 */
502
503 static BOOL
504 same_strings(uschar *one, uschar *two)
505 {
506 if (one == two) return TRUE;   /* Includes the case where both NULL */
507 if (one == NULL || two == NULL) return FALSE;
508 return (Ustrcmp(one, two) == 0);
509 }
510
511
512
513 /*************************************************
514 *        Compare uid/gid for addresses           *
515 *************************************************/
516
517 /* This function is given a transport and two addresses. It yields TRUE if the
518 uid/gid/initgroups settings for the two addresses are going to be the same when
519 they are delivered.
520
521 Arguments:
522   tp            the transort
523   addr1         the first address
524   addr2         the second address
525
526 Returns:        TRUE or FALSE
527 */
528
529 static BOOL
530 same_ugid(transport_instance *tp, address_item *addr1, address_item *addr2)
531 {
532 if (!tp->uid_set && tp->expand_uid == NULL && !tp->deliver_as_creator)
533   {
534   if (testflag(addr1, af_uid_set) != testflag(addr2, af_gid_set) ||
535        (testflag(addr1, af_uid_set) &&
536          (addr1->uid != addr2->uid ||
537           testflag(addr1, af_initgroups) != testflag(addr2, af_initgroups))))
538     return FALSE;
539   }
540
541 if (!tp->gid_set && tp->expand_gid == NULL)
542   {
543   if (testflag(addr1, af_gid_set) != testflag(addr2, af_gid_set) ||
544      (testflag(addr1, af_gid_set) && addr1->gid != addr2->gid))
545     return FALSE;
546   }
547
548 return TRUE;
549 }
550
551
552
553
554 /*************************************************
555 *      Record that an address is complete        *
556 *************************************************/
557
558 /* This function records that an address is complete. This is straightforward
559 for most addresses, where the unique address is just the full address with the
560 domain lower cased. For homonyms (addresses that are the same as one of their
561 ancestors) their are complications. Their unique addresses have \x\ prepended
562 (where x = 0, 1, 2...), so that de-duplication works correctly for siblings and
563 cousins.
564
565 Exim used to record the unique addresses of homonyms as "complete". This,
566 however, fails when the pattern of redirection varies over time (e.g. if taking
567 unseen copies at only some times of day) because the prepended numbers may vary
568 from one delivery run to the next. This problem is solved by never recording
569 prepended unique addresses as complete. Instead, when a homonymic address has
570 actually been delivered via a transport, we record its basic unique address
571 followed by the name of the transport. This is checked in subsequent delivery
572 runs whenever an address is routed to a transport.
573
574 If the completed address is a top-level one (has no parent, which means it
575 cannot be homonymic) we also add the original address to the non-recipients
576 tree, so that it gets recorded in the spool file and therefore appears as
577 "done" in any spool listings. The original address may differ from the unique
578 address in the case of the domain.
579
580 Finally, this function scans the list of duplicates, marks as done any that
581 match this address, and calls child_done() for their ancestors.
582
583 Arguments:
584   addr        address item that has been completed
585   now         current time as a string
586
587 Returns:      nothing
588 */
589
590 static void
591 address_done(address_item *addr, uschar *now)
592 {
593 address_item *dup;
594
595 update_spool = TRUE;        /* Ensure spool gets updated */
596
597 /* Top-level address */
598
599 if (addr->parent == NULL)
600   {
601   tree_add_nonrecipient(addr->unique);
602   tree_add_nonrecipient(addr->address);
603   }
604
605 /* Homonymous child address */
606
607 else if (testflag(addr, af_homonym))
608   {
609   if (addr->transport != NULL)
610     {
611     tree_add_nonrecipient(
612       string_sprintf("%s/%s", addr->unique + 3, addr->transport->name));
613     }
614   }
615
616 /* Non-homonymous child address */
617
618 else tree_add_nonrecipient(addr->unique);
619
620 /* Check the list of duplicate addresses and ensure they are now marked
621 done as well. */
622
623 for (dup = addr_duplicate; dup != NULL; dup = dup->next)
624   {
625   if (Ustrcmp(addr->unique, dup->unique) == 0)
626     {
627     tree_add_nonrecipient(dup->address);
628     child_done(dup, now);
629     }
630   }
631 }
632
633
634
635
636 /*************************************************
637 *      Decrease counts in parents and mark done  *
638 *************************************************/
639
640 /* This function is called when an address is complete. If there is a parent
641 address, its count of children is decremented. If there are still other
642 children outstanding, the function exits. Otherwise, if the count has become
643 zero, address_done() is called to mark the parent and its duplicates complete.
644 Then loop for any earlier ancestors.
645
646 Arguments:
647   addr      points to the completed address item
648   now       the current time as a string, for writing to the message log
649
650 Returns:    nothing
651 */
652
653 static void
654 child_done(address_item *addr, uschar *now)
655 {
656 address_item *aa;
657 while (addr->parent != NULL)
658   {
659   addr = addr->parent;
660   if ((addr->child_count -= 1) > 0) return;   /* Incomplete parent */
661   address_done(addr, now);
662
663   /* Log the completion of all descendents only when there is no ancestor with
664   the same original address. */
665
666   for (aa = addr->parent; aa != NULL; aa = aa->parent)
667     if (Ustrcmp(aa->address, addr->address) == 0) break;
668   if (aa != NULL) continue;
669
670   deliver_msglog("%s %s: children all complete\n", now, addr->address);
671   DEBUG(D_deliver) debug_printf("%s: children all complete\n", addr->address);
672   }
673 }
674
675
676
677
678 /*************************************************
679 *    Actions at the end of handling an address   *
680 *************************************************/
681
682 /* This is a function for processing a single address when all that can be done
683 with it has been done.
684
685 Arguments:
686   addr         points to the address block
687   result       the result of the delivery attempt
688   logflags     flags for log_write() (LOG_MAIN and/or LOG_PANIC)
689   driver_type  indicates which type of driver (transport, or router) was last
690                  to process the address
691   logchar      '=' or '-' for use when logging deliveries with => or ->
692
693 Returns:       nothing
694 */
695
696 static void
697 post_process_one(address_item *addr, int result, int logflags, int driver_type,
698   int logchar)
699 {
700 uschar *now = tod_stamp(tod_log);
701 uschar *driver_kind = NULL;
702 uschar *driver_name = NULL;
703 uschar *log_address;
704
705 int size = 256;         /* Used for a temporary, */
706 int ptr = 0;            /* expanding buffer, for */
707 uschar *s;              /* building log lines;   */
708 void *reset_point;      /* released afterwards.  */
709
710
711 DEBUG(D_deliver) debug_printf("post-process %s (%d)\n", addr->address, result);
712
713 /* Set up driver kind and name for logging. Disable logging if the router or
714 transport has disabled it. */
715
716 if (driver_type == DTYPE_TRANSPORT)
717   {
718   if (addr->transport != NULL)
719     {
720     driver_name = addr->transport->name;
721     driver_kind = US" transport";
722     disable_logging = addr->transport->disable_logging;
723     }
724   else driver_kind = US"transporting";
725   }
726 else if (driver_type == DTYPE_ROUTER)
727   {
728   if (addr->router != NULL)
729     {
730     driver_name = addr->router->name;
731     driver_kind = US" router";
732     disable_logging = addr->router->disable_logging;
733     }
734   else driver_kind = US"routing";
735   }
736
737 /* If there's an error message set, ensure that it contains only printing
738 characters - it should, but occasionally things slip in and this at least
739 stops the log format from getting wrecked. We also scan the message for an LDAP
740 expansion item that has a password setting, and flatten the password. This is a
741 fudge, but I don't know a cleaner way of doing this. (If the item is badly
742 malformed, it won't ever have gone near LDAP.) */
743
744 if (addr->message != NULL)
745   {
746   addr->message = string_printing(addr->message);
747   if (Ustrstr(addr->message, "failed to expand") != NULL &&
748       (Ustrstr(addr->message, "ldap:") != NULL ||
749        Ustrstr(addr->message, "ldapdn:") != NULL ||
750        Ustrstr(addr->message, "ldapm:") != NULL))
751     {
752     uschar *p = Ustrstr(addr->message, "pass=");
753     if (p != NULL)
754       {
755       p += 5;
756       while (*p != 0 && !isspace(*p)) *p++ = 'x';
757       }
758     }
759   }
760
761 /* If we used a transport that has one of the "return_output" options set, and
762 if it did in fact generate some output, then for return_output we treat the
763 message as failed if it was not already set that way, so that the output gets
764 returned to the sender, provided there is a sender to send it to. For
765 return_fail_output, do this only if the delivery failed. Otherwise we just
766 unlink the file, and remove the name so that if the delivery failed, we don't
767 try to send back an empty or unwanted file. The log_output options operate only
768 on a non-empty file.
769
770 In any case, we close the message file, because we cannot afford to leave a
771 file-descriptor for one address while processing (maybe very many) others. */
772
773 if (addr->return_file >= 0 && addr->return_filename != NULL)
774   {
775   BOOL return_output = FALSE;
776   struct stat statbuf;
777   (void)EXIMfsync(addr->return_file);
778
779   /* If there is no output, do nothing. */
780
781   if (fstat(addr->return_file, &statbuf) == 0 && statbuf.st_size > 0)
782     {
783     transport_instance *tb = addr->transport;
784
785     /* Handle logging options */
786
787     if (tb->log_output || (result == FAIL && tb->log_fail_output) ||
788                           (result == DEFER && tb->log_defer_output))
789       {
790       uschar *s;
791       FILE *f = Ufopen(addr->return_filename, "rb");
792       if (f == NULL)
793         log_write(0, LOG_MAIN|LOG_PANIC, "failed to open %s to log output "
794           "from %s transport: %s", addr->return_filename, tb->name,
795           strerror(errno));
796       else
797         {
798         s = US Ufgets(big_buffer, big_buffer_size, f);
799         if (s != NULL)
800           {
801           uschar *p = big_buffer + Ustrlen(big_buffer);
802           while (p > big_buffer && isspace(p[-1])) p--;
803           *p = 0;
804           s = string_printing(big_buffer);
805           log_write(0, LOG_MAIN, "<%s>: %s transport output: %s",
806             addr->address, tb->name, s);
807           }
808         (void)fclose(f);
809         }
810       }
811
812     /* Handle returning options, but only if there is an address to return
813     the text to. */
814
815     if (sender_address[0] != 0 || addr->p.errors_address != NULL)
816       {
817       if (tb->return_output)
818         {
819         addr->transport_return = result = FAIL;
820         if (addr->basic_errno == 0 && addr->message == NULL)
821           addr->message = US"return message generated";
822         return_output = TRUE;
823         }
824       else
825         if (tb->return_fail_output && result == FAIL) return_output = TRUE;
826       }
827     }
828
829   /* Get rid of the file unless it might be returned, but close it in
830   all cases. */
831
832   if (!return_output)
833     {
834     Uunlink(addr->return_filename);
835     addr->return_filename = NULL;
836     addr->return_file = -1;
837     }
838
839   (void)close(addr->return_file);
840   }
841
842 /* Create the address string for logging. Must not do this earlier, because
843 an OK result may be changed to FAIL when a pipe returns text. */
844
845 log_address = string_log_address(addr,
846   (log_write_selector & L_all_parents) != 0, result == OK);
847
848 /* The sucess case happens only after delivery by a transport. */
849
850 if (result == OK)
851   {
852   addr->next = addr_succeed;
853   addr_succeed = addr;
854
855   /* Call address_done() to ensure that we don't deliver to this address again,
856   and write appropriate things to the message log. If it is a child address, we
857   call child_done() to scan the ancestors and mark them complete if this is the
858   last child to complete. */
859
860   address_done(addr, now);
861   DEBUG(D_deliver) debug_printf("%s delivered\n", addr->address);
862
863   if (addr->parent == NULL)
864     {
865     deliver_msglog("%s %s: %s%s succeeded\n", now, addr->address,
866       driver_name, driver_kind);
867     }
868   else
869     {
870     deliver_msglog("%s %s <%s>: %s%s succeeded\n", now, addr->address,
871       addr->parent->address, driver_name, driver_kind);
872     child_done(addr, now);
873     }
874
875   /* Log the delivery on the main log. We use an extensible string to build up
876   the log line, and reset the store afterwards. Remote deliveries should always
877   have a pointer to the host item that succeeded; local deliveries can have a
878   pointer to a single host item in their host list, for use by the transport. */
879
880   s = reset_point = store_get(size);
881   s[ptr++] = logchar;
882
883   s = string_append(s, &size, &ptr, 2, US"> ", log_address);
884
885   if ((log_extra_selector & LX_sender_on_delivery) != 0)
886     s = string_append(s, &size, &ptr, 3, US" F=<", sender_address, US">");
887
888   #ifdef EXPERIMENTAL_SRS
889   if(addr->p.srs_sender)
890     s = string_append(s, &size, &ptr, 3, US" SRS=<", addr->p.srs_sender, US">");
891   #endif
892
893   /* You might think that the return path must always be set for a successful
894   delivery; indeed, I did for some time, until this statement crashed. The case
895   when it is not set is for a delivery to /dev/null which is optimised by not
896   being run at all. */
897
898   if (used_return_path != NULL &&
899         (log_extra_selector & LX_return_path_on_delivery) != 0)
900     s = string_append(s, &size, &ptr, 3, US" P=<", used_return_path, US">");
901
902   /* For a delivery from a system filter, there may not be a router */
903
904   if (addr->router != NULL)
905     s = string_append(s, &size, &ptr, 2, US" R=", addr->router->name);
906
907   s = string_append(s, &size, &ptr, 2, US" T=", addr->transport->name);
908
909   if ((log_extra_selector & LX_delivery_size) != 0)
910     s = string_append(s, &size, &ptr, 2, US" S=",
911       string_sprintf("%d", transport_count));
912
913   /* Local delivery */
914
915   if (addr->transport->info->local)
916     {
917     if (addr->host_list != NULL)
918       s = string_append(s, &size, &ptr, 2, US" H=", addr->host_list->name);
919     if (addr->shadow_message != NULL)
920       s = string_cat(s, &size, &ptr, addr->shadow_message,
921         Ustrlen(addr->shadow_message));
922     }
923
924   /* Remote delivery */
925
926   else
927     {
928     if (addr->host_used != NULL)
929       {
930       s = string_append(s, &size, &ptr, 5, US" H=", addr->host_used->name,
931         US" [", addr->host_used->address, US"]");
932       if ((log_extra_selector & LX_outgoing_port) != 0)
933         s = string_append(s, &size, &ptr, 2, US":", string_sprintf("%d",
934           addr->host_used->port));
935       if (continue_sequence > 1)
936         s = string_cat(s, &size, &ptr, US"*", 1);
937       }
938
939     #ifdef SUPPORT_TLS
940     if ((log_extra_selector & LX_tls_cipher) != 0 && addr->cipher != NULL)
941       s = string_append(s, &size, &ptr, 2, US" X=", addr->cipher);
942     if ((log_extra_selector & LX_tls_certificate_verified) != 0 &&
943          addr->cipher != NULL)
944       s = string_append(s, &size, &ptr, 2, US" CV=",
945         testflag(addr, af_cert_verified)? "yes":"no");
946     if ((log_extra_selector & LX_tls_peerdn) != 0 && addr->peerdn != NULL)
947       s = string_append(s, &size, &ptr, 3, US" DN=\"",
948         string_printing(addr->peerdn), US"\"");
949     #endif
950
951     if ((log_extra_selector & LX_smtp_confirmation) != 0 &&
952         addr->message != NULL)
953       {
954       int i;
955       uschar *p = big_buffer;
956       uschar *ss = addr->message;
957       *p++ = '\"';
958       for (i = 0; i < 100 && ss[i] != 0; i++)
959         {
960         if (ss[i] == '\"' || ss[i] == '\\') *p++ = '\\';
961         *p++ = ss[i];
962         }
963       *p++ = '\"';
964       *p = 0;
965       s = string_append(s, &size, &ptr, 2, US" C=", big_buffer);
966       }
967     }
968
969   /* Time on queue and actual time taken to deliver */
970
971   if ((log_extra_selector & LX_queue_time) != 0)
972     {
973     s = string_append(s, &size, &ptr, 2, US" QT=",
974       readconf_printtime(time(NULL) - received_time));
975     }
976
977   if ((log_extra_selector & LX_deliver_time) != 0)
978     {
979     s = string_append(s, &size, &ptr, 2, US" DT=",
980       readconf_printtime(addr->more_errno));
981     }
982
983   /* string_cat() always leaves room for the terminator. Release the
984   store we used to build the line after writing it. */
985
986   s[ptr] = 0;
987   log_write(0, LOG_MAIN, "%s", s);
988   store_reset(reset_point);
989   }
990
991
992 /* Soft failure, or local delivery process failed; freezing may be
993 requested. */
994
995 else if (result == DEFER || result == PANIC)
996   {
997   if (result == PANIC) logflags |= LOG_PANIC;
998
999   /* This puts them on the chain in reverse order. Do not change this, because
1000   the code for handling retries assumes that the one with the retry
1001   information is last. */
1002
1003   addr->next = addr_defer;
1004   addr_defer = addr;
1005
1006   /* The only currently implemented special action is to freeze the
1007   message. Logging of this is done later, just before the -H file is
1008   updated. */
1009
1010   if (addr->special_action == SPECIAL_FREEZE)
1011     {
1012     deliver_freeze = TRUE;
1013     deliver_frozen_at = time(NULL);
1014     update_spool = TRUE;
1015     }
1016
1017   /* If doing a 2-stage queue run, we skip writing to either the message
1018   log or the main log for SMTP defers. */
1019
1020   if (!queue_2stage || addr->basic_errno != 0)
1021     {
1022     uschar ss[32];
1023
1024     /* For errors of the type "retry time not reached" (also remotes skipped
1025     on queue run), logging is controlled by L_retry_defer. Note that this kind
1026     of error number is negative, and all the retry ones are less than any
1027     others. */
1028
1029     unsigned int use_log_selector = (addr->basic_errno <= ERRNO_RETRY_BASE)?
1030       L_retry_defer : 0;
1031
1032     /* Build up the line that is used for both the message log and the main
1033     log. */
1034
1035     s = reset_point = store_get(size);
1036     s = string_cat(s, &size, &ptr, log_address, Ustrlen(log_address));
1037
1038     /* Either driver_name contains something and driver_kind contains
1039     " router" or " transport" (note the leading space), or driver_name is
1040     a null string and driver_kind contains "routing" without the leading
1041     space, if all routing has been deferred. When a domain has been held,
1042     so nothing has been done at all, both variables contain null strings. */
1043
1044     if (driver_name == NULL)
1045       {
1046       if (driver_kind != NULL)
1047         s = string_append(s, &size, &ptr, 2, US" ", driver_kind);
1048       }
1049      else
1050       {
1051       if (driver_kind[1] == 't' && addr->router != NULL)
1052         s = string_append(s, &size, &ptr, 2, US" R=", addr->router->name);
1053       Ustrcpy(ss, " ?=");
1054       ss[1] = toupper(driver_kind[1]);
1055       s = string_append(s, &size, &ptr, 2, ss, driver_name);
1056       }
1057
1058     sprintf(CS ss, " defer (%d)", addr->basic_errno);
1059     s = string_cat(s, &size, &ptr, ss, Ustrlen(ss));
1060
1061     if (addr->basic_errno > 0)
1062       s = string_append(s, &size, &ptr, 2, US": ",
1063         US strerror(addr->basic_errno));
1064
1065     if (addr->message != NULL)
1066       s = string_append(s, &size, &ptr, 2, US": ", addr->message);
1067
1068     s[ptr] = 0;
1069
1070     /* Log the deferment in the message log, but don't clutter it
1071     up with retry-time defers after the first delivery attempt. */
1072
1073     if (deliver_firsttime || addr->basic_errno > ERRNO_RETRY_BASE)
1074       deliver_msglog("%s %s\n", now, s);
1075
1076     /* Write the main log and reset the store */
1077
1078     log_write(use_log_selector, logflags, "== %s", s);
1079     store_reset(reset_point);
1080     }
1081   }
1082
1083
1084 /* Hard failure. If there is an address to which an error message can be sent,
1085 put this address on the failed list. If not, put it on the deferred list and
1086 freeze the mail message for human attention. The latter action can also be
1087 explicitly requested by a router or transport. */
1088
1089 else
1090   {
1091   /* If this is a delivery error, or a message for which no replies are
1092   wanted, and the message's age is greater than ignore_bounce_errors_after,
1093   force the af_ignore_error flag. This will cause the address to be discarded
1094   later (with a log entry). */
1095
1096   if (sender_address[0] == 0 && message_age >= ignore_bounce_errors_after)
1097     setflag(addr, af_ignore_error);
1098
1099   /* Freeze the message if requested, or if this is a bounce message (or other
1100   message with null sender) and this address does not have its own errors
1101   address. However, don't freeze if errors are being ignored. The actual code
1102   to ignore occurs later, instead of sending a message. Logging of freezing
1103   occurs later, just before writing the -H file. */
1104
1105   if (!testflag(addr, af_ignore_error) &&
1106       (addr->special_action == SPECIAL_FREEZE ||
1107         (sender_address[0] == 0 && addr->p.errors_address == NULL)
1108       ))
1109     {
1110     frozen_info = (addr->special_action == SPECIAL_FREEZE)? US"" :
1111       (sender_local && !local_error_message)?
1112         US" (message created with -f <>)" : US" (delivery error message)";
1113     deliver_freeze = TRUE;
1114     deliver_frozen_at = time(NULL);
1115     update_spool = TRUE;
1116
1117     /* The address is put on the defer rather than the failed queue, because
1118     the message is being retained. */
1119
1120     addr->next = addr_defer;
1121     addr_defer = addr;
1122     }
1123
1124   /* Don't put the address on the nonrecipients tree yet; wait until an
1125   error message has been successfully sent. */
1126
1127   else
1128     {
1129     addr->next = addr_failed;
1130     addr_failed = addr;
1131     }
1132
1133   /* Build up the log line for the message and main logs */
1134
1135   s = reset_point = store_get(size);
1136   s = string_cat(s, &size, &ptr, log_address, Ustrlen(log_address));
1137
1138   if ((log_extra_selector & LX_sender_on_delivery) != 0)
1139     s = string_append(s, &size, &ptr, 3, US" F=<", sender_address, US">");
1140
1141   /* Return path may not be set if no delivery actually happened */
1142
1143   if (used_return_path != NULL &&
1144       (log_extra_selector & LX_return_path_on_delivery) != 0)
1145     {
1146     s = string_append(s, &size, &ptr, 3, US" P=<", used_return_path, US">");
1147     }
1148
1149   if (addr->router != NULL)
1150     s = string_append(s, &size, &ptr, 2, US" R=", addr->router->name);
1151   if (addr->transport != NULL)
1152     s = string_append(s, &size, &ptr, 2, US" T=", addr->transport->name);
1153
1154   if (addr->host_used != NULL)
1155     s = string_append(s, &size, &ptr, 5, US" H=", addr->host_used->name,
1156       US" [", addr->host_used->address, US"]");
1157
1158   if (addr->basic_errno > 0)
1159     s = string_append(s, &size, &ptr, 2, US": ",
1160       US strerror(addr->basic_errno));
1161
1162   if (addr->message != NULL)
1163     s = string_append(s, &size, &ptr, 2, US": ", addr->message);
1164
1165   s[ptr] = 0;
1166
1167   /* Do the logging. For the message log, "routing failed" for those cases,
1168   just to make it clearer. */
1169
1170   if (driver_name == NULL)
1171     deliver_msglog("%s %s failed for %s\n", now, driver_kind, s);
1172   else
1173     deliver_msglog("%s %s\n", now, s);
1174
1175   log_write(0, LOG_MAIN, "** %s", s);
1176   store_reset(reset_point);
1177   }
1178
1179 /* Ensure logging is turned on again in all cases */
1180
1181 disable_logging = FALSE;
1182 }
1183
1184
1185
1186
1187 /*************************************************
1188 *            Address-independent error           *
1189 *************************************************/
1190
1191 /* This function is called when there's an error that is not dependent on a
1192 particular address, such as an expansion string failure. It puts the error into
1193 all the addresses in a batch, logs the incident on the main and panic logs, and
1194 clears the expansions. It is mostly called from local_deliver(), but can be
1195 called for a remote delivery via findugid().
1196
1197 Arguments:
1198   logit        TRUE if (MAIN+PANIC) logging required
1199   addr         the first of the chain of addresses
1200   code         the error code
1201   format       format string for error message, or NULL if already set in addr
1202   ...          arguments for the format
1203
1204 Returns:       nothing
1205 */
1206
1207 static void
1208 common_error(BOOL logit, address_item *addr, int code, uschar *format, ...)
1209 {
1210 address_item *addr2;
1211 addr->basic_errno = code;
1212
1213 if (format != NULL)
1214   {
1215   va_list ap;
1216   uschar buffer[512];
1217   va_start(ap, format);
1218   if (!string_vformat(buffer, sizeof(buffer), CS format, ap))
1219     log_write(0, LOG_MAIN|LOG_PANIC_DIE,
1220       "common_error expansion was longer than %d", sizeof(buffer));
1221   va_end(ap);
1222   addr->message = string_copy(buffer);
1223   }
1224
1225 for (addr2 = addr->next; addr2 != NULL; addr2 = addr2->next)
1226   {
1227   addr2->basic_errno = code;
1228   addr2->message = addr->message;
1229   }
1230
1231 if (logit) log_write(0, LOG_MAIN|LOG_PANIC, "%s", addr->message);
1232 deliver_set_expansions(NULL);
1233 }
1234
1235
1236
1237
1238 /*************************************************
1239 *         Check a "never users" list             *
1240 *************************************************/
1241
1242 /* This function is called to check whether a uid is on one of the two "never
1243 users" lists.
1244
1245 Arguments:
1246   uid         the uid to be checked
1247   nusers      the list to be scanned; the first item in the list is the count
1248
1249 Returns:      TRUE if the uid is on the list
1250 */
1251
1252 static BOOL
1253 check_never_users(uid_t uid, uid_t *nusers)
1254 {
1255 int i;
1256 if (nusers == NULL) return FALSE;
1257 for (i = 1; i <= (int)(nusers[0]); i++) if (nusers[i] == uid) return TRUE;
1258 return FALSE;
1259 }
1260
1261
1262
1263 /*************************************************
1264 *          Find uid and gid for a transport      *
1265 *************************************************/
1266
1267 /* This function is called for both local and remote deliveries, to find the
1268 uid/gid under which to run the delivery. The values are taken preferentially
1269 from the transport (either explicit or deliver_as_creator), then from the
1270 address (i.e. the router), and if nothing is set, the exim uid/gid are used. If
1271 the resulting uid is on the "never_users" or the "fixed_never_users" list, a
1272 panic error is logged, and the function fails (which normally leads to delivery
1273 deferral).
1274
1275 Arguments:
1276   addr         the address (possibly a chain)
1277   tp           the transport
1278   uidp         pointer to uid field
1279   gidp         pointer to gid field
1280   igfp         pointer to the use_initgroups field
1281
1282 Returns:       FALSE if failed - error has been set in address(es)
1283 */
1284
1285 static BOOL
1286 findugid(address_item *addr, transport_instance *tp, uid_t *uidp, gid_t *gidp,
1287   BOOL *igfp)
1288 {
1289 uschar *nuname = NULL;
1290 BOOL gid_set = FALSE;
1291
1292 /* Default initgroups flag comes from the transport */
1293
1294 *igfp = tp->initgroups;
1295
1296 /* First see if there's a gid on the transport, either fixed or expandable.
1297 The expanding function always logs failure itself. */
1298
1299 if (tp->gid_set)
1300   {
1301   *gidp = tp->gid;
1302   gid_set = TRUE;
1303   }
1304 else if (tp->expand_gid != NULL)
1305   {
1306   if (route_find_expanded_group(tp->expand_gid, tp->name, US"transport", gidp,
1307     &(addr->message))) gid_set = TRUE;
1308   else
1309     {
1310     common_error(FALSE, addr, ERRNO_GIDFAIL, NULL);
1311     return FALSE;
1312     }
1313   }
1314
1315 /* If the transport did not set a group, see if the router did. */
1316
1317 if (!gid_set && testflag(addr, af_gid_set))
1318   {
1319   *gidp = addr->gid;
1320   gid_set = TRUE;
1321   }
1322
1323 /* Pick up a uid from the transport if one is set. */
1324
1325 if (tp->uid_set) *uidp = tp->uid;
1326
1327 /* Otherwise, try for an expandable uid field. If it ends up as a numeric id,
1328 it does not provide a passwd value from which a gid can be taken. */
1329
1330 else if (tp->expand_uid != NULL)
1331   {
1332   struct passwd *pw;
1333   if (!route_find_expanded_user(tp->expand_uid, tp->name, US"transport", &pw,
1334        uidp, &(addr->message)))
1335     {
1336     common_error(FALSE, addr, ERRNO_UIDFAIL, NULL);
1337     return FALSE;
1338     }
1339   if (!gid_set && pw != NULL)
1340     {
1341     *gidp = pw->pw_gid;
1342     gid_set = TRUE;
1343     }
1344   }
1345
1346 /* If the transport doesn't set the uid, test the deliver_as_creator flag. */
1347
1348 else if (tp->deliver_as_creator)
1349   {
1350   *uidp = originator_uid;
1351   if (!gid_set)
1352     {
1353     *gidp = originator_gid;
1354     gid_set = TRUE;
1355     }
1356   }
1357
1358 /* Otherwise see if the address specifies the uid and if so, take it and its
1359 initgroups flag. */
1360
1361 else if (testflag(addr, af_uid_set))
1362   {
1363   *uidp = addr->uid;
1364   *igfp = testflag(addr, af_initgroups);
1365   }
1366
1367 /* Nothing has specified the uid - default to the Exim user, and group if the
1368 gid is not set. */
1369
1370 else
1371   {
1372   *uidp = exim_uid;
1373   if (!gid_set)
1374     {
1375     *gidp = exim_gid;
1376     gid_set = TRUE;
1377     }
1378   }
1379
1380 /* If no gid is set, it is a disaster. We default to the Exim gid only if
1381 defaulting to the Exim uid. In other words, if the configuration has specified
1382 a uid, it must also provide a gid. */
1383
1384 if (!gid_set)
1385   {
1386   common_error(TRUE, addr, ERRNO_GIDFAIL, US"User set without group for "
1387     "%s transport", tp->name);
1388   return FALSE;
1389   }
1390
1391 /* Check that the uid is not on the lists of banned uids that may not be used
1392 for delivery processes. */
1393
1394 if (check_never_users(*uidp, never_users))
1395   nuname = US"never_users";
1396 else if (check_never_users(*uidp, fixed_never_users))
1397   nuname = US"fixed_never_users";
1398
1399 if (nuname != NULL)
1400   {
1401   common_error(TRUE, addr, ERRNO_UIDFAIL, US"User %ld set for %s transport "
1402     "is on the %s list", (long int)(*uidp), tp->name, nuname);
1403   return FALSE;
1404   }
1405
1406 /* All is well */
1407
1408 return TRUE;
1409 }
1410
1411
1412
1413
1414 /*************************************************
1415 *   Check the size of a message for a transport  *
1416 *************************************************/
1417
1418 /* Checks that the message isn't too big for the selected transport.
1419 This is called only when it is known that the limit is set.
1420
1421 Arguments:
1422   tp          the transport
1423   addr        the (first) address being delivered
1424
1425 Returns:      OK
1426               DEFER   expansion failed or did not yield an integer
1427               FAIL    message too big
1428 */
1429
1430 int
1431 check_message_size(transport_instance *tp, address_item *addr)
1432 {
1433 int rc = OK;
1434 int size_limit;
1435
1436 deliver_set_expansions(addr);
1437 size_limit = expand_string_integer(tp->message_size_limit, TRUE);
1438 deliver_set_expansions(NULL);
1439
1440 if (expand_string_message != NULL)
1441   {
1442   rc = DEFER;
1443   if (size_limit == -1)
1444     addr->message = string_sprintf("failed to expand message_size_limit "
1445       "in %s transport: %s", tp->name, expand_string_message);
1446   else
1447     addr->message = string_sprintf("invalid message_size_limit "
1448       "in %s transport: %s", tp->name, expand_string_message);
1449   }
1450 else if (size_limit > 0 && message_size > size_limit)
1451   {
1452   rc = FAIL;
1453   addr->message =
1454     string_sprintf("message is too big (transport limit = %d)",
1455       size_limit);
1456   }
1457
1458 return rc;
1459 }
1460
1461
1462
1463 /*************************************************
1464 *  Transport-time check for a previous delivery  *
1465 *************************************************/
1466
1467 /* Check that this base address hasn't previously been delivered to its routed
1468 transport. If it has been delivered, mark it done. The check is necessary at
1469 delivery time in order to handle homonymic addresses correctly in cases where
1470 the pattern of redirection changes between delivery attempts (so the unique
1471 fields change). Non-homonymic previous delivery is detected earlier, at routing
1472 time (which saves unnecessary routing).
1473
1474 Arguments:
1475   addr      the address item
1476   testing   TRUE if testing wanted only, without side effects
1477
1478 Returns:    TRUE if previously delivered by the transport
1479 */
1480
1481 static BOOL
1482 previously_transported(address_item *addr, BOOL testing)
1483 {
1484 (void)string_format(big_buffer, big_buffer_size, "%s/%s",
1485   addr->unique + (testflag(addr, af_homonym)? 3:0), addr->transport->name);
1486
1487 if (tree_search(tree_nonrecipients, big_buffer) != 0)
1488   {
1489   DEBUG(D_deliver|D_route|D_transport)
1490     debug_printf("%s was previously delivered (%s transport): discarded\n",
1491     addr->address, addr->transport->name);
1492   if (!testing) child_done(addr, tod_stamp(tod_log));
1493   return TRUE;
1494   }
1495
1496 return FALSE;
1497 }
1498
1499
1500
1501 /******************************************************
1502 *      Check for a given header in a header string    *
1503 ******************************************************/
1504
1505 /* This function is used when generating quota warnings. The configuration may
1506 specify any header lines it likes in quota_warn_message. If certain of them are
1507 missing, defaults are inserted, so we need to be able to test for the presence
1508 of a given header.
1509
1510 Arguments:
1511   hdr         the required header name
1512   hstring     the header string
1513
1514 Returns:      TRUE  the header is in the string
1515               FALSE the header is not in the string
1516 */
1517
1518 static BOOL
1519 contains_header(uschar *hdr, uschar *hstring)
1520 {
1521 int len = Ustrlen(hdr);
1522 uschar *p = hstring;
1523 while (*p != 0)
1524   {
1525   if (strncmpic(p, hdr, len) == 0)
1526     {
1527     p += len;
1528     while (*p == ' ' || *p == '\t') p++;
1529     if (*p == ':') return TRUE;
1530     }
1531   while (*p != 0 && *p != '\n') p++;
1532   if (*p == '\n') p++;
1533   }
1534 return FALSE;
1535 }
1536
1537
1538
1539
1540 /*************************************************
1541 *           Perform a local delivery             *
1542 *************************************************/
1543
1544 /* Each local delivery is performed in a separate process which sets its
1545 uid and gid as specified. This is a safer way than simply changing and
1546 restoring using seteuid(); there is a body of opinion that seteuid() cannot be
1547 used safely. From release 4, Exim no longer makes any use of it. Besides, not
1548 all systems have seteuid().
1549
1550 If the uid/gid are specified in the transport_instance, they are used; the
1551 transport initialization must ensure that either both or neither are set.
1552 Otherwise, the values associated with the address are used. If neither are set,
1553 it is a configuration error.
1554
1555 The transport or the address may specify a home directory (transport over-
1556 rides), and if they do, this is set as $home. If neither have set a working
1557 directory, this value is used for that as well. Otherwise $home is left unset
1558 and the cwd is set to "/" - a directory that should be accessible to all users.
1559
1560 Using a separate process makes it more complicated to get error information
1561 back. We use a pipe to pass the return code and also an error code and error
1562 text string back to the parent process.
1563
1564 Arguments:
1565   addr       points to an address block for this delivery; for "normal" local
1566              deliveries this is the only address to be delivered, but for
1567              pseudo-remote deliveries (e.g. by batch SMTP to a file or pipe)
1568              a number of addresses can be handled simultaneously, and in this
1569              case addr will point to a chain of addresses with the same
1570              characteristics.
1571
1572   shadowing  TRUE if running a shadow transport; this causes output from pipes
1573              to be ignored.
1574
1575 Returns:     nothing
1576 */
1577
1578 static void
1579 deliver_local(address_item *addr, BOOL shadowing)
1580 {
1581 BOOL use_initgroups;
1582 uid_t uid;
1583 gid_t gid;
1584 int status, len, rc;
1585 int pfd[2];
1586 pid_t pid;
1587 uschar *working_directory;
1588 address_item *addr2;
1589 transport_instance *tp = addr->transport;
1590
1591 /* Set up the return path from the errors or sender address. If the transport
1592 has its own return path setting, expand it and replace the existing value. */
1593
1594 if(addr->p.errors_address != NULL)
1595   return_path = addr->p.errors_address;
1596 #ifdef EXPERIMENTAL_SRS
1597 else if(addr->p.srs_sender != NULL)
1598   return_path = addr->p.srs_sender;
1599 #endif
1600 else
1601   return_path = sender_address;
1602
1603 if (tp->return_path != NULL)
1604   {
1605   uschar *new_return_path = expand_string(tp->return_path);
1606   if (new_return_path == NULL)
1607     {
1608     if (!expand_string_forcedfail)
1609       {
1610       common_error(TRUE, addr, ERRNO_EXPANDFAIL,
1611         US"Failed to expand return path \"%s\" in %s transport: %s",
1612         tp->return_path, tp->name, expand_string_message);
1613       return;
1614       }
1615     }
1616   else return_path = new_return_path;
1617   }
1618
1619 /* For local deliveries, one at a time, the value used for logging can just be
1620 set directly, once and for all. */
1621
1622 used_return_path = return_path;
1623
1624 /* Sort out the uid, gid, and initgroups flag. If an error occurs, the message
1625 gets put into the address(es), and the expansions are unset, so we can just
1626 return. */
1627
1628 if (!findugid(addr, tp, &uid, &gid, &use_initgroups)) return;
1629
1630 /* See if either the transport or the address specifies a home directory. A
1631 home directory set in the address may already be expanded; a flag is set to
1632 indicate that. In other cases we must expand it. */
1633
1634 if ((deliver_home = tp->home_dir) != NULL ||       /* Set in transport, or */
1635      ((deliver_home = addr->home_dir) != NULL &&   /* Set in address and */
1636        !testflag(addr, af_home_expanded)))         /*   not expanded */
1637   {
1638   uschar *rawhome = deliver_home;
1639   deliver_home = NULL;                      /* in case it contains $home */
1640   deliver_home = expand_string(rawhome);
1641   if (deliver_home == NULL)
1642     {
1643     common_error(TRUE, addr, ERRNO_EXPANDFAIL, US"home directory \"%s\" failed "
1644       "to expand for %s transport: %s", rawhome, tp->name,
1645       expand_string_message);
1646     return;
1647     }
1648   if (*deliver_home != '/')
1649     {
1650     common_error(TRUE, addr, ERRNO_NOTABSOLUTE, US"home directory path \"%s\" "
1651       "is not absolute for %s transport", deliver_home, tp->name);
1652     return;
1653     }
1654   }
1655
1656 /* See if either the transport or the address specifies a current directory,
1657 and if so, expand it. If nothing is set, use the home directory, unless it is
1658 also unset in which case use "/", which is assumed to be a directory to which
1659 all users have access. It is necessary to be in a visible directory for some
1660 operating systems when running pipes, as some commands (e.g. "rm" under Solaris
1661 2.5) require this. */
1662
1663 working_directory = (tp->current_dir != NULL)?
1664   tp->current_dir : addr->current_dir;
1665
1666 if (working_directory != NULL)
1667   {
1668   uschar *raw = working_directory;
1669   working_directory = expand_string(raw);
1670   if (working_directory == NULL)
1671     {
1672     common_error(TRUE, addr, ERRNO_EXPANDFAIL, US"current directory \"%s\" "
1673       "failed to expand for %s transport: %s", raw, tp->name,
1674       expand_string_message);
1675     return;
1676     }
1677   if (*working_directory != '/')
1678     {
1679     common_error(TRUE, addr, ERRNO_NOTABSOLUTE, US"current directory path "
1680       "\"%s\" is not absolute for %s transport", working_directory, tp->name);
1681     return;
1682     }
1683   }
1684 else working_directory = (deliver_home == NULL)? US"/" : deliver_home;
1685
1686 /* If one of the return_output flags is set on the transport, create and open a
1687 file in the message log directory for the transport to write its output onto.
1688 This is mainly used by pipe transports. The file needs to be unique to the
1689 address. This feature is not available for shadow transports. */
1690
1691 if (!shadowing && (tp->return_output || tp->return_fail_output ||
1692     tp->log_output || tp->log_fail_output))
1693   {
1694   uschar *error;
1695   addr->return_filename =
1696     string_sprintf("%s/msglog/%s/%s-%d-%d", spool_directory, message_subdir,
1697       message_id, getpid(), return_count++);
1698   addr->return_file = open_msglog_file(addr->return_filename, 0400, &error);
1699   if (addr->return_file < 0)
1700     {
1701     common_error(TRUE, addr, errno, US"Unable to %s file for %s transport "
1702       "to return message: %s", error, tp->name, strerror(errno));
1703     return;
1704     }
1705   }
1706
1707 /* Create the pipe for inter-process communication. */
1708
1709 if (pipe(pfd) != 0)
1710   {
1711   common_error(TRUE, addr, ERRNO_PIPEFAIL, US"Creation of pipe failed: %s",
1712     strerror(errno));
1713   return;
1714   }
1715
1716 /* Now fork the process to do the real work in the subprocess, but first
1717 ensure that all cached resources are freed so that the subprocess starts with
1718 a clean slate and doesn't interfere with the parent process. */
1719
1720 search_tidyup();
1721
1722 if ((pid = fork()) == 0)
1723   {
1724   BOOL replicate = TRUE;
1725
1726   /* Prevent core dumps, as we don't want them in users' home directories.
1727   HP-UX doesn't have RLIMIT_CORE; I don't know how to do this in that
1728   system. Some experimental/developing systems (e.g. GNU/Hurd) may define
1729   RLIMIT_CORE but not support it in setrlimit(). For such systems, do not
1730   complain if the error is "not supported". */
1731
1732   #ifdef RLIMIT_CORE
1733   struct rlimit rl;
1734   rl.rlim_cur = 0;
1735   rl.rlim_max = 0;
1736   if (setrlimit(RLIMIT_CORE, &rl) < 0)
1737     {
1738     #ifdef SETRLIMIT_NOT_SUPPORTED
1739     if (errno != ENOSYS && errno != ENOTSUP)
1740     #endif
1741       log_write(0, LOG_MAIN|LOG_PANIC, "setrlimit(RLIMIT_CORE) failed: %s",
1742         strerror(errno));
1743     }
1744   #endif
1745
1746   /* Reset the random number generator, so different processes don't all
1747   have the same sequence. */
1748
1749   random_seed = 0;
1750
1751   /* If the transport has a setup entry, call this first, while still
1752   privileged. (Appendfile uses this to expand quota, for example, while
1753   able to read private files.) */
1754
1755   if (addr->transport->setup != NULL)
1756     {
1757     switch((addr->transport->setup)(addr->transport, addr, NULL, uid, gid,
1758            &(addr->message)))
1759       {
1760       case DEFER:
1761       addr->transport_return = DEFER;
1762       goto PASS_BACK;
1763
1764       case FAIL:
1765       addr->transport_return = PANIC;
1766       goto PASS_BACK;
1767       }
1768     }
1769
1770   /* Ignore SIGINT and SIGTERM during delivery. Also ignore SIGUSR1, as
1771   when the process becomes unprivileged, it won't be able to write to the
1772   process log. SIGHUP is ignored throughout exim, except when it is being
1773   run as a daemon. */
1774
1775   signal(SIGINT, SIG_IGN);
1776   signal(SIGTERM, SIG_IGN);
1777   signal(SIGUSR1, SIG_IGN);
1778
1779   /* Close the unwanted half of the pipe, and set close-on-exec for the other
1780   half - for transports that exec things (e.g. pipe). Then set the required
1781   gid/uid. */
1782
1783   (void)close(pfd[pipe_read]);
1784   (void)fcntl(pfd[pipe_write], F_SETFD, fcntl(pfd[pipe_write], F_GETFD) |
1785     FD_CLOEXEC);
1786   exim_setugid(uid, gid, use_initgroups,
1787     string_sprintf("local delivery to %s <%s> transport=%s", addr->local_part,
1788       addr->address, addr->transport->name));
1789
1790   DEBUG(D_deliver)
1791     {
1792     address_item *batched;
1793     debug_printf("  home=%s current=%s\n", deliver_home, working_directory);
1794     for (batched = addr->next; batched != NULL; batched = batched->next)
1795       debug_printf("additional batched address: %s\n", batched->address);
1796     }
1797
1798   /* Set an appropriate working directory. */
1799
1800   if (Uchdir(working_directory) < 0)
1801     {
1802     addr->transport_return = DEFER;
1803     addr->basic_errno = errno;
1804     addr->message = string_sprintf("failed to chdir to %s", working_directory);
1805     }
1806
1807   /* If successful, call the transport */
1808
1809   else
1810     {
1811     BOOL ok = TRUE;
1812     set_process_info("delivering %s to %s using %s", message_id,
1813      addr->local_part, addr->transport->name);
1814
1815     /* If a transport filter has been specified, set up its argument list.
1816     Any errors will get put into the address, and FALSE yielded. */
1817
1818     if (addr->transport->filter_command != NULL)
1819       {
1820       ok = transport_set_up_command(&transport_filter_argv,
1821         addr->transport->filter_command,
1822         TRUE, PANIC, addr, US"transport filter", NULL);
1823       transport_filter_timeout = addr->transport->filter_timeout;
1824       }
1825     else transport_filter_argv = NULL;
1826
1827     if (ok)
1828       {
1829       debug_print_string(addr->transport->debug_string);
1830       replicate = !(addr->transport->info->code)(addr->transport, addr);
1831       }
1832     }
1833
1834   /* Pass the results back down the pipe. If necessary, first replicate the
1835   status in the top address to the others in the batch. The label is the
1836   subject of a goto when a call to the transport's setup function fails. We
1837   pass the pointer to the transport back in case it got changed as a result of
1838   file_format in appendfile. */
1839
1840   PASS_BACK:
1841
1842   if (replicate) replicate_status(addr);
1843   for (addr2 = addr; addr2 != NULL; addr2 = addr2->next)
1844     {
1845     int i;
1846     int local_part_length = Ustrlen(addr2->local_part);
1847     uschar *s;
1848
1849     (void)write(pfd[pipe_write], (void *)&(addr2->transport_return), sizeof(int));
1850     (void)write(pfd[pipe_write], (void *)&transport_count, sizeof(transport_count));
1851     (void)write(pfd[pipe_write], (void *)&(addr2->flags), sizeof(addr2->flags));
1852     (void)write(pfd[pipe_write], (void *)&(addr2->basic_errno), sizeof(int));
1853     (void)write(pfd[pipe_write], (void *)&(addr2->more_errno), sizeof(int));
1854     (void)write(pfd[pipe_write], (void *)&(addr2->special_action), sizeof(int));
1855     (void)write(pfd[pipe_write], (void *)&(addr2->transport),
1856       sizeof(transport_instance *));
1857
1858     /* For a file delivery, pass back the local part, in case the original
1859     was only part of the final delivery path. This gives more complete
1860     logging. */
1861
1862     if (testflag(addr2, af_file))
1863       {
1864       (void)write(pfd[pipe_write], (void *)&local_part_length, sizeof(int));
1865       (void)write(pfd[pipe_write], addr2->local_part, local_part_length);
1866       }
1867
1868     /* Now any messages */
1869
1870     for (i = 0, s = addr2->message; i < 2; i++, s = addr2->user_message)
1871       {
1872       int message_length = (s == NULL)? 0 : Ustrlen(s) + 1;
1873       (void)write(pfd[pipe_write], (void *)&message_length, sizeof(int));
1874       if (message_length > 0) (void)write(pfd[pipe_write], s, message_length);
1875       }
1876     }
1877
1878   /* OK, this process is now done. Free any cached resources that it opened,
1879   and close the pipe we were writing down before exiting. */
1880
1881   (void)close(pfd[pipe_write]);
1882   search_tidyup();
1883   exit(EXIT_SUCCESS);
1884   }
1885
1886 /* Back in the main process: panic if the fork did not succeed. This seems
1887 better than returning an error - if forking is failing it is probably best
1888 not to try other deliveries for this message. */
1889
1890 if (pid < 0)
1891   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Fork failed for local delivery to %s",
1892     addr->address);
1893
1894 /* Read the pipe to get the delivery status codes and error messages. Our copy
1895 of the writing end must be closed first, as otherwise read() won't return zero
1896 on an empty pipe. We check that a status exists for each address before
1897 overwriting the address structure. If data is missing, the default DEFER status
1898 will remain. Afterwards, close the reading end. */
1899
1900 (void)close(pfd[pipe_write]);
1901
1902 for (addr2 = addr; addr2 != NULL; addr2 = addr2->next)
1903   {
1904   len = read(pfd[pipe_read], (void *)&status, sizeof(int));
1905   if (len > 0)
1906     {
1907     int i;
1908     uschar **sptr;
1909
1910     addr2->transport_return = status;
1911     len = read(pfd[pipe_read], (void *)&transport_count,
1912       sizeof(transport_count));
1913     len = read(pfd[pipe_read], (void *)&(addr2->flags), sizeof(addr2->flags));
1914     len = read(pfd[pipe_read], (void *)&(addr2->basic_errno), sizeof(int));
1915     len = read(pfd[pipe_read], (void *)&(addr2->more_errno), sizeof(int));
1916     len = read(pfd[pipe_read], (void *)&(addr2->special_action), sizeof(int));
1917     len = read(pfd[pipe_read], (void *)&(addr2->transport),
1918       sizeof(transport_instance *));
1919
1920     if (testflag(addr2, af_file))
1921       {
1922       int local_part_length;
1923       len = read(pfd[pipe_read], (void *)&local_part_length, sizeof(int));
1924       len = read(pfd[pipe_read], (void *)big_buffer, local_part_length);
1925       big_buffer[local_part_length] = 0;
1926       addr2->local_part = string_copy(big_buffer);
1927       }
1928
1929     for (i = 0, sptr = &(addr2->message); i < 2;
1930          i++, sptr = &(addr2->user_message))
1931       {
1932       int message_length;
1933       len = read(pfd[pipe_read], (void *)&message_length, sizeof(int));
1934       if (message_length > 0)
1935         {
1936         len = read(pfd[pipe_read], (void *)big_buffer, message_length);
1937         if (len > 0) *sptr = string_copy(big_buffer);
1938         }
1939       }
1940     }
1941
1942   else
1943     {
1944     log_write(0, LOG_MAIN|LOG_PANIC, "failed to read delivery status for %s "
1945       "from delivery subprocess", addr2->unique);
1946     break;
1947     }
1948   }
1949
1950 (void)close(pfd[pipe_read]);
1951
1952 /* Unless shadowing, write all successful addresses immediately to the journal
1953 file, to ensure they are recorded asap. For homonymic addresses, use the base
1954 address plus the transport name. Failure to write the journal is panic-worthy,
1955 but don't stop, as it may prove possible subsequently to update the spool file
1956 in order to record the delivery. */
1957
1958 if (!shadowing)
1959   {
1960   for (addr2 = addr; addr2 != NULL; addr2 = addr2->next)
1961     {
1962     if (addr2->transport_return != OK) continue;
1963
1964     if (testflag(addr2, af_homonym))
1965       sprintf(CS big_buffer, "%.500s/%s\n", addr2->unique + 3, tp->name);
1966     else
1967       sprintf(CS big_buffer, "%.500s\n", addr2->unique);
1968
1969     /* In the test harness, wait just a bit to let the subprocess finish off
1970     any debug output etc first. */
1971
1972     if (running_in_test_harness) millisleep(300);
1973
1974     DEBUG(D_deliver) debug_printf("journalling %s", big_buffer);
1975     len = Ustrlen(big_buffer);
1976     if (write(journal_fd, big_buffer, len) != len)
1977       log_write(0, LOG_MAIN|LOG_PANIC, "failed to update journal for %s: %s",
1978         big_buffer, strerror(errno));
1979     }
1980
1981   /* Ensure the journal file is pushed out to disk. */
1982
1983   if (EXIMfsync(journal_fd) < 0)
1984     log_write(0, LOG_MAIN|LOG_PANIC, "failed to fsync journal: %s",
1985       strerror(errno));
1986   }
1987
1988 /* Wait for the process to finish. If it terminates with a non-zero code,
1989 freeze the message (except for SIGTERM, SIGKILL and SIGQUIT), but leave the
1990 status values of all the addresses as they are. Take care to handle the case
1991 when the subprocess doesn't seem to exist. This has been seen on one system
1992 when Exim was called from an MUA that set SIGCHLD to SIG_IGN. When that
1993 happens, wait() doesn't recognize the termination of child processes. Exim now
1994 resets SIGCHLD to SIG_DFL, but this code should still be robust. */
1995
1996 while ((rc = wait(&status)) != pid)
1997   {
1998   if (rc < 0 && errno == ECHILD)      /* Process has vanished */
1999     {
2000     log_write(0, LOG_MAIN, "%s transport process vanished unexpectedly",
2001       addr->transport->driver_name);
2002     status = 0;
2003     break;
2004     }
2005   }
2006
2007 if ((status & 0xffff) != 0)
2008   {
2009   int msb = (status >> 8) & 255;
2010   int lsb = status & 255;
2011   int code = (msb == 0)? (lsb & 0x7f) : msb;
2012   if (msb != 0 || (code != SIGTERM && code != SIGKILL && code != SIGQUIT))
2013     addr->special_action = SPECIAL_FREEZE;
2014   log_write(0, LOG_MAIN|LOG_PANIC, "%s transport process returned non-zero "
2015     "status 0x%04x: %s %d",
2016     addr->transport->driver_name,
2017     status,
2018     (msb == 0)? "terminated by signal" : "exit code",
2019     code);
2020   }
2021
2022 /* If SPECIAL_WARN is set in the top address, send a warning message. */
2023
2024 if (addr->special_action == SPECIAL_WARN &&
2025     addr->transport->warn_message != NULL)
2026   {
2027   int fd;
2028   uschar *warn_message;
2029
2030   DEBUG(D_deliver) debug_printf("Warning message requested by transport\n");
2031
2032   warn_message = expand_string(addr->transport->warn_message);
2033   if (warn_message == NULL)
2034     log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand \"%s\" (warning "
2035       "message for %s transport): %s", addr->transport->warn_message,
2036       addr->transport->name, expand_string_message);
2037   else
2038     {
2039     pid_t pid = child_open_exim(&fd);
2040     if (pid > 0)
2041       {
2042       FILE *f = fdopen(fd, "wb");
2043       if (errors_reply_to != NULL &&
2044           !contains_header(US"Reply-To", warn_message))
2045         fprintf(f, "Reply-To: %s\n", errors_reply_to);
2046       fprintf(f, "Auto-Submitted: auto-replied\n");
2047       if (!contains_header(US"From", warn_message)) moan_write_from(f);
2048       fprintf(f, "%s", CS warn_message);
2049
2050       /* Close and wait for child process to complete, without a timeout. */
2051
2052       (void)fclose(f);
2053       (void)child_close(pid, 0);
2054       }
2055     }
2056
2057   addr->special_action = SPECIAL_NONE;
2058   }
2059 }
2060
2061
2062
2063 /*************************************************
2064 *              Do local deliveries               *
2065 *************************************************/
2066
2067 /* This function processes the list of addresses in addr_local. True local
2068 deliveries are always done one address at a time. However, local deliveries can
2069 be batched up in some cases. Typically this is when writing batched SMTP output
2070 files for use by some external transport mechanism, or when running local
2071 deliveries over LMTP.
2072
2073 Arguments:   None
2074 Returns:     Nothing
2075 */
2076
2077 static void
2078 do_local_deliveries(void)
2079 {
2080 open_db dbblock;
2081 open_db *dbm_file = NULL;
2082 time_t now = time(NULL);
2083
2084 /* Loop until we have exhausted the supply of local deliveries */
2085
2086 while (addr_local != NULL)
2087   {
2088   time_t delivery_start;
2089   int deliver_time;
2090   address_item *addr2, *addr3, *nextaddr;
2091   int logflags = LOG_MAIN;
2092   int logchar = dont_deliver? '*' : '=';
2093   transport_instance *tp;
2094
2095   /* Pick the first undelivered address off the chain */
2096
2097   address_item *addr = addr_local;
2098   addr_local = addr->next;
2099   addr->next = NULL;
2100
2101   DEBUG(D_deliver|D_transport)
2102     debug_printf("--------> %s <--------\n", addr->address);
2103
2104   /* An internal disaster if there is no transport. Should not occur! */
2105
2106   if ((tp = addr->transport) == NULL)
2107     {
2108     logflags |= LOG_PANIC;
2109     disable_logging = FALSE;  /* Jic */
2110     addr->message =
2111       (addr->router != NULL)?
2112         string_sprintf("No transport set by %s router", addr->router->name)
2113         :
2114         string_sprintf("No transport set by system filter");
2115     post_process_one(addr, DEFER, logflags, DTYPE_TRANSPORT, 0);
2116     continue;
2117     }
2118
2119   /* Check that this base address hasn't previously been delivered to this
2120   transport. The check is necessary at this point to handle homonymic addresses
2121   correctly in cases where the pattern of redirection changes between delivery
2122   attempts. Non-homonymic previous delivery is detected earlier, at routing
2123   time. */
2124
2125   if (previously_transported(addr, FALSE)) continue;
2126
2127   /* There are weird cases where logging is disabled */
2128
2129   disable_logging = tp->disable_logging;
2130
2131   /* Check for batched addresses and possible amalgamation. Skip all the work
2132   if either batch_max <= 1 or there aren't any other addresses for local
2133   delivery. */
2134
2135   if (tp->batch_max > 1 && addr_local != NULL)
2136     {
2137     int batch_count = 1;
2138     BOOL uses_dom = readconf_depends((driver_instance *)tp, US"domain");
2139     BOOL uses_lp = (testflag(addr, af_pfr) &&
2140       (testflag(addr, af_file) || addr->local_part[0] == '|')) ||
2141       readconf_depends((driver_instance *)tp, US"local_part");
2142     uschar *batch_id = NULL;
2143     address_item **anchor = &addr_local;
2144     address_item *last = addr;
2145     address_item *next;
2146
2147     /* Expand the batch_id string for comparison with other addresses.
2148     Expansion failure suppresses batching. */
2149
2150     if (tp->batch_id != NULL)
2151       {
2152       deliver_set_expansions(addr);
2153       batch_id = expand_string(tp->batch_id);
2154       deliver_set_expansions(NULL);
2155       if (batch_id == NULL)
2156         {
2157         log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand batch_id option "
2158           "in %s transport (%s): %s", tp->name, addr->address,
2159           expand_string_message);
2160         batch_count = tp->batch_max;
2161         }
2162       }
2163
2164     /* Until we reach the batch_max limit, pick off addresses which have the
2165     same characteristics. These are:
2166
2167       same transport
2168       not previously delivered (see comment about 50 lines above)
2169       same local part if the transport's configuration contains $local_part
2170         or if this is a file or pipe delivery from a redirection
2171       same domain if the transport's configuration contains $domain
2172       same errors address
2173       same additional headers
2174       same headers to be removed
2175       same uid/gid for running the transport
2176       same first host if a host list is set
2177     */
2178
2179     while ((next = *anchor) != NULL && batch_count < tp->batch_max)
2180       {
2181       BOOL ok =
2182         tp == next->transport &&
2183         !previously_transported(next, TRUE) &&
2184         (addr->flags & (af_pfr|af_file)) == (next->flags & (af_pfr|af_file)) &&
2185         (!uses_lp  || Ustrcmp(next->local_part, addr->local_part) == 0) &&
2186         (!uses_dom || Ustrcmp(next->domain, addr->domain) == 0) &&
2187         same_strings(next->p.errors_address, addr->p.errors_address) &&
2188         same_headers(next->p.extra_headers, addr->p.extra_headers) &&
2189         same_strings(next->p.remove_headers, addr->p.remove_headers) &&
2190         same_ugid(tp, addr, next) &&
2191         ((addr->host_list == NULL && next->host_list == NULL) ||
2192          (addr->host_list != NULL && next->host_list != NULL &&
2193           Ustrcmp(addr->host_list->name, next->host_list->name) == 0));
2194
2195       /* If the transport has a batch_id setting, batch_id will be non-NULL
2196       from the expansion outside the loop. Expand for this address and compare.
2197       Expansion failure makes this address ineligible for batching. */
2198
2199       if (ok && batch_id != NULL)
2200         {
2201         uschar *bid;
2202         address_item *save_nextnext = next->next;
2203         next->next = NULL;            /* Expansion for a single address */
2204         deliver_set_expansions(next);
2205         next->next = save_nextnext;
2206         bid = expand_string(tp->batch_id);
2207         deliver_set_expansions(NULL);
2208         if (bid == NULL)
2209           {
2210           log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand batch_id option "
2211             "in %s transport (%s): %s", tp->name, next->address,
2212             expand_string_message);
2213           ok = FALSE;
2214           }
2215         else ok = (Ustrcmp(batch_id, bid) == 0);
2216         }
2217
2218       /* Take address into batch if OK. */
2219
2220       if (ok)
2221         {
2222         *anchor = next->next;           /* Include the address */
2223         next->next = NULL;
2224         last->next = next;
2225         last = next;
2226         batch_count++;
2227         }
2228       else anchor = &(next->next);      /* Skip the address */
2229       }
2230     }
2231
2232   /* We now have one or more addresses that can be delivered in a batch. Check
2233   whether the transport is prepared to accept a message of this size. If not,
2234   fail them all forthwith. If the expansion fails, or does not yield an
2235   integer, defer delivery. */
2236
2237   if (tp->message_size_limit != NULL)
2238     {
2239     int rc = check_message_size(tp, addr);
2240     if (rc != OK)
2241       {
2242       replicate_status(addr);
2243       while (addr != NULL)
2244         {
2245         addr2 = addr->next;
2246         post_process_one(addr, rc, logflags, DTYPE_TRANSPORT, 0);
2247         addr = addr2;
2248         }
2249       continue;    /* With next batch of addresses */
2250       }
2251     }
2252
2253   /* If we are not running the queue, or if forcing, all deliveries will be
2254   attempted. Otherwise, we must respect the retry times for each address. Even
2255   when not doing this, we need to set up the retry key string, and determine
2256   whether a retry record exists, because after a successful delivery, a delete
2257   retry item must be set up. Keep the retry database open only for the duration
2258   of these checks, rather than for all local deliveries, because some local
2259   deliveries (e.g. to pipes) can take a substantial time. */
2260
2261   dbm_file = dbfn_open(US"retry", O_RDONLY, &dbblock, FALSE);
2262   if (dbm_file == NULL)
2263     {
2264     DEBUG(D_deliver|D_retry|D_hints_lookup)
2265       debug_printf("no retry data available\n");
2266     }
2267
2268   addr2 = addr;
2269   addr3 = NULL;
2270   while (addr2 != NULL)
2271     {
2272     BOOL ok = TRUE;   /* to deliver this address */
2273     uschar *retry_key;
2274
2275     /* Set up the retry key to include the domain or not, and change its
2276     leading character from "R" to "T". Must make a copy before doing this,
2277     because the old key may be pointed to from a "delete" retry item after
2278     a routing delay. */
2279
2280     retry_key = string_copy(
2281       (tp->retry_use_local_part)? addr2->address_retry_key :
2282         addr2->domain_retry_key);
2283     *retry_key = 'T';
2284
2285     /* Inspect the retry data. If there is no hints file, delivery happens. */
2286
2287     if (dbm_file != NULL)
2288       {
2289       dbdata_retry *retry_record = dbfn_read(dbm_file, retry_key);
2290
2291       /* If there is no retry record, delivery happens. If there is,
2292       remember it exists so it can be deleted after a successful delivery. */
2293
2294       if (retry_record != NULL)
2295         {
2296         setflag(addr2, af_lt_retry_exists);
2297
2298         /* A retry record exists for this address. If queue running and not
2299         forcing, inspect its contents. If the record is too old, or if its
2300         retry time has come, or if it has passed its cutoff time, delivery
2301         will go ahead. */
2302
2303         DEBUG(D_retry)
2304           {
2305           debug_printf("retry record exists: age=%s ",
2306             readconf_printtime(now - retry_record->time_stamp));
2307           debug_printf("(max %s)\n", readconf_printtime(retry_data_expire));
2308           debug_printf("  time to retry = %s expired = %d\n",
2309             readconf_printtime(retry_record->next_try - now),
2310             retry_record->expired);
2311           }
2312
2313         if (queue_running && !deliver_force)
2314           {
2315           ok = (now - retry_record->time_stamp > retry_data_expire) ||
2316                (now >= retry_record->next_try) ||
2317                retry_record->expired;
2318
2319           /* If we haven't reached the retry time, there is one more check
2320           to do, which is for the ultimate address timeout. */
2321
2322           if (!ok)
2323             {
2324             retry_config *retry =
2325               retry_find_config(retry_key+2, addr2->domain,
2326                 retry_record->basic_errno,
2327                 retry_record->more_errno);
2328
2329             DEBUG(D_deliver|D_retry)
2330               {
2331               debug_printf("retry time not reached for %s: "
2332                 "checking ultimate address timeout\n", addr2->address);
2333               debug_printf("  now=%d first_failed=%d next_try=%d expired=%d\n",
2334                 (int)now, (int)retry_record->first_failed,
2335                 (int)retry_record->next_try, retry_record->expired);
2336               }
2337
2338             if (retry != NULL && retry->rules != NULL)
2339               {
2340               retry_rule *last_rule;
2341               for (last_rule = retry->rules;
2342                    last_rule->next != NULL;
2343                    last_rule = last_rule->next);
2344               DEBUG(D_deliver|D_retry)
2345                 debug_printf("  received_time=%d diff=%d timeout=%d\n",
2346                   received_time, (int)now - received_time, last_rule->timeout);
2347               if (now - received_time > last_rule->timeout) ok = TRUE;
2348               }
2349             else
2350               {
2351               DEBUG(D_deliver|D_retry)
2352                 debug_printf("no retry rule found: assume timed out\n");
2353               ok = TRUE;    /* No rule => timed out */
2354               }
2355
2356             DEBUG(D_deliver|D_retry)
2357               {
2358               if (ok) debug_printf("on queue longer than maximum retry for "
2359                 "address - allowing delivery\n");
2360               }
2361             }
2362           }
2363         }
2364       else DEBUG(D_retry) debug_printf("no retry record exists\n");
2365       }
2366
2367     /* This address is to be delivered. Leave it on the chain. */
2368
2369     if (ok)
2370       {
2371       addr3 = addr2;
2372       addr2 = addr2->next;
2373       }
2374
2375     /* This address is to be deferred. Take it out of the chain, and
2376     post-process it as complete. Must take it out of the chain first,
2377     because post processing puts it on another chain. */
2378
2379     else
2380       {
2381       address_item *this = addr2;
2382       this->message = US"Retry time not yet reached";
2383       this->basic_errno = ERRNO_LRETRY;
2384       if (addr3 == NULL) addr2 = addr = addr2->next;
2385         else addr2 = addr3->next = addr2->next;
2386       post_process_one(this, DEFER, logflags, DTYPE_TRANSPORT, 0);
2387       }
2388     }
2389
2390   if (dbm_file != NULL) dbfn_close(dbm_file);
2391
2392   /* If there are no addresses left on the chain, they all deferred. Loop
2393   for the next set of addresses. */
2394
2395   if (addr == NULL) continue;
2396
2397   /* So, finally, we do have some addresses that can be passed to the
2398   transport. Before doing so, set up variables that are relevant to a
2399   single delivery. */
2400
2401   deliver_set_expansions(addr);
2402   delivery_start = time(NULL);
2403   deliver_local(addr, FALSE);
2404   deliver_time = (int)(time(NULL) - delivery_start);
2405
2406   /* If a shadow transport (which must perforce be another local transport), is
2407   defined, and its condition is met, we must pass the message to the shadow
2408   too, but only those addresses that succeeded. We do this by making a new
2409   chain of addresses - also to keep the original chain uncontaminated. We must
2410   use a chain rather than doing it one by one, because the shadow transport may
2411   batch.
2412
2413   NOTE: if the condition fails because of a lookup defer, there is nothing we
2414   can do! */
2415
2416   if (tp->shadow != NULL &&
2417       (tp->shadow_condition == NULL ||
2418       expand_check_condition(tp->shadow_condition, tp->name, US"transport")))
2419     {
2420     transport_instance *stp;
2421     address_item *shadow_addr = NULL;
2422     address_item **last = &shadow_addr;
2423
2424     for (stp = transports; stp != NULL; stp = stp->next)
2425       if (Ustrcmp(stp->name, tp->shadow) == 0) break;
2426
2427     if (stp == NULL)
2428       log_write(0, LOG_MAIN|LOG_PANIC, "shadow transport \"%s\" not found ",
2429         tp->shadow);
2430
2431     /* Pick off the addresses that have succeeded, and make clones. Put into
2432     the shadow_message field a pointer to the shadow_message field of the real
2433     address. */
2434
2435     else for (addr2 = addr; addr2 != NULL; addr2 = addr2->next)
2436       {
2437       if (addr2->transport_return != OK) continue;
2438       addr3 = store_get(sizeof(address_item));
2439       *addr3 = *addr2;
2440       addr3->next = NULL;
2441       addr3->shadow_message = (uschar *)(&(addr2->shadow_message));
2442       addr3->transport = stp;
2443       addr3->transport_return = DEFER;
2444       addr3->return_filename = NULL;
2445       addr3->return_file = -1;
2446       *last = addr3;
2447       last = &(addr3->next);
2448       }
2449
2450     /* If we found any addresses to shadow, run the delivery, and stick any
2451     message back into the shadow_message field in the original. */
2452
2453     if (shadow_addr != NULL)
2454       {
2455       int save_count = transport_count;
2456
2457       DEBUG(D_deliver|D_transport)
2458         debug_printf(">>>>>>>>>>>>>>>> Shadow delivery >>>>>>>>>>>>>>>>\n");
2459       deliver_local(shadow_addr, TRUE);
2460
2461       for(; shadow_addr != NULL; shadow_addr = shadow_addr->next)
2462         {
2463         int sresult = shadow_addr->transport_return;
2464         *((uschar **)(shadow_addr->shadow_message)) = (sresult == OK)?
2465           string_sprintf(" ST=%s", stp->name) :
2466           string_sprintf(" ST=%s (%s%s%s)", stp->name,
2467             (shadow_addr->basic_errno <= 0)?
2468               US"" : US strerror(shadow_addr->basic_errno),
2469             (shadow_addr->basic_errno <= 0 || shadow_addr->message == NULL)?
2470               US"" : US": ",
2471             (shadow_addr->message != NULL)? shadow_addr->message :
2472               (shadow_addr->basic_errno <= 0)? US"unknown error" : US"");
2473
2474         DEBUG(D_deliver|D_transport)
2475           debug_printf("%s shadow transport returned %s for %s\n",
2476             stp->name,
2477             (sresult == OK)?    "OK" :
2478             (sresult == DEFER)? "DEFER" :
2479             (sresult == FAIL)?  "FAIL" :
2480             (sresult == PANIC)? "PANIC" : "?",
2481             shadow_addr->address);
2482         }
2483
2484       DEBUG(D_deliver|D_transport)
2485         debug_printf(">>>>>>>>>>>>>>>> End shadow delivery >>>>>>>>>>>>>>>>\n");
2486
2487       transport_count = save_count;   /* Restore original transport count */
2488       }
2489     }
2490
2491   /* Cancel the expansions that were set up for the delivery. */
2492
2493   deliver_set_expansions(NULL);
2494
2495   /* Now we can process the results of the real transport. We must take each
2496   address off the chain first, because post_process_one() puts it on another
2497   chain. */
2498
2499   for (addr2 = addr; addr2 != NULL; addr2 = nextaddr)
2500     {
2501     int result = addr2->transport_return;
2502     nextaddr = addr2->next;
2503
2504     DEBUG(D_deliver|D_transport)
2505       debug_printf("%s transport returned %s for %s\n",
2506         tp->name,
2507         (result == OK)?    "OK" :
2508         (result == DEFER)? "DEFER" :
2509         (result == FAIL)?  "FAIL" :
2510         (result == PANIC)? "PANIC" : "?",
2511         addr2->address);
2512
2513     /* If there is a retry_record, or if delivery is deferred, build a retry
2514     item for setting a new retry time or deleting the old retry record from
2515     the database. These items are handled all together after all addresses
2516     have been handled (so the database is open just for a short time for
2517     updating). */
2518
2519     if (result == DEFER || testflag(addr2, af_lt_retry_exists))
2520       {
2521       int flags = (result == DEFER)? 0 : rf_delete;
2522       uschar *retry_key = string_copy((tp->retry_use_local_part)?
2523         addr2->address_retry_key : addr2->domain_retry_key);
2524       *retry_key = 'T';
2525       retry_add_item(addr2, retry_key, flags);
2526       }
2527
2528     /* Done with this address */
2529
2530     if (result == OK) addr2->more_errno = deliver_time;
2531     post_process_one(addr2, result, logflags, DTYPE_TRANSPORT, logchar);
2532
2533     /* If a pipe delivery generated text to be sent back, the result may be
2534     changed to FAIL, and we must copy this for subsequent addresses in the
2535     batch. */
2536
2537     if (addr2->transport_return != result)
2538       {
2539       for (addr3 = nextaddr; addr3 != NULL; addr3 = addr3->next)
2540         {
2541         addr3->transport_return = addr2->transport_return;
2542         addr3->basic_errno = addr2->basic_errno;
2543         addr3->message = addr2->message;
2544         }
2545       result = addr2->transport_return;
2546       }
2547
2548     /* Whether or not the result was changed to FAIL, we need to copy the
2549     return_file value from the first address into all the addresses of the
2550     batch, so they are all listed in the error message. */
2551
2552     addr2->return_file = addr->return_file;
2553
2554     /* Change log character for recording successful deliveries. */
2555
2556     if (result == OK) logchar = '-';
2557     }
2558   }        /* Loop back for next batch of addresses */
2559 }
2560
2561
2562
2563
2564 /*************************************************
2565 *           Sort remote deliveries               *
2566 *************************************************/
2567
2568 /* This function is called if remote_sort_domains is set. It arranges that the
2569 chain of addresses for remote deliveries is ordered according to the strings
2570 specified. Try to make this shuffling reasonably efficient by handling
2571 sequences of addresses rather than just single ones.
2572
2573 Arguments:  None
2574 Returns:    Nothing
2575 */
2576
2577 static void
2578 sort_remote_deliveries(void)
2579 {
2580 int sep = 0;
2581 address_item **aptr = &addr_remote;
2582 uschar *listptr = remote_sort_domains;
2583 uschar *pattern;
2584 uschar patbuf[256];
2585
2586 while (*aptr != NULL &&
2587        (pattern = string_nextinlist(&listptr, &sep, patbuf, sizeof(patbuf)))
2588        != NULL)
2589   {
2590   address_item *moved = NULL;
2591   address_item **bptr = &moved;
2592
2593   while (*aptr != NULL)
2594     {
2595     address_item **next;
2596     deliver_domain = (*aptr)->domain;   /* set $domain */
2597     if (match_isinlist(deliver_domain, &pattern, UCHAR_MAX+1,
2598           &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL) == OK)
2599       {
2600       aptr = &((*aptr)->next);
2601       continue;
2602       }
2603
2604     next = &((*aptr)->next);
2605     while (*next != NULL &&
2606            (deliver_domain = (*next)->domain,  /* Set $domain */
2607             match_isinlist(deliver_domain, &pattern, UCHAR_MAX+1,
2608               &domainlist_anchor, NULL, MCL_DOMAIN, TRUE, NULL)) != OK)
2609       next = &((*next)->next);
2610
2611     /* If the batch of non-matchers is at the end, add on any that were
2612     extracted further up the chain, and end this iteration. Otherwise,
2613     extract them from the chain and hang on the moved chain. */
2614
2615     if (*next == NULL)
2616       {
2617       *next = moved;
2618       break;
2619       }
2620
2621     *bptr = *aptr;
2622     *aptr = *next;
2623     *next = NULL;
2624     bptr = next;
2625     aptr = &((*aptr)->next);
2626     }
2627
2628   /* If the loop ended because the final address matched, *aptr will
2629   be NULL. Add on to the end any extracted non-matching addresses. If
2630   *aptr is not NULL, the loop ended via "break" when *next is null, that
2631   is, there was a string of non-matching addresses at the end. In this
2632   case the extracted addresses have already been added on the end. */
2633
2634   if (*aptr == NULL) *aptr = moved;
2635   }
2636
2637 DEBUG(D_deliver)
2638   {
2639   address_item *addr;
2640   debug_printf("remote addresses after sorting:\n");
2641   for (addr = addr_remote; addr != NULL; addr = addr->next)
2642     debug_printf("  %s\n", addr->address);
2643   }
2644 }
2645
2646
2647
2648 /*************************************************
2649 *  Read from pipe for remote delivery subprocess *
2650 *************************************************/
2651
2652 /* This function is called when the subprocess is complete, but can also be
2653 called before it is complete, in order to empty a pipe that is full (to prevent
2654 deadlock). It must therefore keep track of its progress in the parlist data
2655 block.
2656
2657 We read the pipe to get the delivery status codes and a possible error message
2658 for each address, optionally preceded by unusability data for the hosts and
2659 also by optional retry data.
2660
2661 Read in large chunks into the big buffer and then scan through, interpreting
2662 the data therein. In most cases, only a single read will be necessary. No
2663 individual item will ever be anywhere near 2500 bytes in length, so by ensuring
2664 that we read the next chunk when there is less than 2500 bytes left in the
2665 non-final chunk, we can assume each item is complete in the buffer before
2666 handling it. Each item is written using a single write(), which is atomic for
2667 small items (less than PIPE_BUF, which seems to be at least 512 in any Unix and
2668 often bigger) so even if we are reading while the subprocess is still going, we
2669 should never have only a partial item in the buffer.
2670
2671 Argument:
2672   poffset     the offset of the parlist item
2673   eop         TRUE if the process has completed
2674
2675 Returns:      TRUE if the terminating 'Z' item has been read,
2676               or there has been a disaster (i.e. no more data needed);
2677               FALSE otherwise
2678 */
2679
2680 static BOOL
2681 par_read_pipe(int poffset, BOOL eop)
2682 {
2683 host_item *h;
2684 pardata *p = parlist + poffset;
2685 address_item *addrlist = p->addrlist;
2686 address_item *addr = p->addr;
2687 pid_t pid = p->pid;
2688 int fd = p->fd;
2689 uschar *endptr = big_buffer;
2690 uschar *ptr = endptr;
2691 uschar *msg = p->msg;
2692 BOOL done = p->done;
2693 BOOL unfinished = TRUE;
2694
2695 /* Loop through all items, reading from the pipe when necessary. The pipe
2696 is set up to be non-blocking, but there are two different Unix mechanisms in
2697 use. Exim uses O_NONBLOCK if it is defined. This returns 0 for end of file,
2698 and EAGAIN for no more data. If O_NONBLOCK is not defined, Exim uses O_NDELAY,
2699 which returns 0 for both end of file and no more data. We distinguish the
2700 two cases by taking 0 as end of file only when we know the process has
2701 completed.
2702
2703 Each separate item is written to the pipe in a single write(), and as they are
2704 all short items, the writes will all be atomic and we should never find
2705 ourselves in the position of having read an incomplete item. "Short" in this
2706 case can mean up to about 1K in the case when there is a long error message
2707 associated with an address. */
2708
2709 DEBUG(D_deliver) debug_printf("reading pipe for subprocess %d (%s)\n",
2710   (int)p->pid, eop? "ended" : "not ended");
2711
2712 while (!done)
2713   {
2714   retry_item *r, **rp;
2715   int remaining = endptr - ptr;
2716
2717   /* Read (first time) or top up the chars in the buffer if necessary.
2718   There will be only one read if we get all the available data (i.e. don't
2719   fill the buffer completely). */
2720
2721   if (remaining < 2500 && unfinished)
2722     {
2723     int len;
2724     int available = big_buffer_size - remaining;
2725
2726     if (remaining > 0) memmove(big_buffer, ptr, remaining);
2727
2728     ptr = big_buffer;
2729     endptr = big_buffer + remaining;
2730     len = read(fd, endptr, available);
2731
2732     DEBUG(D_deliver) debug_printf("read() yielded %d\n", len);
2733
2734     /* If the result is EAGAIN and the process is not complete, just
2735     stop reading any more and process what we have already. */
2736
2737     if (len < 0)
2738       {
2739       if (!eop && errno == EAGAIN) len = 0; else
2740         {
2741         msg = string_sprintf("failed to read pipe from transport process "
2742           "%d for transport %s: %s", pid, addr->transport->driver_name,
2743           strerror(errno));
2744         break;
2745         }
2746       }
2747
2748     /* If the length is zero (eof or no-more-data), just process what we
2749     already have. Note that if the process is still running and we have
2750     read all the data in the pipe (but less that "available") then we
2751     won't read any more, as "unfinished" will get set FALSE. */
2752
2753     endptr += len;
2754     unfinished = len == available;
2755     }
2756
2757   /* If we are at the end of the available data, exit the loop. */
2758
2759   if (ptr >= endptr) break;
2760
2761   /* Handle each possible type of item, assuming the complete item is
2762   available in store. */
2763
2764   switch (*ptr++)
2765     {
2766     /* Host items exist only if any hosts were marked unusable. Match
2767     up by checking the IP address. */
2768
2769     case 'H':
2770     for (h = addrlist->host_list; h != NULL; h = h->next)
2771       {
2772       if (h->address == NULL || Ustrcmp(h->address, ptr+2) != 0) continue;
2773       h->status = ptr[0];
2774       h->why = ptr[1];
2775       }
2776     ptr += 2;
2777     while (*ptr++);
2778     break;
2779
2780     /* Retry items are sent in a preceding R item for each address. This is
2781     kept separate to keep each message short enough to guarantee it won't
2782     be split in the pipe. Hopefully, in the majority of cases, there won't in
2783     fact be any retry items at all.
2784
2785     The complete set of retry items might include an item to delete a
2786     routing retry if there was a previous routing delay. However, routing
2787     retries are also used when a remote transport identifies an address error.
2788     In that case, there may also be an "add" item for the same key. Arrange
2789     that a "delete" item is dropped in favour of an "add" item. */
2790
2791     case 'R':
2792     if (addr == NULL) goto ADDR_MISMATCH;
2793
2794     DEBUG(D_deliver|D_retry)
2795       debug_printf("reading retry information for %s from subprocess\n",
2796         ptr+1);
2797
2798     /* Cut out any "delete" items on the list. */
2799
2800     for (rp = &(addr->retries); (r = *rp) != NULL; rp = &(r->next))
2801       {
2802       if (Ustrcmp(r->key, ptr+1) == 0)           /* Found item with same key */
2803         {
2804         if ((r->flags & rf_delete) == 0) break;  /* It was not "delete" */
2805         *rp = r->next;                           /* Excise a delete item */
2806         DEBUG(D_deliver|D_retry)
2807           debug_printf("  existing delete item dropped\n");
2808         }
2809       }
2810
2811     /* We want to add a delete item only if there is no non-delete item;
2812     however we still have to step ptr through the data. */
2813
2814     if (r == NULL || (*ptr & rf_delete) == 0)
2815       {
2816       r = store_get(sizeof(retry_item));
2817       r->next = addr->retries;
2818       addr->retries = r;
2819       r->flags = *ptr++;
2820       r->key = string_copy(ptr);
2821       while (*ptr++);
2822       memcpy(&(r->basic_errno), ptr, sizeof(r->basic_errno));
2823       ptr += sizeof(r->basic_errno);
2824       memcpy(&(r->more_errno), ptr, sizeof(r->more_errno));
2825       ptr += sizeof(r->more_errno);
2826       r->message = (*ptr)? string_copy(ptr) : NULL;
2827       DEBUG(D_deliver|D_retry)
2828         debug_printf("  added %s item\n",
2829           ((r->flags & rf_delete) == 0)? "retry" : "delete");
2830       }
2831
2832     else
2833       {
2834       DEBUG(D_deliver|D_retry)
2835         debug_printf("  delete item not added: non-delete item exists\n");
2836       ptr++;
2837       while(*ptr++);
2838       ptr += sizeof(r->basic_errno) + sizeof(r->more_errno);
2839       }
2840
2841     while(*ptr++);
2842     break;
2843
2844     /* Put the amount of data written into the parlist block */
2845
2846     case 'S':
2847     memcpy(&(p->transport_count), ptr, sizeof(transport_count));
2848     ptr += sizeof(transport_count);
2849     break;
2850
2851     /* Address items are in the order of items on the address chain. We
2852     remember the current address value in case this function is called
2853     several times to empty the pipe in stages. Information about delivery
2854     over TLS is sent in a preceding X item for each address. We don't put
2855     it in with the other info, in order to keep each message short enough to
2856     guarantee it won't be split in the pipe. */
2857
2858     #ifdef SUPPORT_TLS
2859     case 'X':
2860     if (addr == NULL) goto ADDR_MISMATCH;            /* Below, in 'A' handler */
2861     addr->cipher = (*ptr)? string_copy(ptr) : NULL;
2862     while (*ptr++);
2863     addr->peerdn = (*ptr)? string_copy(ptr) : NULL;
2864     while (*ptr++);
2865     break;
2866     #endif
2867
2868     case 'A':
2869     if (addr == NULL)
2870       {
2871       ADDR_MISMATCH:
2872       msg = string_sprintf("address count mismatch for data read from pipe "
2873         "for transport process %d for transport %s", pid,
2874           addrlist->transport->driver_name);
2875       done = TRUE;
2876       break;
2877       }
2878
2879     addr->transport_return = *ptr++;
2880     addr->special_action = *ptr++;
2881     memcpy(&(addr->basic_errno), ptr, sizeof(addr->basic_errno));
2882     ptr += sizeof(addr->basic_errno);
2883     memcpy(&(addr->more_errno), ptr, sizeof(addr->more_errno));
2884     ptr += sizeof(addr->more_errno);
2885     memcpy(&(addr->flags), ptr, sizeof(addr->flags));
2886     ptr += sizeof(addr->flags);
2887     addr->message = (*ptr)? string_copy(ptr) : NULL;
2888     while(*ptr++);
2889     addr->user_message = (*ptr)? string_copy(ptr) : NULL;
2890     while(*ptr++);
2891
2892     /* Always two strings for host information, followed by the port number */
2893
2894     if (*ptr != 0)
2895       {
2896       h = store_get(sizeof(host_item));
2897       h->name = string_copy(ptr);
2898       while (*ptr++);
2899       h->address = string_copy(ptr);
2900       while(*ptr++);
2901       memcpy(&(h->port), ptr, sizeof(h->port));
2902       ptr += sizeof(h->port);
2903       addr->host_used = h;
2904       }
2905     else ptr++;
2906
2907     /* Finished with this address */
2908
2909     addr = addr->next;
2910     break;
2911
2912     /* Z marks the logical end of the data. It is followed by '0' if
2913     continue_transport was NULL at the end of transporting, otherwise '1'.
2914     We need to know when it becomes NULL during a delivery down a passed SMTP
2915     channel so that we don't try to pass anything more down it. Of course, for
2916     most normal messages it will remain NULL all the time. */
2917
2918     case 'Z':
2919     if (*ptr == '0')
2920       {
2921       continue_transport = NULL;
2922       continue_hostname = NULL;
2923       }
2924     done = TRUE;
2925     DEBUG(D_deliver) debug_printf("Z%c item read\n", *ptr);
2926     break;
2927
2928     /* Anything else is a disaster. */
2929
2930     default:
2931     msg = string_sprintf("malformed data (%d) read from pipe for transport "
2932       "process %d for transport %s", ptr[-1], pid,
2933         addr->transport->driver_name);
2934     done = TRUE;
2935     break;
2936     }
2937   }
2938
2939 /* The done flag is inspected externally, to determine whether or not to
2940 call the function again when the process finishes. */
2941
2942 p->done = done;
2943
2944 /* If the process hadn't finished, and we haven't seen the end of the data
2945 or suffered a disaster, update the rest of the state, and return FALSE to
2946 indicate "not finished". */
2947
2948 if (!eop && !done)
2949   {
2950   p->addr = addr;
2951   p->msg = msg;
2952   return FALSE;
2953   }
2954
2955 /* Close our end of the pipe, to prevent deadlock if the far end is still
2956 pushing stuff into it. */
2957
2958 (void)close(fd);
2959 p->fd = -1;
2960
2961 /* If we have finished without error, but haven't had data for every address,
2962 something is wrong. */
2963
2964 if (msg == NULL && addr != NULL)
2965   msg = string_sprintf("insufficient address data read from pipe "
2966     "for transport process %d for transport %s", pid,
2967       addr->transport->driver_name);
2968
2969 /* If an error message is set, something has gone wrong in getting back
2970 the delivery data. Put the message into each address and freeze it. */
2971
2972 if (msg != NULL)
2973   {
2974   for (addr = addrlist; addr != NULL; addr = addr->next)
2975     {
2976     addr->transport_return = DEFER;
2977     addr->special_action = SPECIAL_FREEZE;
2978     addr->message = msg;
2979     }
2980   }
2981
2982 /* Return TRUE to indicate we have got all we need from this process, even
2983 if it hasn't actually finished yet. */
2984
2985 return TRUE;
2986 }
2987
2988
2989
2990 /*************************************************
2991 *   Post-process a set of remote addresses       *
2992 *************************************************/
2993
2994 /* Do what has to be done immediately after a remote delivery for each set of
2995 addresses, then re-write the spool if necessary. Note that post_process_one
2996 puts the address on an appropriate queue; hence we must fish off the next
2997 one first. This function is also called if there is a problem with setting
2998 up a subprocess to do a remote delivery in parallel. In this case, the final
2999 argument contains a message, and the action must be forced to DEFER.
3000
3001 Argument:
3002    addr      pointer to chain of address items
3003    logflags  flags for logging
3004    msg       NULL for normal cases; -> error message for unexpected problems
3005    fallback  TRUE if processing fallback hosts
3006
3007 Returns:     nothing
3008 */
3009
3010 static void
3011 remote_post_process(address_item *addr, int logflags, uschar *msg,
3012   BOOL fallback)
3013 {
3014 host_item *h;
3015
3016 /* If any host addresses were found to be unusable, add them to the unusable
3017 tree so that subsequent deliveries don't try them. */
3018
3019 for (h = addr->host_list; h != NULL; h = h->next)
3020   {
3021   if (h->address == NULL) continue;
3022   if (h->status >= hstatus_unusable) tree_add_unusable(h);
3023   }
3024
3025 /* Now handle each address on the chain. The transport has placed '=' or '-'
3026 into the special_action field for each successful delivery. */
3027
3028 while (addr != NULL)
3029   {
3030   address_item *next = addr->next;
3031
3032   /* If msg == NULL (normal processing) and the result is DEFER and we are
3033   processing the main hosts and there are fallback hosts available, put the
3034   address on the list for fallback delivery. */
3035
3036   if (addr->transport_return == DEFER &&
3037       addr->fallback_hosts != NULL &&
3038       !fallback &&
3039       msg == NULL)
3040     {
3041     addr->host_list = addr->fallback_hosts;
3042     addr->next = addr_fallback;
3043     addr_fallback = addr;
3044     DEBUG(D_deliver) debug_printf("%s queued for fallback host(s)\n", addr->address);
3045     }
3046
3047   /* If msg is set (=> unexpected problem), set it in the address before
3048   doing the ordinary post processing. */
3049
3050   else
3051     {
3052     if (msg != NULL)
3053       {
3054       addr->message = msg;
3055       addr->transport_return = DEFER;
3056       }
3057     (void)post_process_one(addr, addr->transport_return, logflags,
3058       DTYPE_TRANSPORT, addr->special_action);
3059     }
3060
3061   /* Next address */
3062
3063   addr = next;
3064   }
3065
3066 /* If we have just delivered down a passed SMTP channel, and that was
3067 the last address, the channel will have been closed down. Now that
3068 we have logged that delivery, set continue_sequence to 1 so that
3069 any subsequent deliveries don't get "*" incorrectly logged. */
3070
3071 if (continue_transport == NULL) continue_sequence = 1;
3072 }
3073
3074
3075
3076 /*************************************************
3077 *     Wait for one remote delivery subprocess    *
3078 *************************************************/
3079
3080 /* This function is called while doing remote deliveries when either the
3081 maximum number of processes exist and we need one to complete so that another
3082 can be created, or when waiting for the last ones to complete. It must wait for
3083 the completion of one subprocess, empty the control block slot, and return a
3084 pointer to the address chain.
3085
3086 Arguments:    none
3087 Returns:      pointer to the chain of addresses handled by the process;
3088               NULL if no subprocess found - this is an unexpected error
3089 */
3090
3091 static address_item *
3092 par_wait(void)
3093 {
3094 int poffset, status;
3095 address_item *addr, *addrlist;
3096 pid_t pid;
3097
3098 set_process_info("delivering %s: waiting for a remote delivery subprocess "
3099   "to finish", message_id);
3100
3101 /* Loop until either a subprocess completes, or there are no subprocesses in
3102 existence - in which case give an error return. We cannot proceed just by
3103 waiting for a completion, because a subprocess may have filled up its pipe, and
3104 be waiting for it to be emptied. Therefore, if no processes have finished, we
3105 wait for one of the pipes to acquire some data by calling select(), with a
3106 timeout just in case.
3107
3108 The simple approach is just to iterate after reading data from a ready pipe.
3109 This leads to non-ideal behaviour when the subprocess has written its final Z
3110 item, closed the pipe, and is in the process of exiting (the common case). A
3111 call to waitpid() yields nothing completed, but select() shows the pipe ready -
3112 reading it yields EOF, so you end up with busy-waiting until the subprocess has
3113 actually finished.
3114
3115 To avoid this, if all the data that is needed has been read from a subprocess
3116 after select(), an explicit wait() for it is done. We know that all it is doing
3117 is writing to the pipe and then exiting, so the wait should not be long.
3118
3119 The non-blocking waitpid() is to some extent just insurance; if we could
3120 reliably detect end-of-file on the pipe, we could always know when to do a
3121 blocking wait() for a completed process. However, because some systems use
3122 NDELAY, which doesn't distinguish between EOF and pipe empty, it is easier to
3123 use code that functions without the need to recognize EOF.
3124
3125 There's a double loop here just in case we end up with a process that is not in
3126 the list of remote delivery processes. Something has obviously gone wrong if
3127 this is the case. (For example, a process that is incorrectly left over from
3128 routing or local deliveries might be found.) The damage can be minimized by
3129 looping back and looking for another process. If there aren't any, the error
3130 return will happen. */
3131
3132 for (;;)   /* Normally we do not repeat this loop */
3133   {
3134   while ((pid = waitpid(-1, &status, WNOHANG)) <= 0)
3135     {
3136     struct timeval tv;
3137     fd_set select_pipes;
3138     int maxpipe, readycount;
3139
3140     /* A return value of -1 can mean several things. If errno != ECHILD, it
3141     either means invalid options (which we discount), or that this process was
3142     interrupted by a signal. Just loop to try the waitpid() again.
3143
3144     If errno == ECHILD, waitpid() is telling us that there are no subprocesses
3145     in existence. This should never happen, and is an unexpected error.
3146     However, there is a nasty complication when running under Linux. If "strace
3147     -f" is being used under Linux to trace this process and its children,
3148     subprocesses are "stolen" from their parents and become the children of the
3149     tracing process. A general wait such as the one we've just obeyed returns
3150     as if there are no children while subprocesses are running. Once a
3151     subprocess completes, it is restored to the parent, and waitpid(-1) finds
3152     it. Thanks to Joachim Wieland for finding all this out and suggesting a
3153     palliative.
3154
3155     This does not happen using "truss" on Solaris, nor (I think) with other
3156     tracing facilities on other OS. It seems to be specific to Linux.
3157
3158     What we do to get round this is to use kill() to see if any of our
3159     subprocesses are still in existence. If kill() gives an OK return, we know
3160     it must be for one of our processes - it can't be for a re-use of the pid,
3161     because if our process had finished, waitpid() would have found it. If any
3162     of our subprocesses are in existence, we proceed to use select() as if
3163     waitpid() had returned zero. I think this is safe. */
3164
3165     if (pid < 0)
3166       {
3167       if (errno != ECHILD) continue;   /* Repeats the waitpid() */
3168
3169       DEBUG(D_deliver)
3170         debug_printf("waitpid() returned -1/ECHILD: checking explicitly "
3171           "for process existence\n");
3172
3173       for (poffset = 0; poffset < remote_max_parallel; poffset++)
3174         {
3175         if ((pid = parlist[poffset].pid) != 0 && kill(pid, 0) == 0)
3176           {
3177           DEBUG(D_deliver) debug_printf("process %d still exists: assume "
3178             "stolen by strace\n", (int)pid);
3179           break;   /* With poffset set */
3180           }
3181         }
3182
3183       if (poffset >= remote_max_parallel)
3184         {
3185         DEBUG(D_deliver) debug_printf("*** no delivery children found\n");
3186         return NULL;   /* This is the error return */
3187         }
3188       }
3189
3190     /* A pid value greater than 0 breaks the "while" loop. A negative value has
3191     been handled above. A return value of zero means that there is at least one
3192     subprocess, but there are no completed subprocesses. See if any pipes are
3193     ready with any data for reading. */
3194
3195     DEBUG(D_deliver) debug_printf("selecting on subprocess pipes\n");
3196
3197     maxpipe = 0;
3198     FD_ZERO(&select_pipes);
3199     for (poffset = 0; poffset < remote_max_parallel; poffset++)
3200       {
3201       if (parlist[poffset].pid != 0)
3202         {
3203         int fd = parlist[poffset].fd;
3204         FD_SET(fd, &select_pipes);
3205         if (fd > maxpipe) maxpipe = fd;
3206         }
3207       }
3208
3209     /* Stick in a 60-second timeout, just in case. */
3210
3211     tv.tv_sec = 60;
3212     tv.tv_usec = 0;
3213
3214     readycount = select(maxpipe + 1, (SELECT_ARG2_TYPE *)&select_pipes,
3215          NULL, NULL, &tv);
3216
3217     /* Scan through the pipes and read any that are ready; use the count
3218     returned by select() to stop when there are no more. Select() can return
3219     with no processes (e.g. if interrupted). This shouldn't matter.
3220
3221     If par_read_pipe() returns TRUE, it means that either the terminating Z was
3222     read, or there was a disaster. In either case, we are finished with this
3223     process. Do an explicit wait() for the process and break the main loop if
3224     it succeeds.
3225
3226     It turns out that we have to deal with the case of an interrupted system
3227     call, which can happen on some operating systems if the signal handling is
3228     set up to do that by default. */
3229
3230     for (poffset = 0;
3231          readycount > 0 && poffset < remote_max_parallel;
3232          poffset++)
3233       {
3234       if ((pid = parlist[poffset].pid) != 0 &&
3235            FD_ISSET(parlist[poffset].fd, &select_pipes))
3236         {
3237         readycount--;
3238         if (par_read_pipe(poffset, FALSE))    /* Finished with this pipe */
3239           {
3240           for (;;)                            /* Loop for signals */
3241             {
3242             pid_t endedpid = waitpid(pid, &status, 0);
3243             if (endedpid == pid) goto PROCESS_DONE;
3244             if (endedpid != (pid_t)(-1) || errno != EINTR)
3245               log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Unexpected error return "
3246                 "%d (errno = %d) from waitpid() for process %d",
3247                 (int)endedpid, errno, (int)pid);
3248             }
3249           }
3250         }
3251       }
3252
3253     /* Now go back and look for a completed subprocess again. */
3254     }
3255
3256   /* A completed process was detected by the non-blocking waitpid(). Find the
3257   data block that corresponds to this subprocess. */
3258
3259   for (poffset = 0; poffset < remote_max_parallel; poffset++)
3260     if (pid == parlist[poffset].pid) break;
3261
3262   /* Found the data block; this is a known remote delivery process. We don't
3263   need to repeat the outer loop. This should be what normally happens. */
3264
3265   if (poffset < remote_max_parallel) break;
3266
3267   /* This situation is an error, but it's probably better to carry on looking
3268   for another process than to give up (as we used to do). */
3269
3270   log_write(0, LOG_MAIN|LOG_PANIC, "Process %d finished: not found in remote "
3271     "transport process list", pid);
3272   }  /* End of the "for" loop */
3273
3274 /* Come here when all the data was completely read after a select(), and
3275 the process in pid has been wait()ed for. */
3276
3277 PROCESS_DONE:
3278
3279 DEBUG(D_deliver)
3280   {
3281   if (status == 0)
3282     debug_printf("remote delivery process %d ended\n", (int)pid);
3283   else
3284     debug_printf("remote delivery process %d ended: status=%04x\n", (int)pid,
3285       status);
3286   }
3287
3288 set_process_info("delivering %s", message_id);
3289
3290 /* Get the chain of processed addresses */
3291
3292 addrlist = parlist[poffset].addrlist;
3293
3294 /* If the process did not finish cleanly, record an error and freeze (except
3295 for SIGTERM, SIGKILL and SIGQUIT), and also ensure the journal is not removed,
3296 in case the delivery did actually happen. */
3297
3298 if ((status & 0xffff) != 0)
3299   {
3300   uschar *msg;
3301   int msb = (status >> 8) & 255;
3302   int lsb = status & 255;
3303   int code = (msb == 0)? (lsb & 0x7f) : msb;
3304
3305   msg = string_sprintf("%s transport process returned non-zero status 0x%04x: "
3306     "%s %d",
3307     addrlist->transport->driver_name,
3308     status,
3309     (msb == 0)? "terminated by signal" : "exit code",
3310     code);
3311
3312   if (msb != 0 || (code != SIGTERM && code != SIGKILL && code != SIGQUIT))
3313     addrlist->special_action = SPECIAL_FREEZE;
3314
3315   for (addr = addrlist; addr != NULL; addr = addr->next)
3316     {
3317     addr->transport_return = DEFER;
3318     addr->message = msg;
3319     }
3320
3321   remove_journal = FALSE;
3322   }
3323
3324 /* Else complete reading the pipe to get the result of the delivery, if all
3325 the data has not yet been obtained. */
3326
3327 else if (!parlist[poffset].done) (void)par_read_pipe(poffset, TRUE);
3328
3329 /* Put the data count and return path into globals, mark the data slot unused,
3330 decrement the count of subprocesses, and return the address chain. */
3331
3332 transport_count = parlist[poffset].transport_count;
3333 used_return_path = parlist[poffset].return_path;
3334 parlist[poffset].pid = 0;
3335 parcount--;
3336 return addrlist;
3337 }
3338
3339
3340
3341 /*************************************************
3342 *      Wait for subprocesses and post-process    *
3343 *************************************************/
3344
3345 /* This function waits for subprocesses until the number that are still running
3346 is below a given threshold. For each complete subprocess, the addresses are
3347 post-processed. If we can't find a running process, there is some shambles.
3348 Better not bomb out, as that might lead to multiple copies of the message. Just
3349 log and proceed as if all done.
3350
3351 Arguments:
3352   max         maximum number of subprocesses to leave running
3353   fallback    TRUE if processing fallback hosts
3354
3355 Returns:      nothing
3356 */
3357
3358 static void
3359 par_reduce(int max, BOOL fallback)
3360 {
3361 while (parcount > max)
3362   {
3363   address_item *doneaddr = par_wait();
3364   if (doneaddr == NULL)
3365     {
3366     log_write(0, LOG_MAIN|LOG_PANIC,
3367       "remote delivery process count got out of step");
3368     parcount = 0;
3369     }
3370   else remote_post_process(doneaddr, LOG_MAIN, NULL, fallback);
3371   }
3372 }
3373
3374
3375
3376
3377 /*************************************************
3378 *           Do remote deliveries                 *
3379 *************************************************/
3380
3381 /* This function is called to process the addresses in addr_remote. We must
3382 pick off the queue all addresses that have the same transport, remote
3383 destination, and errors address, and hand them to the transport in one go,
3384 subject to some configured limitations. If this is a run to continue delivering
3385 to an existing delivery channel, skip all but those addresses that can go to
3386 that channel. The skipped addresses just get deferred.
3387
3388 If mua_wrapper is set, all addresses must be able to be sent in a single
3389 transaction. If not, this function yields FALSE.
3390
3391 In Exim 4, remote deliveries are always done in separate processes, even
3392 if remote_max_parallel = 1 or if there's only one delivery to do. The reason
3393 is so that the base process can retain privilege. This makes the
3394 implementation of fallback transports feasible (though not initially done.)
3395
3396 We create up to the configured number of subprocesses, each of which passes
3397 back the delivery state via a pipe. (However, when sending down an existing
3398 connection, remote_max_parallel is forced to 1.)
3399
3400 Arguments:
3401   fallback  TRUE if processing fallback hosts
3402
3403 Returns:    TRUE normally
3404             FALSE if mua_wrapper is set and the addresses cannot all be sent
3405               in one transaction
3406 */
3407
3408 static BOOL
3409 do_remote_deliveries(BOOL fallback)
3410 {
3411 int parmax;
3412 int delivery_count;
3413 int poffset;
3414
3415 parcount = 0;    /* Number of executing subprocesses */
3416
3417 /* When sending down an existing channel, only do one delivery at a time.
3418 We use a local variable (parmax) to hold the maximum number of processes;
3419 this gets reduced from remote_max_parallel if we can't create enough pipes. */
3420
3421 if (continue_transport != NULL) remote_max_parallel = 1;
3422 parmax = remote_max_parallel;
3423
3424 /* If the data for keeping a list of processes hasn't yet been
3425 set up, do so. */
3426
3427 if (parlist == NULL)
3428   {
3429   parlist = store_get(remote_max_parallel * sizeof(pardata));
3430   for (poffset = 0; poffset < remote_max_parallel; poffset++)
3431     parlist[poffset].pid = 0;
3432   }
3433
3434 /* Now loop for each remote delivery */
3435
3436 for (delivery_count = 0; addr_remote != NULL; delivery_count++)
3437   {
3438   pid_t pid;
3439   uid_t uid;
3440   gid_t gid;
3441   int pfd[2];
3442   int address_count = 1;
3443   int address_count_max;
3444   BOOL multi_domain;
3445   BOOL use_initgroups;
3446   BOOL pipe_done = FALSE;
3447   transport_instance *tp;
3448   address_item **anchor = &addr_remote;
3449   address_item *addr = addr_remote;
3450   address_item *last = addr;
3451   address_item *next;
3452
3453   /* Pull the first address right off the list. */
3454
3455   addr_remote = addr->next;
3456   addr->next = NULL;
3457
3458   DEBUG(D_deliver|D_transport)
3459     debug_printf("--------> %s <--------\n", addr->address);
3460
3461   /* If no transport has been set, there has been a big screw-up somewhere. */
3462
3463   if ((tp = addr->transport) == NULL)
3464     {
3465     disable_logging = FALSE;  /* Jic */
3466     remote_post_process(addr, LOG_MAIN|LOG_PANIC,
3467       US"No transport set by router", fallback);
3468     continue;
3469     }
3470
3471   /* Check that this base address hasn't previously been delivered to this
3472   transport. The check is necessary at this point to handle homonymic addresses
3473   correctly in cases where the pattern of redirection changes between delivery
3474   attempts. Non-homonymic previous delivery is detected earlier, at routing
3475   time. */
3476
3477   if (previously_transported(addr, FALSE)) continue;
3478
3479   /* Force failure if the message is too big. */
3480
3481   if (tp->message_size_limit != NULL)
3482     {
3483     int rc = check_message_size(tp, addr);
3484     if (rc != OK)
3485       {
3486       addr->transport_return = rc;
3487       remote_post_process(addr, LOG_MAIN, NULL, fallback);
3488       continue;
3489       }
3490     }
3491
3492   /* Get the flag which specifies whether the transport can handle different
3493   domains that nevertheless resolve to the same set of hosts. */
3494
3495   multi_domain = tp->multi_domain;
3496
3497   /* Get the maximum it can handle in one envelope, with zero meaning
3498   unlimited, which is forced for the MUA wrapper case. */
3499
3500   address_count_max = tp->max_addresses;
3501   if (address_count_max == 0 || mua_wrapper) address_count_max = 999999;
3502
3503
3504   /************************************************************************/
3505   /*****    This is slightly experimental code, but should be safe.   *****/
3506
3507   /* The address_count_max value is the maximum number of addresses that the
3508   transport can send in one envelope. However, the transport must be capable of
3509   dealing with any number of addresses. If the number it gets exceeds its
3510   envelope limitation, it must send multiple copies of the message. This can be
3511   done over a single connection for SMTP, so uses less resources than making
3512   multiple connections. On the other hand, if remote_max_parallel is greater
3513   than one, it is perhaps a good idea to use parallel processing to move the
3514   message faster, even if that results in multiple simultaneous connections to
3515   the same host.
3516
3517   How can we come to some compromise between these two ideals? What we do is to
3518   limit the number of addresses passed to a single instance of a transport to
3519   the greater of (a) its address limit (rcpt_max for SMTP) and (b) the total
3520   number of addresses routed to remote transports divided by
3521   remote_max_parallel. For example, if the message has 100 remote recipients,
3522   remote max parallel is 2, and rcpt_max is 10, we'd never send more than 50 at
3523   once. But if rcpt_max is 100, we could send up to 100.
3524
3525   Of course, not all the remotely addresses in a message are going to go to the
3526   same set of hosts (except in smarthost configurations), so this is just a
3527   heuristic way of dividing up the work.
3528
3529   Furthermore (1), because this may not be wanted in some cases, and also to
3530   cope with really pathological cases, there is also a limit to the number of
3531   messages that are sent over one connection. This is the same limit that is
3532   used when sending several different messages over the same connection.
3533   Continue_sequence is set when in this situation, to the number sent so
3534   far, including this message.
3535
3536   Furthermore (2), when somebody explicitly sets the maximum value to 1, it
3537   is probably because they are using VERP, in which case they want to pass only
3538   one address at a time to the transport, in order to be able to use
3539   $local_part and $domain in constructing a new return path. We could test for
3540   the use of these variables, but as it is so likely they will be used when the
3541   maximum is 1, we don't bother. Just leave the value alone. */
3542
3543   if (address_count_max != 1 &&
3544       address_count_max < remote_delivery_count/remote_max_parallel)
3545     {
3546     int new_max = remote_delivery_count/remote_max_parallel;
3547     int message_max = tp->connection_max_messages;
3548     if (connection_max_messages >= 0) message_max = connection_max_messages;
3549     message_max -= continue_sequence - 1;
3550     if (message_max > 0 && new_max > address_count_max * message_max)
3551       new_max = address_count_max * message_max;
3552     address_count_max = new_max;
3553     }
3554
3555   /************************************************************************/
3556
3557
3558   /* Pick off all addresses which have the same transport, errors address,
3559   destination, and extra headers. In some cases they point to the same host
3560   list, but we also need to check for identical host lists generated from
3561   entirely different domains. The host list pointers can be NULL in the case
3562   where the hosts are defined in the transport. There is also a configured
3563   maximum limit of addresses that can be handled at once (see comments above
3564   for how it is computed). */
3565
3566   while ((next = *anchor) != NULL && address_count < address_count_max)
3567     {
3568     if ((multi_domain || Ustrcmp(next->domain, addr->domain) == 0)
3569         &&
3570         tp == next->transport
3571         &&
3572         same_hosts(next->host_list, addr->host_list)
3573         &&
3574         same_strings(next->p.errors_address, addr->p.errors_address)
3575         &&
3576         same_headers(next->p.extra_headers, addr->p.extra_headers)
3577         &&
3578         same_ugid(tp, next, addr)
3579         &&
3580         (next->p.remove_headers == addr->p.remove_headers ||
3581           (next->p.remove_headers != NULL &&
3582            addr->p.remove_headers != NULL &&
3583            Ustrcmp(next->p.remove_headers, addr->p.remove_headers) == 0)))
3584       {
3585       *anchor = next->next;
3586       next->next = NULL;
3587       next->first = addr;  /* remember top one (for retry processing) */
3588       last->next = next;
3589       last = next;
3590       address_count++;
3591       }
3592     else anchor = &(next->next);
3593     }
3594
3595   /* If we are acting as an MUA wrapper, all addresses must go in a single
3596   transaction. If not, put them back on the chain and yield FALSE. */
3597
3598   if (mua_wrapper && addr_remote != NULL)
3599     {
3600     last->next = addr_remote;
3601     addr_remote = addr;
3602     return FALSE;
3603     }
3604
3605   /* Set up the expansion variables for this set of addresses */
3606
3607   deliver_set_expansions(addr);
3608
3609   /* Compute the return path, expanding a new one if required. The old one
3610   must be set first, as it might be referred to in the expansion. */
3611
3612   if(addr->p.errors_address != NULL)
3613     return_path = addr->p.errors_address;
3614 #ifdef EXPERIMENTAL_SRS
3615   else if(addr->p.srs_sender != NULL)
3616     return_path = addr->p.srs_sender;
3617 #endif
3618   else
3619     return_path = sender_address;
3620
3621   if (tp->return_path != NULL)
3622     {
3623     uschar *new_return_path = expand_string(tp->return_path);
3624     if (new_return_path == NULL)
3625       {
3626       if (!expand_string_forcedfail)
3627         {
3628         remote_post_process(addr, LOG_MAIN|LOG_PANIC,
3629           string_sprintf("Failed to expand return path \"%s\": %s",
3630           tp->return_path, expand_string_message), fallback);
3631         continue;
3632         }
3633       }
3634     else return_path = new_return_path;
3635     }
3636
3637   /* Find the uid, gid, and use_initgroups setting for this transport. Failure
3638   logs and sets up error messages, so we just post-process and continue with
3639   the next address. */
3640
3641   if (!findugid(addr, tp, &uid, &gid, &use_initgroups))
3642     {
3643     remote_post_process(addr, LOG_MAIN|LOG_PANIC, NULL, fallback);
3644     continue;
3645     }
3646
3647   /* If this transport has a setup function, call it now so that it gets
3648   run in this process and not in any subprocess. That way, the results of
3649   any setup that are retained by the transport can be reusable. One of the
3650   things the setup does is to set the fallback host lists in the addresses.
3651   That is why it is called at this point, before the continue delivery
3652   processing, because that might use the fallback hosts. */
3653
3654   if (tp->setup != NULL)
3655     (void)((tp->setup)(addr->transport, addr, NULL, uid, gid, NULL));
3656
3657   /* If this is a run to continue delivery down an already-established
3658   channel, check that this set of addresses matches the transport and
3659   the channel. If it does not, defer the addresses. If a host list exists,
3660   we must check that the continue host is on the list. Otherwise, the
3661   host is set in the transport. */
3662
3663   continue_more = FALSE;           /* In case got set for the last lot */
3664   if (continue_transport != NULL)
3665     {
3666     BOOL ok = Ustrcmp(continue_transport, tp->name) == 0;
3667     if (ok && addr->host_list != NULL)
3668       {
3669       host_item *h;
3670       ok = FALSE;
3671       for (h = addr->host_list; h != NULL; h = h->next)
3672         {
3673         if (Ustrcmp(h->name, continue_hostname) == 0)
3674           { ok = TRUE; break; }
3675         }
3676       }
3677
3678     /* Addresses not suitable; defer or queue for fallback hosts (which
3679     might be the continue host) and skip to next address. */
3680
3681     if (!ok)
3682       {
3683       DEBUG(D_deliver) debug_printf("not suitable for continue_transport\n");
3684       next = addr;
3685
3686       if (addr->fallback_hosts != NULL && !fallback)
3687         {
3688         for (;;)
3689           {
3690           next->host_list = next->fallback_hosts;
3691           DEBUG(D_deliver) debug_printf("%s queued for fallback host(s)\n", next->address);
3692           if (next->next == NULL) break;
3693           next = next->next;
3694           }
3695         next->next = addr_fallback;
3696         addr_fallback = addr;
3697         }
3698
3699       else
3700         {
3701         while (next->next != NULL) next = next->next;
3702         next->next = addr_defer;
3703         addr_defer = addr;
3704         }
3705
3706       continue;
3707       }
3708
3709     /* Set a flag indicating whether there are further addresses that list
3710     the continued host. This tells the transport to leave the channel open,
3711     but not to pass it to another delivery process. */
3712
3713     for (next = addr_remote; next != NULL; next = next->next)
3714       {
3715       host_item *h;
3716       for (h = next->host_list; h != NULL; h = h->next)
3717         {
3718         if (Ustrcmp(h->name, continue_hostname) == 0)
3719           { continue_more = TRUE; break; }
3720         }
3721       }
3722     }
3723
3724   /* The transports set up the process info themselves as they may connect
3725   to more than one remote machine. They also have to set up the filter
3726   arguments, if required, so that the host name and address are available
3727   for expansion. */
3728
3729   transport_filter_argv = NULL;
3730
3731   /* Create the pipe for inter-process communication. If pipe creation
3732   fails, it is probably because the value of remote_max_parallel is so
3733   large that too many file descriptors for pipes have been created. Arrange
3734   to wait for a process to finish, and then try again. If we still can't
3735   create a pipe when all processes have finished, break the retry loop. */
3736
3737   while (!pipe_done)
3738     {
3739     if (pipe(pfd) == 0) pipe_done = TRUE;
3740       else if (parcount > 0) parmax = parcount;
3741         else break;
3742
3743     /* We need to make the reading end of the pipe non-blocking. There are
3744     two different options for this. Exim is cunningly (I hope!) coded so
3745     that it can use either of them, though it prefers O_NONBLOCK, which
3746     distinguishes between EOF and no-more-data. */
3747
3748     #ifdef O_NONBLOCK
3749     (void)fcntl(pfd[pipe_read], F_SETFL, O_NONBLOCK);
3750     #else
3751     (void)fcntl(pfd[pipe_read], F_SETFL, O_NDELAY);
3752     #endif
3753
3754     /* If the maximum number of subprocesses already exist, wait for a process
3755     to finish. If we ran out of file descriptors, parmax will have been reduced
3756     from its initial value of remote_max_parallel. */
3757
3758     par_reduce(parmax - 1, fallback);
3759     }
3760
3761   /* If we failed to create a pipe and there were no processes to wait
3762   for, we have to give up on this one. Do this outside the above loop
3763   so that we can continue the main loop. */
3764
3765   if (!pipe_done)
3766     {
3767     remote_post_process(addr, LOG_MAIN|LOG_PANIC,
3768       string_sprintf("unable to create pipe: %s", strerror(errno)), fallback);
3769     continue;
3770     }
3771
3772   /* Find a free slot in the pardata list. Must do this after the possible
3773   waiting for processes to finish, because a terminating process will free
3774   up a slot. */
3775
3776   for (poffset = 0; poffset < remote_max_parallel; poffset++)
3777     if (parlist[poffset].pid == 0) break;
3778
3779   /* If there isn't one, there has been a horrible disaster. */
3780
3781   if (poffset >= remote_max_parallel)
3782     {
3783     (void)close(pfd[pipe_write]);
3784     (void)close(pfd[pipe_read]);
3785     remote_post_process(addr, LOG_MAIN|LOG_PANIC,
3786       US"Unexpectedly no free subprocess slot", fallback);
3787     continue;
3788     }
3789
3790   /* Now fork a subprocess to do the remote delivery, but before doing so,
3791   ensure that any cached resourses are released so as not to interfere with
3792   what happens in the subprocess. */
3793
3794   search_tidyup();
3795
3796   if ((pid = fork()) == 0)
3797     {
3798     int fd = pfd[pipe_write];
3799     host_item *h;
3800
3801     /* There are weird circumstances in which logging is disabled */
3802
3803     disable_logging = tp->disable_logging;
3804
3805     /* Show pids on debug output if parallelism possible */
3806
3807     if (parmax > 1 && (parcount > 0 || addr_remote != NULL))
3808       {
3809       DEBUG(D_any|D_v) debug_selector |= D_pid;
3810       DEBUG(D_deliver) debug_printf("Remote delivery process started\n");
3811       }
3812
3813     /* Reset the random number generator, so different processes don't all
3814     have the same sequence. In the test harness we want different, but
3815     predictable settings for each delivery process, so do something explicit
3816     here rather they rely on the fixed reset in the random number function. */
3817
3818     random_seed = running_in_test_harness? 42 + 2*delivery_count : 0;
3819
3820     /* Set close-on-exec on the pipe so that it doesn't get passed on to
3821     a new process that may be forked to do another delivery down the same
3822     SMTP connection. */
3823
3824     (void)fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
3825
3826     /* Close open file descriptors for the pipes of other processes
3827     that are running in parallel. */
3828
3829     for (poffset = 0; poffset < remote_max_parallel; poffset++)
3830       if (parlist[poffset].pid != 0) (void)close(parlist[poffset].fd);
3831
3832     /* This process has inherited a copy of the file descriptor
3833     for the data file, but its file pointer is shared with all the
3834     other processes running in parallel. Therefore, we have to re-open
3835     the file in order to get a new file descriptor with its own
3836     file pointer. We don't need to lock it, as the lock is held by
3837     the parent process. There doesn't seem to be any way of doing
3838     a dup-with-new-file-pointer. */
3839
3840     (void)close(deliver_datafile);
3841     sprintf(CS spoolname, "%s/input/%s/%s-D", spool_directory, message_subdir,
3842       message_id);
3843     deliver_datafile = Uopen(spoolname, O_RDWR | O_APPEND, 0);
3844
3845     if (deliver_datafile < 0)
3846       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Failed to reopen %s for remote "
3847         "parallel delivery: %s", spoolname, strerror(errno));
3848
3849     /* Set the close-on-exec flag */
3850
3851     (void)fcntl(deliver_datafile, F_SETFD, fcntl(deliver_datafile, F_GETFD) |
3852       FD_CLOEXEC);
3853
3854     /* Set the uid/gid of this process; bombs out on failure. */
3855
3856     exim_setugid(uid, gid, use_initgroups,
3857       string_sprintf("remote delivery to %s with transport=%s",
3858         addr->address, tp->name));
3859
3860     /* Close the unwanted half of this process' pipe, set the process state,
3861     and run the transport. Afterwards, transport_count will contain the number
3862     of bytes written. */
3863
3864     (void)close(pfd[pipe_read]);
3865     set_process_info("delivering %s using %s", message_id, tp->name);
3866     debug_print_string(tp->debug_string);
3867     if (!(tp->info->code)(addr->transport, addr)) replicate_status(addr);
3868
3869     set_process_info("delivering %s (just run %s for %s%s in subprocess)",
3870       message_id, tp->name, addr->address, (addr->next == NULL)? "" : ", ...");
3871
3872     /* Ensure any cached resources that we used are now released */
3873
3874     search_tidyup();
3875
3876     /* Pass the result back down the pipe. This is a lot more information
3877     than is needed for a local delivery. We have to send back the error
3878     status for each address, the usability status for each host that is
3879     flagged as unusable, and all the retry items. When TLS is in use, we
3880     send also the cipher and peerdn information. Each type of information
3881     is flagged by an identifying byte, and is then in a fixed format (with
3882     strings terminated by zeros), and there is a final terminator at the
3883     end. The host information and retry information is all attached to
3884     the first address, so that gets sent at the start. */
3885
3886     /* Host unusability information: for most success cases this will
3887     be null. */
3888
3889     for (h = addr->host_list; h != NULL; h = h->next)
3890       {
3891       if (h->address == NULL || h->status < hstatus_unusable) continue;
3892       sprintf(CS big_buffer, "H%c%c%s", h->status, h->why, h->address);
3893       (void)write(fd, big_buffer, Ustrlen(big_buffer+3) + 4);
3894       }
3895
3896     /* The number of bytes written. This is the same for each address. Even
3897     if we sent several copies of the message down the same connection, the
3898     size of each one is the same, and it's that value we have got because
3899     transport_count gets reset before calling transport_write_message(). */
3900
3901     big_buffer[0] = 'S';
3902     memcpy(big_buffer+1, &transport_count, sizeof(transport_count));
3903     (void)write(fd, big_buffer, sizeof(transport_count) + 1);
3904
3905     /* Information about what happened to each address. Three item types are
3906     used: an optional 'X' item first, for TLS information, followed by 'R'
3907     items for any retry settings, and finally an 'A' item for the remaining
3908     data. */
3909
3910     for(; addr != NULL; addr = addr->next)
3911       {
3912       uschar *ptr;
3913       retry_item *r;
3914
3915       /* The certificate verification status goes into the flags */
3916
3917       if (tls_certificate_verified) setflag(addr, af_cert_verified);
3918
3919       /* Use an X item only if there's something to send */
3920
3921       #ifdef SUPPORT_TLS
3922       if (addr->cipher != NULL)
3923         {
3924         ptr = big_buffer;
3925         *ptr++ = 'X';
3926         sprintf(CS ptr, "%.128s", addr->cipher);
3927         while(*ptr++);
3928         if (addr->peerdn == NULL) *ptr++ = 0; else
3929           {
3930           sprintf(CS ptr, "%.512s", addr->peerdn);
3931           while(*ptr++);
3932           }
3933         (void)write(fd, big_buffer, ptr - big_buffer);
3934         }
3935       #endif
3936
3937       /* Retry information: for most success cases this will be null. */
3938
3939       for (r = addr->retries; r != NULL; r = r->next)
3940         {
3941         uschar *ptr;
3942         sprintf(CS big_buffer, "R%c%.500s", r->flags, r->key);
3943         ptr = big_buffer + Ustrlen(big_buffer+2) + 3;
3944         memcpy(ptr, &(r->basic_errno), sizeof(r->basic_errno));
3945         ptr += sizeof(r->basic_errno);
3946         memcpy(ptr, &(r->more_errno), sizeof(r->more_errno));
3947         ptr += sizeof(r->more_errno);
3948         if (r->message == NULL) *ptr++ = 0; else
3949           {
3950           sprintf(CS ptr, "%.512s", r->message);
3951           while(*ptr++);
3952           }
3953         (void)write(fd, big_buffer, ptr - big_buffer);
3954         }
3955
3956       /* The rest of the information goes in an 'A' item. */
3957
3958       ptr = big_buffer + 3;
3959       sprintf(CS big_buffer, "A%c%c", addr->transport_return,
3960         addr->special_action);
3961       memcpy(ptr, &(addr->basic_errno), sizeof(addr->basic_errno));
3962       ptr += sizeof(addr->basic_errno);
3963       memcpy(ptr, &(addr->more_errno), sizeof(addr->more_errno));
3964       ptr += sizeof(addr->more_errno);
3965       memcpy(ptr, &(addr->flags), sizeof(addr->flags));
3966       ptr += sizeof(addr->flags);
3967
3968       if (addr->message == NULL) *ptr++ = 0; else
3969         {
3970         sprintf(CS ptr, "%.1024s", addr->message);
3971         while(*ptr++);
3972         }
3973
3974       if (addr->user_message == NULL) *ptr++ = 0; else
3975         {
3976         sprintf(CS ptr, "%.1024s", addr->user_message);
3977         while(*ptr++);
3978         }
3979
3980       if (addr->host_used == NULL) *ptr++ = 0; else
3981         {
3982         sprintf(CS ptr, "%.256s", addr->host_used->name);
3983         while(*ptr++);
3984         sprintf(CS ptr, "%.64s", addr->host_used->address);
3985         while(*ptr++);
3986         memcpy(ptr, &(addr->host_used->port), sizeof(addr->host_used->port));
3987         ptr += sizeof(addr->host_used->port);
3988         }
3989       (void)write(fd, big_buffer, ptr - big_buffer);
3990       }
3991
3992     /* Add termination flag, close the pipe, and that's it. The character
3993     after 'Z' indicates whether continue_transport is now NULL or not.
3994     A change from non-NULL to NULL indicates a problem with a continuing
3995     connection. */
3996
3997     big_buffer[0] = 'Z';
3998     big_buffer[1] = (continue_transport == NULL)? '0' : '1';
3999     (void)write(fd, big_buffer, 2);
4000     (void)close(fd);
4001     exit(EXIT_SUCCESS);
4002     }
4003
4004   /* Back in the mainline: close the unwanted half of the pipe. */
4005
4006   (void)close(pfd[pipe_write]);
4007
4008   /* Fork failed; defer with error message */
4009
4010   if (pid < 0)
4011     {
4012     (void)close(pfd[pipe_read]);
4013     remote_post_process(addr, LOG_MAIN|LOG_PANIC,
4014       string_sprintf("fork failed for remote delivery to %s: %s",
4015         addr->domain, strerror(errno)), fallback);
4016     continue;
4017     }
4018
4019   /* Fork succeeded; increment the count, and remember relevant data for
4020   when the process finishes. */
4021
4022   parcount++;
4023   parlist[poffset].addrlist = parlist[poffset].addr = addr;
4024   parlist[poffset].pid = pid;
4025   parlist[poffset].fd = pfd[pipe_read];
4026   parlist[poffset].done = FALSE;
4027   parlist[poffset].msg = NULL;
4028   parlist[poffset].return_path = return_path;
4029
4030   /* If the process we've just started is sending a message down an existing
4031   channel, wait for it now. This ensures that only one such process runs at
4032   once, whatever the value of remote_max parallel. Otherwise, we might try to
4033   send two or more messages simultaneously down the same channel. This could
4034   happen if there are different domains that include the same host in otherwise
4035   different host lists.
4036
4037   Also, if the transport closes down the channel, this information gets back
4038   (continue_transport gets set to NULL) before we consider any other addresses
4039   in this message. */
4040
4041   if (continue_transport != NULL) par_reduce(0, fallback);
4042
4043   /* Otherwise, if we are running in the test harness, wait a bit, to let the
4044   newly created process get going before we create another process. This should
4045   ensure repeatability in the tests. We only need to wait a tad. */
4046
4047   else if (running_in_test_harness) millisleep(500);
4048   }
4049
4050 /* Reached the end of the list of addresses. Wait for all the subprocesses that
4051 are still running and post-process their addresses. */
4052
4053 par_reduce(0, fallback);
4054 return TRUE;
4055 }
4056
4057
4058
4059
4060 /*************************************************
4061 *   Split an address into local part and domain  *
4062 *************************************************/
4063
4064 /* This function initializes an address for routing by splitting it up into a
4065 local part and a domain. The local part is set up twice - once in its original
4066 casing, and once in lower case, and it is dequoted. We also do the "percent
4067 hack" for configured domains. This may lead to a DEFER result if a lookup
4068 defers. When a percent-hacking takes place, we insert a copy of the original
4069 address as a new parent of this address, as if we have had a redirection.
4070
4071 Argument:
4072   addr      points to an addr_item block containing the address
4073
4074 Returns:    OK
4075             DEFER   - could not determine if domain is %-hackable
4076 */
4077
4078 int
4079 deliver_split_address(address_item *addr)
4080 {
4081 uschar *address = addr->address;
4082 uschar *domain = Ustrrchr(address, '@');
4083 uschar *t;
4084 int len = domain - address;
4085
4086 addr->domain = string_copylc(domain+1);    /* Domains are always caseless */
4087
4088 /* The implication in the RFCs (though I can't say I've seen it spelled out
4089 explicitly) is that quoting should be removed from local parts at the point
4090 where they are locally interpreted. [The new draft "821" is more explicit on
4091 this, Jan 1999.] We know the syntax is valid, so this can be done by simply
4092 removing quoting backslashes and any unquoted doublequotes. */
4093
4094 t = addr->cc_local_part = store_get(len+1);
4095 while(len-- > 0)
4096   {
4097   register int c = *address++;
4098   if (c == '\"') continue;
4099   if (c == '\\')
4100     {
4101     *t++ = *address++;
4102     len--;
4103     }
4104   else *t++ = c;
4105   }
4106 *t = 0;
4107
4108 /* We do the percent hack only for those domains that are listed in
4109 percent_hack_domains. A loop is required, to copy with multiple %-hacks. */
4110
4111 if (percent_hack_domains != NULL)
4112   {
4113   int rc;
4114   uschar *new_address = NULL;
4115   uschar *local_part = addr->cc_local_part;
4116
4117   deliver_domain = addr->domain;  /* set $domain */
4118
4119   while ((rc = match_isinlist(deliver_domain, &percent_hack_domains, 0,
4120            &domainlist_anchor, addr->domain_cache, MCL_DOMAIN, TRUE, NULL))
4121              == OK &&
4122          (t = Ustrrchr(local_part, '%')) != NULL)
4123     {
4124     new_address = string_copy(local_part);
4125     new_address[t - local_part] = '@';
4126     deliver_domain = string_copylc(t+1);
4127     local_part = string_copyn(local_part, t - local_part);
4128     }
4129
4130   if (rc == DEFER) return DEFER;   /* lookup deferred */
4131
4132   /* If hackery happened, set up new parent and alter the current address. */
4133
4134   if (new_address != NULL)
4135     {
4136     address_item *new_parent = store_get(sizeof(address_item));
4137     *new_parent = *addr;
4138     addr->parent = new_parent;
4139     addr->address = new_address;
4140     addr->unique = string_copy(new_address);
4141     addr->domain = deliver_domain;
4142     addr->cc_local_part = local_part;
4143     DEBUG(D_deliver) debug_printf("%%-hack changed address to: %s\n",
4144       addr->address);
4145     }
4146   }
4147
4148 /* Create the lowercased version of the final local part, and make that the
4149 default one to be used. */
4150
4151 addr->local_part = addr->lc_local_part = string_copylc(addr->cc_local_part);
4152 return OK;
4153 }
4154
4155
4156
4157
4158 /*************************************************
4159 *      Get next error message text               *
4160 *************************************************/
4161
4162 /* If f is not NULL, read the next "paragraph", from a customized error message
4163 text file, terminated by a line containing ****, and expand it.
4164
4165 Arguments:
4166   f          NULL or a file to read from
4167   which      string indicating which string (for errors)
4168
4169 Returns:     NULL or an expanded string
4170 */
4171
4172 static uschar *
4173 next_emf(FILE *f, uschar *which)
4174 {
4175 int size = 256;
4176 int ptr = 0;
4177 uschar *para, *yield;
4178 uschar buffer[256];
4179
4180 if (f == NULL) return NULL;
4181
4182 if (Ufgets(buffer, sizeof(buffer), f) == NULL ||
4183     Ustrcmp(buffer, "****\n") == 0) return NULL;
4184
4185 para = store_get(size);
4186 for (;;)
4187   {
4188   para = string_cat(para, &size, &ptr, buffer, Ustrlen(buffer));
4189   if (Ufgets(buffer, sizeof(buffer), f) == NULL ||
4190       Ustrcmp(buffer, "****\n") == 0) break;
4191   }
4192 para[ptr] = 0;
4193
4194 yield = expand_string(para);
4195 if (yield != NULL) return yield;
4196
4197 log_write(0, LOG_MAIN|LOG_PANIC, "Failed to expand string from "
4198   "bounce_message_file or warn_message_file (%s): %s", which,
4199   expand_string_message);
4200 return NULL;
4201 }
4202
4203
4204
4205
4206 /*************************************************
4207 *      Close down a passed transport channel     *
4208 *************************************************/
4209
4210 /* This function is called when a passed transport channel cannot be used.
4211 It attempts to close it down tidily. The yield is always DELIVER_NOT_ATTEMPTED
4212 so that the function call can be the argument of a "return" statement.
4213
4214 Arguments:  None
4215 Returns:    DELIVER_NOT_ATTEMPTED
4216 */
4217
4218 static int
4219 continue_closedown(void)
4220 {
4221 if (continue_transport != NULL)
4222   {
4223   transport_instance *t;
4224   for (t = transports; t != NULL; t = t->next)
4225     {
4226     if (Ustrcmp(t->name, continue_transport) == 0)
4227       {
4228       if (t->info->closedown != NULL) (t->info->closedown)(t);
4229       break;
4230       }
4231     }
4232   }
4233 return DELIVER_NOT_ATTEMPTED;
4234 }
4235
4236
4237
4238
4239 /*************************************************
4240 *           Print address information            *
4241 *************************************************/
4242
4243 /* This function is called to output an address, or information about an
4244 address, for bounce or defer messages. If the hide_child flag is set, all we
4245 output is the original ancestor address.
4246
4247 Arguments:
4248   addr         points to the address
4249   f            the FILE to print to
4250   si           an initial string
4251   sc           a continuation string for before "generated"
4252   se           an end string
4253
4254 Returns:       TRUE if the address is not hidden
4255 */
4256
4257 static BOOL
4258 print_address_information(address_item *addr, FILE *f, uschar *si, uschar *sc,
4259   uschar *se)
4260 {
4261 BOOL yield = TRUE;
4262 uschar *printed = US"";
4263 address_item *ancestor = addr;
4264 while (ancestor->parent != NULL) ancestor = ancestor->parent;
4265
4266 fprintf(f, "%s", CS si);
4267
4268 if (addr->parent != NULL && testflag(addr, af_hide_child))
4269   {
4270   printed = US"an undisclosed address";
4271   yield = FALSE;
4272   }
4273 else if (!testflag(addr, af_pfr) || addr->parent == NULL)
4274   printed = addr->address;
4275
4276 else
4277   {
4278   uschar *s = addr->address;
4279   uschar *ss;
4280
4281   if (addr->address[0] == '>') { ss = US"mail"; s++; }
4282   else if (addr->address[0] == '|') ss = US"pipe";
4283   else ss = US"save";
4284
4285   fprintf(f, "%s to %s%sgenerated by ", ss, s, sc);
4286   printed = addr->parent->address;
4287   }
4288
4289 fprintf(f, "%s", CS string_printing(printed));
4290
4291 if (ancestor != addr)
4292   {
4293   uschar *original = (ancestor->onetime_parent == NULL)?
4294     ancestor->address : ancestor->onetime_parent;
4295   if (strcmpic(original, printed) != 0)
4296     fprintf(f, "%s(%sgenerated from %s)", sc,
4297       (ancestor != addr->parent)? "ultimately " : "",
4298       string_printing(original));
4299   }
4300
4301 fprintf(f, "%s", CS se);
4302 return yield;
4303 }
4304
4305
4306
4307
4308
4309 /*************************************************
4310 *         Print error for an address             *
4311 *************************************************/
4312
4313 /* This function is called to print the error information out of an address for
4314 a bounce or a warning message. It tries to format the message reasonably by
4315 introducing newlines. All lines are indented by 4; the initial printing
4316 position must be set before calling.
4317
4318 This function used always to print the error. Nowadays we want to restrict it
4319 to cases such as LMTP/SMTP errors from a remote host, and errors from :fail:
4320 and filter "fail". We no longer pass other information willy-nilly in bounce
4321 and warning messages. Text in user_message is always output; text in message
4322 only if the af_pass_message flag is set.
4323
4324 Arguments:
4325   addr         the address
4326   f            the FILE to print on
4327   t            some leading text
4328
4329 Returns:       nothing
4330 */
4331
4332 static void
4333 print_address_error(address_item *addr, FILE *f, uschar *t)
4334 {
4335 int count = Ustrlen(t);
4336 uschar *s = testflag(addr, af_pass_message)? addr->message : NULL;
4337
4338 if (s == NULL)
4339   {
4340   if (addr->user_message != NULL) s = addr->user_message; else return;
4341   }
4342
4343 fprintf(f, "\n    %s", t);
4344
4345 while (*s != 0)
4346   {
4347   if (*s == '\\' && s[1] == 'n')
4348     {
4349     fprintf(f, "\n    ");
4350     s += 2;
4351     count = 0;
4352     }
4353   else
4354     {
4355     fputc(*s, f);
4356     count++;
4357     if (*s++ == ':' && isspace(*s) && count > 45)
4358       {
4359       fprintf(f, "\n   ");  /* sic (because space follows) */
4360       count = 0;
4361       }
4362     }
4363   }
4364 }
4365
4366
4367
4368
4369
4370
4371 /*************************************************
4372 *     Check list of addresses for duplication    *
4373 *************************************************/
4374
4375 /* This function was introduced when the test for duplicate addresses that are
4376 not pipes, files, or autoreplies was moved from the middle of routing to when
4377 routing was complete. That was to fix obscure cases when the routing history
4378 affects the subsequent routing of identical addresses. This function is called
4379 after routing, to check that the final routed addresses are not duplicates.
4380
4381 If we detect a duplicate, we remember what it is a duplicate of. Note that
4382 pipe, file, and autoreply de-duplication is handled during routing, so we must
4383 leave such "addresses" alone here, as otherwise they will incorrectly be
4384 discarded.
4385
4386 Argument:     address of list anchor
4387 Returns:      nothing
4388 */
4389
4390 static void
4391 do_duplicate_check(address_item **anchor)
4392 {
4393 address_item *addr;
4394 while ((addr = *anchor) != NULL)
4395   {
4396   tree_node *tnode;
4397   if (testflag(addr, af_pfr))
4398     {
4399     anchor = &(addr->next);
4400     }
4401   else if ((tnode = tree_search(tree_duplicates, addr->unique)) != NULL)
4402     {
4403     DEBUG(D_deliver|D_route)
4404       debug_printf("%s is a duplicate address: discarded\n", addr->unique);
4405     *anchor = addr->next;
4406     addr->dupof = tnode->data.ptr;
4407     addr->next = addr_duplicate;
4408     addr_duplicate = addr;
4409     }
4410   else
4411     {
4412     tree_add_duplicate(addr->unique, addr);
4413     anchor = &(addr->next);
4414     }
4415   }
4416 }
4417
4418
4419
4420
4421 /*************************************************
4422 *              Deliver one message               *
4423 *************************************************/
4424
4425 /* This is the function which is called when a message is to be delivered. It
4426 is passed the id of the message. It is possible that the message no longer
4427 exists, if some other process has delivered it, and it is also possible that
4428 the message is being worked on by another process, in which case the data file
4429 will be locked.
4430
4431 If no delivery is attempted for any of the above reasons, the function returns
4432 DELIVER_NOT_ATTEMPTED.
4433
4434 If the give_up flag is set true, do not attempt any deliveries, but instead
4435 fail all outstanding addresses and return the message to the sender (or
4436 whoever).
4437
4438 A delivery operation has a process all to itself; we never deliver more than
4439 one message in the same process. Therefore we needn't worry too much about
4440 store leakage.
4441
4442 Arguments:
4443   id          the id of the message to be delivered
4444   forced      TRUE if delivery was forced by an administrator; this overrides
4445               retry delays and causes a delivery to be tried regardless
4446   give_up     TRUE if an administrator has requested that delivery attempts
4447               be abandoned
4448
4449 Returns:      When the global variable mua_wrapper is FALSE:
4450                 DELIVER_ATTEMPTED_NORMAL   if a delivery attempt was made
4451                 DELIVER_NOT_ATTEMPTED      otherwise (see comment above)
4452               When the global variable mua_wrapper is TRUE:
4453                 DELIVER_MUA_SUCCEEDED      if delivery succeeded
4454                 DELIVER_MUA_FAILED         if delivery failed
4455                 DELIVER_NOT_ATTEMPTED      if not attempted (should not occur)
4456 */
4457
4458 int
4459 deliver_message(uschar *id, BOOL forced, BOOL give_up)
4460 {
4461 int i, rc;
4462 int final_yield = DELIVER_ATTEMPTED_NORMAL;
4463 time_t now = time(NULL);
4464 address_item *addr_last = NULL;
4465 uschar *filter_message = NULL;
4466 FILE *jread;
4467 int process_recipients = RECIP_ACCEPT;
4468 open_db dbblock;
4469 open_db *dbm_file;
4470
4471 uschar *info = (queue_run_pid == (pid_t)0)?
4472   string_sprintf("delivering %s", id) :
4473   string_sprintf("delivering %s (queue run pid %d)", id, queue_run_pid);
4474
4475 /* If the D_process_info bit is on, set_process_info() will output debugging
4476 information. If not, we want to show this initial information if D_deliver or
4477 D_queue_run is set or in verbose mode. */
4478
4479 set_process_info("%s", info);
4480
4481 if ((debug_selector & D_process_info) == 0 &&
4482     (debug_selector & (D_deliver|D_queue_run|D_v)) != 0)
4483   debug_printf("%s\n", info);
4484
4485 /* Ensure that we catch any subprocesses that are created. Although Exim
4486 sets SIG_DFL as its initial default, some routes through the code end up
4487 here with it set to SIG_IGN - cases where a non-synchronous delivery process
4488 has been forked, but no re-exec has been done. We use sigaction rather than
4489 plain signal() on those OS where SA_NOCLDWAIT exists, because we want to be
4490 sure it is turned off. (There was a problem on AIX with this.) */
4491
4492 #ifdef SA_NOCLDWAIT
4493   {
4494   struct sigaction act;
4495   act.sa_handler = SIG_DFL;
4496   sigemptyset(&(act.sa_mask));
4497   act.sa_flags = 0;
4498   sigaction(SIGCHLD, &act, NULL);
4499   }
4500 #else
4501 signal(SIGCHLD, SIG_DFL);
4502 #endif
4503
4504 /* Make the forcing flag available for routers and transports, set up the
4505 global message id field, and initialize the count for returned files and the
4506 message size. This use of strcpy() is OK because the length id is checked when
4507 it is obtained from a command line (the -M or -q options), and otherwise it is
4508 known to be a valid message id. */
4509
4510 Ustrcpy(message_id, id);
4511 deliver_force = forced;
4512 return_count = 0;
4513 message_size = 0;
4514
4515 /* Initialize some flags */
4516
4517 update_spool = FALSE;
4518 remove_journal = TRUE;
4519
4520 /* Reset the random number generator, so that if several delivery processes are
4521 started from a queue runner that has already used random numbers (for sorting),
4522 they don't all get the same sequence. */
4523
4524 random_seed = 0;
4525
4526 /* Open and lock the message's data file. Exim locks on this one because the
4527 header file may get replaced as it is re-written during the delivery process.
4528 Any failures cause messages to be written to the log, except for missing files
4529 while queue running - another process probably completed delivery. As part of
4530 opening the data file, message_subdir gets set. */
4531
4532 if (!spool_open_datafile(id))
4533   return continue_closedown();  /* yields DELIVER_NOT_ATTEMPTED */
4534
4535 /* The value of message_size at this point has been set to the data length,
4536 plus one for the blank line that notionally precedes the data. */
4537
4538 /* Now read the contents of the header file, which will set up the headers in
4539 store, and also the list of recipients and the tree of non-recipients and
4540 assorted flags. It updates message_size. If there is a reading or format error,
4541 give up; if the message has been around for sufficiently long, remove it. */
4542
4543 sprintf(CS spoolname, "%s-H", id);
4544 if ((rc = spool_read_header(spoolname, TRUE, TRUE)) != spool_read_OK)
4545   {
4546   if (errno == ERRNO_SPOOLFORMAT)
4547     {
4548     struct stat statbuf;
4549     sprintf(CS big_buffer, "%s/input/%s/%s", spool_directory, message_subdir,
4550       spoolname);
4551     if (Ustat(big_buffer, &statbuf) == 0)
4552       log_write(0, LOG_MAIN, "Format error in spool file %s: "
4553         "size=" OFF_T_FMT, spoolname, statbuf.st_size);
4554     else log_write(0, LOG_MAIN, "Format error in spool file %s", spoolname);
4555     }
4556   else
4557     log_write(0, LOG_MAIN, "Error reading spool file %s: %s", spoolname,
4558       strerror(errno));
4559
4560   /* If we managed to read the envelope data, received_time contains the
4561   time the message was received. Otherwise, we can calculate it from the
4562   message id. */
4563
4564   if (rc != spool_read_hdrerror)
4565     {
4566     received_time = 0;
4567     for (i = 0; i < 6; i++)
4568       received_time = received_time * BASE_62 + tab62[id[i] - '0'];
4569     }
4570
4571   /* If we've had this malformed message too long, sling it. */
4572
4573   if (now - received_time > keep_malformed)
4574     {
4575     sprintf(CS spoolname, "%s/msglog/%s/%s", spool_directory, message_subdir, id);
4576     Uunlink(spoolname);
4577     sprintf(CS spoolname, "%s/input/%s/%s-D", spool_directory, message_subdir, id);
4578     Uunlink(spoolname);
4579     sprintf(CS spoolname, "%s/input/%s/%s-H", spool_directory, message_subdir, id);
4580     Uunlink(spoolname);
4581     sprintf(CS spoolname, "%s/input/%s/%s-J", spool_directory, message_subdir, id);
4582     Uunlink(spoolname);
4583     log_write(0, LOG_MAIN, "Message removed because older than %s",
4584       readconf_printtime(keep_malformed));
4585     }
4586
4587   (void)close(deliver_datafile);
4588   deliver_datafile = -1;
4589   return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4590   }
4591
4592 /* The spool header file has been read. Look to see if there is an existing
4593 journal file for this message. If there is, it means that a previous delivery
4594 attempt crashed (program or host) before it could update the spool header file.
4595 Read the list of delivered addresses from the journal and add them to the
4596 nonrecipients tree. Then update the spool file. We can leave the journal in
4597 existence, as it will get further successful deliveries added to it in this
4598 run, and it will be deleted if this function gets to its end successfully.
4599 Otherwise it might be needed again. */
4600
4601 sprintf(CS spoolname, "%s/input/%s/%s-J", spool_directory, message_subdir, id);
4602 jread = Ufopen(spoolname, "rb");
4603 if (jread != NULL)
4604   {
4605   while (Ufgets(big_buffer, big_buffer_size, jread) != NULL)
4606     {
4607     int n = Ustrlen(big_buffer);
4608     big_buffer[n-1] = 0;
4609     tree_add_nonrecipient(big_buffer);
4610     DEBUG(D_deliver) debug_printf("Previously delivered address %s taken from "
4611       "journal file\n", big_buffer);
4612     }
4613   (void)fclose(jread);
4614   /* Panic-dies on error */
4615   (void)spool_write_header(message_id, SW_DELIVERING, NULL);
4616   }
4617 else if (errno != ENOENT)
4618   {
4619   log_write(0, LOG_MAIN|LOG_PANIC, "attempt to open journal for reading gave: "
4620     "%s", strerror(errno));
4621   return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4622   }
4623
4624 /* A null recipients list indicates some kind of disaster. */
4625
4626 if (recipients_list == NULL)
4627   {
4628   (void)close(deliver_datafile);
4629   deliver_datafile = -1;
4630   log_write(0, LOG_MAIN, "Spool error: no recipients for %s", spoolname);
4631   return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4632   }
4633
4634
4635 /* Handle a message that is frozen. There are a number of different things that
4636 can happen, but in the default situation, unless forced, no delivery is
4637 attempted. */
4638
4639 if (deliver_freeze)
4640   {
4641   #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
4642   /* Moving to another directory removes the message from Exim's view. Other
4643   tools must be used to deal with it. Logging of this action happens in
4644   spool_move_message() and its subfunctions. */
4645
4646   if (move_frozen_messages &&
4647       spool_move_message(id, message_subdir, US"", US"F"))
4648     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4649   #endif
4650
4651   /* For all frozen messages (bounces or not), timeout_frozen_after sets the
4652   maximum time to keep messages that are frozen. Thaw if we reach it, with a
4653   flag causing all recipients to be failed. The time is the age of the
4654   message, not the time since freezing. */
4655
4656   if (timeout_frozen_after > 0 && message_age >= timeout_frozen_after)
4657     {
4658     log_write(0, LOG_MAIN, "cancelled by timeout_frozen_after");
4659     process_recipients = RECIP_FAIL_TIMEOUT;
4660     }
4661
4662   /* For bounce messages (and others with no sender), thaw if the error message
4663   ignore timer is exceeded. The message will be discarded if this delivery
4664   fails. */
4665
4666   else if (sender_address[0] == 0 && message_age >= ignore_bounce_errors_after)
4667     {
4668     log_write(0, LOG_MAIN, "Unfrozen by errmsg timer");
4669     }
4670
4671   /* If this is a bounce message, or there's no auto thaw, or we haven't
4672   reached the auto thaw time yet, and this delivery is not forced by an admin
4673   user, do not attempt delivery of this message. Note that forced is set for
4674   continuing messages down the same channel, in order to skip load checking and
4675   ignore hold domains, but we don't want unfreezing in that case. */
4676
4677   else
4678     {
4679     if ((sender_address[0] == 0 ||
4680          auto_thaw <= 0 ||
4681          now <= deliver_frozen_at + auto_thaw
4682         )
4683         &&
4684         (!forced || !deliver_force_thaw || !admin_user ||
4685           continue_hostname != NULL
4686         ))
4687       {
4688       (void)close(deliver_datafile);
4689       deliver_datafile = -1;
4690       log_write(L_skip_delivery, LOG_MAIN, "Message is frozen");
4691       return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4692       }
4693
4694     /* If delivery was forced (by an admin user), assume a manual thaw.
4695     Otherwise it's an auto thaw. */
4696
4697     if (forced)
4698       {
4699       deliver_manual_thaw = TRUE;
4700       log_write(0, LOG_MAIN, "Unfrozen by forced delivery");
4701       }
4702     else log_write(0, LOG_MAIN, "Unfrozen by auto-thaw");
4703     }
4704
4705   /* We get here if any of the rules for unfreezing have triggered. */
4706
4707   deliver_freeze = FALSE;
4708   update_spool = TRUE;
4709   }
4710
4711
4712 /* Open the message log file if we are using them. This records details of
4713 deliveries, deferments, and failures for the benefit of the mail administrator.
4714 The log is not used by exim itself to track the progress of a message; that is
4715 done by rewriting the header spool file. */
4716
4717 if (message_logs)
4718   {
4719   uschar *error;
4720   int fd;
4721
4722   sprintf(CS spoolname, "%s/msglog/%s/%s", spool_directory, message_subdir, id);
4723   fd = open_msglog_file(spoolname, SPOOL_MODE, &error);
4724
4725   if (fd < 0)
4726     {
4727     log_write(0, LOG_MAIN|LOG_PANIC, "Couldn't %s message log %s: %s", error,
4728       spoolname, strerror(errno));
4729     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4730     }
4731
4732   /* Make a C stream out of it. */
4733
4734   message_log = fdopen(fd, "a");
4735   if (message_log == NULL)
4736     {
4737     log_write(0, LOG_MAIN|LOG_PANIC, "Couldn't fdopen message log %s: %s",
4738       spoolname, strerror(errno));
4739     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4740     }
4741   }
4742
4743
4744 /* If asked to give up on a message, log who did it, and set the action for all
4745 the addresses. */
4746
4747 if (give_up)
4748   {
4749   struct passwd *pw = getpwuid(real_uid);
4750   log_write(0, LOG_MAIN, "cancelled by %s", (pw != NULL)?
4751         US pw->pw_name : string_sprintf("uid %ld", (long int)real_uid));
4752   process_recipients = RECIP_FAIL;
4753   }
4754
4755 /* Otherwise, if there are too many Received: headers, fail all recipients. */
4756
4757 else if (received_count > received_headers_max)
4758   process_recipients = RECIP_FAIL_LOOP;
4759
4760 /* Otherwise, if a system-wide, address-independent message filter is
4761 specified, run it now, except in the case when we are failing all recipients as
4762 a result of timeout_frozen_after. If the system filter yields "delivered", then
4763 ignore the true recipients of the message. Failure of the filter file is
4764 logged, and the delivery attempt fails. */
4765
4766 else if (system_filter != NULL && process_recipients != RECIP_FAIL_TIMEOUT)
4767   {
4768   int rc;
4769   int filtertype;
4770   ugid_block ugid;
4771   redirect_block redirect;
4772
4773   if (system_filter_uid_set)
4774     {
4775     ugid.uid = system_filter_uid;
4776     ugid.gid = system_filter_gid;
4777     ugid.uid_set = ugid.gid_set = TRUE;
4778     }
4779   else
4780     {
4781     ugid.uid_set = ugid.gid_set = FALSE;
4782     }
4783
4784   return_path = sender_address;
4785   enable_dollar_recipients = TRUE;   /* Permit $recipients in system filter */
4786   system_filtering = TRUE;
4787
4788   /* Any error in the filter file causes a delivery to be abandoned. */
4789
4790   redirect.string = system_filter;
4791   redirect.isfile = TRUE;
4792   redirect.check_owner = redirect.check_group = FALSE;
4793   redirect.owners = NULL;
4794   redirect.owngroups = NULL;
4795   redirect.pw = NULL;
4796   redirect.modemask = 0;
4797
4798   DEBUG(D_deliver|D_filter) debug_printf("running system filter\n");
4799
4800   rc = rda_interpret(
4801     &redirect,              /* Where the data is */
4802     RDO_DEFER |             /* Turn on all the enabling options */
4803       RDO_FAIL |            /* Leave off all the disabling options */
4804       RDO_FILTER |
4805       RDO_FREEZE |
4806       RDO_REALLOG |
4807       RDO_REWRITE,
4808     NULL,                   /* No :include: restriction (not used in filter) */
4809     NULL,                   /* No sieve vacation directory (not sieve!) */
4810     NULL,                   /* No sieve enotify mailto owner (not sieve!) */
4811     NULL,                   /* No sieve user address (not sieve!) */
4812     NULL,                   /* No sieve subaddress (not sieve!) */
4813     &ugid,                  /* uid/gid data */
4814     &addr_new,              /* Where to hang generated addresses */
4815     &filter_message,        /* Where to put error message */
4816     NULL,                   /* Don't skip syntax errors */
4817     &filtertype,            /* Will always be set to FILTER_EXIM for this call */
4818     US"system filter");     /* For error messages */
4819
4820   DEBUG(D_deliver|D_filter) debug_printf("system filter returned %d\n", rc);
4821
4822   if (rc == FF_ERROR || rc == FF_NONEXIST)
4823     {
4824     (void)close(deliver_datafile);
4825     deliver_datafile = -1;
4826     log_write(0, LOG_MAIN|LOG_PANIC, "Error in system filter: %s",
4827       string_printing(filter_message));
4828     return continue_closedown();   /* yields DELIVER_NOT_ATTEMPTED */
4829     }
4830
4831   /* Reset things. If the filter message is an empty string, which can happen
4832   for a filter "fail" or "freeze" command with no text, reset it to NULL. */
4833
4834   system_filtering = FALSE;
4835   enable_dollar_recipients = FALSE;
4836   if (filter_message != NULL && filter_message[0] == 0) filter_message = NULL;
4837
4838   /* Save the values of the system filter variables so that user filters
4839   can use them. */
4840
4841   memcpy(filter_sn, filter_n, sizeof(filter_sn));
4842
4843   /* The filter can request that delivery of the original addresses be
4844   deferred. */
4845
4846   if (rc == FF_DEFER)
4847     {
4848     process_recipients = RECIP_DEFER;
4849     deliver_msglog("Delivery deferred by system filter\n");
4850     log_write(0, LOG_MAIN, "Delivery deferred by system filter");
4851     }
4852
4853   /* The filter can request that a message be frozen, but this does not
4854   take place if the message has been manually thawed. In that case, we must
4855   unset "delivered", which is forced by the "freeze" command to make -bF
4856   work properly. */
4857
4858   else if (rc == FF_FREEZE && !deliver_manual_thaw)
4859     {
4860     deliver_freeze = TRUE;
4861     deliver_frozen_at = time(NULL);
4862     process_recipients = RECIP_DEFER;
4863     frozen_info = string_sprintf(" by the system filter%s%s",
4864       (filter_message == NULL)? US"" : US": ",
4865       (filter_message == NULL)? US"" : filter_message);
4866     }
4867
4868   /* The filter can request that a message be failed. The error message may be
4869   quite long - it is sent back to the sender in the bounce - but we don't want
4870   to fill up the log with repetitions of it. If it starts with << then the text
4871   between << and >> is written to the log, with the rest left for the bounce
4872   message. */
4873
4874   else if (rc == FF_FAIL)
4875     {
4876     uschar *colon = US"";
4877     uschar *logmsg = US"";
4878     int loglen = 0;
4879
4880     process_recipients = RECIP_FAIL_FILTER;
4881
4882     if (filter_message != NULL)
4883       {
4884       uschar *logend;
4885       colon = US": ";
4886       if (filter_message[0] == '<' && filter_message[1] == '<' &&
4887           (logend = Ustrstr(filter_message, ">>")) != NULL)
4888         {
4889         logmsg = filter_message + 2;
4890         loglen = logend - logmsg;
4891         filter_message = logend + 2;
4892         if (filter_message[0] == 0) filter_message = NULL;
4893         }
4894       else
4895         {
4896         logmsg = filter_message;
4897         loglen = Ustrlen(filter_message);
4898         }
4899       }
4900
4901     log_write(0, LOG_MAIN, "cancelled by system filter%s%.*s", colon, loglen,
4902       logmsg);
4903     }
4904
4905   /* Delivery can be restricted only to those recipients (if any) that the
4906   filter specified. */
4907
4908   else if (rc == FF_DELIVERED)
4909     {
4910     process_recipients = RECIP_IGNORE;
4911     if (addr_new == NULL)
4912       log_write(0, LOG_MAIN, "=> discarded (system filter)");
4913     else
4914       log_write(0, LOG_MAIN, "original recipients ignored (system filter)");
4915     }
4916
4917   /* If any new addresses were created by the filter, fake up a "parent"
4918   for them. This is necessary for pipes, etc., which are expected to have
4919   parents, and it also gives some sensible logging for others. Allow
4920   pipes, files, and autoreplies, and run them as the filter uid if set,
4921   otherwise as the current uid. */
4922
4923   if (addr_new != NULL)
4924     {
4925     int uid = (system_filter_uid_set)? system_filter_uid : geteuid();
4926     int gid = (system_filter_gid_set)? system_filter_gid : getegid();
4927
4928     /* The text "system-filter" is tested in transport_set_up_command() and in
4929     set_up_shell_command() in the pipe transport, to enable them to permit
4930     $recipients, so don't change it here without also changing it there. */
4931
4932     address_item *p = addr_new;
4933     address_item *parent = deliver_make_addr(US"system-filter", FALSE);
4934
4935     parent->domain = string_copylc(qualify_domain_recipient);
4936     parent->local_part = US"system-filter";
4937
4938     /* As part of this loop, we arrange for addr_last to end up pointing
4939     at the final address. This is used if we go on to add addresses for the
4940     original recipients. */
4941
4942     while (p != NULL)
4943       {
4944       if (parent->child_count == SHRT_MAX)
4945         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "system filter generated more "
4946           "than %d delivery addresses", SHRT_MAX);
4947       parent->child_count++;
4948       p->parent = parent;
4949
4950       if (testflag(p, af_pfr))
4951         {
4952         uschar *tpname;
4953         uschar *type;
4954         p->uid = uid;
4955         p->gid = gid;
4956         setflag(p, af_uid_set |
4957                    af_gid_set |
4958                    af_allow_file |
4959                    af_allow_pipe |
4960                    af_allow_reply);
4961
4962         /* Find the name of the system filter's appropriate pfr transport */
4963
4964         if (p->address[0] == '|')
4965           {
4966           type = US"pipe";
4967           tpname = system_filter_pipe_transport;
4968           address_pipe = p->address;
4969           }
4970         else if (p->address[0] == '>')
4971           {
4972           type = US"reply";
4973           tpname = system_filter_reply_transport;
4974           }
4975         else
4976           {
4977           if (p->address[Ustrlen(p->address)-1] == '/')
4978             {
4979             type = US"directory";
4980             tpname = system_filter_directory_transport;
4981             }
4982           else
4983             {
4984             type = US"file";
4985             tpname = system_filter_file_transport;
4986             }
4987           address_file = p->address;
4988           }
4989
4990         /* Now find the actual transport, first expanding the name. We have
4991         set address_file or address_pipe above. */
4992
4993         if (tpname != NULL)
4994           {
4995           uschar *tmp = expand_string(tpname);
4996           address_file = address_pipe = NULL;
4997           if (tmp == NULL)
4998             p->message = string_sprintf("failed to expand \"%s\" as a "
4999               "system filter transport name", tpname);
5000           tpname = tmp;
5001           }
5002         else
5003           {
5004           p->message = string_sprintf("system_filter_%s_transport is unset",
5005             type);
5006           }
5007
5008         if (tpname != NULL)
5009           {
5010           transport_instance *tp;
5011           for (tp = transports; tp != NULL; tp = tp->next)
5012             {
5013             if (Ustrcmp(tp->name, tpname) == 0)
5014               {
5015               p->transport = tp;
5016               break;
5017               }
5018             }
5019           if (tp == NULL)
5020             p->message = string_sprintf("failed to find \"%s\" transport "
5021               "for system filter delivery", tpname);
5022           }
5023
5024         /* If we couldn't set up a transport, defer the delivery, putting the
5025         error on the panic log as well as the main log. */
5026
5027         if (p->transport == NULL)
5028           {
5029           address_item *badp = p;
5030           p = p->next;
5031           if (addr_last == NULL) addr_new = p; else addr_last->next = p;
5032           badp->local_part = badp->address;   /* Needed for log line */
5033           post_process_one(badp, DEFER, LOG_MAIN|LOG_PANIC, DTYPE_ROUTER, 0);
5034           continue;
5035           }
5036         }    /* End of pfr handling */
5037
5038       /* Either a non-pfr delivery, or we found a transport */
5039
5040       DEBUG(D_deliver|D_filter)
5041         debug_printf("system filter added %s\n", p->address);
5042
5043       addr_last = p;
5044       p = p->next;
5045       }    /* Loop through all addr_new addresses */
5046     }
5047   }
5048
5049
5050 /* Scan the recipients list, and for every one that is not in the non-
5051 recipients tree, add an addr item to the chain of new addresses. If the pno
5052 value is non-negative, we must set the onetime parent from it. This which
5053 points to the relevant entry in the recipients list.
5054
5055 This processing can be altered by the setting of the process_recipients
5056 variable, which is changed if recipients are to be ignored, failed, or
5057 deferred. This can happen as a result of system filter activity, or if the -Mg
5058 option is used to fail all of them.
5059
5060 Duplicate addresses are handled later by a different tree structure; we can't
5061 just extend the non-recipients tree, because that will be re-written to the
5062 spool if the message is deferred, and in any case there are casing
5063 complications for local addresses. */
5064
5065 if (process_recipients != RECIP_IGNORE)
5066   {
5067   for (i = 0; i < recipients_count; i++)
5068     {
5069     if (tree_search(tree_nonrecipients, recipients_list[i].address) == NULL)
5070       {
5071       recipient_item *r = recipients_list + i;
5072       address_item *new = deliver_make_addr(r->address, FALSE);
5073       new->p.errors_address = r->errors_to;
5074
5075       if (r->pno >= 0)
5076         new->onetime_parent = recipients_list[r->pno].address;
5077
5078       switch (process_recipients)
5079         {
5080         /* RECIP_DEFER is set when a system filter freezes a message. */
5081
5082         case RECIP_DEFER:
5083         new->next = addr_defer;
5084         addr_defer = new;
5085         break;
5086
5087
5088         /* RECIP_FAIL_FILTER is set when a system filter has obeyed a "fail"
5089         command. */
5090
5091         case RECIP_FAIL_FILTER:
5092         new->message =
5093           (filter_message == NULL)? US"delivery cancelled" : filter_message;
5094         setflag(new, af_pass_message);
5095         goto RECIP_QUEUE_FAILED;   /* below */
5096
5097
5098         /* RECIP_FAIL_TIMEOUT is set when a message is frozen, but is older
5099         than the value in timeout_frozen_after. Treat non-bounce messages
5100         similarly to -Mg; for bounce messages we just want to discard, so
5101         don't put the address on the failed list. The timeout has already
5102         been logged. */
5103
5104         case RECIP_FAIL_TIMEOUT:
5105         new->message  = US"delivery cancelled; message timed out";
5106         goto RECIP_QUEUE_FAILED;   /* below */
5107
5108
5109         /* RECIP_FAIL is set when -Mg has been used. */
5110
5111         case RECIP_FAIL:
5112         new->message  = US"delivery cancelled by administrator";
5113         /* Fall through */
5114
5115         /* Common code for the failure cases above. If this is not a bounce
5116         message, put the address on the failed list so that it is used to
5117         create a bounce. Otherwise do nothing - this just discards the address.
5118         The incident has already been logged. */
5119
5120         RECIP_QUEUE_FAILED:
5121         if (sender_address[0] != 0)
5122           {
5123           new->next = addr_failed;
5124           addr_failed = new;
5125           }
5126         break;
5127
5128
5129         /* RECIP_FAIL_LOOP is set when there are too many Received: headers
5130         in the message. Process each address as a routing failure; if this
5131         is a bounce message, it will get frozen. */
5132
5133         case RECIP_FAIL_LOOP:
5134         new->message = US"Too many \"Received\" headers - suspected mail loop";
5135         post_process_one(new, FAIL, LOG_MAIN, DTYPE_ROUTER, 0);
5136         break;
5137
5138
5139         /* Value should be RECIP_ACCEPT; take this as the safe default. */
5140
5141         default:
5142         if (addr_new == NULL) addr_new = new; else addr_last->next = new;
5143         addr_last = new;
5144         break;
5145         }
5146       }
5147     }
5148   }
5149
5150 DEBUG(D_deliver)
5151   {
5152   address_item *p = addr_new;
5153   debug_printf("Delivery address list:\n");
5154   while (p != NULL)
5155     {
5156     debug_printf("  %s %s\n", p->address, (p->onetime_parent == NULL)? US"" :
5157       p->onetime_parent);
5158     p = p->next;
5159     }
5160   }
5161
5162 /* Set up the buffers used for copying over the file when delivering. */
5163
5164 deliver_in_buffer = store_malloc(DELIVER_IN_BUFFER_SIZE);
5165 deliver_out_buffer = store_malloc(DELIVER_OUT_BUFFER_SIZE);
5166
5167
5168
5169 /* Until there are no more new addresses, handle each one as follows:
5170
5171  . If this is a generated address (indicated by the presence of a parent
5172    pointer) then check to see whether it is a pipe, file, or autoreply, and
5173    if so, handle it directly here. The router that produced the address will
5174    have set the allow flags into the address, and also set the uid/gid required.
5175    Having the routers generate new addresses and then checking them here at
5176    the outer level is tidier than making each router do the checking, and
5177    means that routers don't need access to the failed address queue.
5178
5179  . Break up the address into local part and domain, and make lowercased
5180    versions of these strings. We also make unquoted versions of the local part.
5181
5182  . Handle the percent hack for those domains for which it is valid.
5183
5184  . For child addresses, determine if any of the parents have the same address.
5185    If so, generate a different string for previous delivery checking. Without
5186    this code, if the address spqr generates spqr via a forward or alias file,
5187    delivery of the generated spqr stops further attempts at the top level spqr,
5188    which is not what is wanted - it may have generated other addresses.
5189
5190  . Check on the retry database to see if routing was previously deferred, but
5191    only if in a queue run. Addresses that are to be routed are put on the
5192    addr_route chain. Addresses that are to be deferred are put on the
5193    addr_defer chain. We do all the checking first, so as not to keep the
5194    retry database open any longer than necessary.
5195
5196  . Now we run the addresses through the routers. A router may put the address
5197    on either the addr_local or the addr_remote chain for local or remote
5198    delivery, respectively, or put it on the addr_failed chain if it is
5199    undeliveable, or it may generate child addresses and put them on the
5200    addr_new chain, or it may defer an address. All the chain anchors are
5201    passed as arguments so that the routers can be called for verification
5202    purposes as well.
5203
5204  . If new addresses have been generated by the routers, da capo.
5205 */
5206
5207 header_rewritten = FALSE;          /* No headers rewritten yet */
5208 while (addr_new != NULL)           /* Loop until all addresses dealt with */
5209   {
5210   address_item *addr, *parent;
5211   dbm_file = dbfn_open(US"retry", O_RDONLY, &dbblock, FALSE);
5212
5213   /* Failure to open the retry database is treated the same as if it does
5214   not exist. In both cases, dbm_file is NULL. */
5215
5216   if (dbm_file == NULL)
5217     {
5218     DEBUG(D_deliver|D_retry|D_route|D_hints_lookup)
5219       debug_printf("no retry data available\n");
5220     }
5221
5222   /* Scan the current batch of new addresses, to handle pipes, files and
5223   autoreplies, and determine which others are ready for routing. */
5224
5225   while (addr_new != NULL)
5226     {
5227     int rc;
5228     uschar *p;
5229     tree_node *tnode;
5230     dbdata_retry *domain_retry_record;
5231     dbdata_retry *address_retry_record;
5232
5233     addr = addr_new;
5234     addr_new = addr->next;
5235
5236     DEBUG(D_deliver|D_retry|D_route)
5237       {
5238       debug_printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
5239       debug_printf("Considering: %s\n", addr->address);
5240       }
5241
5242     /* Handle generated address that is a pipe or a file or an autoreply. */
5243
5244     if (testflag(addr, af_pfr))
5245       {
5246       /* If an autoreply in a filter could not generate a syntactically valid
5247       address, give up forthwith. Set af_ignore_error so that we don't try to
5248       generate a bounce. */
5249
5250       if (testflag(addr, af_bad_reply))
5251         {
5252         addr->basic_errno = ERRNO_BADADDRESS2;
5253         addr->local_part = addr->address;
5254         addr->message =
5255           US"filter autoreply generated syntactically invalid recipient";
5256         setflag(addr, af_ignore_error);
5257         (void)post_process_one(addr, FAIL, LOG_MAIN, DTYPE_ROUTER, 0);
5258         continue;   /* with the next new address */
5259         }
5260
5261       /* If two different users specify delivery to the same pipe or file or
5262       autoreply, there should be two different deliveries, so build a unique
5263       string that incorporates the original address, and use this for
5264       duplicate testing and recording delivery, and also for retrying. */
5265
5266       addr->unique =
5267         string_sprintf("%s:%s", addr->address, addr->parent->unique +
5268           (testflag(addr->parent, af_homonym)? 3:0));
5269
5270       addr->address_retry_key = addr->domain_retry_key =
5271         string_sprintf("T:%s", addr->unique);
5272
5273       /* If a filter file specifies two deliveries to the same pipe or file,
5274       we want to de-duplicate, but this is probably not wanted for two mail
5275       commands to the same address, where probably both should be delivered.
5276       So, we have to invent a different unique string in that case. Just
5277       keep piling '>' characters on the front. */
5278
5279       if (addr->address[0] == '>')
5280         {
5281         while (tree_search(tree_duplicates, addr->unique) != NULL)
5282           addr->unique = string_sprintf(">%s", addr->unique);
5283         }
5284
5285       else if ((tnode = tree_search(tree_duplicates, addr->unique)) != NULL)
5286         {
5287         DEBUG(D_deliver|D_route)
5288           debug_printf("%s is a duplicate address: discarded\n", addr->address);
5289         addr->dupof = tnode->data.ptr;
5290         addr->next = addr_duplicate;
5291         addr_duplicate = addr;
5292         continue;
5293         }
5294
5295       DEBUG(D_deliver|D_route) debug_printf("unique = %s\n", addr->unique);
5296
5297       /* Check for previous delivery */
5298
5299       if (tree_search(tree_nonrecipients, addr->unique) != NULL)
5300         {
5301         DEBUG(D_deliver|D_route)
5302           debug_printf("%s was previously delivered: discarded\n", addr->address);
5303         child_done(addr, tod_stamp(tod_log));
5304         continue;
5305         }
5306
5307       /* Save for checking future duplicates */
5308
5309       tree_add_duplicate(addr->unique, addr);
5310
5311       /* Set local part and domain */
5312
5313       addr->local_part = addr->address;
5314       addr->domain = addr->parent->domain;
5315
5316       /* Ensure that the delivery is permitted. */
5317
5318       if (testflag(addr, af_file))
5319         {
5320         if (!testflag(addr, af_allow_file))
5321           {
5322           addr->basic_errno = ERRNO_FORBIDFILE;
5323           addr->message = US"delivery to file forbidden";
5324           (void)post_process_one(addr, FAIL, LOG_MAIN, DTYPE_ROUTER, 0);
5325           continue;   /* with the next new address */
5326           }
5327         }
5328       else if (addr->address[0] == '|')
5329         {
5330         if (!testflag(addr, af_allow_pipe))
5331           {
5332           addr->basic_errno = ERRNO_FORBIDPIPE;
5333           addr->message = US"delivery to pipe forbidden";
5334           (void)post_process_one(addr, FAIL, LOG_MAIN, DTYPE_ROUTER, 0);
5335           continue;   /* with the next new address */
5336           }
5337         }
5338       else if (!testflag(addr, af_allow_reply))
5339         {
5340         addr->basic_errno = ERRNO_FORBIDREPLY;
5341         addr->message = US"autoreply forbidden";
5342         (void)post_process_one(addr, FAIL, LOG_MAIN, DTYPE_ROUTER, 0);
5343         continue;     /* with the next new address */
5344         }
5345
5346       /* If the errno field is already set to BADTRANSPORT, it indicates
5347       failure to expand a transport string, or find the associated transport,
5348       or an unset transport when one is required. Leave this test till now so
5349       that the forbid errors are given in preference. */
5350
5351       if (addr->basic_errno == ERRNO_BADTRANSPORT)
5352         {
5353         (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_ROUTER, 0);
5354         continue;
5355         }
5356
5357       /* Treat /dev/null as a special case and abandon the delivery. This
5358       avoids having to specify a uid on the transport just for this case.
5359       Arrange for the transport name to be logged as "**bypassed**". */
5360
5361       if (Ustrcmp(addr->address, "/dev/null") == 0)
5362         {
5363         uschar *save = addr->transport->name;
5364         addr->transport->name = US"**bypassed**";
5365         (void)post_process_one(addr, OK, LOG_MAIN, DTYPE_TRANSPORT, '=');
5366         addr->transport->name = save;
5367         continue;   /* with the next new address */
5368         }
5369
5370       /* Pipe, file, or autoreply delivery is to go ahead as a normal local
5371       delivery. */
5372
5373       DEBUG(D_deliver|D_route)
5374         debug_printf("queued for %s transport\n", addr->transport->name);
5375       addr->next = addr_local;
5376       addr_local = addr;
5377       continue;       /* with the next new address */
5378       }
5379
5380     /* Handle normal addresses. First, split up into local part and domain,
5381     handling the %-hack if necessary. There is the possibility of a defer from
5382     a lookup in percent_hack_domains. */
5383
5384     if ((rc = deliver_split_address(addr)) == DEFER)
5385       {
5386       addr->message = US"cannot check percent_hack_domains";
5387       addr->basic_errno = ERRNO_LISTDEFER;
5388       (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_NONE, 0);
5389       continue;
5390       }
5391
5392     /* Check to see if the domain is held. If so, proceed only if the
5393     delivery was forced by hand. */
5394
5395     deliver_domain = addr->domain;  /* set $domain */
5396     if (!forced && hold_domains != NULL &&
5397          (rc = match_isinlist(addr->domain, &hold_domains, 0,
5398            &domainlist_anchor, addr->domain_cache, MCL_DOMAIN, TRUE,
5399            NULL)) != FAIL)
5400       {
5401       if (rc == DEFER)
5402         {
5403         addr->message = US"hold_domains lookup deferred";
5404         addr->basic_errno = ERRNO_LISTDEFER;
5405         }
5406       else
5407         {
5408         addr->message = US"domain is held";
5409         addr->basic_errno = ERRNO_HELD;
5410         }
5411       (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_NONE, 0);
5412       continue;
5413       }
5414
5415     /* Now we can check for duplicates and previously delivered addresses. In
5416     order to do this, we have to generate a "unique" value for each address,
5417     because there may be identical actual addresses in a line of descendents.
5418     The "unique" field is initialized to the same value as the "address" field,
5419     but gets changed here to cope with identically-named descendents. */
5420
5421     for (parent = addr->parent; parent != NULL; parent = parent->parent)
5422       if (strcmpic(addr->address, parent->address) == 0) break;
5423
5424     /* If there's an ancestor with the same name, set the homonym flag. This
5425     influences how deliveries are recorded. Then add a prefix on the front of
5426     the unique address. We use \n\ where n starts at 0 and increases each time.
5427     It is unlikely to pass 9, but if it does, it may look odd but will still
5428     work. This means that siblings or cousins with the same names are treated
5429     as duplicates, which is what we want. */
5430
5431     if (parent != NULL)
5432       {
5433       setflag(addr, af_homonym);
5434       if (parent->unique[0] != '\\')
5435         addr->unique = string_sprintf("\\0\\%s", addr->address);
5436       else
5437         addr->unique = string_sprintf("\\%c\\%s", parent->unique[1] + 1,
5438           addr->address);
5439       }
5440
5441     /* Ensure that the domain in the unique field is lower cased, because
5442     domains are always handled caselessly. */
5443
5444     p = Ustrrchr(addr->unique, '@');
5445     while (*p != 0) { *p = tolower(*p); p++; }
5446
5447     DEBUG(D_deliver|D_route) debug_printf("unique = %s\n", addr->unique);
5448
5449     if (tree_search(tree_nonrecipients, addr->unique) != NULL)
5450       {
5451       DEBUG(D_deliver|D_route)
5452         debug_printf("%s was previously delivered: discarded\n", addr->unique);
5453       child_done(addr, tod_stamp(tod_log));
5454       continue;
5455       }
5456
5457     /* Get the routing retry status, saving the two retry keys (with and
5458     without the local part) for subsequent use. If there is no retry record for
5459     the standard address routing retry key, we look for the same key with the
5460     sender attached, because this form is used by the smtp transport after a
5461     4xx response to RCPT when address_retry_include_sender is true. */
5462
5463     addr->domain_retry_key = string_sprintf("R:%s", addr->domain);
5464     addr->address_retry_key = string_sprintf("R:%s@%s", addr->local_part,
5465       addr->domain);
5466
5467     if (dbm_file == NULL)
5468       domain_retry_record = address_retry_record = NULL;
5469     else
5470       {
5471       domain_retry_record = dbfn_read(dbm_file, addr->domain_retry_key);
5472       if (domain_retry_record != NULL &&
5473           now - domain_retry_record->time_stamp > retry_data_expire)
5474         domain_retry_record = NULL;    /* Ignore if too old */
5475
5476       address_retry_record = dbfn_read(dbm_file, addr->address_retry_key);
5477       if (address_retry_record != NULL &&
5478           now - address_retry_record->time_stamp > retry_data_expire)
5479         address_retry_record = NULL;   /* Ignore if too old */
5480
5481       if (address_retry_record == NULL)
5482         {
5483         uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
5484           sender_address);
5485         address_retry_record = dbfn_read(dbm_file, altkey);
5486         if (address_retry_record != NULL &&
5487             now - address_retry_record->time_stamp > retry_data_expire)
5488           address_retry_record = NULL;   /* Ignore if too old */
5489         }
5490       }
5491
5492     DEBUG(D_deliver|D_retry)
5493       {
5494       if (domain_retry_record == NULL)
5495         debug_printf("no domain retry record\n");
5496       if (address_retry_record == NULL)
5497         debug_printf("no address retry record\n");
5498       }
5499
5500     /* If we are sending a message down an existing SMTP connection, we must
5501     assume that the message which created the connection managed to route
5502     an address to that connection. We do not want to run the risk of taking
5503     a long time over routing here, because if we do, the server at the other
5504     end of the connection may time it out. This is especially true for messages
5505     with lots of addresses. For this kind of delivery, queue_running is not
5506     set, so we would normally route all addresses. We take a pragmatic approach
5507     and defer routing any addresses that have any kind of domain retry record.
5508     That is, we don't even look at their retry times. It doesn't matter if this
5509     doesn't work occasionally. This is all just an optimization, after all.
5510
5511     The reason for not doing the same for address retries is that they normally
5512     arise from 4xx responses, not DNS timeouts. */
5513
5514     if (continue_hostname != NULL && domain_retry_record != NULL)
5515       {
5516       addr->message = US"reusing SMTP connection skips previous routing defer";
5517       addr->basic_errno = ERRNO_RRETRY;
5518       (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_ROUTER, 0);
5519       }
5520
5521     /* If we are in a queue run, defer routing unless there is no retry data or
5522     we've passed the next retry time, or this message is forced. In other
5523     words, ignore retry data when not in a queue run.
5524
5525     However, if the domain retry time has expired, always allow the routing
5526     attempt. If it fails again, the address will be failed. This ensures that
5527     each address is routed at least once, even after long-term routing
5528     failures.
5529
5530     If there is an address retry, check that too; just wait for the next
5531     retry time. This helps with the case when the temporary error on the
5532     address was really message-specific rather than address specific, since
5533     it allows other messages through.
5534
5535     We also wait for the next retry time if this is a message sent down an
5536     existing SMTP connection (even though that will be forced). Otherwise there
5537     will be far too many attempts for an address that gets a 4xx error. In
5538     fact, after such an error, we should not get here because, the host should
5539     not be remembered as one this message needs. However, there was a bug that
5540     used to cause this to  happen, so it is best to be on the safe side. */
5541
5542     else if (((queue_running && !deliver_force) || continue_hostname != NULL)
5543             &&
5544             ((domain_retry_record != NULL &&
5545               now < domain_retry_record->next_try &&
5546               !domain_retry_record->expired)
5547             ||
5548             (address_retry_record != NULL &&
5549               now < address_retry_record->next_try))
5550             )
5551       {
5552       addr->message = US"retry time not reached";
5553       addr->basic_errno = ERRNO_RRETRY;
5554       (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_ROUTER, 0);
5555       }
5556
5557     /* The domain is OK for routing. Remember if retry data exists so it
5558     can be cleaned up after a successful delivery. */
5559
5560     else
5561       {
5562       if (domain_retry_record != NULL || address_retry_record != NULL)
5563         setflag(addr, af_dr_retry_exists);
5564       addr->next = addr_route;
5565       addr_route = addr;
5566       DEBUG(D_deliver|D_route)
5567         debug_printf("%s: queued for routing\n", addr->address);
5568       }
5569     }
5570
5571   /* The database is closed while routing is actually happening. Requests to
5572   update it are put on a chain and all processed together at the end. */
5573
5574   if (dbm_file != NULL) dbfn_close(dbm_file);
5575
5576   /* If queue_domains is set, we don't even want to try routing addresses in
5577   those domains. During queue runs, queue_domains is forced to be unset.
5578   Optimize by skipping this pass through the addresses if nothing is set. */
5579
5580   if (!deliver_force && queue_domains != NULL)
5581     {
5582     address_item *okaddr = NULL;
5583     while (addr_route != NULL)
5584       {
5585       address_item *addr = addr_route;
5586       addr_route = addr->next;
5587
5588       deliver_domain = addr->domain;  /* set $domain */
5589       if ((rc = match_isinlist(addr->domain, &queue_domains, 0,
5590             &domainlist_anchor, addr->domain_cache, MCL_DOMAIN, TRUE, NULL))
5591               != OK)
5592         {
5593         if (rc == DEFER)
5594           {
5595           addr->basic_errno = ERRNO_LISTDEFER;
5596           addr->message = US"queue_domains lookup deferred";
5597           (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_ROUTER, 0);
5598           }
5599         else
5600           {
5601           addr->next = okaddr;
5602           okaddr = addr;
5603           }
5604         }
5605       else
5606         {
5607         addr->basic_errno = ERRNO_QUEUE_DOMAIN;
5608         addr->message = US"domain is in queue_domains";
5609         (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_ROUTER, 0);
5610         }
5611       }
5612
5613     addr_route = okaddr;
5614     }
5615
5616   /* Now route those addresses that are not deferred. */
5617
5618   while (addr_route != NULL)
5619     {
5620     int rc;
5621     address_item *addr = addr_route;
5622     uschar *old_domain = addr->domain;
5623     uschar *old_unique = addr->unique;
5624     addr_route = addr->next;
5625     addr->next = NULL;
5626
5627     /* Just in case some router parameter refers to it. */
5628
5629     return_path = (addr->p.errors_address != NULL)?
5630       addr->p.errors_address : sender_address;
5631
5632     /* If a router defers an address, add a retry item. Whether or not to
5633     use the local part in the key is a property of the router. */
5634
5635     if ((rc = route_address(addr, &addr_local, &addr_remote, &addr_new,
5636          &addr_succeed, v_none)) == DEFER)
5637       retry_add_item(addr, (addr->router->retry_use_local_part)?
5638         string_sprintf("R:%s@%s", addr->local_part, addr->domain) :
5639         string_sprintf("R:%s", addr->domain), 0);
5640
5641     /* Otherwise, if there is an existing retry record in the database, add
5642     retry items to delete both forms. We must also allow for the possibility
5643     of a routing retry that includes the sender address. Since the domain might
5644     have been rewritten (expanded to fully qualified) as a result of routing,
5645     ensure that the rewritten form is also deleted. */
5646
5647     else if (testflag(addr, af_dr_retry_exists))
5648       {
5649       uschar *altkey = string_sprintf("%s:<%s>", addr->address_retry_key,
5650         sender_address);
5651       retry_add_item(addr, altkey, rf_delete);
5652       retry_add_item(addr, addr->address_retry_key, rf_delete);
5653       retry_add_item(addr, addr->domain_retry_key, rf_delete);
5654       if (Ustrcmp(addr->domain, old_domain) != 0)
5655         retry_add_item(addr, string_sprintf("R:%s", old_domain), rf_delete);
5656       }
5657
5658     /* DISCARD is given for :blackhole: and "seen finish". The event has been
5659     logged, but we need to ensure the address (and maybe parents) is marked
5660     done. */
5661
5662     if (rc == DISCARD)
5663       {
5664       address_done(addr, tod_stamp(tod_log));
5665       continue;  /* route next address */
5666       }
5667
5668     /* The address is finished with (failed or deferred). */
5669
5670     if (rc != OK)
5671       {
5672       (void)post_process_one(addr, rc, LOG_MAIN, DTYPE_ROUTER, 0);
5673       continue;  /* route next address */
5674       }
5675
5676     /* The address has been routed. If the router changed the domain, it will
5677     also have changed the unique address. We have to test whether this address
5678     has already been delivered, because it's the unique address that finally
5679     gets recorded. */
5680
5681     if (addr->unique != old_unique &&
5682         tree_search(tree_nonrecipients, addr->unique) != 0)
5683       {
5684       DEBUG(D_deliver|D_route) debug_printf("%s was previously delivered: "
5685         "discarded\n", addr->address);
5686       if (addr_remote == addr) addr_remote = addr->next;
5687       else if (addr_local == addr) addr_local = addr->next;
5688       }
5689
5690     /* If the router has same_domain_copy_routing set, we are permitted to copy
5691     the routing for any other addresses with the same domain. This is an
5692     optimisation to save repeated DNS lookups for "standard" remote domain
5693     routing. The option is settable only on routers that generate host lists.
5694     We play it very safe, and do the optimization only if the address is routed
5695     to a remote transport, there are no header changes, and the domain was not
5696     modified by the router. */
5697
5698     if (addr_remote == addr &&
5699         addr->router->same_domain_copy_routing &&
5700         addr->p.extra_headers == NULL &&
5701         addr->p.remove_headers == NULL &&
5702         old_domain == addr->domain)
5703       {
5704       address_item **chain = &addr_route;
5705       while (*chain != NULL)
5706         {
5707         address_item *addr2 = *chain;
5708         if (Ustrcmp(addr2->domain, addr->domain) != 0)
5709           {
5710           chain = &(addr2->next);
5711           continue;
5712           }
5713
5714         /* Found a suitable address; take it off the routing list and add it to
5715         the remote delivery list. */
5716
5717         *chain = addr2->next;
5718         addr2->next = addr_remote;
5719         addr_remote = addr2;
5720
5721         /* Copy the routing data */
5722
5723         addr2->domain = addr->domain;
5724         addr2->router = addr->router;
5725         addr2->transport = addr->transport;
5726         addr2->host_list = addr->host_list;
5727         addr2->fallback_hosts = addr->fallback_hosts;
5728         addr2->p.errors_address = addr->p.errors_address;
5729         copyflag(addr2, addr, af_hide_child | af_local_host_removed);
5730
5731         DEBUG(D_deliver|D_route)
5732           {
5733           debug_printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"
5734                        "routing %s\n"
5735                        "Routing for %s copied from %s\n",
5736             addr2->address, addr2->address, addr->address);
5737           }
5738         }
5739       }
5740     }  /* Continue with routing the next address. */
5741   }    /* Loop to process any child addresses that the routers created, and
5742           any rerouted addresses that got put back on the new chain. */
5743
5744
5745 /* Debugging: show the results of the routing */
5746
5747 DEBUG(D_deliver|D_retry|D_route)
5748   {
5749   address_item *p = addr_local;
5750   debug_printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
5751   debug_printf("After routing:\n  Local deliveries:\n");
5752   while (p != NULL)
5753     {
5754     debug_printf("    %s\n", p->address);
5755     p = p->next;
5756     }
5757
5758   p = addr_remote;
5759   debug_printf("  Remote deliveries:\n");
5760   while (p != NULL)
5761     {
5762     debug_printf("    %s\n", p->address);
5763     p = p->next;
5764     }
5765
5766   p = addr_failed;
5767   debug_printf("  Failed addresses:\n");
5768   while (p != NULL)
5769     {
5770     debug_printf("    %s\n", p->address);
5771     p = p->next;
5772     }
5773
5774   p = addr_defer;
5775   debug_printf("  Deferred addresses:\n");
5776   while (p != NULL)
5777     {
5778     debug_printf("    %s\n", p->address);
5779     p = p->next;
5780     }
5781   }
5782
5783 /* Free any resources that were cached during routing. */
5784
5785 search_tidyup();
5786 route_tidyup();
5787
5788 /* These two variables are set only during routing, after check_local_user.
5789 Ensure they are not set in transports. */
5790
5791 local_user_gid = (gid_t)(-1);
5792 local_user_uid = (uid_t)(-1);
5793
5794 /* Check for any duplicate addresses. This check is delayed until after
5795 routing, because the flexibility of the routing configuration means that
5796 identical addresses with different parentage may end up being redirected to
5797 different addresses. Checking for duplicates too early (as we previously used
5798 to) makes this kind of thing not work. */
5799
5800 do_duplicate_check(&addr_local);
5801 do_duplicate_check(&addr_remote);
5802
5803 /* When acting as an MUA wrapper, we proceed only if all addresses route to a
5804 remote transport. The check that they all end up in one transaction happens in
5805 the do_remote_deliveries() function. */
5806
5807 if (mua_wrapper && (addr_local != NULL || addr_failed != NULL ||
5808                     addr_defer != NULL))
5809   {
5810   address_item *addr;
5811   uschar *which, *colon, *msg;
5812
5813   if (addr_local != NULL)
5814     {
5815     addr = addr_local;
5816     which = US"local";
5817     }
5818   else if (addr_defer != NULL)
5819     {
5820     addr = addr_defer;
5821     which = US"deferred";
5822     }
5823   else
5824     {
5825     addr = addr_failed;
5826     which = US"failed";
5827     }
5828
5829   while (addr->parent != NULL) addr = addr->parent;
5830
5831   if (addr->message != NULL)
5832     {
5833     colon = US": ";
5834     msg = addr->message;
5835     }
5836   else colon = msg = US"";
5837
5838   /* We don't need to log here for a forced failure as it will already
5839   have been logged. Defer will also have been logged, but as a defer, so we do
5840   need to do the failure logging. */
5841
5842   if (addr != addr_failed)
5843     log_write(0, LOG_MAIN, "** %s routing yielded a %s delivery",
5844       addr->address, which);
5845
5846   /* Always write an error to the caller */
5847
5848   fprintf(stderr, "routing %s yielded a %s delivery%s%s\n", addr->address,
5849     which, colon, msg);
5850
5851   final_yield = DELIVER_MUA_FAILED;
5852   addr_failed = addr_defer = NULL;   /* So that we remove the message */
5853   goto DELIVERY_TIDYUP;
5854   }
5855
5856
5857 /* If this is a run to continue deliveries to an external channel that is
5858 already set up, defer any local deliveries. */
5859
5860 if (continue_transport != NULL)
5861   {
5862   if (addr_defer == NULL) addr_defer = addr_local; else
5863     {
5864     address_item *addr = addr_defer;
5865     while (addr->next != NULL) addr = addr->next;
5866     addr->next = addr_local;
5867     }
5868   addr_local = NULL;
5869   }
5870
5871
5872 /* Because address rewriting can happen in the routers, we should not really do
5873 ANY deliveries until all addresses have been routed, so that all recipients of
5874 the message get the same headers. However, this is in practice not always
5875 possible, since sometimes remote addresses give DNS timeouts for days on end.
5876 The pragmatic approach is to deliver what we can now, saving any rewritten
5877 headers so that at least the next lot of recipients benefit from the rewriting
5878 that has already been done.
5879
5880 If any headers have been rewritten during routing, update the spool file to
5881 remember them for all subsequent deliveries. This can be delayed till later if
5882 there is only address to be delivered - if it succeeds the spool write need not
5883 happen. */
5884
5885 if (header_rewritten &&
5886     ((addr_local != NULL &&
5887        (addr_local->next != NULL || addr_remote != NULL)) ||
5888      (addr_remote != NULL && addr_remote->next != NULL)))
5889   {
5890   /* Panic-dies on error */
5891   (void)spool_write_header(message_id, SW_DELIVERING, NULL);
5892   header_rewritten = FALSE;
5893   }
5894
5895
5896 /* If there are any deliveries to be done, open the journal file. This is used
5897 to record successful deliveries as soon as possible after each delivery is
5898 known to be complete. A file opened with O_APPEND is used so that several
5899 processes can run simultaneously.
5900
5901 The journal is just insurance against crashes. When the spool file is
5902 ultimately updated at the end of processing, the journal is deleted. If a
5903 journal is found to exist at the start of delivery, the addresses listed
5904 therein are added to the non-recipients. */
5905
5906 if (addr_local != NULL || addr_remote != NULL)
5907   {
5908   sprintf(CS spoolname, "%s/input/%s/%s-J", spool_directory, message_subdir, id);
5909   journal_fd = Uopen(spoolname, O_WRONLY|O_APPEND|O_CREAT, SPOOL_MODE);
5910
5911   if (journal_fd < 0)
5912     {
5913     log_write(0, LOG_MAIN|LOG_PANIC, "Couldn't open journal file %s: %s",
5914       spoolname, strerror(errno));
5915     return DELIVER_NOT_ATTEMPTED;
5916     }
5917
5918   /* Set the close-on-exec flag, make the file owned by Exim, and ensure
5919   that the mode is correct - the group setting doesn't always seem to get
5920   set automatically. */
5921
5922   (void)fcntl(journal_fd, F_SETFD, fcntl(journal_fd, F_GETFD) | FD_CLOEXEC);
5923   (void)fchown(journal_fd, exim_uid, exim_gid);
5924   (void)fchmod(journal_fd, SPOOL_MODE);
5925   }
5926
5927
5928 /* Now we can get down to the business of actually doing deliveries. Local
5929 deliveries are done first, then remote ones. If ever the problems of how to
5930 handle fallback transports are figured out, this section can be put into a loop
5931 for handling fallbacks, though the uid switching will have to be revised. */
5932
5933 /* Precompile a regex that is used to recognize a parameter in response
5934 to an LHLO command, if is isn't already compiled. This may be used on both
5935 local and remote LMTP deliveries. */
5936
5937 if (regex_IGNOREQUOTA == NULL) regex_IGNOREQUOTA =
5938   regex_must_compile(US"\\n250[\\s\\-]IGNOREQUOTA(\\s|\\n|$)", FALSE, TRUE);
5939
5940 /* Handle local deliveries */
5941
5942 if (addr_local != NULL)
5943   {
5944   DEBUG(D_deliver|D_transport)
5945     debug_printf(">>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>\n");
5946   do_local_deliveries();
5947   disable_logging = FALSE;
5948   }
5949
5950 /* If queue_run_local is set, we do not want to attempt any remote deliveries,
5951 so just queue them all. */
5952
5953 if (queue_run_local)
5954   {
5955   while (addr_remote != NULL)
5956     {
5957     address_item *addr = addr_remote;
5958     addr_remote = addr->next;
5959     addr->next = NULL;
5960     addr->basic_errno = ERRNO_LOCAL_ONLY;
5961     addr->message = US"remote deliveries suppressed";
5962     (void)post_process_one(addr, DEFER, LOG_MAIN, DTYPE_TRANSPORT, 0);
5963     }
5964   }
5965
5966 /* Handle remote deliveries */
5967
5968 if (addr_remote != NULL)
5969   {
5970   DEBUG(D_deliver|D_transport)
5971     debug_printf(">>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>\n");
5972
5973   /* Precompile some regex that are used to recognize parameters in response
5974   to an EHLO command, if they aren't already compiled. */
5975
5976   if (regex_PIPELINING == NULL) regex_PIPELINING =
5977     regex_must_compile(US"\\n250[\\s\\-]PIPELINING(\\s|\\n|$)", FALSE, TRUE);
5978
5979   if (regex_SIZE == NULL) regex_SIZE =
5980     regex_must_compile(US"\\n250[\\s\\-]SIZE(\\s|\\n|$)", FALSE, TRUE);
5981
5982   if (regex_AUTH == NULL) regex_AUTH =
5983     regex_must_compile(US"\\n250[\\s\\-]AUTH\\s+([\\-\\w\\s]+)(?:\\n|$)",
5984       FALSE, TRUE);
5985
5986   #ifdef SUPPORT_TLS
5987   if (regex_STARTTLS == NULL) regex_STARTTLS =
5988     regex_must_compile(US"\\n250[\\s\\-]STARTTLS(\\s|\\n|$)", FALSE, TRUE);
5989   #endif
5990
5991   /* Now sort the addresses if required, and do the deliveries. The yield of
5992   do_remote_deliveries is FALSE when mua_wrapper is set and all addresses
5993   cannot be delivered in one transaction. */
5994
5995   if (remote_sort_domains != NULL) sort_remote_deliveries();
5996   if (!do_remote_deliveries(FALSE))
5997     {
5998     log_write(0, LOG_MAIN, "** mua_wrapper is set but recipients cannot all "
5999       "be delivered in one transaction");
6000     fprintf(stderr, "delivery to smarthost failed (configuration problem)\n");
6001
6002     final_yield = DELIVER_MUA_FAILED;
6003     addr_failed = addr_defer = NULL;   /* So that we remove the message */
6004     goto DELIVERY_TIDYUP;
6005     }
6006
6007   /* See if any of the addresses that failed got put on the queue for delivery
6008   to their fallback hosts. We do it this way because often the same fallback
6009   host is used for many domains, so all can be sent in a single transaction
6010   (if appropriately configured). */
6011
6012   if (addr_fallback != NULL && !mua_wrapper)
6013     {
6014     DEBUG(D_deliver) debug_printf("Delivering to fallback hosts\n");
6015     addr_remote = addr_fallback;
6016     addr_fallback = NULL;
6017     if (remote_sort_domains != NULL) sort_remote_deliveries();
6018     do_remote_deliveries(TRUE);
6019     }
6020   disable_logging = FALSE;
6021   }
6022
6023
6024 /* All deliveries are now complete. Ignore SIGTERM during this tidying up
6025 phase, to minimize cases of half-done things. */
6026
6027 DEBUG(D_deliver)
6028   debug_printf(">>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>>\n");
6029
6030 /* Root privilege is no longer needed */
6031
6032 exim_setugid(exim_uid, exim_gid, FALSE, US"post-delivery tidying");
6033
6034 set_process_info("tidying up after delivering %s", message_id);
6035 signal(SIGTERM, SIG_IGN);
6036
6037 /* When we are acting as an MUA wrapper, the smtp transport will either have
6038 succeeded for all addresses, or failed them all in normal cases. However, there
6039 are some setup situations (e.g. when a named port does not exist) that cause an
6040 immediate exit with deferral of all addresses. Convert those into failures. We
6041 do not ever want to retry, nor do we want to send a bounce message. */
6042
6043 if (mua_wrapper)
6044   {
6045   if (addr_defer != NULL)
6046     {
6047     address_item *addr, *nextaddr;
6048     for (addr = addr_defer; addr != NULL; addr = nextaddr)
6049       {
6050       log_write(0, LOG_MAIN, "** %s mua_wrapper forced failure for deferred "
6051         "delivery", addr->address);
6052       nextaddr = addr->next;
6053       addr->next = addr_failed;
6054       addr_failed = addr;
6055       }
6056     addr_defer = NULL;
6057     }
6058
6059   /* Now all should either have succeeded or failed. */
6060
6061   if (addr_failed == NULL) final_yield = DELIVER_MUA_SUCCEEDED; else
6062     {
6063     uschar *s = (addr_failed->user_message != NULL)?
6064       addr_failed->user_message : addr_failed->message;
6065
6066     fprintf(stderr, "Delivery failed: ");
6067     if (addr_failed->basic_errno > 0)
6068       {
6069       fprintf(stderr, "%s", strerror(addr_failed->basic_errno));
6070       if (s != NULL) fprintf(stderr, ": ");
6071       }
6072     if (s == NULL)
6073       {
6074       if (addr_failed->basic_errno <= 0) fprintf(stderr, "unknown error");
6075       }
6076     else fprintf(stderr, "%s", CS s);
6077     fprintf(stderr, "\n");
6078
6079     final_yield = DELIVER_MUA_FAILED;
6080     addr_failed = NULL;
6081     }
6082   }
6083
6084 /* In a normal configuration, we now update the retry database. This is done in
6085 one fell swoop at the end in order not to keep opening and closing (and
6086 locking) the database. The code for handling retries is hived off into a
6087 separate module for convenience. We pass it the addresses of the various
6088 chains, because deferred addresses can get moved onto the failed chain if the
6089 retry cutoff time has expired for all alternative destinations. Bypass the
6090 updating of the database if the -N flag is set, which is a debugging thing that
6091 prevents actual delivery. */
6092
6093 else if (!dont_deliver) retry_update(&addr_defer, &addr_failed, &addr_succeed);
6094
6095 /* If any addresses failed, we must send a message to somebody, unless
6096 af_ignore_error is set, in which case no action is taken. It is possible for
6097 several messages to get sent if there are addresses with different
6098 requirements. */
6099
6100 while (addr_failed != NULL)
6101   {
6102   pid_t pid;
6103   int fd;
6104   uschar *logtod = tod_stamp(tod_log);
6105   address_item *addr;
6106   address_item *handled_addr = NULL;
6107   address_item **paddr;
6108   address_item *msgchain = NULL;
6109   address_item **pmsgchain = &msgchain;
6110
6111   /* There are weird cases when logging is disabled in the transport. However,
6112   there may not be a transport (address failed by a router). */
6113
6114   disable_logging = FALSE;
6115   if (addr_failed->transport != NULL)
6116     disable_logging = addr_failed->transport->disable_logging;
6117
6118   DEBUG(D_deliver)
6119     debug_printf("processing failed address %s\n", addr_failed->address);
6120
6121   /* There are only two ways an address in a bounce message can get here:
6122
6123   (1) When delivery was initially deferred, but has now timed out (in the call
6124       to retry_update() above). We can detect this by testing for
6125       af_retry_timedout. If the address does not have its own errors address,
6126       we arrange to ignore the error.
6127
6128   (2) If delivery failures for bounce messages are being ignored. We can detect
6129       this by testing for af_ignore_error. This will also be set if a bounce
6130       message has been autothawed and the ignore_bounce_errors_after time has
6131       passed. It might also be set if a router was explicitly configured to
6132       ignore errors (errors_to = "").
6133
6134   If neither of these cases obtains, something has gone wrong. Log the
6135   incident, but then ignore the error. */
6136
6137   if (sender_address[0] == 0 && addr_failed->p.errors_address == NULL)
6138     {
6139     if (!testflag(addr_failed, af_retry_timedout) &&
6140         !testflag(addr_failed, af_ignore_error))
6141       {
6142       log_write(0, LOG_MAIN|LOG_PANIC, "internal error: bounce message "
6143         "failure is neither frozen nor ignored (it's been ignored)");
6144       }
6145     setflag(addr_failed, af_ignore_error);
6146     }
6147
6148   /* If the first address on the list has af_ignore_error set, just remove
6149   it from the list, throw away any saved message file, log it, and
6150   mark the recipient done. */
6151
6152   if (testflag(addr_failed, af_ignore_error))
6153     {
6154     addr = addr_failed;
6155     addr_failed = addr->next;
6156     if (addr->return_filename != NULL) Uunlink(addr->return_filename);
6157
6158     log_write(0, LOG_MAIN, "%s%s%s%s: error ignored",
6159       addr->address,
6160       (addr->parent == NULL)? US"" : US" <",
6161       (addr->parent == NULL)? US"" : addr->parent->address,
6162       (addr->parent == NULL)? US"" : US">");
6163
6164     address_done(addr, logtod);
6165     child_done(addr, logtod);
6166     /* Panic-dies on error */
6167     (void)spool_write_header(message_id, SW_DELIVERING, NULL);
6168     }
6169
6170   /* Otherwise, handle the sending of a message. Find the error address for
6171   the first address, then send a message that includes all failed addresses
6172   that have the same error address. Note the bounce_recipient is a global so
6173   that it can be accesssed by $bounce_recipient while creating a customized
6174   error message. */
6175
6176   else
6177     {
6178     bounce_recipient = (addr_failed->p.errors_address == NULL)?
6179       sender_address : addr_failed->p.errors_address;
6180
6181     /* Make a subprocess to send a message */
6182
6183     pid = child_open_exim(&fd);
6184
6185     /* Creation of child failed */
6186
6187     if (pid < 0)
6188       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Process %d (parent %d) failed to "
6189         "create child process to send failure message: %s", getpid(),
6190         getppid(), strerror(errno));
6191
6192     /* Creation of child succeeded */
6193
6194     else
6195       {
6196       int ch, rc;
6197       int filecount = 0;
6198       int rcount = 0;
6199       uschar *bcc, *emf_text;
6200       FILE *f = fdopen(fd, "wb");
6201       FILE *emf = NULL;
6202       BOOL to_sender = strcmpic(sender_address, bounce_recipient) == 0;
6203       int max = (bounce_return_size_limit/DELIVER_IN_BUFFER_SIZE + 1) *
6204         DELIVER_IN_BUFFER_SIZE;
6205
6206       DEBUG(D_deliver)
6207         debug_printf("sending error message to: %s\n", bounce_recipient);
6208
6209       /* Scan the addresses for all that have the same errors address, removing
6210       them from the addr_failed chain, and putting them on msgchain. */
6211
6212       paddr = &addr_failed;
6213       for (addr = addr_failed; addr != NULL; addr = *paddr)
6214         {
6215         if (Ustrcmp(bounce_recipient, (addr->p.errors_address == NULL)?
6216               sender_address : addr->p.errors_address) != 0)
6217           {
6218           paddr = &(addr->next);      /* Not the same; skip */
6219           }
6220         else                          /* The same - dechain */
6221           {
6222           *paddr = addr->next;
6223           *pmsgchain = addr;
6224           addr->next = NULL;
6225           pmsgchain = &(addr->next);
6226           }
6227         }
6228
6229       /* Include X-Failed-Recipients: for automatic interpretation, but do
6230       not let any one header line get too long. We do this by starting a
6231       new header every 50 recipients. Omit any addresses for which the
6232       "hide_child" flag is set. */
6233
6234       for (addr = msgchain; addr != NULL; addr = addr->next)
6235         {
6236         if (testflag(addr, af_hide_child)) continue;
6237         if (rcount >= 50)
6238           {
6239           fprintf(f, "\n");
6240           rcount = 0;
6241           }
6242         fprintf(f, "%s%s",
6243           (rcount++ == 0)? "X-Failed-Recipients: " : ",\n  ",
6244           (testflag(addr, af_pfr) && addr->parent != NULL)?
6245             string_printing(addr->parent->address) :
6246             string_printing(addr->address));
6247         }
6248       if (rcount > 0) fprintf(f, "\n");
6249
6250       /* Output the standard headers */
6251
6252       if (errors_reply_to != NULL)
6253         fprintf(f, "Reply-To: %s\n", errors_reply_to);
6254       fprintf(f, "Auto-Submitted: auto-replied\n");
6255       moan_write_from(f);
6256       fprintf(f, "To: %s\n", bounce_recipient);
6257
6258       /* Open a template file if one is provided. Log failure to open, but
6259       carry on - default texts will be used. */
6260
6261       if (bounce_message_file != NULL)
6262         {
6263         emf = Ufopen(bounce_message_file, "rb");
6264         if (emf == NULL)
6265           log_write(0, LOG_MAIN|LOG_PANIC, "Failed to open %s for error "
6266             "message texts: %s", bounce_message_file, strerror(errno));
6267         }
6268
6269       /* Quietly copy to configured additional addresses if required. */
6270
6271       bcc = moan_check_errorcopy(bounce_recipient);
6272       if (bcc != NULL) fprintf(f, "Bcc: %s\n", bcc);
6273
6274       /* The texts for the message can be read from a template file; if there
6275       isn't one, or if it is too short, built-in texts are used. The first
6276       emf text is a Subject: and any other headers. */
6277
6278       emf_text = next_emf(emf, US"header");
6279       if (emf_text != NULL) fprintf(f, "%s\n", emf_text); else
6280         {
6281         fprintf(f, "Subject: Mail delivery failed%s\n\n",
6282           to_sender? ": returning message to sender" : "");
6283         }
6284
6285       emf_text = next_emf(emf, US"intro");
6286       if (emf_text != NULL) fprintf(f, "%s", CS emf_text); else
6287         {
6288         fprintf(f,
6289 /* This message has been reworded several times. It seems to be confusing to
6290 somebody, however it is worded. I have retreated to the original, simple
6291 wording. */
6292 "This message was created automatically by mail delivery software.\n");
6293         if (bounce_message_text != NULL) fprintf(f, "%s", CS bounce_message_text);
6294         if (to_sender)
6295           {
6296           fprintf(f,
6297 "\nA message that you sent could not be delivered to one or more of its\n"
6298 "recipients. This is a permanent error. The following address(es) failed:\n");
6299           }
6300         else
6301           {
6302           fprintf(f,
6303 "\nA message sent by\n\n  <%s>\n\n"
6304 "could not be delivered to one or more of its recipients. The following\n"
6305 "address(es) failed:\n", sender_address);
6306           }
6307         }
6308       fprintf(f, "\n");
6309
6310       /* Process the addresses, leaving them on the msgchain if they have a
6311       file name for a return message. (There has already been a check in
6312       post_process_one() for the existence of data in the message file.) A TRUE
6313       return from print_address_information() means that the address is not
6314       hidden. */
6315
6316       paddr = &msgchain;
6317       for (addr = msgchain; addr != NULL; addr = *paddr)
6318         {
6319         if (print_address_information(addr, f, US"  ", US"\n    ", US""))
6320           print_address_error(addr, f, US"");
6321
6322         /* End the final line for the address */
6323
6324         fputc('\n', f);
6325
6326         /* Leave on msgchain if there's a return file. */
6327
6328         if (addr->return_file >= 0)
6329           {
6330           paddr = &(addr->next);
6331           filecount++;
6332           }
6333
6334         /* Else save so that we can tick off the recipient when the
6335         message is sent. */
6336
6337         else
6338           {
6339           *paddr = addr->next;
6340           addr->next = handled_addr;
6341           handled_addr = addr;
6342           }
6343         }
6344
6345       fprintf(f, "\n");
6346
6347       /* Get the next text, whether we need it or not, so as to be
6348       positioned for the one after. */
6349
6350       emf_text = next_emf(emf, US"generated text");
6351
6352       /* If there were any file messages passed by the local transports,
6353       include them in the message. Then put the address on the handled chain.
6354       In the case of a batch of addresses that were all sent to the same
6355       transport, the return_file field in all of them will contain the same
6356       fd, and the return_filename field in the *last* one will be set (to the
6357       name of the file). */
6358
6359       if (msgchain != NULL)
6360         {
6361         address_item *nextaddr;
6362
6363         if (emf_text != NULL) fprintf(f, "%s", CS emf_text); else
6364           fprintf(f,
6365             "The following text was generated during the delivery "
6366             "attempt%s:\n", (filecount > 1)? "s" : "");
6367
6368         for (addr = msgchain; addr != NULL; addr = nextaddr)
6369           {
6370           FILE *fm;
6371           address_item *topaddr = addr;
6372
6373           /* List all the addresses that relate to this file */
6374
6375           fprintf(f, "\n");
6376           while(addr != NULL)                   /* Insurance */
6377             {
6378             print_address_information(addr, f, US"------ ",  US"\n       ",
6379               US" ------\n");
6380             if (addr->return_filename != NULL) break;
6381             addr = addr->next;
6382             }
6383           fprintf(f, "\n");
6384
6385           /* Now copy the file */
6386
6387           fm = Ufopen(addr->return_filename, "rb");
6388
6389           if (fm == NULL)
6390             fprintf(f, "    +++ Exim error... failed to open text file: %s\n",
6391               strerror(errno));
6392           else
6393             {
6394             while ((ch = fgetc(fm)) != EOF) fputc(ch, f);
6395             (void)fclose(fm);
6396             }
6397           Uunlink(addr->return_filename);
6398
6399           /* Can now add to handled chain, first fishing off the next
6400           address on the msgchain. */
6401
6402           nextaddr = addr->next;
6403           addr->next = handled_addr;
6404           handled_addr = topaddr;
6405           }
6406         fprintf(f, "\n");
6407         }
6408
6409       /* Now copy the message, trying to give an intelligible comment if
6410       it is too long for it all to be copied. The limit isn't strictly
6411       applied because of the buffering. There is, however, an option
6412       to suppress copying altogether. */
6413
6414       emf_text = next_emf(emf, US"copy");
6415
6416       if (bounce_return_message)
6417         {
6418         int topt = topt_add_return_path;
6419         if (!bounce_return_body) topt |= topt_no_body;
6420
6421         if (emf_text != NULL) fprintf(f, "%s", CS emf_text); else
6422           {
6423           if (bounce_return_body) fprintf(f,
6424 "------ This is a copy of the message, including all the headers. ------\n");
6425           else fprintf(f,
6426 "------ This is a copy of the message's headers. ------\n");
6427           }
6428
6429         /* While reading the "truncated" message, set return_size_limit to
6430         the actual max testing value, rounded. We need to read the message
6431         whether we are going to use it or not. */
6432
6433           {
6434           int temp = bounce_return_size_limit;
6435           bounce_return_size_limit = (max/1000)*1000;
6436           emf_text = next_emf(emf, US"truncated");
6437           bounce_return_size_limit = temp;
6438           }
6439
6440         if (bounce_return_body && bounce_return_size_limit > 0)
6441           {
6442           struct stat statbuf;
6443           if (fstat(deliver_datafile, &statbuf) == 0 && statbuf.st_size > max)
6444             {
6445             if (emf_text != NULL) fprintf(f, "%s", CS emf_text); else
6446               {
6447               fprintf(f,
6448 "------ The body of the message is " OFF_T_FMT " characters long; only the first\n"
6449 "------ %d or so are included here.\n", statbuf.st_size, max);
6450               }
6451             }
6452           }
6453
6454         fprintf(f, "\n");
6455         fflush(f);
6456         transport_filter_argv = NULL;   /* Just in case */
6457         return_path = sender_address;   /* In case not previously set */
6458         transport_write_message(NULL, fileno(f), topt,
6459           bounce_return_size_limit, NULL, NULL, NULL, NULL, NULL, 0);
6460         }
6461
6462       /* Write final text and close the template file if one is open */
6463
6464       if (emf != NULL)
6465         {
6466         emf_text = next_emf(emf, US"final");
6467         if (emf_text != NULL) fprintf(f, "%s", CS emf_text);
6468         (void)fclose(emf);
6469         }
6470
6471       /* Close the file, which should send an EOF to the child process
6472       that is receiving the message. Wait for it to finish. */
6473
6474       (void)fclose(f);
6475       rc = child_close(pid, 0);     /* Waits for child to close, no timeout */
6476
6477       /* In the test harness, let the child do it's thing first. */
6478
6479       if (running_in_test_harness) millisleep(500);
6480
6481       /* If the process failed, there was some disaster in setting up the
6482       error message. Unless the message is very old, ensure that addr_defer
6483       is non-null, which will have the effect of leaving the message on the
6484       spool. The failed addresses will get tried again next time. However, we
6485       don't really want this to happen too often, so freeze the message unless
6486       there are some genuine deferred addresses to try. To do this we have
6487       to call spool_write_header() here, because with no genuine deferred
6488       addresses the normal code below doesn't get run. */
6489
6490       if (rc != 0)
6491         {
6492         uschar *s = US"";
6493         if (now - received_time < retry_maximum_timeout && addr_defer == NULL)
6494           {
6495           addr_defer = (address_item *)(+1);
6496           deliver_freeze = TRUE;
6497           deliver_frozen_at = time(NULL);
6498           /* Panic-dies on error */
6499           (void)spool_write_header(message_id, SW_DELIVERING, NULL);
6500           s = US" (frozen)";
6501           }
6502         deliver_msglog("Process failed (%d) when writing error message "
6503           "to %s%s", rc, bounce_recipient, s);
6504         log_write(0, LOG_MAIN, "Process failed (%d) when writing error message "
6505           "to %s%s", rc, bounce_recipient, s);
6506         }
6507
6508       /* The message succeeded. Ensure that the recipients that failed are
6509       now marked finished with on the spool and their parents updated. */
6510
6511       else
6512         {
6513         for (addr = handled_addr; addr != NULL; addr = addr->next)
6514           {
6515           address_done(addr, logtod);
6516           child_done(addr, logtod);
6517           }
6518         /* Panic-dies on error */
6519         (void)spool_write_header(message_id, SW_DELIVERING, NULL);
6520         }
6521       }
6522     }
6523   }
6524
6525 disable_logging = FALSE;  /* In case left set */
6526
6527 /* Come here from the mua_wrapper case if routing goes wrong */
6528
6529 DELIVERY_TIDYUP:
6530
6531 /* If there are now no deferred addresses, we are done. Preserve the
6532 message log if so configured, and we are using them. Otherwise, sling it.
6533 Then delete the message itself. */
6534
6535 if (addr_defer == NULL)
6536   {
6537   if (message_logs)
6538     {
6539     sprintf(CS spoolname, "%s/msglog/%s/%s", spool_directory, message_subdir,
6540       id);
6541     if (preserve_message_logs)
6542       {
6543       int rc;
6544       sprintf(CS big_buffer, "%s/msglog.OLD/%s", spool_directory, id);
6545       if ((rc = Urename(spoolname, big_buffer)) < 0)
6546         {
6547         (void)directory_make(spool_directory, US"msglog.OLD",
6548           MSGLOG_DIRECTORY_MODE, TRUE);
6549         rc = Urename(spoolname, big_buffer);
6550         }
6551       if (rc < 0)
6552         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to move %s to the "
6553           "msglog.OLD directory", spoolname);
6554       }
6555     else
6556       {
6557       if (Uunlink(spoolname) < 0)
6558         log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s", spoolname);
6559       }
6560     }
6561
6562   /* Remove the two message files. */
6563
6564   sprintf(CS spoolname, "%s/input/%s/%s-D", spool_directory, message_subdir, id);
6565   if (Uunlink(spoolname) < 0)
6566     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s", spoolname);
6567   sprintf(CS spoolname, "%s/input/%s/%s-H", spool_directory, message_subdir, id);
6568   if (Uunlink(spoolname) < 0)
6569     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s", spoolname);
6570
6571   /* Log the end of this message, with queue time if requested. */
6572
6573   if ((log_extra_selector & LX_queue_time_overall) != 0)
6574     log_write(0, LOG_MAIN, "Completed QT=%s",
6575       readconf_printtime(time(NULL) - received_time));
6576   else
6577     log_write(0, LOG_MAIN, "Completed");
6578
6579   /* Unset deliver_freeze so that we won't try to move the spool files further down */
6580   deliver_freeze = FALSE;
6581   }
6582
6583 /* If there are deferred addresses, we are keeping this message because it is
6584 not yet completed. Lose any temporary files that were catching output from
6585 pipes for any of the deferred addresses, handle one-time aliases, and see if
6586 the message has been on the queue for so long that it is time to send a warning
6587 message to the sender, unless it is a mailer-daemon. If all deferred addresses
6588 have the same domain, we can set deliver_domain for the expansion of
6589 delay_warning_ condition - if any of them are pipes, files, or autoreplies, use
6590 the parent's domain.
6591
6592 If all the deferred addresses have an error number that indicates "retry time
6593 not reached", skip sending the warning message, because it won't contain the
6594 reason for the delay. It will get sent at the next real delivery attempt.
6595 However, if at least one address has tried, we'd better include all of them in
6596 the message.
6597
6598 If we can't make a process to send the message, don't worry.
6599
6600 For mailing list expansions we want to send the warning message to the
6601 mailing list manager. We can't do a perfect job here, as some addresses may
6602 have different errors addresses, but if we take the errors address from
6603 each deferred address it will probably be right in most cases.
6604
6605 If addr_defer == +1, it means there was a problem sending an error message
6606 for failed addresses, and there were no "real" deferred addresses. The value
6607 was set just to keep the message on the spool, so there is nothing to do here.
6608 */
6609
6610 else if (addr_defer != (address_item *)(+1))
6611   {
6612   address_item *addr;
6613   uschar *recipients = US"";
6614   BOOL delivery_attempted = FALSE;
6615
6616   deliver_domain = testflag(addr_defer, af_pfr)?
6617     addr_defer->parent->domain : addr_defer->domain;
6618
6619   for (addr = addr_defer; addr != NULL; addr = addr->next)
6620     {
6621     address_item *otaddr;
6622
6623     if (addr->basic_errno > ERRNO_RETRY_BASE) delivery_attempted = TRUE;
6624
6625     if (deliver_domain != NULL)
6626       {
6627       uschar *d = (testflag(addr, af_pfr))? addr->parent->domain : addr->domain;
6628
6629       /* The domain may be unset for an address that has never been routed
6630       because the system filter froze the message. */
6631
6632       if (d == NULL || Ustrcmp(d, deliver_domain) != 0) deliver_domain = NULL;
6633       }
6634
6635     if (addr->return_filename != NULL) Uunlink(addr->return_filename);
6636
6637     /* Handle the case of one-time aliases. If any address in the ancestry
6638     of this one is flagged, ensure it is in the recipients list, suitably
6639     flagged, and that its parent is marked delivered. */
6640
6641     for (otaddr = addr; otaddr != NULL; otaddr = otaddr->parent)
6642       if (otaddr->onetime_parent != NULL) break;
6643
6644     if (otaddr != NULL)
6645       {
6646       int i;
6647       int t = recipients_count;
6648
6649       for (i = 0; i < recipients_count; i++)
6650         {
6651         uschar *r = recipients_list[i].address;
6652         if (Ustrcmp(otaddr->onetime_parent, r) == 0) t = i;
6653         if (Ustrcmp(otaddr->address, r) == 0) break;
6654         }
6655
6656       /* Didn't find the address already in the list, and did find the
6657       ultimate parent's address in the list. After adding the recipient,
6658       update the errors address in the recipients list. */
6659
6660       if (i >= recipients_count && t < recipients_count)
6661         {
6662         DEBUG(D_deliver) debug_printf("one_time: adding %s in place of %s\n",
6663           otaddr->address, otaddr->parent->address);
6664         receive_add_recipient(otaddr->address, t);
6665         recipients_list[recipients_count-1].errors_to = otaddr->p.errors_address;
6666         tree_add_nonrecipient(otaddr->parent->address);
6667         update_spool = TRUE;
6668         }
6669       }
6670
6671     /* Except for error messages, ensure that either the errors address for
6672     this deferred address or, if there is none, the sender address, is on the
6673     list of recipients for a warning message. */
6674
6675     if (sender_address[0] != 0)
6676       {
6677       if (addr->p.errors_address == NULL)
6678         {
6679         if (Ustrstr(recipients, sender_address) == NULL)
6680           recipients = string_sprintf("%s%s%s", recipients,
6681             (recipients[0] == 0)? "" : ",", sender_address);
6682         }
6683       else
6684         {
6685         if (Ustrstr(recipients, addr->p.errors_address) == NULL)
6686           recipients = string_sprintf("%s%s%s", recipients,
6687             (recipients[0] == 0)? "" : ",", addr->p.errors_address);
6688         }
6689       }
6690     }
6691
6692   /* Send a warning message if the conditions are right. If the condition check
6693   fails because of a lookup defer, there is nothing we can do. The warning
6694   is not sent. Another attempt will be made at the next delivery attempt (if
6695   it also defers). */
6696
6697   if (!queue_2stage && delivery_attempted &&
6698       delay_warning[1] > 0 && sender_address[0] != 0 &&
6699        (delay_warning_condition == NULL ||
6700           expand_check_condition(delay_warning_condition,
6701             US"delay_warning", US"option")))
6702     {
6703     int count;
6704     int show_time;
6705     int queue_time = time(NULL) - received_time;
6706
6707     /* When running in the test harness, there's an option that allows us to
6708     fudge this time so as to get repeatability of the tests. Take the first
6709     time off the list. In queue runs, the list pointer gets updated in the
6710     calling process. */
6711
6712     if (running_in_test_harness && fudged_queue_times[0] != 0)
6713       {
6714       int qt = readconf_readtime(fudged_queue_times, '/', FALSE);
6715       if (qt >= 0)
6716         {
6717         DEBUG(D_deliver) debug_printf("fudged queue_times = %s\n",
6718           fudged_queue_times);
6719         queue_time = qt;
6720         }
6721       }
6722
6723     /* See how many warnings we should have sent by now */
6724
6725     for (count = 0; count < delay_warning[1]; count++)
6726       if (queue_time < delay_warning[count+2]) break;
6727
6728     show_time = delay_warning[count+1];
6729
6730     if (count >= delay_warning[1])
6731       {
6732       int extra;
6733       int last_gap = show_time;
6734       if (count > 1) last_gap -= delay_warning[count];
6735       extra = (queue_time - delay_warning[count+1])/last_gap;
6736       show_time += last_gap * extra;
6737       count += extra;
6738       }
6739
6740     DEBUG(D_deliver)
6741       {
6742       debug_printf("time on queue = %s\n", readconf_printtime(queue_time));
6743       debug_printf("warning counts: required %d done %d\n", count,
6744         warning_count);
6745       }
6746
6747     /* We have computed the number of warnings there should have been by now.
6748     If there haven't been enough, send one, and up the count to what it should
6749     have been. */
6750
6751     if (warning_count < count)
6752       {
6753       header_line *h;
6754       int fd;
6755       pid_t pid = child_open_exim(&fd);
6756
6757       if (pid > 0)
6758         {
6759         uschar *wmf_text;
6760         FILE *wmf = NULL;
6761         FILE *f = fdopen(fd, "wb");
6762
6763         if (warn_message_file != NULL)
6764           {
6765           wmf = Ufopen(warn_message_file, "rb");
6766           if (wmf == NULL)
6767             log_write(0, LOG_MAIN|LOG_PANIC, "Failed to open %s for warning "
6768               "message texts: %s", warn_message_file, strerror(errno));
6769           }
6770
6771         warnmsg_recipients = recipients;
6772         warnmsg_delay = (queue_time < 120*60)?
6773           string_sprintf("%d minutes", show_time/60):
6774           string_sprintf("%d hours", show_time/3600);
6775
6776         if (errors_reply_to != NULL)
6777           fprintf(f, "Reply-To: %s\n", errors_reply_to);
6778         fprintf(f, "Auto-Submitted: auto-replied\n");
6779         moan_write_from(f);
6780         fprintf(f, "To: %s\n", recipients);
6781
6782         wmf_text = next_emf(wmf, US"header");
6783         if (wmf_text != NULL)
6784           fprintf(f, "%s\n", wmf_text);
6785         else
6786           fprintf(f, "Subject: Warning: message %s delayed %s\n\n",
6787             message_id, warnmsg_delay);
6788
6789         wmf_text = next_emf(wmf, US"intro");
6790         if (wmf_text != NULL) fprintf(f, "%s", CS wmf_text); else
6791           {
6792           fprintf(f,
6793 "This message was created automatically by mail delivery software.\n");
6794
6795           if (Ustrcmp(recipients, sender_address) == 0)
6796             fprintf(f,
6797 "A message that you sent has not yet been delivered to one or more of its\n"
6798 "recipients after more than ");
6799
6800           else fprintf(f,
6801 "A message sent by\n\n  <%s>\n\n"
6802 "has not yet been delivered to one or more of its recipients after more than \n",
6803           sender_address);
6804
6805           fprintf(f, "%s on the queue on %s.\n\n", warnmsg_delay,
6806             primary_hostname);
6807           fprintf(f, "The message identifier is:     %s\n", message_id);
6808
6809           for (h = header_list; h != NULL; h = h->next)
6810             {
6811             if (strncmpic(h->text, US"Subject:", 8) == 0)
6812               fprintf(f, "The subject of the message is: %s", h->text + 9);
6813             else if (strncmpic(h->text, US"Date:", 5) == 0)
6814               fprintf(f, "The date of the message is:    %s", h->text + 6);
6815             }
6816           fprintf(f, "\n");
6817
6818           fprintf(f, "The address%s to which the message has not yet been "
6819             "delivered %s:\n",
6820             (addr_defer->next == NULL)? "" : "es",
6821             (addr_defer->next == NULL)? "is": "are");
6822           }
6823
6824         /* List the addresses, with error information if allowed */
6825
6826         fprintf(f, "\n");
6827         while (addr_defer != NULL)
6828           {
6829           address_item *addr = addr_defer;
6830           addr_defer = addr->next;
6831           if (print_address_information(addr, f, US"  ", US"\n    ", US""))
6832             print_address_error(addr, f, US"Delay reason: ");
6833           fprintf(f, "\n");
6834           }
6835         fprintf(f, "\n");
6836
6837         /* Final text */
6838
6839         if (wmf != NULL)
6840           {
6841           wmf_text = next_emf(wmf, US"final");
6842           if (wmf_text != NULL) fprintf(f, "%s", CS wmf_text);
6843           (void)fclose(wmf);
6844           }
6845         else
6846           {
6847           fprintf(f,
6848 "No action is required on your part. Delivery attempts will continue for\n"
6849 "some time, and this warning may be repeated at intervals if the message\n"
6850 "remains undelivered. Eventually the mail delivery software will give up,\n"
6851 "and when that happens, the message will be returned to you.\n");
6852           }
6853
6854         /* Close and wait for child process to complete, without a timeout.
6855         If there's an error, don't update the count. */
6856
6857         (void)fclose(f);
6858         if (child_close(pid, 0) == 0)
6859           {
6860           warning_count = count;
6861           update_spool = TRUE;    /* Ensure spool rewritten */
6862           }
6863         }
6864       }
6865     }
6866
6867   /* Clear deliver_domain */
6868
6869   deliver_domain = NULL;
6870
6871   /* If this was a first delivery attempt, unset the first time flag, and
6872   ensure that the spool gets updated. */
6873
6874   if (deliver_firsttime)
6875     {
6876     deliver_firsttime = FALSE;
6877     update_spool = TRUE;
6878     }
6879
6880   /* If delivery was frozen and freeze_tell is set, generate an appropriate
6881   message, unless the message is a local error message (to avoid loops). Then
6882   log the freezing. If the text in "frozen_info" came from a system filter,
6883   it has been escaped into printing characters so as not to mess up log lines.
6884   For the "tell" message, we turn \n back into newline. Also, insert a newline
6885   near the start instead of the ": " string. */
6886
6887   if (deliver_freeze)
6888     {
6889     if (freeze_tell != NULL && freeze_tell[0] != 0 && !local_error_message)
6890       {
6891       uschar *s = string_copy(frozen_info);
6892       uschar *ss = Ustrstr(s, " by the system filter: ");
6893
6894       if (ss != NULL)
6895         {
6896         ss[21] = '.';
6897         ss[22] = '\n';
6898         }
6899
6900       ss = s;
6901       while (*ss != 0)
6902         {
6903         if (*ss == '\\' && ss[1] == 'n')
6904           {
6905           *ss++ = ' ';
6906           *ss++ = '\n';
6907           }
6908         else ss++;
6909         }
6910       moan_tell_someone(freeze_tell, addr_defer, US"Message frozen",
6911         "Message %s has been frozen%s.\nThe sender is <%s>.\n", message_id,
6912         s, sender_address);
6913       }
6914
6915     /* Log freezing just before we update the -H file, to minimize the chance
6916     of a race problem. */
6917
6918     deliver_msglog("*** Frozen%s\n", frozen_info);
6919     log_write(0, LOG_MAIN, "Frozen%s", frozen_info);
6920     }
6921
6922   /* If there have been any updates to the non-recipients list, or other things
6923   that get written to the spool, we must now update the spool header file so
6924   that it has the right information for the next delivery attempt. If there
6925   was more than one address being delivered, the header_change update is done
6926   earlier, in case one succeeds and then something crashes. */
6927
6928   DEBUG(D_deliver)
6929     debug_printf("delivery deferred: update_spool=%d header_rewritten=%d\n",
6930       update_spool, header_rewritten);
6931
6932   if (update_spool || header_rewritten)
6933     /* Panic-dies on error */
6934     (void)spool_write_header(message_id, SW_DELIVERING, NULL);
6935   }
6936
6937 /* Finished with the message log. If the message is complete, it will have
6938 been unlinked or renamed above. */
6939
6940 if (message_logs) (void)fclose(message_log);
6941
6942 /* Now we can close and remove the journal file. Its only purpose is to record
6943 successfully completed deliveries asap so that this information doesn't get
6944 lost if Exim (or the machine) crashes. Forgetting about a failed delivery is
6945 not serious, as trying it again is not harmful. The journal might not be open
6946 if all addresses were deferred at routing or directing. Nevertheless, we must
6947 remove it if it exists (may have been lying around from a crash during the
6948 previous delivery attempt). We don't remove the journal if a delivery
6949 subprocess failed to pass back delivery information; this is controlled by
6950 the remove_journal flag. When the journal is left, we also don't move the
6951 message off the main spool if frozen and the option is set. It should get moved
6952 at the next attempt, after the journal has been inspected. */
6953
6954 if (journal_fd >= 0) (void)close(journal_fd);
6955
6956 if (remove_journal)
6957   {
6958   sprintf(CS spoolname, "%s/input/%s/%s-J", spool_directory, message_subdir, id);
6959   if (Uunlink(spoolname) < 0 && errno != ENOENT)
6960     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to unlink %s: %s", spoolname,
6961       strerror(errno));
6962
6963   /* Move the message off the spool if reqested */
6964
6965   #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
6966   if (deliver_freeze && move_frozen_messages)
6967     (void)spool_move_message(id, message_subdir, US"", US"F");
6968   #endif
6969   }
6970
6971 /* Closing the data file frees the lock; if the file has been unlinked it
6972 will go away. Otherwise the message becomes available for another process
6973 to try delivery. */
6974
6975 (void)close(deliver_datafile);
6976 deliver_datafile = -1;
6977 DEBUG(D_deliver) debug_printf("end delivery of %s\n", id);
6978
6979 /* It is unlikely that there will be any cached resources, since they are
6980 released after routing, and in the delivery subprocesses. However, it's
6981 possible for an expansion for something afterwards (for example,
6982 expand_check_condition) to do a lookup. We must therefore be sure everything is
6983 released. */
6984
6985 search_tidyup();
6986 return final_yield;
6987 }
6988
6989 /* End of deliver.c */