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