e42625ce82e6b0051132e3cb01f9c3a18b5f6f97
[exim.git] / src / src / transport.c
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) The Exim Maintainers 2020 - 2024 */
6 /* Copyright (c) University of Cambridge 1995 - 2018 */
7 /* See the file NOTICE for conditions of use and distribution. */
8 /* SPDX-License-Identifier: GPL-2.0-or-later */
9
10 /* General functions concerned with transportation, and generic options for all
11 transports. */
12
13
14 #include "exim.h"
15
16 /* Generic options for transports, all of which live inside transport_instance
17 data blocks and which therefore have the opt_public flag set. Note that there
18 are other options living inside this structure which can be set only from
19 certain transports. */
20 #define LOFF(field) OPT_OFF(transport_instance, field)
21
22 optionlist optionlist_transports[] = {
23   /*    name            type                                    value */
24   { "*expand_group",    opt_stringptr|opt_hidden|opt_public,
25                  LOFF(expand_gid) },
26   { "*expand_user",     opt_stringptr|opt_hidden|opt_public,
27                  LOFF(expand_uid) },
28   { "*headers_rewrite_flags", opt_int|opt_public|opt_hidden,
29                  LOFF(rewrite_existflags) },
30   { "*headers_rewrite_rules", opt_void|opt_public|opt_hidden,
31                  LOFF(rewrite_rules) },
32   { "*set_group",       opt_bool|opt_hidden|opt_public,
33                  LOFF(gid_set) },
34   { "*set_user",        opt_bool|opt_hidden|opt_public,
35                  LOFF(uid_set) },
36   { "body_only",        opt_bool|opt_public,
37                  LOFF(body_only) },
38   { "current_directory", opt_stringptr|opt_public,
39                  LOFF(current_dir) },
40   { "debug_print",      opt_stringptr | opt_public,
41                  LOFF(debug_string) },
42   { "delivery_date_add", opt_bool|opt_public,
43                  LOFF(delivery_date_add) },
44   { "disable_logging",  opt_bool|opt_public,
45                  LOFF(disable_logging) },
46   { "driver",           opt_stringptr|opt_public,
47                  LOFF(drinst.driver_name) },
48   { "envelope_to_add",   opt_bool|opt_public,
49                  LOFF(envelope_to_add) },
50 #ifndef DISABLE_EVENT
51   { "event_action",     opt_stringptr | opt_public,
52                  LOFF(event_action) },
53 #endif
54   { "group",             opt_expand_gid|opt_public,
55                  LOFF(gid) },
56   { "headers_add",      opt_stringptr|opt_public|opt_rep_str,
57                  LOFF(add_headers) },
58   { "headers_only",     opt_bool|opt_public,
59                  LOFF(headers_only) },
60   { "headers_remove",   opt_stringptr|opt_public|opt_rep_str,
61                  LOFF(remove_headers) },
62   { "headers_rewrite",  opt_rewrite|opt_public,
63                  LOFF(headers_rewrite) },
64   { "home_directory",   opt_stringptr|opt_public,
65                  LOFF(home_dir) },
66   { "initgroups",       opt_bool|opt_public,
67                  LOFF(initgroups) },
68   { "max_parallel",     opt_stringptr|opt_public,
69                  LOFF(max_parallel) },
70   { "message_size_limit", opt_stringptr|opt_public,
71                  LOFF(message_size_limit) },
72   { "rcpt_include_affixes", opt_bool|opt_public,
73                  LOFF(rcpt_include_affixes) },
74   { "retry_use_local_part", opt_bool|opt_public,
75                  LOFF(retry_use_local_part) },
76   { "return_path",      opt_stringptr|opt_public,
77                  LOFF(return_path) },
78   { "return_path_add",   opt_bool|opt_public,
79                  LOFF(return_path_add) },
80   { "shadow_condition", opt_stringptr|opt_public,
81                  LOFF(shadow_condition) },
82   { "shadow_transport", opt_stringptr|opt_public,
83                  LOFF(shadow) },
84   { "transport_filter", opt_stringptr|opt_public,
85                  LOFF(filter_command) },
86   { "transport_filter_timeout", opt_time|opt_public,
87                  LOFF(filter_timeout) },
88   { "user",             opt_expand_uid|opt_public,
89                  LOFF(uid) }
90 };
91
92 int optionlist_transports_size = nelem(optionlist_transports);
93
94 #ifdef MACRO_PREDEF
95
96 # include "macro_predef.h"
97
98 void
99 options_transports(void)
100 {
101 uschar buf[64];
102
103 options_from_list(optionlist_transports, nelem(optionlist_transports), US"TRANSPORTS", NULL);
104
105 //for (transport_info * ti= transports_available; ti->drinfo.driver_name[0]; ti++)
106 for (driver_info * di= (driver_info *)transports_available_newlist; di; di = di->next)
107   {
108   spf(buf, sizeof(buf), US"_DRIVER_TRANSPORT_%T", di->driver_name);
109   builtin_macro_create(buf);
110   options_from_list(di->options, (unsigned)*di->options_count,
111                     US"TRANSPORT", di->driver_name);
112   }
113 }
114
115 #else   /*!MACRO_PREDEF*/
116
117 /* Structure for keeping list of addresses that have been added to
118 Envelope-To:, in order to avoid duplication. */
119
120 struct aci {
121   struct aci *next;
122   address_item *ptr;
123   };
124
125
126 /* Static data for write_chunk() */
127
128 static uschar *chunk_ptr;           /* chunk pointer */
129 static uschar *nl_check;            /* string to look for at line start */
130 static int     nl_check_length;     /* length of same */
131 static uschar *nl_escape;           /* string to insert */
132 static int     nl_escape_length;    /* length of same */
133 static int     nl_partial_match;    /* length matched at chunk end */
134
135
136 /*************************************************
137 *             Initialize transport list           *
138 *************************************************/
139
140 /* Read the transports section of the configuration file, and set up a chain of
141 transport instances according to its contents. Each transport has generic
142 options and may also have its own private options. This function is only ever
143 called when transports == NULL. We use generic code in readconf to do most of
144 the work. */
145
146 void
147 transport_init(void)
148 {
149 for (transport_info * tblent = transports_available_oldarray;
150     *tblent->drinfo.driver_name; tblent++)
151   {
152   driver_info * listent = store_get(sizeof(transport_info), tblent);
153   memcpy(listent, tblent, sizeof(transport_info));
154   listent->next = (driver_info *)transports_available_newlist;
155   transports_available_newlist = (transport_info *)listent;
156   }
157
158 readconf_driver_init((driver_instance **)&transports,     /* chain anchor */
159   (driver_info **)&transports_available_newlist,   /* available drivers */
160   sizeof(transport_info),                /* size of info block */
161   &transport_defaults,                   /* default values for generic options */
162   sizeof(transport_instance),            /* size of instance block */
163   optionlist_transports,                 /* generic options */
164   optionlist_transports_size,
165   US"transport");
166
167 /* Now scan the configured transports and check inconsistencies. A shadow
168 transport is permitted only for local transports. */
169
170 for (transport_instance * t = transports; t; t = t->drinst.next)
171   {
172   transport_info * ti = t->drinst.info;
173   if (!ti->local && t->shadow)
174     log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
175       "shadow transport not allowed on non-local transport %s", t->drinst.name);
176
177   if (t->body_only && t->headers_only)
178     log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
179       "%s transport: body_only and headers_only are mutually exclusive",
180       t->drinst.name);
181   }
182 }
183
184
185
186 /*************************************************
187 *             Write block of data                *
188 *************************************************/
189
190 static int
191 tpt_write(int fd, uschar * block, int len, BOOL more, int options)
192 {
193 return
194 #ifndef DISABLE_TLS
195   tls_out.active.sock == fd
196     ? tls_write(tls_out.active.tls_ctx, block, len, more) :
197 #endif
198 #ifdef MSG_MORE
199   more && !(options & topt_not_socket) ? send(fd, block, len, MSG_MORE) :
200 #endif
201   write(fd, block, len);
202 }
203
204 /* Subroutine called by write_chunk() and at the end of the message actually
205 to write a data block. Also called directly by some transports to write
206 additional data to the file descriptor (e.g. prefix, suffix).
207
208 If a transport wants data transfers to be timed, it sets a non-zero value in
209 transport_write_timeout. A non-zero transport_write_timeout causes a timer to
210 be set for each block of data written from here. If time runs out, then write()
211 fails and provokes an error return. The caller can then inspect sigalrm_seen to
212 check for a timeout.
213
214 On some systems, if a quota is exceeded during the write, the yield is the
215 number of bytes written rather than an immediate error code. This also happens
216 on some systems in other cases, for example a pipe that goes away because the
217 other end's process terminates (Linux). On other systems, (e.g. Solaris 2) you
218 get the error codes the first time.
219
220 The write() function is also interruptible; the Solaris 2.6 man page says:
221
222      If write() is interrupted by a signal before it writes any
223      data, it will return -1 with errno set to EINTR.
224
225      If write() is interrupted by a signal after it successfully
226      writes some data, it will return the number of bytes written.
227
228 To handle these cases, we want to restart the write() to output the remainder
229 of the data after a non-negative return from write(), except after a timeout.
230 In the error cases (EDQUOT, EPIPE) no bytes get written the second time, and a
231 proper error then occurs. In principle, after an interruption, the second
232 write() could suffer the same fate, but we do not want to continue for
233 evermore, so stick a maximum repetition count on the loop to act as a
234 longstop.
235
236 Arguments:
237   tctx      transport context: file descriptor or string to write to
238   block     block of bytes to write
239   len       number of bytes to write
240   more      further data expected soon
241
242 Returns:    TRUE on success, FALSE on failure (with errno preserved);
243               transport_count is incremented by the number of bytes written
244 */
245
246 static BOOL
247 transport_write_block_fd(transport_ctx * tctx, uschar * block, int len, BOOL more)
248 {
249 int rc, save_errno;
250 int local_timeout = transport_write_timeout;
251 int connretry = 1;
252 int fd = tctx->u.fd;
253
254 /* This loop is for handling incomplete writes and other retries. In most
255 normal cases, it is only ever executed once. */
256
257 for (int i = 0; i < 100; i++)
258   {
259   DEBUG(D_transport)
260     debug_printf("writing data block fd=%d size=%d timeout=%d%s\n",
261       fd, len, local_timeout, more ? " (more expected)" : "");
262
263   /* When doing TCP Fast Open we may get this far before the 3-way handshake
264   is complete, and write returns ENOTCONN.  Detect that, wait for the socket
265   to become writable, and retry once only. */
266
267   for(;;)
268     {
269     /* This code makes use of alarm() in order to implement the timeout. This
270     isn't a very tidy way of doing things. Using non-blocking I/O with select()
271     provides a neater approach. However, I don't know how to do this when TLS is
272     in use. */
273
274     if (transport_write_timeout <= 0)   /* No timeout wanted */
275       {
276       rc = tpt_write(fd, block, len, more, tctx->options);
277       save_errno = errno;
278       }
279     else                                /* Timeout wanted. */
280       {
281       sigalrm_seen = FALSE;
282       ALARM(local_timeout);
283         rc = tpt_write(fd, block, len, more, tctx->options);
284         save_errno = errno;
285       local_timeout = ALARM_CLR(0);
286       if (sigalrm_seen)
287         {
288         errno = ETIMEDOUT;
289         return FALSE;
290         }
291       }
292
293     if (rc >= 0 || errno != ENOTCONN || connretry <= 0)
294       break;
295
296     poll_one_fd(fd, POLLOUT, -1);               /* could set timeout? retval check? */
297     connretry--;
298     }
299
300   /* Hopefully, the most common case is success, so test that first. */
301
302   if (rc == len) { transport_count += len; return TRUE; }
303
304   /* A non-negative return code is an incomplete write. Try again for the rest
305   of the block. If we have exactly hit the timeout, give up. */
306
307   if (rc >= 0)
308     {
309     len -= rc;
310     block += rc;
311     transport_count += rc;
312     DEBUG(D_transport) debug_printf("write incomplete (%d)\n", rc);
313     goto CHECK_TIMEOUT;   /* A few lines below */
314     }
315
316   /* A negative return code with an EINTR error is another form of
317   incomplete write, zero bytes having been written */
318
319   if (save_errno == EINTR)
320     {
321     DEBUG(D_transport)
322       debug_printf("write interrupted before anything written\n");
323     goto CHECK_TIMEOUT;   /* A few lines below */
324     }
325
326   /* A response of EAGAIN from write() is likely only in the case of writing
327   to a FIFO that is not swallowing the data as fast as Exim is writing it. */
328
329   if (save_errno == EAGAIN)
330     {
331     DEBUG(D_transport)
332       debug_printf("write temporarily locked out, waiting 1 sec\n");
333     sleep(1);
334
335     /* Before continuing to try another write, check that we haven't run out of
336     time. */
337
338     CHECK_TIMEOUT:
339     if (transport_write_timeout > 0 && local_timeout <= 0)
340       {
341       errno = ETIMEDOUT;
342       return FALSE;
343       }
344     continue;
345     }
346
347   /* Otherwise there's been an error */
348
349   DEBUG(D_transport) debug_printf("writing error %d: %s\n", save_errno,
350     strerror(save_errno));
351   errno = save_errno;
352   return FALSE;
353   }
354
355 /* We've tried and tried and tried but still failed */
356
357 errno = ERRNO_WRITEINCOMPLETE;
358 return FALSE;
359 }
360
361
362 BOOL
363 transport_write_block(transport_ctx * tctx, uschar *block, int len, BOOL more)
364 {
365 if (!(tctx->options & topt_output_string))
366   return transport_write_block_fd(tctx, block, len, more);
367
368 /* Write to expanding-string.  NOTE: not NUL-terminated */
369
370 if (!tctx->u.msg)
371   tctx->u.msg = string_get(1024);
372
373 tctx->u.msg = string_catn(tctx->u.msg, block, len);
374 return TRUE;
375 }
376
377
378
379
380 /*************************************************
381 *             Write formatted string             *
382 *************************************************/
383
384 /* This is called by various transports. It is a convenience function.
385
386 Arguments:
387   fd          file descriptor
388   format      string format
389   ...         arguments for format
390
391 Returns:      the yield of transport_write_block()
392 */
393
394 BOOL
395 transport_write_string(int fd, const char *format, ...)
396 {
397 transport_ctx tctx = {{0}};
398 gstring gs = { .size = big_buffer_size, .ptr = 0, .s = big_buffer };
399 va_list ap;
400
401 /* Use taint-unchecked routines for writing into big_buffer, trusting
402 that the result will never be expanded. */
403
404 va_start(ap, format);
405 if (!string_vformat(&gs, SVFMT_TAINT_NOCHK, format, ap))
406   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "overlong formatted string in transport");
407 va_end(ap);
408 tctx.u.fd = fd;
409 return transport_write_block(&tctx, gs.s, gs.ptr, FALSE);
410 }
411
412
413
414
415 void
416 transport_write_reset(int options)
417 {
418 if (!(options & topt_continuation)) chunk_ptr = deliver_out_buffer;
419 nl_partial_match = -1;
420 nl_check_length = nl_escape_length = 0;
421 }
422
423
424
425 /*************************************************
426 *              Write character chunk             *
427 *************************************************/
428
429 /* Subroutine used by transport_write_message() to scan character chunks for
430 newlines and act appropriately. The object is to minimise the number of writes.
431 The output byte stream is buffered up in deliver_out_buffer, which is written
432 only when it gets full, thus minimizing write operations and TCP packets.
433
434 Static data is used to handle the case when the last character of the previous
435 chunk was NL, or matched part of the data that has to be escaped.
436
437 Arguments:
438   tctx       transport context - processing to be done during output,
439                 and file descriptor to write to
440   chunk      pointer to data to write
441   len        length of data to write
442
443 In addition, the static nl_xxx variables must be set as required.
444
445 Returns:     TRUE on success, FALSE on failure (with errno preserved)
446 */
447
448 BOOL
449 write_chunk(transport_ctx * tctx, const uschar * chunk, int len)
450 {
451 const uschar * start = chunk;
452 const uschar * end = chunk + len;
453 int mlen = DELIVER_OUT_BUFFER_SIZE - nl_escape_length - 2;
454
455 /* The assumption is made that the check string will never stretch over move
456 than one chunk since the only time there are partial matches is when copying
457 the body in large buffers. There is always enough room in the buffer for an
458 escape string, since the loop below ensures this for each character it
459 processes, and it won't have stuck in the escape string if it left a partial
460 match. */
461
462 if (nl_partial_match >= 0)
463   {
464   if (nl_check_length > 0 && len >= nl_check_length &&
465       Ustrncmp(start, nl_check + nl_partial_match,
466         nl_check_length - nl_partial_match) == 0)
467     {
468     Ustrncpy(chunk_ptr, nl_escape, nl_escape_length);
469     chunk_ptr += nl_escape_length;
470     start += nl_check_length - nl_partial_match;
471     }
472
473   /* The partial match was a false one. Insert the characters carried over
474   from the previous chunk. */
475
476   else if (nl_partial_match > 0)
477     {
478     Ustrncpy(chunk_ptr, nl_check, nl_partial_match);
479     chunk_ptr += nl_partial_match;
480     }
481
482   nl_partial_match = -1;
483   }
484
485 /* Now process the characters in the chunk. Whenever we hit a newline we check
486 for possible escaping. The code for the non-NL route should be as fast as
487 possible. */
488
489 for (const uschar * ptr = start; ptr < end; ptr++)
490   {
491   int ch, len;
492
493   /* Flush the buffer if it has reached the threshold - we want to leave enough
494   room for the next uschar, plus a possible extra CR for an LF, plus the escape
495   string. */
496
497   if ((len = chunk_ptr - deliver_out_buffer) > mlen)
498     {
499     DEBUG(D_transport) debug_printf("flushing headers buffer\n");
500
501     /* If CHUNKING, prefix with BDAT (size) NON-LAST.  Also, reap responses
502     from previous SMTP commands. */
503
504     if (tctx->options & topt_use_bdat  &&  tctx->chunk_cb)
505       {
506       if (  tctx->chunk_cb(tctx, (unsigned)len, 0) != OK
507          || !transport_write_block(tctx, deliver_out_buffer, len, FALSE)
508          || tctx->chunk_cb(tctx, 0, tc_reap_prev) != OK
509          )
510         return FALSE;
511       }
512     else
513       if (!transport_write_block(tctx, deliver_out_buffer, len, FALSE))
514         return FALSE;
515     chunk_ptr = deliver_out_buffer;
516     }
517
518   /* Remove CR before NL if required */
519
520   if (  *ptr == '\r' && ptr[1] == '\n'
521      && !(tctx->options & topt_use_crlf)
522      && f.spool_file_wireformat
523      )
524     ptr++;
525
526   if ((ch = *ptr) == '\n')
527     {
528     int left = end - ptr - 1;  /* count of chars left after NL */
529
530     /* Insert CR before NL if required */
531
532     if (tctx->options & topt_use_crlf && !f.spool_file_wireformat)
533       *chunk_ptr++ = '\r';
534     *chunk_ptr++ = '\n';
535     transport_newlines++;
536
537     /* The check_string test (formerly "from hack") replaces the specific
538     string at the start of a line with an escape string (e.g. "From " becomes
539     ">From " or "." becomes "..". It is a case-sensitive test. The length
540     check above ensures there is always enough room to insert this string. */
541
542     if (nl_check_length > 0)
543       {
544       if (left >= nl_check_length &&
545           Ustrncmp(ptr+1, nl_check, nl_check_length) == 0)
546         {
547         Ustrncpy(chunk_ptr, nl_escape, nl_escape_length);
548         chunk_ptr += nl_escape_length;
549         ptr += nl_check_length;
550         }
551
552       /* Handle the case when there isn't enough left to match the whole
553       check string, but there may be a partial match. We remember how many
554       characters matched, and finish processing this chunk. */
555
556       else if (left <= 0) nl_partial_match = 0;
557
558       else if (Ustrncmp(ptr+1, nl_check, left) == 0)
559         {
560         nl_partial_match = left;
561         ptr = end;
562         }
563       }
564     }
565
566   /* Not a NL character */
567
568   else *chunk_ptr++ = ch;
569   }
570
571 return TRUE;
572 }
573
574
575
576
577 /*************************************************
578 *        Generate address for RCPT TO            *
579 *************************************************/
580
581 /* This function puts together an address for RCPT to, using the caseful
582 version of the local part and the caseful version of the domain. If there is no
583 prefix or suffix, or if affixes are to be retained, we can just use the
584 original address. Otherwise, if there is a prefix but no suffix we can use a
585 pointer into the original address. If there is a suffix, however, we have to
586 build a new string.
587
588 Arguments:
589   addr              the address item
590   include_affixes   TRUE if affixes are to be included
591
592 Returns:            a string
593 */
594
595 const uschar *
596 transport_rcpt_address(address_item *addr, BOOL include_affixes)
597 {
598 uschar *at;
599 int plen, slen;
600
601 if (include_affixes)
602   {
603   setflag(addr, af_include_affixes);  /* Affects logged => line */
604   return addr->address;
605   }
606
607 if (!addr->suffix)
608   {
609   if (!addr->prefix) return addr->address;
610   return addr->address + Ustrlen(addr->prefix);
611   }
612
613 at = Ustrrchr(addr->address, '@');
614 plen = addr->prefix ? Ustrlen(addr->prefix) : 0;
615 slen = Ustrlen(addr->suffix);
616
617 return string_sprintf("%.*s@%s", (int)(at - addr->address - plen - slen),
618    addr->address + plen, at + 1);
619 }
620
621
622 /*************************************************
623 *  Output Envelope-To: address & scan duplicates *
624 *************************************************/
625
626 /* This function is called from internal_transport_write_message() below, when
627 generating an Envelope-To: header line. It checks for duplicates of the given
628 address and its ancestors. When one is found, this function calls itself
629 recursively, to output the envelope address of the duplicate.
630
631 We want to avoid duplication in the list, which can arise for example when
632 A->B,C and then both B and C alias to D. This can also happen when there are
633 unseen drivers in use. So a list of addresses that have been output is kept in
634 the plist variable.
635
636 It is also possible to have loops in the address ancestry/duplication graph,
637 for example if there are two top level addresses A and B and we have A->B,C and
638 B->A. To break the loop, we use a list of processed addresses in the dlist
639 variable.
640
641 After handling duplication, this function outputs the progenitor of the given
642 address.
643
644 Arguments:
645   p         the address we are interested in
646   pplist    address of anchor of the list of addresses not to output
647   pdlist    address of anchor of the list of processed addresses
648   first     TRUE if this is the first address; set it FALSE afterwards
649   tctx      transport context - processing to be done during output
650               and the file descriptor to write to
651
652 Returns:    FALSE if writing failed
653 */
654
655 static BOOL
656 write_env_to(address_item *p, struct aci **pplist, struct aci **pdlist,
657   BOOL *first, transport_ctx * tctx)
658 {
659 address_item *pp;
660 struct aci *ppp;
661
662 /* Do nothing if we have already handled this address. If not, remember it
663 so that we don't handle it again. */
664
665 for (ppp = *pdlist; ppp; ppp = ppp->next) if (p == ppp->ptr) return TRUE;
666
667 ppp = store_get(sizeof(struct aci), GET_UNTAINTED);
668 ppp->next = *pdlist;
669 *pdlist = ppp;
670 ppp->ptr = p;
671
672 /* Now scan up the ancestry, checking for duplicates at each generation. */
673
674 for (pp = p;; pp = pp->parent)
675   {
676   address_item *dup;
677   for (dup = addr_duplicate; dup; dup = dup->next)
678     if (dup->dupof == pp)   /* a dup of our address */
679       if (!write_env_to(dup, pplist, pdlist, first, tctx))
680         return FALSE;
681   if (!pp->parent) break;
682   }
683
684 /* Check to see if we have already output the progenitor. */
685
686 for (ppp = *pplist; ppp; ppp = ppp->next) if (pp == ppp->ptr) break;
687 if (ppp) return TRUE;
688
689 /* Remember what we have output, and output it. */
690
691 ppp = store_get(sizeof(struct aci), GET_UNTAINTED);
692 ppp->next = *pplist;
693 *pplist = ppp;
694 ppp->ptr = pp;
695
696 if (!*first && !write_chunk(tctx, US",\n ", 3)) return FALSE;
697 *first = FALSE;
698 return write_chunk(tctx, pp->address, Ustrlen(pp->address));
699 }
700
701
702
703
704 /* Add/remove/rewrite headers, and send them plus the empty-line separator.
705
706 Globals:
707   header_list
708
709 Arguments:
710   addr                  (chain of) addresses (for extra headers), or NULL;
711                           only the first address is used
712   tctx                  transport context
713   sendfn                function for output (transport or verify)
714
715 Returns:                TRUE on success; FALSE on failure.
716 */
717 BOOL
718 transport_headers_send(transport_ctx * tctx,
719   BOOL (*sendfn)(transport_ctx * tctx, const uschar * s, int len))
720 {
721 const uschar * list;
722 transport_instance * tblock = tctx ? tctx->tblock : NULL;
723 address_item * addr = tctx ? tctx->addr : NULL;
724
725 /* Then the message's headers. Don't write any that are flagged as "old";
726 that means they were rewritten, or are a record of envelope rewriting, or
727 were removed (e.g. Bcc). If remove_headers is not null, skip any headers that
728 match any entries therein.  It is a colon-sep list; expand the items
729 separately and squash any empty ones.
730 Then check addr->prop.remove_headers too, provided that addr is not NULL. */
731
732 for (header_line * h = header_list; h; h = h->next) if (h->type != htype_old)
733   {
734   BOOL include_header = TRUE;
735
736   list = tblock ? tblock->remove_headers : NULL;
737   for (int i = 0; i < 2; i++)    /* For remove_headers && addr->prop.remove_headers */
738     {
739     if (list)
740       {
741       int sep = ':';         /* This is specified as a colon-separated list */
742       uschar *s, *ss;
743       while ((s = string_nextinlist(&list, &sep, NULL, 0)))
744         {
745         int len;
746
747         if (i == 0)
748           if (!(s = expand_string(s)) && !f.expand_string_forcedfail)
749             {
750             errno = ERRNO_CHHEADER_FAIL;
751             return FALSE;
752             }
753         len = s ? Ustrlen(s) : 0;
754         if (len && s[len-1] == '*')     /* trailing glob */
755           {
756           if (strncmpic(h->text, s, len-1) == 0) break;
757           }
758         else
759           {
760           if (strncmpic(h->text, s, len) != 0) continue;
761           ss = h->text + len;
762           while (*ss == ' ' || *ss == '\t') ss++;
763           if (*ss == ':') break;
764           }
765         }
766       if (s) { include_header = FALSE; break; }
767       }
768     if (addr) list = addr->prop.remove_headers;
769     }
770
771   /* If this header is to be output, try to rewrite it if there are rewriting
772   rules. */
773
774   if (include_header)
775     {
776     int len;
777     if (tblock && tblock->rewrite_rules)
778       {
779       rmark reset_point = store_mark();
780       header_line * hh;
781
782       if ((hh = rewrite_header(h, NULL, NULL, tblock->rewrite_rules,
783                   tblock->rewrite_existflags, FALSE)))
784         {
785         len = hh->slen;
786         if (tctx->options & topt_truncate_headers && len > 998) len = 998;
787         if (!sendfn(tctx, hh->text, len)) return FALSE;
788         store_reset(reset_point);
789         continue;     /* With the next header line */
790         }
791       }
792
793     /* Either no rewriting rules, or it didn't get rewritten */
794
795     len = h->slen;
796     if (tctx->options & topt_truncate_headers && len > 998) len = 998;
797     if (!sendfn(tctx, h->text, len)) return FALSE;
798     }
799
800   /* Header removed */
801
802   else
803     DEBUG(D_transport) debug_printf("removed header line:\n %s---\n", h->text);
804   }
805
806 /* Add on any address-specific headers. If there are multiple addresses,
807 they will all have the same headers in order to be batched. The headers
808 are chained in reverse order of adding (so several addresses from the
809 same alias might share some of them) but we want to output them in the
810 opposite order. This is a bit tedious, but there shouldn't be very many
811 of them. We just walk the list twice, reversing the pointers each time,
812 but on the second time, write out the items.
813
814 Headers added to an address by a router are guaranteed to end with a newline.
815 */
816
817 if (addr)
818   {
819   header_line * hprev = addr->prop.extra_headers, * hnext, * h;
820
821   for (int i = 0; i < 2; i++)
822     for (h = hprev, hprev = NULL; h; h = hnext)
823       {
824       hnext = h->next;
825       h->next = hprev;
826       hprev = h;
827       if (i == 1)
828         {
829         if (!sendfn(tctx, h->text, h->slen)) return FALSE;
830         DEBUG(D_transport)
831           debug_printf("added header line(s):\n %s---\n", h->text);
832         }
833       }
834   }
835
836 /* If a string containing additional headers exists it is a newline-sep
837 list.  Expand each item and write out the result.  This is done last so that
838 if it (deliberately or accidentally) isn't in header format, it won't mess
839 up any other headers. An empty string or a forced expansion failure are
840 noops. An added header string from a transport may not end with a newline;
841 add one if it does not. */
842
843 if (tblock && (list = CUS tblock->add_headers))
844   {
845   int sep = '\n';
846   uschar * s;
847
848   while ((s = string_nextinlist(&list, &sep, NULL, 0)))
849     if ((s = expand_string(s)))
850       {
851       int len = Ustrlen(s);
852       if (len > 0)
853         {
854         if (!sendfn(tctx, s, len)) return FALSE;
855         if (s[len-1] != '\n' && !sendfn(tctx, US"\n", 1))
856           return FALSE;
857         DEBUG(D_transport)
858           {
859           debug_printf("added header line:\n %s", s);
860           if (s[len-1] != '\n') debug_printf("\n");
861           debug_printf("---\n");
862           }
863         }
864       }
865     else if (!f.expand_string_forcedfail)
866       { errno = ERRNO_CHHEADER_FAIL; return FALSE; }
867   }
868
869 /* Separate headers from body with a blank line */
870
871 return sendfn(tctx, US"\n", 1);
872 }
873
874
875 /*************************************************
876 *                Write the message               *
877 *************************************************/
878
879 /* This function writes the message to the given file descriptor. The headers
880 are in the in-store data structure, and the rest of the message is in the open
881 file descriptor deliver_datafile. Make sure we start it at the beginning.
882
883 . If add_return_path is TRUE, a "return-path:" header is added to the message,
884   containing the envelope sender's address.
885
886 . If add_envelope_to is TRUE, a "envelope-to:" header is added to the message,
887   giving the top-level envelope address that caused this delivery to happen.
888
889 . If add_delivery_date is TRUE, a "delivery-date:" header is added to the
890   message. It gives the time and date that delivery took place.
891
892 . If check_string is not null, the start of each line is checked for that
893   string. If it is found, it is replaced by escape_string. This used to be
894   the "from hack" for files, and "smtp_dots" for escaping SMTP dots.
895
896 . If use_crlf is true, newlines are turned into CRLF (SMTP output).
897
898 The yield is TRUE if all went well, and FALSE if not. Exit *immediately* after
899 any writing or reading error, leaving the code in errno intact. Error exits
900 can include timeouts for certain transports, which are requested by setting
901 transport_write_timeout non-zero.
902
903 Arguments:
904   tctx
905     (fd, msg)           Either an fd, to write the message to,
906                         or a string: if null write message to allocated space
907                         otherwire take content as headers.
908     addr                (chain of) addresses (for extra headers), or NULL;
909                           only the first address is used
910     tblock              optional transport instance block (NULL signifies NULL/0):
911       add_headers           a string containing one or more headers to add; it is
912                             expanded, and must be in correct RFC 822 format as
913                             it is transmitted verbatim; NULL => no additions,
914                             and so does empty string or forced expansion fail
915       remove_headers        a colon-separated list of headers to remove, or NULL
916       rewrite_rules         chain of header rewriting rules
917       rewrite_existflags    flags for the rewriting rules
918     options               bit-wise options:
919       add_return_path       if TRUE, add a "return-path" header
920       add_envelope_to       if TRUE, add a "envelope-to" header
921       add_delivery_date     if TRUE, add a "delivery-date" header
922       use_crlf              if TRUE, turn NL into CR LF
923       end_dot               if TRUE, send a terminating "." line at the end
924       no_flush              if TRUE, do not flush at end
925       no_headers            if TRUE, omit the headers
926       no_body               if TRUE, omit the body
927     check_string          a string to check for at the start of lines, or NULL
928     escape_string         a string to insert in front of any check string
929   size_limit              if > 0, this is a limit to the size of message written;
930                             it is used when returning messages to their senders,
931                             and is approximate rather than exact, owing to chunk
932                             buffering
933
934 Returns:                TRUE on success; FALSE (with errno) on failure.
935                         In addition, the global variable transport_count
936                         is incremented by the number of bytes written.
937 */
938
939 static BOOL
940 internal_transport_write_message(transport_ctx * tctx, int size_limit)
941 {
942 int len, size = 0;
943
944 /* Initialize pointer in output buffer. */
945
946 transport_write_reset(tctx->options);
947
948 /* Set up the data for start-of-line data checking and escaping */
949
950 if (tctx->check_string && tctx->escape_string)
951   {
952   nl_check = tctx->check_string;
953   nl_check_length = Ustrlen(nl_check);
954   nl_escape = tctx->escape_string;
955   nl_escape_length = Ustrlen(nl_escape);
956   }
957
958 /* Whether the escaping mechanism is applied to headers or not is controlled by
959 an option (set for SMTP, not otherwise). Negate the length if not wanted till
960 after the headers. */
961
962 if (!(tctx->options & topt_escape_headers))
963   nl_check_length = -nl_check_length;
964
965 /* Write the headers if required, including any that have to be added. If there
966 are header rewriting rules, apply them.  The datasource is not the -D spoolfile
967 so temporarily hide the global that adjusts for its format. */
968
969 if (!(tctx->options & topt_no_headers))
970   {
971   BOOL save_wireformat = f.spool_file_wireformat;
972   f.spool_file_wireformat = FALSE;
973
974   /* Add return-path: if requested. */
975
976   if (tctx->options & topt_add_return_path)
977     {
978     int n;
979     uschar * s = string_sprintf("Return-path: <%.*s>\n%n",
980                           EXIM_EMAILADDR_MAX, return_path, &n);
981     if (!write_chunk(tctx, s, n)) goto bad;
982     }
983
984   /* Add envelope-to: if requested */
985
986   if (tctx->options & topt_add_envelope_to)
987     {
988     BOOL first = TRUE;
989     struct aci *plist = NULL;
990     struct aci *dlist = NULL;
991     rmark reset_point = store_mark();
992
993     if (!write_chunk(tctx, US"Envelope-to: ", 13)) goto bad;
994
995     /* Pick up from all the addresses. The plist and dlist variables are
996     anchors for lists of addresses already handled; they have to be defined at
997     this level because write_env_to() calls itself recursively. */
998
999     for (address_item * p = tctx->addr; p; p = p->next)
1000       if (!write_env_to(p, &plist, &dlist, &first, tctx))
1001         goto bad;
1002
1003     /* Add a final newline and reset the store used for tracking duplicates */
1004
1005     if (!write_chunk(tctx, US"\n", 1)) goto bad;
1006     store_reset(reset_point);
1007     }
1008
1009   /* Add delivery-date: if requested. */
1010
1011   if (tctx->options & topt_add_delivery_date)
1012     {
1013     uschar * s = tod_stamp(tod_full);
1014
1015     if (  !write_chunk(tctx, US"Delivery-date: ", 15)
1016        || !write_chunk(tctx, s, Ustrlen(s))
1017        || !write_chunk(tctx, US"\n", 1)) goto bad;
1018     }
1019
1020   /* Then the message's headers. Don't write any that are flagged as "old";
1021   that means they were rewritten, or are a record of envelope rewriting, or
1022   were removed (e.g. Bcc). If remove_headers is not null, skip any headers that
1023   match any entries therein. Then check addr->prop.remove_headers too, provided that
1024   addr is not NULL. */
1025
1026   if (!transport_headers_send(tctx, &write_chunk))
1027     {
1028 bad:
1029     f.spool_file_wireformat = save_wireformat;
1030     return FALSE;
1031     }
1032
1033   f.spool_file_wireformat = save_wireformat;
1034   }
1035
1036 /* When doing RFC3030 CHUNKING output, work out how much data would be in a
1037 last-BDAT, consisting of the current write_chunk() output buffer fill
1038 (optimally, all of the headers - but it does not matter if we already had to
1039 flush that buffer with non-last BDAT prependix) plus the amount of body data
1040 (as expanded for CRLF lines).  Then create and write BDAT(s), and ensure
1041 that further use of write_chunk() will not prepend BDATs.
1042 The first BDAT written will also first flush any outstanding MAIL and RCPT
1043 commands which were buffered thans to PIPELINING.
1044 Commands go out (using a send()) from a different buffer to data (using a
1045 write()).  They might not end up in the same TCP segment, which is
1046 suboptimal. */
1047
1048 if (tctx->options & topt_use_bdat)
1049   {
1050   off_t fsize;
1051   int hsize;
1052
1053   if ((hsize = chunk_ptr - deliver_out_buffer) < 0)
1054     hsize = 0;
1055   if (!(tctx->options & topt_no_body))
1056     {
1057     if ((fsize = lseek(deliver_datafile, 0, SEEK_END)) < 0) return FALSE;
1058     fsize -= spool_data_start_offset(message_id);
1059     if (size_limit > 0  &&  fsize > size_limit)
1060       fsize = size_limit;
1061     size = hsize + fsize;
1062     if (tctx->options & topt_use_crlf  &&  !f.spool_file_wireformat)
1063       size += body_linecount;   /* account for CRLF-expansion */
1064
1065     /* With topt_use_bdat we never do dot-stuffing; no need to
1066     account for any expansion due to that. */
1067     }
1068
1069   /* If the message is large, emit first a non-LAST chunk with just the
1070   headers, and reap the command responses.  This lets us error out early
1071   on RCPT rejects rather than sending megabytes of data.  Include headers
1072   on the assumption they are cheap enough and some clever implementations
1073   might errorcheck them too, on-the-fly, and reject that chunk. */
1074
1075   if (size > DELIVER_OUT_BUFFER_SIZE && hsize > 0)
1076     {
1077     DEBUG(D_transport)
1078       debug_printf("sending small initial BDAT; hsize=%d\n", hsize);
1079     if (  tctx->chunk_cb(tctx, hsize, 0) != OK
1080        || !transport_write_block(tctx, deliver_out_buffer, hsize, FALSE)
1081        || tctx->chunk_cb(tctx, 0, tc_reap_prev) != OK
1082        )
1083       return FALSE;
1084     chunk_ptr = deliver_out_buffer;
1085     size -= hsize;
1086     }
1087
1088   /* Emit a LAST datachunk command, and unmark the context for further
1089   BDAT commands. */
1090
1091   if (tctx->chunk_cb(tctx, size, tc_chunk_last) != OK)
1092     return FALSE;
1093   tctx->options &= ~topt_use_bdat;
1094   }
1095
1096 /* If the body is required, ensure that the data for check strings (formerly
1097 the "from hack") is enabled by negating the length if necessary. (It will be
1098 negative in cases where it isn't to apply to the headers). Then ensure the body
1099 is positioned at the start of its file (following the message id), then write
1100 it, applying the size limit if required. */
1101
1102 /* If we have a wireformat -D file (CRNL lines, non-dotstuffed, no ending dot)
1103 and we want to send a body without dotstuffing or ending-dot, in-clear,
1104 then we can just dump it using sendfile.
1105 This should get used for CHUNKING output and also for writing the -K file for
1106 dkim signing,  when we had CHUNKING input.  */
1107
1108 #ifdef OS_SENDFILE
1109 if (  f.spool_file_wireformat
1110    && !(tctx->options & (topt_no_body | topt_end_dot))
1111    && !nl_check_length
1112    && tls_out.active.sock != tctx->u.fd
1113    )
1114   {
1115   ssize_t copied = 0;
1116   off_t offset = spool_data_start_offset(message_id);
1117
1118   /* Write out any header data in the buffer */
1119
1120   if ((len = chunk_ptr - deliver_out_buffer) > 0)
1121     {
1122     if (!transport_write_block(tctx, deliver_out_buffer, len, TRUE))
1123       return FALSE;
1124     size -= len;
1125     }
1126
1127   DEBUG(D_transport) debug_printf("using sendfile for body\n");
1128
1129   while(size > 0)
1130     {
1131     if ((copied = os_sendfile(tctx->u.fd, deliver_datafile, &offset, size)) <= 0) break;
1132     size -= copied;
1133     }
1134   return copied >= 0;
1135   }
1136 #else
1137 DEBUG(D_transport) debug_printf("cannot use sendfile for body: no support\n");
1138 #endif
1139
1140 DEBUG(D_transport)
1141   if (!(tctx->options & topt_no_body))
1142     debug_printf("cannot use sendfile for body: %s\n",
1143       !f.spool_file_wireformat ? "spoolfile not wireformat"
1144       : tctx->options & topt_end_dot ? "terminating dot wanted"
1145       : nl_check_length ? "dot- or From-stuffing wanted"
1146       : "TLS output wanted");
1147
1148 if (!(tctx->options & topt_no_body))
1149   {
1150   unsigned long size = size_limit > 0 ? size_limit : ULONG_MAX;
1151
1152   nl_check_length = abs(nl_check_length);
1153   nl_partial_match = 0;
1154   if (lseek(deliver_datafile, spool_data_start_offset(message_id), SEEK_SET) < 0)
1155     return FALSE;
1156   while (  (len = MIN(DELIVER_IN_BUFFER_SIZE, size)) > 0
1157         && (len = read(deliver_datafile, deliver_in_buffer, len)) > 0)
1158     {
1159     if (!write_chunk(tctx, deliver_in_buffer, len))
1160       return FALSE;
1161     size -= len;
1162     }
1163
1164   /* A read error on the body will have left len == -1 and errno set. */
1165
1166   if (len != 0) return FALSE;
1167   }
1168
1169 /* Finished with the check string, and spool-format consideration */
1170
1171 nl_check_length = nl_escape_length = 0;
1172 f.spool_file_wireformat = FALSE;
1173
1174 /* If requested, add a terminating "." line (SMTP output). */
1175
1176 if (tctx->options & topt_end_dot)
1177   {
1178   smtp_debug_cmd(US".", 0);
1179   if (!write_chunk(tctx, US".\n", 2))
1180     return FALSE;
1181   }
1182
1183 /* Write out any remaining data in the buffer before returning. */
1184
1185 return (len = chunk_ptr - deliver_out_buffer) <= 0
1186   || transport_write_block(tctx, deliver_out_buffer, len,
1187                             !!(tctx->options & topt_no_flush));
1188 }
1189
1190
1191
1192
1193 /*************************************************
1194 *    External interface to write the message     *
1195 *************************************************/
1196
1197 /* If there is no filtering required, call the internal function above to do
1198 the real work, passing over all the arguments from this function. Otherwise,
1199 set up a filtering process, fork another process to call the internal function
1200 to write to the filter, and in this process just suck from the filter and write
1201 down the fd in the transport context. At the end, tidy up the pipes and the
1202 processes.
1203
1204 Arguments:     as for internal_transport_write_message() above
1205
1206 Returns:       TRUE on success; FALSE (with errno) for any failure
1207                transport_count is incremented by the number of bytes written
1208 */
1209
1210 BOOL
1211 transport_write_message(transport_ctx * tctx, int size_limit)
1212 {
1213 BOOL last_filter_was_NL = TRUE;
1214 BOOL save_spool_file_wireformat = f.spool_file_wireformat;
1215 BOOL yield;
1216 int rc, len, fd_read, fd_write, save_errno;
1217 int pfd[2] = {-1, -1};
1218 pid_t filter_pid, write_pid;
1219
1220 f.transport_filter_timed_out = FALSE;
1221
1222 /* If there is no filter command set up, call the internal function that does
1223 the actual work, passing it the incoming fd, and return its result. */
1224
1225 if (  !transport_filter_argv
1226    || !*transport_filter_argv
1227    || !**transport_filter_argv
1228    )
1229   return internal_transport_write_message(tctx, size_limit);
1230
1231 /* Otherwise the message must be written to a filter process and read back
1232 before being written to the incoming fd. First set up the special processing to
1233 be done during the copying. */
1234
1235 nl_partial_match = -1;
1236
1237 if (tctx->check_string && tctx->escape_string)
1238   {
1239   nl_check = tctx->check_string;
1240   nl_check_length = Ustrlen(nl_check);
1241   nl_escape = tctx->escape_string;
1242   nl_escape_length = Ustrlen(nl_escape);
1243   }
1244 else nl_check_length = nl_escape_length = 0;
1245
1246 /* Start up a subprocess to run the command. Ensure that our main fd will
1247 be closed when the subprocess execs, but remove the flag afterwards.
1248 (Otherwise, if this is a TCP/IP socket, it can't get passed on to another
1249 process to deliver another message.) We get back stdin/stdout file descriptors.
1250 If the process creation failed, give an error return. */
1251
1252 fd_read = -1;
1253 fd_write = -1;
1254 save_errno = 0;
1255 yield = FALSE;
1256 write_pid = (pid_t)(-1);
1257
1258   {
1259   int bits = fcntl(tctx->u.fd, F_GETFD);
1260   (void) fcntl(tctx->u.fd, F_SETFD, bits | FD_CLOEXEC);
1261   filter_pid = child_open(USS transport_filter_argv, NULL, 077,
1262                           &fd_write, &fd_read, FALSE, US"transport-filter");
1263   (void) fcntl(tctx->u.fd, F_SETFD, bits & ~FD_CLOEXEC);
1264   }
1265 if (filter_pid < 0) goto TIDY_UP;      /* errno set */
1266
1267 DEBUG(D_transport)
1268   debug_printf("process %d running as transport filter: fd_write=%d fd_read=%d\n",
1269     (int)filter_pid, fd_write, fd_read);
1270
1271 /* Fork subprocess to write the message to the filter, and return the result
1272 via a(nother) pipe. While writing to the filter, we do not do the CRLF,
1273 smtp dots, or check string processing. */
1274
1275 if (pipe(pfd) != 0) goto TIDY_UP;      /* errno set */
1276 if ((write_pid = exim_fork(US"tpt-filter-writer")) == 0)
1277   {
1278   BOOL rc;
1279   (void)close(fd_read);
1280   (void)close(pfd[pipe_read]);
1281   nl_check_length = nl_escape_length = 0;
1282
1283   tctx->u.fd = fd_write;
1284   tctx->check_string = tctx->escape_string = NULL;
1285   tctx->options &= ~(topt_use_crlf | topt_end_dot | topt_use_bdat | topt_no_flush);
1286
1287   rc = internal_transport_write_message(tctx, size_limit);
1288
1289   save_errno = errno;
1290   if (  write(pfd[pipe_write], (void *)&rc, sizeof(BOOL))
1291         != sizeof(BOOL)
1292      || write(pfd[pipe_write], (void *)&save_errno, sizeof(int))
1293         != sizeof(int)
1294      || write(pfd[pipe_write], (void *)&tctx->addr->more_errno, sizeof(int))
1295         != sizeof(int)
1296      || write(pfd[pipe_write], (void *)&tctx->addr->delivery_time, sizeof(struct timeval))
1297         != sizeof(struct timeval)
1298      )
1299     rc = FALSE; /* compiler quietening */
1300   exim_underbar_exit(EXIT_SUCCESS);
1301   }
1302 save_errno = errno;
1303
1304 /* Parent process: close our copy of the writing subprocess' pipes. */
1305
1306 (void)close(pfd[pipe_write]);
1307 (void)close(fd_write);
1308 fd_write = -1;
1309
1310 /* Writing process creation failed */
1311
1312 if (write_pid < 0)
1313   {
1314   errno = save_errno;    /* restore */
1315   goto TIDY_UP;
1316   }
1317
1318 /* When testing, let the subprocess get going */
1319
1320 testharness_pause_ms(250);
1321
1322 DEBUG(D_transport)
1323   debug_printf("process %d writing to transport filter\n", (int)write_pid);
1324
1325 /* Copy the message from the filter to the output fd. A read error leaves len
1326 == -1 and errno set. We need to apply a timeout to the read, to cope with
1327 the case when the filter gets stuck, but it can be quite a long one. The
1328 default is 5m, but this is now configurable. */
1329
1330 DEBUG(D_transport) debug_printf("copying from the filter\n");
1331
1332 /* Copy the output of the filter, remembering if the last character was NL. If
1333 no data is returned, that counts as "ended with NL" (default setting of the
1334 variable is TRUE).  The output should always be unix-format as we converted
1335 any wireformat source on writing input to the filter. */
1336
1337 f.spool_file_wireformat = FALSE;
1338 chunk_ptr = deliver_out_buffer;
1339
1340 for (;;)
1341   {
1342   sigalrm_seen = FALSE;
1343   ALARM(transport_filter_timeout);
1344   len = read(fd_read, deliver_in_buffer, DELIVER_IN_BUFFER_SIZE);
1345   ALARM_CLR(0);
1346   if (sigalrm_seen)
1347     {
1348     DEBUG(D_transport) debug_printf("timed out reading from filter\n");
1349     errno = ETIMEDOUT;
1350     f.transport_filter_timed_out = TRUE;
1351     goto TIDY_UP;
1352     }
1353
1354   /* If the read was successful, write the block down the original fd,
1355   remembering whether it ends in \n or not. */
1356
1357   if (len > 0)
1358     {
1359     if (!write_chunk(tctx, deliver_in_buffer, len)) goto TIDY_UP;
1360     last_filter_was_NL = (deliver_in_buffer[len-1] == '\n');
1361     }
1362
1363   /* Otherwise, break the loop. If we have hit EOF, set yield = TRUE. */
1364
1365   else
1366     {
1367     if (len == 0) yield = TRUE;
1368     break;
1369     }
1370   }
1371
1372 /* Tidying up code. If yield = FALSE there has been an error and errno is set
1373 to something. Ensure the pipes are all closed and the processes are removed. If
1374 there has been an error, kill the processes before waiting for them, just to be
1375 sure. Also apply a paranoia timeout. */
1376
1377 TIDY_UP:
1378 f.spool_file_wireformat = save_spool_file_wireformat;
1379 save_errno = errno;
1380
1381 (void)close(fd_read);
1382 if (fd_write > 0) (void)close(fd_write);
1383
1384 if (!yield)
1385   {
1386   if (filter_pid > 0) kill(filter_pid, SIGKILL);
1387   if (write_pid > 0)  kill(write_pid, SIGKILL);
1388   }
1389
1390 /* Wait for the filter process to complete. */
1391
1392 DEBUG(D_transport) debug_printf("waiting for filter process\n");
1393 if (filter_pid > 0 && (rc = child_close(filter_pid, 30)) != 0 && yield)
1394   {
1395   yield = FALSE;
1396   save_errno = ERRNO_FILTER_FAIL;
1397   tctx->addr->more_errno = rc;
1398   DEBUG(D_transport) debug_printf("filter process returned %d\n", rc);
1399   }
1400
1401 /* Wait for the writing process to complete. If it ends successfully,
1402 read the results from its pipe, provided we haven't already had a filter
1403 process failure. */
1404
1405 DEBUG(D_transport) debug_printf("waiting for writing process\n");
1406 if (write_pid > 0)
1407   {
1408   rc = child_close(write_pid, 30);
1409   if (yield)
1410     if (rc == 0)
1411       {
1412       BOOL ok;
1413       if (read(pfd[pipe_read], (void *)&ok, sizeof(BOOL)) != sizeof(BOOL))
1414         {
1415         DEBUG(D_transport)
1416           debug_printf("pipe read from writing process: %s\n", strerror(errno));
1417         save_errno = ERRNO_FILTER_FAIL;
1418         yield = FALSE;
1419         }
1420       else if (!ok)
1421         {               /* Try to drain the pipe; read fails are don't care */
1422         int dummy = read(pfd[pipe_read], (void *)&save_errno, sizeof(int));
1423         dummy = read(pfd[pipe_read], (void *)&tctx->addr->more_errno, sizeof(int));
1424         dummy = read(pfd[pipe_read], (void *)&tctx->addr->delivery_time, sizeof(struct timeval));
1425         yield = FALSE;
1426         }
1427       }
1428     else
1429       {
1430       yield = FALSE;
1431       save_errno = ERRNO_FILTER_FAIL;
1432       tctx->addr->more_errno = rc;
1433       DEBUG(D_transport) debug_printf("writing process returned %d\n", rc);
1434       }
1435   }
1436 (void)close(pfd[pipe_read]);
1437
1438 /* If there have been no problems we can now add the terminating "." if this is
1439 SMTP output, turning off escaping beforehand. If the last character from the
1440 filter was not NL, insert a NL to make the SMTP protocol work. */
1441
1442 if (yield)
1443   {
1444   nl_check_length = nl_escape_length = 0;
1445   f.spool_file_wireformat = FALSE;
1446   if (  tctx->options & topt_end_dot
1447      && ( last_filter_was_NL
1448         ? !write_chunk(tctx, US".\n", 2)
1449         : !write_chunk(tctx, US"\n.\n", 3)
1450      )  )
1451     { smtp_debug_cmd(US".", 0); yield = FALSE; }
1452
1453   /* Write out any remaining data in the buffer. */
1454
1455   else
1456     yield = (len = chunk_ptr - deliver_out_buffer) <= 0
1457           || transport_write_block(tctx, deliver_out_buffer, len, FALSE);
1458   }
1459 else
1460   errno = save_errno;      /* From some earlier error */
1461
1462 DEBUG(D_transport)
1463   {
1464   debug_printf("end of filtering transport writing: yield=%d\n", yield);
1465   if (!yield)
1466     debug_printf(" errno=%d more_errno=%d\n", errno, tctx->addr->more_errno);
1467   }
1468
1469 return yield;
1470 }
1471
1472
1473
1474
1475
1476 /*************************************************
1477 *            Update waiting database             *
1478 *************************************************/
1479
1480 /* This is called when an address is deferred by remote transports that are
1481 capable of sending more than one message over one connection. A database is
1482 maintained for each transport, keeping track of which messages are waiting for
1483 which hosts. The transport can then consult this when eventually a successful
1484 delivery happens, and if it finds that another message is waiting for the same
1485 host, it can fire up a new process to deal with it using the same connection.
1486
1487 The database records are keyed by host name. They can get full if there are
1488 lots of messages waiting, and so there is a continuation mechanism for them.
1489
1490 Each record contains a list of message ids, packed end to end without any
1491 zeros. Each one is MESSAGE_ID_LENGTH bytes long. The count field says how many
1492 in this record, and the sequence field says if there are any other records for
1493 this host. If the sequence field is 0, there are none. If it is 1, then another
1494 record with the name <hostname>:0 exists; if it is 2, then two other records
1495 with sequence numbers 0 and 1 exist, and so on.
1496
1497 Currently, an exhaustive search of all continuation records has to be done to
1498 determine whether to add a message id to a given record. This shouldn't be
1499 too bad except in extreme cases. I can't figure out a *simple* way of doing
1500 better.
1501
1502 Old records should eventually get swept up by the exim_tidydb utility.
1503
1504 Arguments:
1505   hostlist  list of hosts that this message could be sent to
1506   tpname    name of the transport
1507
1508 Returns:    nothing
1509 */
1510
1511 void
1512 transport_update_waiting(host_item * hostlist, const uschar * tpname)
1513 {
1514 const uschar * prevname = US"";
1515 open_db dbblock, * dbp;
1516
1517 if (!is_new_message_id(message_id))
1518   {
1519   DEBUG(D_transport) debug_printf("message_id %s is not new format; "
1520     "skipping wait-%s database update\n", message_id, tpname);
1521   return;
1522   }
1523
1524 DEBUG(D_transport) debug_printf("updating wait-%s database\n", tpname);
1525
1526 /* Open the database (or transaction) for this transport */
1527
1528 if ( continue_wait_db
1529    ? !dbfn_transaction_start(dbp = continue_wait_db)
1530    : !(dbp = dbfn_open(string_sprintf("wait-%.200s", tpname),
1531                       O_RDWR|O_CREAT, &dbblock, TRUE, TRUE))
1532    )
1533   return;
1534
1535 /* Scan the list of hosts for which this message is waiting, and ensure
1536 that the message id is in each host record. */
1537
1538 for (host_item * host = hostlist; host; host = host->next)
1539   {
1540   BOOL already = FALSE;
1541   dbdata_wait * host_record;
1542   int host_length;
1543   uschar buffer[256];
1544
1545   /* Skip if this is the same host as we just processed; otherwise remember
1546   the name for next time. */
1547
1548   if (Ustrcmp(prevname, host->name) == 0) continue;
1549   prevname = host->name;
1550
1551   /* Look up the host record; if there isn't one, make an empty one. */
1552
1553   if (!(host_record = dbfn_read(dbp, host->name)))
1554     {
1555     host_record = store_get(sizeof(dbdata_wait) + MESSAGE_ID_LENGTH, GET_UNTAINTED);
1556     host_record->count = host_record->sequence = 0;
1557     }
1558
1559   /* Compute the current length */
1560
1561   host_length = host_record->count * MESSAGE_ID_LENGTH;
1562
1563   /* Search the record to see if the current message is already in it. */
1564
1565   for (uschar * s = host_record->text; s < host_record->text + host_length;
1566        s += MESSAGE_ID_LENGTH)
1567     {
1568     /* If any ID is seen which is not new-format, wipe the record and
1569     any continuations */
1570
1571     if (!is_new_message_id(s))
1572       {
1573       DEBUG(D_hints_lookup)
1574         debug_printf_indent("NOTE: old or corrupt message-id found in wait=%.200s"
1575           " hints DB; deleting records for %s\n", tpname, host->name);
1576
1577       (void) dbfn_delete(dbp, host->name);
1578       for (int i = host_record->sequence - 1; i >= 0; i--)
1579         (void) dbfn_delete(dbp,
1580                     (sprintf(CS buffer, "%.200s:%d", host->name, i), buffer));
1581
1582       host_record->count = host_record->sequence = 0;
1583       break;
1584       }
1585     if (Ustrncmp(s, message_id, MESSAGE_ID_LENGTH) == 0)
1586       { already = TRUE; break; }
1587     }
1588
1589   /* If we haven't found this message in the main record, search any
1590   continuation records that exist. */
1591
1592   for (int i = host_record->sequence - 1; i >= 0 && !already; i--)
1593     {
1594     dbdata_wait *cont;
1595     sprintf(CS buffer, "%.200s:%d", host->name, i);
1596     if ((cont = dbfn_read(dbp, buffer)))
1597       {
1598       int clen = cont->count * MESSAGE_ID_LENGTH;
1599       for (uschar * s = cont->text; s < cont->text + clen; s += MESSAGE_ID_LENGTH)
1600         if (Ustrncmp(s, message_id, MESSAGE_ID_LENGTH) == 0)
1601           { already = TRUE; break; }
1602       }
1603     }
1604
1605   /* If this message is already in a record, no need to update. */
1606
1607   if (already)
1608     {
1609     DEBUG(D_transport) debug_printf("already listed for %s\n", host->name);
1610     continue;
1611     }
1612
1613
1614   /* If this record is full, write it out with a new name constructed
1615   from the sequence number, increase the sequence number, and empty
1616   the record.  If we're doing a two-phase queue run initial phase, ping the
1617   daemon to consider running a delivery on this host. */
1618
1619   if (host_record->count >= WAIT_NAME_MAX)
1620     {
1621     sprintf(CS buffer, "%.200s:%d", host->name, host_record->sequence);
1622     dbfn_write(dbp, buffer, host_record, sizeof(dbdata_wait) + host_length);
1623 #ifndef DISABLE_QUEUE_RAMP
1624     if (f.queue_2stage && queue_fast_ramp && !queue_run_in_order)
1625       queue_notify_daemon(message_id);
1626 #endif
1627     host_record->sequence++;
1628     host_record->count = 0;
1629     host_length = 0;
1630     }
1631
1632   /* If this record is not full, increase the size of the record to
1633   allow for one new message id. */
1634
1635   else
1636     {
1637     dbdata_wait *newr =
1638       store_get(sizeof(dbdata_wait) + host_length + MESSAGE_ID_LENGTH, GET_UNTAINTED);
1639     memcpy(newr, host_record, sizeof(dbdata_wait) + host_length);
1640     host_record = newr;
1641     }
1642
1643   /* Now add the new name on the end */
1644
1645   memcpy(host_record->text + host_length, message_id, MESSAGE_ID_LENGTH);
1646   host_record->count++;
1647   host_length += MESSAGE_ID_LENGTH;
1648
1649   /* Update the database */
1650
1651   dbfn_write(dbp, host->name, host_record, sizeof(dbdata_wait) + host_length);
1652   DEBUG(D_transport) debug_printf("added %.*s to queue for %s\n",
1653                                   MESSAGE_ID_LENGTH, message_id, host->name);
1654   }
1655
1656 /* All now done */
1657
1658 if (continue_wait_db)
1659   dbfn_transaction_commit(dbp);
1660 else
1661   dbfn_close(dbp);
1662 }
1663
1664
1665
1666
1667 /*************************************************
1668 *         Test for waiting messages              *
1669 *************************************************/
1670
1671 /* This function is called by a remote transport which uses the previous
1672 function to remember which messages are waiting for which remote hosts. It's
1673 called after a successful delivery and its job is to check whether there is
1674 another message waiting for the same host. However, it doesn't do this if the
1675 current continue sequence is greater than the maximum supplied as an argument,
1676 or greater than the global connection_max_messages, which, if set, overrides.
1677
1678 It is also called if conditions are otherwise right for pipelining a QUIT after
1679 the message data, since if there is another message waiting we do not want to
1680 send that QUIT.
1681
1682 Arguments:
1683   transport_name     name of the transport
1684   hostname           name of the host
1685   local_message_max  maximum number of messages down one connection
1686                        as set by the caller transport
1687   new_message_id     set to the message id of a waiting message
1688   oicf_func          function to call to validate if it is ok to send
1689                      to this message_id from the current instance.
1690   oicf_data          opaque data for oicf_func
1691
1692 Returns:             TRUE if new_message_id set; FALSE otherwise
1693 */
1694
1695 typedef struct msgq_s
1696 {
1697     uschar  message_id [MESSAGE_ID_LENGTH + 1];
1698     BOOL    bKeep;
1699 } msgq_t;
1700
1701 BOOL
1702 transport_check_waiting(const uschar * transport_name, const uschar * hostname,
1703   int local_message_max, uschar * new_message_id,
1704   oicf oicf_func, void * oicf_data)
1705 {
1706 dbdata_wait * host_record;
1707 int host_length;
1708 open_db dbblock, * dbp;
1709
1710 int         i;
1711 struct stat statbuf;
1712
1713 DEBUG(D_transport)
1714   {
1715   debug_printf("transport_check_waiting entered\n");
1716   debug_printf("  sequence=%d local_max=%d global_max=%d\n",
1717     continue_sequence, local_message_max, connection_max_messages);
1718   acl_level++;
1719   }
1720
1721 /* Do nothing if we have hit the maximum number that can be sent down one
1722 connection. */
1723
1724 if (connection_max_messages >= 0) local_message_max = connection_max_messages;
1725 if (local_message_max > 0 && continue_sequence >= local_message_max)
1726   {
1727   DEBUG(D_transport)
1728     debug_printf_indent("max messages for one connection reached: returning\n");
1729   goto retfalse;
1730   }
1731
1732 /* Open the waiting information database. */
1733
1734 if ( continue_wait_db
1735    ? !dbfn_transaction_start(dbp = continue_wait_db)
1736    : !(dbp = dbfn_open(string_sprintf("wait-%.200s", transport_name),
1737                       O_RDWR, &dbblock, TRUE, TRUE))
1738    )
1739   {
1740   DEBUG(D_transport)
1741     debug_printf_indent("no messages waiting for %s\n", hostname);
1742   goto retfalse;
1743   }
1744
1745 /* See if there is a record for this host; if not, there's nothing to do. */
1746
1747 if (!(host_record = dbfn_read(dbp, hostname)))
1748   {
1749   DEBUG(D_transport)
1750     debug_printf_indent("no messages waiting for %s\n", hostname);
1751   goto dbclose_false;
1752   }
1753
1754 /* If the data in the record looks corrupt, just log something and
1755 don't try to use it. */
1756
1757 if (host_record->count > WAIT_NAME_MAX)
1758   {
1759   log_write(0, LOG_MAIN|LOG_PANIC, "smtp-wait database entry for %s has bad "
1760     "count=%d (max=%d)", hostname, host_record->count, WAIT_NAME_MAX);
1761   goto dbclose_false;
1762   }
1763
1764 /* Scan the message ids in the record in order
1765 until one is found for which a spool file actually exists. If the record gets
1766 emptied, delete it and continue with any continuation records that may exist.
1767 */
1768
1769 /* For Bug 1141, I refactored this major portion of the routine, it is risky
1770 but the 1 off will remain without it.  This code now allows me to SKIP over
1771 a message I do not want to send out on this run.  */
1772
1773 host_length = host_record->count * MESSAGE_ID_LENGTH;
1774
1775 while (1)
1776   {
1777   msgq_t * msgq;
1778   int msgq_count = 0, msgq_actual = 0;
1779   BOOL bFound = FALSE, bContinuation = FALSE;
1780
1781   /* create an array to read entire message queue into memory for processing  */
1782
1783   msgq = store_get(sizeof(msgq_t) * host_record->count, GET_UNTAINTED);
1784   msgq_actual = msgq_count = host_record->count;
1785
1786   for (i = 0; i < host_record->count; ++i)
1787     {
1788     /* If any ID is seen which is not new-format, wipe the record and
1789     any continuations */
1790
1791     if (!is_new_message_id(host_record->text + (i * MESSAGE_ID_LENGTH)))
1792       {
1793       uschar buffer[256];
1794       DEBUG(D_hints_lookup)
1795         debug_printf_indent("NOTE: old or corrupt message-id found in wait=%.200s"
1796           " hints DB; deleting records for %s\n", transport_name, hostname);
1797       (void) dbfn_delete(dbp, hostname);
1798       for (int j = host_record->sequence - 1; j >= 0; j--)
1799         (void) dbfn_delete(dbp,
1800                     (sprintf(CS buffer, "%.200s:%d", hostname, j), buffer));
1801       goto dbclose_false;
1802       }
1803     msgq[i].bKeep = TRUE;
1804
1805     Ustrncpy_nt(msgq[i].message_id, host_record->text + (i * MESSAGE_ID_LENGTH),
1806       MESSAGE_ID_LENGTH);
1807     msgq[i].message_id[MESSAGE_ID_LENGTH] = 0;
1808     }
1809
1810   /* first thing remove current message id if it exists */
1811   /*XXX but what if it has un-sent addrs? */
1812
1813   for (i = 0; i < msgq_count; ++i)
1814     if (Ustrcmp(msgq[i].message_id, message_id) == 0)
1815       {
1816       msgq[i].bKeep = FALSE;
1817       break;
1818       }
1819
1820   /* now find the next acceptable message_id */
1821
1822   for (i = 0; i < msgq_count; i++) if (msgq[i].bKeep)
1823     {
1824     uschar subdir[2];
1825     uschar * mid = msgq[i].message_id;
1826
1827     set_subdir_str(subdir, mid, 0);
1828     if (Ustat(spool_fname(US"input", subdir, mid, US"-D"), &statbuf) != 0)
1829       msgq[i].bKeep = FALSE;
1830     else if (!oicf_func || oicf_func(mid, oicf_data))
1831       {
1832       Ustrcpy_nt(new_message_id, mid);
1833       msgq[i].bKeep = FALSE;
1834       bFound = TRUE;
1835       break;
1836       }
1837     }
1838
1839   /* re-count */
1840   for (msgq_actual = 0, i = 0; i < msgq_count; ++i)
1841     if (msgq[i].bKeep)
1842       msgq_actual++;
1843
1844   /* reassemble the host record, based on removed message ids, from in
1845   memory queue  */
1846
1847   if (msgq_actual <= 0)
1848     {
1849     host_length = 0;
1850     host_record->count = 0;
1851     }
1852   else
1853     {
1854     host_length = msgq_actual * MESSAGE_ID_LENGTH;
1855     host_record->count = msgq_actual;
1856
1857     if (msgq_actual < msgq_count)
1858       {
1859       int new_count;
1860       for (new_count = 0, i = 0; i < msgq_count; ++i)
1861         if (msgq[i].bKeep)
1862           Ustrncpy(&host_record->text[new_count++ * MESSAGE_ID_LENGTH],
1863             msgq[i].message_id, MESSAGE_ID_LENGTH);
1864
1865       host_record->text[new_count * MESSAGE_ID_LENGTH] = 0;
1866       }
1867     }
1868
1869   /* Check for a continuation record. */
1870
1871   while (host_length <= 0)
1872     {
1873     dbdata_wait * newr = NULL;
1874     uschar buffer[256];
1875
1876     /* Search for a continuation */
1877
1878     for (int i = host_record->sequence - 1; i >= 0 && !newr; i--)
1879       {
1880       sprintf(CS buffer, "%.200s:%d", hostname, i);
1881       newr = dbfn_read(dbp, buffer);
1882       }
1883
1884     /* If no continuation, delete the current and break the loop */
1885
1886     if (!newr)
1887       {
1888       dbfn_delete(dbp, hostname);
1889       break;
1890       }
1891
1892     /* Else replace the current with the continuation */
1893
1894     dbfn_delete(dbp, buffer);
1895     host_record = newr;
1896     host_length = host_record->count * MESSAGE_ID_LENGTH;
1897
1898     bContinuation = TRUE;
1899     }
1900
1901   if (bFound)           /* Usual exit from main loop */
1902     break;
1903
1904   /* If host_length <= 0 we have emptied a record and not found a good message,
1905   and there are no continuation records. Otherwise there is a continuation
1906   record to process. */
1907
1908   if (host_length <= 0)
1909     {
1910     DEBUG(D_transport) debug_printf_indent("waiting messages already delivered\n");
1911     goto dbclose_false;
1912     }
1913
1914   /* we were not able to find an acceptable message, nor was there a
1915   continuation record.  So bug out, outer logic will clean this up.
1916   */
1917
1918   if (!bContinuation)
1919     {
1920     Ustrcpy(new_message_id, message_id);
1921     goto dbclose_false;
1922     }
1923   }             /* we need to process a continuation record */
1924
1925 /* Control gets here when an existing message has been encountered; its
1926 id is in new_message_id, and host_length is the revised length of the
1927 host record. If it is zero, the record has been removed. Update the
1928 record if required, close the database, and return TRUE. */
1929
1930 if (host_length > 0)
1931   {
1932   host_record->count = host_length/MESSAGE_ID_LENGTH;
1933   dbfn_write(dbp, hostname, host_record, (int)sizeof(dbdata_wait) + host_length);
1934   }
1935
1936 if (continue_wait_db)
1937   dbfn_transaction_commit(dbp);
1938 else
1939   dbfn_close(dbp);
1940
1941 DEBUG(D_transport)
1942   {
1943   acl_level--;
1944   debug_printf("transport_check_waiting: TRUE (found %s)\n", new_message_id);
1945   }
1946 return TRUE;
1947
1948 dbclose_false:
1949   if (continue_wait_db)
1950     dbfn_transaction_commit(dbp);
1951   else
1952     dbfn_close(dbp);
1953
1954 retfalse:
1955   DEBUG(D_transport)
1956     {acl_level--; debug_printf("transport_check_waiting: FALSE\n"); }
1957   return FALSE;
1958 }
1959
1960 /*************************************************
1961 *    Deliver waiting message down same socket    *
1962 *************************************************/
1963
1964 /* Just the regain-root-privilege exec portion */
1965 void
1966 transport_do_pass_socket(const uschar * transport_name, const uschar * hostname,
1967   const uschar * hostaddress, uschar * id, int socket_fd)
1968 {
1969 int i = 13;
1970 const uschar **argv;
1971
1972 #ifndef DISABLE_TLS
1973 if (smtp_peer_options & OPTION_TLS) i += 6;
1974 #endif
1975 #ifndef DISABLE_ESMTP_LIMITS
1976 if (continue_limit_mail || continue_limit_rcpt || continue_limit_rcptdom)
1977                                     i += 4;
1978 #endif
1979 if (queue_run_pid != (pid_t)0)      i += 3;
1980 #ifdef SUPPORT_SOCKS
1981 if (proxy_session)                  i += 5;
1982 #endif
1983
1984 /* Set up the calling arguments; use the standard function for the basics,
1985 but we have a number of extras that may be added. */
1986
1987 argv = CUSS child_exec_exim(CEE_RETURN_ARGV, TRUE, &i, FALSE, 0);
1988
1989 if (f.smtp_authenticated)                       argv[i++] = US"-MCA";
1990 if (smtp_peer_options & OPTION_CHUNKING)        argv[i++] = US"-MCK";
1991 if (smtp_peer_options & OPTION_DSN)             argv[i++] = US"-MCD";
1992 if (smtp_peer_options & OPTION_PIPE)            argv[i++] = US"-MCP";
1993 if (smtp_peer_options & OPTION_SIZE)            argv[i++] = US"-MCS";
1994 #ifndef DISABLE_TLS
1995 if (smtp_peer_options & OPTION_TLS)
1996   if (tls_out.active.sock >= 0 || continue_proxy_cipher)
1997     {
1998     argv[i++] = US"-MCt";
1999     argv[i++] = sending_ip_address;
2000     argv[i++] = string_sprintf("%d", sending_port);
2001     argv[i++] = tls_out.active.sock >= 0 ? tls_out.cipher : continue_proxy_cipher;
2002
2003     if (tls_out.sni)
2004       {
2005       argv[i++] =
2006 #ifdef SUPPORT_DANE
2007         tls_out.dane_verified ? US"-MCr" :
2008 #endif
2009         US"-MCs";
2010       argv[i++] = tls_out.sni;
2011       }
2012     }
2013   else
2014     argv[i++] = US"-MCT";
2015 #endif
2016
2017 #ifndef DISABLE_ESMTP_LIMITS
2018 if (continue_limit_mail || continue_limit_rcpt || continue_limit_rcptdom)
2019   {
2020   argv[i++] = US"-MCL";
2021   argv[i++] = string_sprintf("%u", continue_limit_mail);
2022   argv[i++] = string_sprintf("%u", continue_limit_rcpt);
2023   argv[i++] = string_sprintf("%u", continue_limit_rcptdom);
2024   }
2025 #endif
2026
2027 if (queue_run_pid != (pid_t)0)
2028   {
2029   argv[i++] = US"-MCQ";
2030   argv[i++] = string_sprintf("%d", queue_run_pid);
2031   argv[i++] = string_sprintf("%d", queue_run_pipe);
2032   }
2033
2034 #ifdef SUPPORT_SOCKS
2035 if (proxy_session)
2036   {
2037   argv[i++] = US"-MCp";
2038   argv[i++] = proxy_local_address;
2039   argv[i++] = string_sprintf("%d", proxy_local_port);
2040   argv[i++] = proxy_external_address;
2041   argv[i++] = string_sprintf("%d", proxy_external_port);
2042   }
2043 #endif
2044
2045 argv[i++] = US"-MC";
2046 argv[i++] = US transport_name;
2047 argv[i++] = US hostname;
2048 argv[i++] = US hostaddress;
2049 argv[i++] = string_sprintf("%d", continue_sequence + 1);
2050 argv[i++] = id;
2051 argv[i++] = NULL;
2052
2053 /* Arrange for the channel to be on stdin. */
2054
2055 if (socket_fd != 0)
2056   {
2057   (void)dup2(socket_fd, 0);
2058   (void)close(socket_fd);
2059   }
2060
2061 DEBUG(D_exec) debug_print_argv(argv);
2062 exim_nullstd();                          /* Ensure std{out,err} exist */
2063 /* argv[0] should be untainted, from child_exec_exim() */
2064 execv(CS argv[0], (char *const *)argv);
2065
2066 DEBUG(D_any) debug_printf("execv failed: %s\n", strerror(errno));
2067 _exit(errno);         /* Note: must be _exit(), NOT exit() */
2068 }
2069
2070
2071
2072
2073 /* Enforce all args untainted, for consistency with a router-sourced pipe
2074 command, where (because the whole line is passed as one to the tpt) a
2075 tainted arg taints the executable name.  It's unclear also that letting an
2076 attacker supply command arguments is wise. */
2077
2078 static BOOL
2079 arg_is_tainted(const uschar * s, int argn, address_item * addr,
2080   const uschar * etext, uschar ** errptr)
2081 {
2082 if (is_tainted(s))
2083   {
2084   uschar * msg = string_sprintf("Tainted arg %d for %s command: '%s'",
2085                                 argn, etext, s);
2086   if (addr)
2087     {
2088     addr->transport_return = FAIL;
2089     addr->message = msg;
2090     }
2091   else *errptr = msg;
2092   return TRUE;
2093   }
2094 return FALSE;
2095 }
2096
2097
2098 /*************************************************
2099 *          Set up direct (non-shell) command     *
2100 *************************************************/
2101
2102 /* This function is called when a command line is to be parsed and executed
2103 directly, without the use of /bin/sh. It is called by the pipe transport,
2104 the queryprogram router, for any ${run } expansion,
2105 and also from the main delivery code when setting up a
2106 transport filter process. The code for ETRN also makes use of this; in that
2107 case, no addresses are passed.
2108
2109 Arguments:
2110   argvptr            pointer to anchor for argv vector
2111   cmd                points to the command string (modified IN PLACE)
2112   flags              bits for expand-args, allow taint, allow $recipients
2113   expand_failed      error value to set if expansion fails; not relevant if
2114                      addr == NULL
2115   addr               chain of addresses, or NULL
2116   etext              text for use in error messages
2117   errptr             where to put error message if addr is NULL;
2118                      otherwise it is put in the first address
2119
2120 Returns:             TRUE if all went well; otherwise an error will be
2121                      set in the first address and FALSE returned
2122 */
2123
2124 BOOL
2125 transport_set_up_command(const uschar *** argvptr, const uschar * cmd,
2126   unsigned flags, int expand_failed, address_item * addr,
2127   const uschar * etext, uschar ** errptr)
2128 {
2129 const uschar ** argv, * s;
2130 int address_count = 0, argcount = 0, max_args;
2131
2132 /* Get store in which to build an argument list. Count the number of addresses
2133 supplied, and allow for that many arguments, plus an additional 60, which
2134 should be enough for anybody. Multiple addresses happen only when the local
2135 delivery batch option is set. */
2136
2137 for (address_item * ad = addr; ad; ad = ad->next) address_count++;
2138 max_args = address_count + 60;
2139 *argvptr = argv = store_get((max_args+1)*sizeof(uschar *), GET_UNTAINTED);
2140
2141 /* Split the command up into arguments terminated by white space. Lose
2142 trailing space at the start and end. Double-quoted arguments can contain \\ and
2143 \" escapes and so can be handled by the standard function; single-quoted
2144 arguments are verbatim. Copy each argument into a new string. */
2145
2146 s = cmd;
2147 Uskip_whitespace(&s);
2148
2149 for (; *s && argcount < max_args; argcount++)
2150   {
2151   if (*s == '\'')
2152     {
2153     int n = Ustrcspn(++s, "'");
2154     argv[argcount] = string_copyn(s, n);
2155     if (*(s += n) == '\'') s++;
2156     }
2157   else
2158     argv[argcount] = string_dequote(CUSS &s);
2159   Uskip_whitespace(&s);
2160   }
2161
2162 argv[argcount] = NULL;
2163
2164 /* If *s != 0 we have run out of argument slots. */
2165
2166 if (*s)
2167   {
2168   uschar *msg = string_sprintf("Too many arguments in command \"%s\" in "
2169     "%s", cmd, etext);
2170   if (addr)
2171     {
2172     addr->transport_return = FAIL;
2173     addr->message = msg;
2174     }
2175   else *errptr = msg;
2176   return FALSE;
2177   }
2178
2179 /* Expand each individual argument if required. Expansion happens for pipes set
2180 up in filter files and with directly-supplied commands. It does not happen if
2181 the pipe comes from a traditional .forward file. A failing expansion is a big
2182 disaster if the command came from Exim's configuration; if it came from a user
2183 it is just a normal failure. The expand_failed value is used as the error value
2184 to cater for these two cases.
2185
2186 An argument consisting just of the text "$pipe_addresses" is treated specially.
2187 It is not passed to the general expansion function. Instead, it is replaced by
2188 a number of arguments, one for each address. This avoids problems with shell
2189 metacharacters and spaces in addresses.
2190
2191 If the parent of the top address has an original part of "system-filter", this
2192 pipe was set up by the system filter, and we can permit the expansion of
2193 $recipients. */
2194
2195 DEBUG(D_transport)
2196   {
2197   debug_printf("direct command:\n");
2198   for (int i = 0; argv[i]; i++)
2199     debug_printf("  argv[%d] = '%s'\n", i, string_printing(argv[i]));
2200   }
2201
2202 if (flags & TSUC_EXPAND_ARGS)
2203   {
2204   BOOL allow_dollar_recipients = (flags & TSUC_ALLOW_RECIPIENTS)
2205     || (addr && addr->parent && Ustrcmp(addr->parent->address, "system-filter") == 0);  /*XXX could we check this at caller? */
2206
2207   for (int i = 0; argv[i]; i++)
2208     {
2209     DEBUG(D_expand) debug_printf_indent("arg %d\n", i);
2210
2211     /* Handle special fudge for passing an address list */
2212
2213     if (addr &&
2214         (Ustrcmp(argv[i], "$pipe_addresses") == 0 ||
2215          Ustrcmp(argv[i], "${pipe_addresses}") == 0))
2216       {
2217       int additional;
2218
2219       if (argcount + address_count - 1 > max_args)
2220         {
2221         addr->transport_return = FAIL;
2222         addr->message = string_sprintf("Too many arguments to command \"%s\" "
2223           "in %s", cmd, etext);
2224         return FALSE;
2225         }
2226
2227       additional = address_count - 1;
2228       if (additional > 0)
2229         memmove(argv + i + 1 + additional, argv + i + 1,
2230           (argcount - i)*sizeof(uschar *));
2231
2232       for (address_item * ad = addr; ad; ad = ad->next)
2233         {
2234         /* $pipe_addresses is spefically not checked for taint, because there is
2235         a testcase (321) depending on it.  It's unclear if the exact thing being
2236         done really needs to be legitimate, though I suspect it reflects an
2237         actual use-case that showed up a bug.
2238         This is a hole in the taint-pretection, mitigated only in that
2239         shell-syntax metachars cannot be injected via this route. */
2240
2241         DEBUG(D_transport) if (is_tainted(ad->address))
2242           debug_printf("tainted element '%s' from $pipe_addresses\n", ad->address);
2243
2244         argv[i++] = ad->address;
2245         argcount++;
2246         }
2247
2248       /* Subtract one since we replace $pipe_addresses */
2249       argcount--;
2250       i--;
2251       }
2252
2253       /* Handle special case of $address_pipe when af_force_command is set */
2254
2255     else if (addr && testflag(addr,af_force_command) &&
2256         (Ustrcmp(argv[i], "$address_pipe") == 0 ||
2257          Ustrcmp(argv[i], "${address_pipe}") == 0))
2258       {
2259       int address_pipe_argcount = 0;
2260       int address_pipe_max_args;
2261       uschar **address_pipe_argv;
2262
2263       /* We can never have more then the argv we will be loading into */
2264       address_pipe_max_args = max_args - argcount + 1;
2265
2266       DEBUG(D_transport)
2267         debug_printf("address_pipe_max_args=%d\n", address_pipe_max_args);
2268
2269       /* We allocate an additional for (uschar *)0 */
2270       address_pipe_argv = store_get((address_pipe_max_args+1)*sizeof(uschar *), GET_UNTAINTED);
2271
2272       /* +1 because addr->local_part[0] == '|' since af_force_command is set */
2273       s = expand_cstring(addr->local_part + 1);
2274
2275       if (!s || !*s)
2276         {
2277         addr->transport_return = FAIL;
2278         addr->message = string_sprintf("Expansion of \"%s\" "
2279            "from command \"%s\" in %s failed: %s",
2280            (addr->local_part + 1), cmd, etext, expand_string_message);
2281         return FALSE;
2282         }
2283
2284       Uskip_whitespace(&s);                     /* strip leading space */
2285
2286       while (*s && address_pipe_argcount < address_pipe_max_args)
2287         {
2288         if (*s == '\'')
2289           {
2290           int n = Ustrcspn(++s, "'");
2291           argv[argcount] = string_copyn(s, n);
2292           if (*(s += n) == '\'') s++;
2293           }
2294         else
2295           address_pipe_argv[address_pipe_argcount++] = string_dequote(CUSS &s);
2296         Uskip_whitespace(&s);                   /* strip space after arg */
2297         }
2298
2299       address_pipe_argv[address_pipe_argcount] = NULL;
2300
2301       /* If *s != 0 we have run out of argument slots. */
2302       if (*s)
2303         {
2304         uschar *msg = string_sprintf("Too many arguments in $address_pipe "
2305           "\"%s\" in %s", addr->local_part + 1, etext);
2306         if (addr)
2307           {
2308           addr->transport_return = FAIL;
2309           addr->message = msg;
2310           }
2311         else *errptr = msg;
2312         return FALSE;
2313         }
2314
2315       /* address_pipe_argcount - 1
2316       because we are replacing $address_pipe in the argument list
2317       with the first thing it expands to */
2318
2319       if (argcount + address_pipe_argcount - 1 > max_args)
2320         {
2321         addr->transport_return = FAIL;
2322         addr->message = string_sprintf("Too many arguments to command "
2323           "\"%s\" after expanding $address_pipe in %s", cmd, etext);
2324         return FALSE;
2325         }
2326
2327       /* If we are not just able to replace the slot that contained
2328       $address_pipe (address_pipe_argcount == 1)
2329       We have to move the existing argv by address_pipe_argcount - 1
2330       Visually if address_pipe_argcount == 2:
2331       [argv 0][argv 1][argv 2($address_pipe)][argv 3][0]
2332       [argv 0][argv 1][ap_arg0][ap_arg1][old argv 3][0] */
2333
2334       if (address_pipe_argcount > 1)
2335         memmove(
2336           /* current position + additional args */
2337           argv + i + address_pipe_argcount,
2338           /* current position + 1 (for the (uschar *)0 at the end) */
2339           argv + i + 1,
2340           /* -1 for the (uschar *)0 at the end)*/
2341           (argcount - i)*sizeof(uschar *)
2342         );
2343
2344       /* Now we fill in the slots we just moved argv out of
2345       [argv 0][argv 1][argv 2=pipeargv[0]][argv 3=pipeargv[1]][old argv 3][0] */
2346
2347       for (int address_pipe_i = 0;
2348            address_pipe_argv[address_pipe_i];
2349            address_pipe_i++, argcount++)
2350         {
2351         uschar * s = address_pipe_argv[address_pipe_i];
2352         if (arg_is_tainted(s, i, addr, etext, errptr)) return FALSE;
2353         argv[i++] = s;
2354         }
2355
2356       /* Subtract one since we replace $address_pipe */
2357       argcount--;
2358       i--;
2359       }
2360
2361     /* Handle normal expansion string */
2362
2363     else
2364       {
2365       const uschar *expanded_arg;
2366       BOOL enable_dollar_recipients_g = f.enable_dollar_recipients;
2367       f.enable_dollar_recipients = allow_dollar_recipients;
2368       expanded_arg = expand_cstring(argv[i]);
2369       f.enable_dollar_recipients = enable_dollar_recipients_g;
2370
2371       if (!expanded_arg)
2372         {
2373         uschar *msg = string_sprintf("Expansion of \"%s\" "
2374           "from command \"%s\" in %s failed: %s",
2375           argv[i], cmd, etext, expand_string_message);
2376         if (addr)
2377           {
2378           addr->transport_return = expand_failed;
2379           addr->message = msg;
2380           }
2381         else *errptr = msg;
2382         return FALSE;
2383         }
2384
2385       if (  f.running_in_test_harness && is_tainted(expanded_arg)
2386          && Ustrcmp(etext, "queryprogram router") == 0)
2387         {                       /* hack, would be good to not need it */
2388         DEBUG(D_transport)
2389           debug_printf("SPECIFIC TESTSUITE EXEMPTION: tainted arg '%s'\n",
2390                       expanded_arg);
2391         }
2392       else if (  !(flags & TSUC_ALLOW_TAINTED_ARGS)
2393               && arg_is_tainted(expanded_arg, i, addr, etext, errptr))
2394         return FALSE;
2395       argv[i] = expanded_arg;
2396       }
2397     }
2398
2399   DEBUG(D_transport)
2400     {
2401     debug_printf("direct command after expansion:\n");
2402     for (int i = 0; argv[i]; i++)
2403       {
2404       debug_printf("  argv[%d] = '%s'\n", i, string_printing(argv[i]));
2405       debug_print_taint(argv[i]);
2406       }
2407     }
2408   }
2409
2410 return TRUE;
2411 }
2412
2413
2414
2415 /* For error messages, a string describing the config location associated
2416 with current processing.  NULL if we are not in a transport. */
2417 /* Name only, for now */
2418
2419 uschar *
2420 transport_current_name(void)
2421 {
2422 if (!transport_name) return NULL;
2423 return string_sprintf(" (transport %s, %s %d)", transport_name, driver_srcfile, driver_srcline);
2424 }
2425
2426 #endif  /*!MACRO_PREDEF*/
2427 /* vi: aw ai sw=2
2428 */
2429 /* End of transport.c */