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