Hintsdb: fix build config phase for sqlite
[exim.git] / src / src / exim.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
11 /* The main function: entry point, initialization, and high-level control.
12 Also a few functions that don't naturally fit elsewhere. */
13
14
15 #include "exim.h"
16
17 #if defined(__GLIBC__) && !defined(__UCLIBC__)
18 # include <gnu/libc-version.h>
19 #endif
20
21 #ifndef _TIME_H
22 # include <time.h>
23 #endif
24 #ifndef NO_EXECINFO
25 # include <execinfo.h>
26 #endif
27
28 #ifdef USE_GNUTLS
29 # include <gnutls/gnutls.h>
30 # if GNUTLS_VERSION_NUMBER < 0x030103 && !defined(DISABLE_OCSP)
31 #  define DISABLE_OCSP
32 # endif
33 #endif
34
35 extern void init_lookup_list(void);
36
37
38
39 /*************************************************
40 *      Function interface to store functions     *
41 *************************************************/
42
43 /* We need some real functions to pass to the PCRE regular expression library
44 for store allocation via Exim's store manager. The normal calls are actually
45 macros that pass over location information to make tracing easier. These
46 functions just interface to the standard macro calls. A good compiler will
47 optimize out the tail recursion and so not make them too expensive. */
48
49 static void *
50 function_store_malloc(PCRE2_SIZE size, void * tag)
51 {
52 if (size > INT_MAX)
53   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "excessive memory alloc request");
54 return store_malloc((int)size);
55 }
56
57 static void
58 function_store_free(void * block, void * tag)
59 {
60 /* At least some version of pcre2 pass a null pointer */
61 if (block) store_free(block);
62 }
63
64
65 static void *
66 function_store_get(PCRE2_SIZE size, void * tag)
67 {
68 if (size > INT_MAX)
69   log_write(0, LOG_MAIN|LOG_PANIC_DIE, "excessive memory alloc request");
70 return store_get((int)size, GET_UNTAINTED);     /* loses track of taint */
71 }
72
73 static void
74 function_store_nullfree(void * block, void * tag)
75 {
76 /* We cannot free memory allocated using store_get() */
77 }
78
79
80
81
82 /*************************************************
83 *         Enums for cmdline interface            *
84 *************************************************/
85
86 enum commandline_info { CMDINFO_NONE=0,
87   CMDINFO_HELP, CMDINFO_SIEVE, CMDINFO_DSCP };
88
89
90
91
92 static void
93 pcre_init(void)
94 {
95 pcre_mlc_ctx = pcre2_general_context_create(function_store_malloc, function_store_free, NULL);
96 pcre_gen_ctx = pcre2_general_context_create(function_store_get, function_store_nullfree, NULL);
97
98 pcre_mlc_cmp_ctx = pcre2_compile_context_create(pcre_mlc_ctx);
99 pcre_gen_cmp_ctx = pcre2_compile_context_create(pcre_gen_ctx);
100
101 pcre_gen_mtc_ctx = pcre2_match_context_create(pcre_gen_ctx);
102 }
103
104
105
106
107 /*************************************************
108 *   Execute regular expression and set strings   *
109 *************************************************/
110
111 /* This function runs a regular expression match, and sets up the pointers to
112 the matched substrings.  The matched strings are copied so the lifetime of
113 the subject is not a problem.  Matched strings will have the same taint status
114 as the subject string (this is not a de-taint method, and must not be made so
115 given the support for wildcards in REs).
116
117 Arguments:
118   re          the compiled expression
119   subject     the subject string
120   options     additional PCRE options
121   setup       if < 0 do full setup
122               if >= 0 setup from setup+1 onwards,
123                 excluding the full matched string
124
125 Returns:      TRUE if matched, or FALSE
126 */
127
128 BOOL
129 regex_match_and_setup(const pcre2_code * re, const uschar * subject, int options, int setup)
130 {
131 pcre2_match_data * md = pcre2_match_data_create_from_pattern(re, pcre_gen_ctx);
132 int res = pcre2_match(re, (PCRE2_SPTR)subject, PCRE2_ZERO_TERMINATED, 0,
133                         PCRE_EOPT | options, md, pcre_gen_mtc_ctx);
134 BOOL yield;
135
136 if ((yield = (res >= 0)))
137   {
138   PCRE2_SIZE * ovec = pcre2_get_ovector_pointer(md);
139   res = pcre2_get_ovector_count(md);
140   expand_nmax = setup < 0 ? 0 : setup + 1;
141   for (int matchnum = setup < 0 ? 0 : 1; matchnum < res; matchnum++)
142     {
143     /* Although PCRE2 has a pcre2_substring_get_bynumber() conveneience, it
144     seems to return a bad pointer when a capture group had no data, eg. (.*)
145     matching zero letters.  So use the underlying ovec and hope (!) that the
146     offsets are sane (including that case).  Should we go further and range-
147     check each one vs. the subject string length? */
148     int off = matchnum * 2;
149     int len = ovec[off + 1] - ovec[off];
150     expand_nstring[expand_nmax] = string_copyn(subject + ovec[off], len);
151     expand_nlength[expand_nmax++] = len;
152     }
153   expand_nmax--;
154   }
155 else if (res != PCRE2_ERROR_NOMATCH) DEBUG(D_any)
156   {
157   uschar errbuf[128];
158   pcre2_get_error_message(res, errbuf, sizeof(errbuf));
159   debug_printf_indent("pcre2: %s\n", errbuf);
160   }
161 /* pcre2_match_data_free(md);   gen ctx needs no free */
162 return yield;
163 }
164
165
166 /* Check just for match with regex.  Uses the common memory-handling.
167
168 Arguments:
169         re      compiled regex
170         subject string to be checked
171         slen    length of subject; -1 for nul-terminated
172         rptr    pointer for matched string, copied, or NULL
173
174 Return: TRUE for a match.
175 */
176
177 BOOL
178 regex_match(const pcre2_code * re, const uschar * subject, int slen, uschar ** rptr)
179 {
180 pcre2_match_data * md = pcre2_match_data_create(1, pcre_gen_ctx);
181 int rc = pcre2_match(re, (PCRE2_SPTR)subject,
182                       slen >= 0 ? slen : PCRE2_ZERO_TERMINATED,
183                       0, PCRE_EOPT, md, pcre_gen_mtc_ctx);
184 PCRE2_SIZE * ovec = pcre2_get_ovector_pointer(md);
185 BOOL ret = FALSE;
186
187 if (rc >= 0)
188   {
189   if (rptr)
190     *rptr = string_copyn(subject + ovec[0], ovec[1] - ovec[0]);
191   ret = TRUE;
192   }
193 /* pcre2_match_data_free(md);   gen ctx needs no free */
194 return ret;
195 }
196
197
198
199 /*************************************************
200 *            Set up processing details           *
201 *************************************************/
202
203 /* Save a text string for dumping when SIGUSR1 is received.
204 Do checks for overruns.
205
206 Arguments: format and arguments, as for printf()
207 Returns:   nothing
208 */
209
210 void
211 set_process_info(const char * format, ...)
212 {
213 gstring gs = { .size = PROCESS_INFO_SIZE - 2, .ptr = 0, .s = process_info };
214 gstring * g;
215 int len;
216 uschar * s;
217 va_list ap;
218
219 g = string_fmt_append(&gs, "%5d ", (int)getpid());
220 len = gstring_length(g);
221 va_start(ap, format);
222 if (!string_vformat(g, 0, format, ap))
223   {
224   gs.ptr = len;
225   g = string_cat(&gs, US"**** string overflowed buffer ****");
226   }
227 g = string_catn(g, US"\n", 1);
228 process_info_len = len_string_from_gstring(g, &s);
229 DEBUG(D_process_info) debug_printf("set_process_info: %s", process_info);
230 va_end(ap);
231 }
232
233 /***********************************************
234 *            Handler for SIGTERM               *
235 ***********************************************/
236
237 static void
238 term_handler(int sig)
239 {
240 exit(1);
241 }
242
243
244 /***********************************************
245 *            Handler for SIGSEGV               *
246 ***********************************************/
247
248 #define STACKDUMP_MAX 24
249 void
250 stackdump(void)
251 {
252 #ifndef NO_EXECINFO
253 void * buf[STACKDUMP_MAX];
254 char ** ss;
255 int nptrs = backtrace(buf, STACKDUMP_MAX);
256
257 log_write(0, LOG_MAIN|LOG_PANIC, "backtrace");
258 log_write(0, LOG_MAIN|LOG_PANIC, "---");
259 if ((ss = backtrace_symbols(buf, nptrs)))
260   {
261   for (int i = 0; i < nptrs; i++)
262     log_write(0, LOG_MAIN|LOG_PANIC, "\t%s", ss[i]);
263   free(ss);
264   }
265 else
266   log_write(0, LOG_MAIN|LOG_PANIC, "backtrace_symbols: %s", strerror(errno));
267 log_write(0, LOG_MAIN|LOG_PANIC, "---");
268 #endif
269 }
270 #undef STACKDUMP_MAX
271
272
273 static void
274 #ifdef SA_SIGINFO
275 segv_handler(int sig, siginfo_t * info, void * uctx)
276 {
277 log_write(0, LOG_MAIN|LOG_PANIC, "SIGSEGV (fault address: %p)", info->si_addr);
278 # if defined(SEGV_MAPERR) && defined(SEGV_ACCERR) && defined(SEGV_BNDERR) && defined(SEGV_PKUERR)
279 switch (info->si_code)
280   {
281   case SEGV_MAPERR: log_write(0, LOG_MAIN|LOG_PANIC, "SEGV_MAPERR"); break;
282   case SEGV_ACCERR: log_write(0, LOG_MAIN|LOG_PANIC, "SEGV_ACCERR"); break;
283   case SEGV_BNDERR: log_write(0, LOG_MAIN|LOG_PANIC, "SEGV_BNDERR"); break;
284   case SEGV_PKUERR: log_write(0, LOG_MAIN|LOG_PANIC, "SEGV_PKUERR"); break;
285   }
286 # endif
287 if (US info->si_addr < US 4096)
288   log_write(0, LOG_MAIN|LOG_PANIC, "SIGSEGV (null pointer indirection)");
289 else
290   log_write(0, LOG_MAIN|LOG_PANIC, "SIGSEGV (maybe attempt to write to immutable memory)");
291 if (process_info_len > 0)
292   log_write(0, LOG_MAIN|LOG_PANIC, "SIGSEGV (%.*s)", process_info_len, process_info);
293 stackdump();
294 signal(SIGSEGV, SIG_DFL);
295 kill(getpid(), sig);
296 }
297
298 #else
299 segv_handler(int sig)
300 {
301 log_write(0, LOG_MAIN|LOG_PANIC, "SIGSEGV (maybe attempt to write to immutable memory)");
302 if (process_info_len > 0)
303   log_write(0, LOG_MAIN|LOG_PANIC, "SIGSEGV (%.*s)", process_info_len, process_info);
304 stackdump();
305 signal(SIGSEGV, SIG_DFL);
306 kill(getpid(), sig);
307 }
308 #endif
309
310
311 /*************************************************
312 *             Handler for SIGUSR1                *
313 *************************************************/
314
315 /* SIGUSR1 causes any exim process to write to the process log details of
316 what it is currently doing. It will only be used if the OS is capable of
317 setting up a handler that causes automatic restarting of any system call
318 that is in progress at the time.
319
320 This function takes care to be signal-safe.
321
322 Argument: the signal number (SIGUSR1)
323 Returns:  nothing
324 */
325
326 static void
327 usr1_handler(int sig)
328 {
329 int fd;
330
331 os_restarting_signal(sig, usr1_handler);
332
333 if (!process_log_path) return;
334 fd = log_open_as_exim(process_log_path);
335
336 /* If we are neither exim nor root, or if we failed to create the log file,
337 give up. There is not much useful we can do with errors, since we don't want
338 to disrupt whatever is going on outside the signal handler. */
339
340 if (fd < 0) return;
341
342 (void)write(fd, process_info, process_info_len);
343 (void)close(fd);
344 }
345
346
347
348 /*************************************************
349 *             Timeout handler                    *
350 *************************************************/
351
352 /* This handler is enabled most of the time that Exim is running. The handler
353 doesn't actually get used unless alarm() has been called to set a timer, to
354 place a time limit on a system call of some kind. When the handler is run, it
355 re-enables itself.
356
357 There are some other SIGALRM handlers that are used in special cases when more
358 than just a flag setting is required; for example, when reading a message's
359 input. These are normally set up in the code module that uses them, and the
360 SIGALRM handler is reset to this one afterwards.
361
362 Argument: the signal value (SIGALRM)
363 Returns:  nothing
364 */
365
366 void
367 sigalrm_handler(int sig)
368 {
369 sigalrm_seen = TRUE;
370 os_non_restarting_signal(SIGALRM, sigalrm_handler);
371 }
372
373
374
375 /*************************************************
376 *      Sleep for a fractional time interval      *
377 *************************************************/
378
379 /* This function is called by millisleep() and exim_wait_tick() to wait for a
380 period of time that may include a fraction of a second. The coding is somewhat
381 tedious. We do not expect setitimer() ever to fail, but if it does, the process
382 will wait for ever, so we panic in this instance. (There was a case of this
383 when a bug in a function that calls milliwait() caused it to pass invalid data.
384 That's when I added the check. :-)
385
386 We assume it to be not worth sleeping for under 50us; this value will
387 require revisiting as hardware advances.  This avoids the issue of
388 a zero-valued timer setting meaning "never fire".
389
390 Argument:  an itimerval structure containing the interval
391 Returns:   nothing
392 */
393
394 static void
395 milliwait(struct itimerval *itval)
396 {
397 sigset_t sigmask;
398 sigset_t old_sigmask;
399 int save_errno = errno;
400
401 if (itval->it_value.tv_usec < 50 && itval->it_value.tv_sec == 0)
402   return;
403 (void)sigemptyset(&sigmask);                           /* Empty mask */
404 (void)sigaddset(&sigmask, SIGALRM);                    /* Add SIGALRM */
405 (void)sigprocmask(SIG_BLOCK, &sigmask, &old_sigmask);  /* Block SIGALRM */
406 if (setitimer(ITIMER_REAL, itval, NULL) < 0)           /* Start timer */
407   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
408     "setitimer() failed: %s", strerror(errno));
409 (void)sigfillset(&sigmask);                            /* All signals */
410 (void)sigdelset(&sigmask, SIGALRM);                    /* Remove SIGALRM */
411 (void)sigsuspend(&sigmask);                            /* Until SIGALRM */
412 (void)sigprocmask(SIG_SETMASK, &old_sigmask, NULL);    /* Restore mask */
413 errno = save_errno;
414 sigalrm_seen = FALSE;
415 }
416
417
418
419
420 /*************************************************
421 *         Millisecond sleep function             *
422 *************************************************/
423
424 /* The basic sleep() function has a granularity of 1 second, which is too rough
425 in some cases - for example, when using an increasing delay to slow down
426 spammers.
427
428 Argument:    number of millseconds
429 Returns:     nothing
430 */
431
432 void
433 millisleep(int msec)
434 {
435 struct itimerval itval = {.it_interval = {.tv_sec = 0, .tv_usec = 0},
436                           .it_value = {.tv_sec = msec/1000,
437                                        .tv_usec = (msec % 1000) * 1000}};
438 milliwait(&itval);
439 }
440
441
442
443 /*************************************************
444 *         Compare microsecond times              *
445 *************************************************/
446
447 /*
448 Arguments:
449   tv1         the first time
450   tv2         the second time
451
452 Returns:      -1, 0, or +1
453 */
454
455 static int
456 exim_tvcmp(struct timeval *t1, struct timeval *t2)
457 {
458 if (t1->tv_sec > t2->tv_sec) return +1;
459 if (t1->tv_sec < t2->tv_sec) return -1;
460 if (t1->tv_usec > t2->tv_usec) return +1;
461 if (t1->tv_usec < t2->tv_usec) return -1;
462 return 0;
463 }
464
465
466
467
468 /*************************************************
469 *          Clock tick wait function              *
470 *************************************************/
471
472 #ifdef _POSIX_MONOTONIC_CLOCK
473 # ifdef CLOCK_BOOTTIME
474 #  define EXIM_CLOCKTYPE CLOCK_BOOTTIME
475 # else
476 #  define EXIM_CLOCKTYPE CLOCK_MONOTONIC
477 # endif
478
479 /* Amount EXIM_CLOCK is behind realtime, at startup. */
480 static struct timespec offset_ts;
481
482 static void
483 exim_clock_init(void)
484 {
485 struct timeval tv;
486 if (clock_gettime(EXIM_CLOCKTYPE, &offset_ts) != 0) return;
487 (void)gettimeofday(&tv, NULL);
488 offset_ts.tv_sec = tv.tv_sec - offset_ts.tv_sec;
489 offset_ts.tv_nsec = tv.tv_usec * 1000 - offset_ts.tv_nsec;
490 if (offset_ts.tv_nsec >= 0) return;
491 offset_ts.tv_sec--;
492 offset_ts.tv_nsec += 1000*1000*1000;
493 }
494 #endif
495
496
497 void
498 exim_gettime(struct timeval * tv)
499 {
500 #ifdef _POSIX_MONOTONIC_CLOCK
501 struct timespec now_ts;
502
503 if (clock_gettime(EXIM_CLOCKTYPE, &now_ts) == 0)
504   {
505   now_ts.tv_sec += offset_ts.tv_sec;
506   if ((now_ts.tv_nsec += offset_ts.tv_nsec) >= 1000*1000*1000)
507     {
508     now_ts.tv_sec++;
509     now_ts.tv_nsec -= 1000*1000*1000;
510     }
511   tv->tv_sec = now_ts.tv_sec;
512   tv->tv_usec = now_ts.tv_nsec / 1000;
513   }
514 else
515 #endif
516   (void)gettimeofday(tv, NULL);
517 }
518
519
520 /* Exim uses a time + a pid to generate a unique identifier in two places: its
521 message IDs, and in file names for maildir deliveries. Because some OS now
522 re-use pids within the same second, sub-second times are now being used.
523 However, for absolute certainty, we must ensure the clock has ticked before
524 allowing the relevant process to complete. At the time of implementation of
525 this code (February 2003), the speed of processors is such that the clock will
526 invariably have ticked already by the time a process has done its job. This
527 function prepares for the time when things are faster - and it also copes with
528 clocks that go backwards.
529
530 Arguments:
531   prev_tv      A timeval which was used to create uniqueness; its usec field
532                  has been rounded down to the value of the resolution.
533                  We want to be sure the current time is greater than this.
534                  On return, updated to current (rounded down).
535   resolution   The resolution that was used to divide the microseconds
536                  (1 for maildir, larger for message ids)
537
538 Returns:       nothing
539 */
540
541 void
542 exim_wait_tick(struct timeval * prev_tv, int resolution)
543 {
544 struct timeval now_tv;
545 long int now_true_usec;
546
547 exim_gettime(&now_tv);
548 now_true_usec = now_tv.tv_usec;
549 now_tv.tv_usec = (now_true_usec/resolution) * resolution;
550
551 while (exim_tvcmp(&now_tv, prev_tv) <= 0)
552   {
553   struct itimerval itval;
554   itval.it_interval.tv_sec = 0;
555   itval.it_interval.tv_usec = 0;
556   itval.it_value.tv_sec = prev_tv->tv_sec - now_tv.tv_sec;
557   itval.it_value.tv_usec = prev_tv->tv_usec + resolution - now_true_usec;
558
559   /* We know that, overall, "now" is less than or equal to "then". Therefore, a
560   negative value for the microseconds is possible only in the case when "now"
561   is more than a second less than "tgt". That means that itval.it_value.tv_sec
562   is greater than zero. The following correction is therefore safe. */
563
564   if (itval.it_value.tv_usec < 0)
565     {
566     itval.it_value.tv_usec += 1000000;
567     itval.it_value.tv_sec -= 1;
568     }
569
570   DEBUG(D_transport|D_receive)
571     {
572     if (!f.running_in_test_harness)
573       {
574       debug_printf("tick check: " TIME_T_FMT ".%06lu " TIME_T_FMT ".%06lu\n",
575         prev_tv->tv_sec, (long) prev_tv->tv_usec,
576         now_tv.tv_sec, (long) now_tv.tv_usec);
577       debug_printf("waiting " TIME_T_FMT ".%06lu sec\n",
578         itval.it_value.tv_sec, (long) itval.it_value.tv_usec);
579       }
580     }
581
582   milliwait(&itval);
583
584   /* Be prapared to go around if the kernel does not implement subtick
585   granularity (GNU Hurd) */
586
587   exim_gettime(&now_tv);
588   now_true_usec = now_tv.tv_usec;
589   now_tv.tv_usec = (now_true_usec/resolution) * resolution;
590   }
591 *prev_tv = now_tv;
592 }
593
594
595
596
597 /*************************************************
598 *   Call fopen() with umask 777 and adjust mode  *
599 *************************************************/
600
601 /* Exim runs with umask(0) so that files created with open() have the mode that
602 is specified in the open() call. However, there are some files, typically in
603 the spool directory, that are created with fopen(). They end up world-writeable
604 if no precautions are taken. Although the spool directory is not accessible to
605 the world, this is an untidiness. So this is a wrapper function for fopen()
606 that sorts out the mode of the created file.
607
608 Arguments:
609    filename       the file name
610    options        the fopen() options
611    mode           the required mode
612
613 Returns:          the fopened FILE or NULL
614 */
615
616 FILE *
617 modefopen(const uschar *filename, const char *options, mode_t mode)
618 {
619 mode_t saved_umask = umask(0777);
620 FILE *f = Ufopen(filename, options);
621 (void)umask(saved_umask);
622 if (f != NULL) (void)fchmod(fileno(f), mode);
623 return f;
624 }
625
626
627 /*************************************************
628 *   Ensure stdin, stdout, and stderr exist       *
629 *************************************************/
630
631 /* Some operating systems grumble if an exec() happens without a standard
632 input, output, and error (fds 0, 1, 2) being defined. The worry is that some
633 file will be opened and will use these fd values, and then some other bit of
634 code will assume, for example, that it can write error messages to stderr.
635 This function ensures that fds 0, 1, and 2 are open if they do not already
636 exist, by connecting them to /dev/null.
637
638 This function is also used to ensure that std{in,out,err} exist at all times,
639 so that if any library that Exim calls tries to use them, it doesn't crash.
640
641 Arguments:  None
642 Returns:    Nothing
643 */
644
645 void
646 exim_nullstd(void)
647 {
648 int devnull = -1;
649 struct stat statbuf;
650 for (int i = 0; i <= 2; i++)
651   {
652   if (fstat(i, &statbuf) < 0 && errno == EBADF)
653     {
654     if (devnull < 0) devnull = open("/dev/null", O_RDWR);
655     if (devnull < 0) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "%s",
656       string_open_failed("/dev/null", NULL));
657     if (devnull != i) (void)dup2(devnull, i);
658     }
659   }
660 if (devnull > 2) (void)close(devnull);
661 }
662
663
664
665
666 /*************************************************
667 *   Close unwanted file descriptors for delivery *
668 *************************************************/
669
670 /* This function is called from a new process that has been forked to deliver
671 an incoming message, either directly, or using exec.
672
673 We want any smtp input streams to be closed in this new process. However, it
674 has been observed that using fclose() here causes trouble. When reading in -bS
675 input, duplicate copies of messages have been seen. The files will be sharing a
676 file pointer with the parent process, and it seems that fclose() (at least on
677 some systems - I saw this on Solaris 2.5.1) messes with that file pointer, at
678 least sometimes. Hence we go for closing the underlying file descriptors.
679
680 If TLS is active, we want to shut down the TLS library, but without molesting
681 the parent's SSL connection.
682
683 For delivery of a non-SMTP message, we want to close stdin and stdout (and
684 stderr unless debugging) because the calling process might have set them up as
685 pipes and be waiting for them to close before it waits for the submission
686 process to terminate. If they aren't closed, they hold up the calling process
687 until the initial delivery process finishes, which is not what we want.
688
689 Exception: We do want it for synchronous delivery!
690
691 And notwithstanding all the above, if D_resolver is set, implying resolver
692 debugging, leave stdout open, because that's where the resolver writes its
693 debugging output.
694
695 When we close stderr (which implies we've also closed stdout), we also get rid
696 of any controlling terminal.
697
698 Arguments:   None
699 Returns:     Nothing
700 */
701
702 static void
703 close_unwanted(void)
704 {
705 if (smtp_input)
706   {
707 #ifndef DISABLE_TLS
708   tls_close(NULL, TLS_NO_SHUTDOWN);      /* Shut down the TLS library */
709 #endif
710   (void)close(fileno(smtp_in));
711   (void)close(fileno(smtp_out));
712   smtp_in = NULL;
713   }
714 else
715   {
716   (void)close(0);                                          /* stdin */
717   if ((debug_selector & D_resolver) == 0) (void)close(1);  /* stdout */
718   if (debug_selector == 0)                                 /* stderr */
719     {
720     if (!f.synchronous_delivery)
721       {
722       (void)close(2);
723       log_stderr = NULL;
724       }
725     (void)setsid();
726     }
727   }
728 }
729
730
731
732
733 /*************************************************
734 *          Set uid and gid                       *
735 *************************************************/
736
737 /* This function sets a new uid and gid permanently, optionally calling
738 initgroups() to set auxiliary groups. There are some special cases when running
739 Exim in unprivileged modes. In these situations the effective uid will not be
740 root; if we already have the right effective uid/gid, and don't need to
741 initialize any groups, leave things as they are.
742
743 Arguments:
744   uid        the uid
745   gid        the gid
746   igflag     TRUE if initgroups() wanted
747   msg        text to use in debugging output and failure log
748
749 Returns:     nothing; bombs out on failure
750 */
751
752 void
753 exim_setugid(uid_t uid, gid_t gid, BOOL igflag, const uschar * msg)
754 {
755 uid_t euid = geteuid();
756 gid_t egid = getegid();
757
758 if (euid == root_uid || euid != uid || egid != gid || igflag)
759   {
760   /* At least one OS returns +1 for initgroups failure, so just check for
761   non-zero. */
762
763   if (igflag)
764     {
765     struct passwd *pw = getpwuid(uid);
766     if (!pw)
767       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "cannot run initgroups(): "
768         "no passwd entry for uid=%ld", (long int)uid);
769
770     if (initgroups(pw->pw_name, gid) != 0)
771       log_write(0,LOG_MAIN|LOG_PANIC_DIE,"initgroups failed for uid=%ld: %s",
772         (long int)uid, strerror(errno));
773     }
774
775   if (setgid(gid) < 0 || setuid(uid) < 0)
776     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "unable to set gid=%ld or uid=%ld "
777       "(euid=%ld): %s", (long int)gid, (long int)uid, (long int)euid, msg);
778   }
779
780 /* Debugging output included uid/gid and all groups */
781
782 DEBUG(D_uid)
783   {
784   int group_count, save_errno;
785   gid_t group_list[EXIM_GROUPLIST_SIZE];
786   debug_printf("changed uid/gid: %s\n  uid=%ld gid=%ld pid=%ld\n", msg,
787     (long int)geteuid(), (long int)getegid(), (long int)getpid());
788   group_count = getgroups(nelem(group_list), group_list);
789   save_errno = errno;
790   debug_printf("  auxiliary group list:");
791   if (group_count > 0)
792     for (int i = 0; i < group_count; i++) debug_printf(" %d", (int)group_list[i]);
793   else if (group_count < 0)
794     debug_printf(" <error: %s>", strerror(save_errno));
795   else debug_printf(" <none>");
796   debug_printf("\n");
797   }
798 }
799
800
801
802
803 /*************************************************
804 *               Exit point                       *
805 *************************************************/
806
807 /* Exim exits via this function so that it always clears up any open
808 databases.
809
810 Arguments:
811   rc         return code
812
813 Returns:     does not return
814 */
815
816 void
817 exim_exit(int rc)
818 {
819 search_tidyup();
820 store_exit();
821 DEBUG(D_any)
822   debug_printf(">>>>>>>>>>>>>>>> Exim pid=%d (%s) terminating with rc=%d "
823     ">>>>>>>>>>>>>>>>\n",
824     (int)getpid(), process_purpose, rc);
825 exit(rc);
826 }
827
828
829 void
830 exim_underbar_exit(int rc)
831 {
832 store_exit();
833 DEBUG(D_any)
834   debug_printf(">>>>>>>>>>>>>>>> Exim pid=%d (%s) terminating with rc=%d "
835     ">>>>>>>>>>>>>>>>\n",
836     (int)getpid(), process_purpose, rc);
837 _exit(rc);
838 }
839
840
841
842 /* Print error string, then die */
843 static void
844 exim_fail(const char * fmt, ...)
845 {
846 va_list ap;
847 va_start(ap, fmt);
848 vfprintf(stderr, fmt, ap);
849 va_end(ap);
850 exit(EXIT_FAILURE);
851 }
852
853 /* fail if a length is too long */
854 static inline void
855 exim_len_fail_toolong(int itemlen, int maxlen, const char * description)
856 {
857 if (itemlen <= maxlen)
858   return;
859 fprintf(stderr, "exim: length limit exceeded (%d > %d) for: %s\n",
860         itemlen, maxlen, description);
861 exit(EXIT_FAILURE);
862 }
863
864 /* only pass through the string item back to the caller if it's short enough */
865 static inline const uschar *
866 exim_str_fail_toolong(const uschar * item, int maxlen, const char * description)
867 {
868 if (!item)
869   exim_fail("exim: bad item for: %s\n", description);
870 exim_len_fail_toolong(Ustrlen(item), maxlen, description);
871 return item;
872 }
873
874 /* exim_chown_failure() called from exim_chown()/exim_fchown() on failure
875 of chown()/fchown().  See src/functions.h for more explanation */
876 int
877 exim_chown_failure(int fd, const uschar *name, uid_t owner, gid_t group)
878 {
879 int saved_errno = errno;  /* from the preceeding chown call */
880 #if 1
881 log_write(0, LOG_MAIN|LOG_PANIC,
882   __FILE__ ":%d: chown(%s, %d:%d) failed (%s)."
883   " Please contact the authors and refer to https://bugs.exim.org/show_bug.cgi?id=2391",
884   __LINE__, name?name:US"<unknown>", owner, group, strerror(errno));
885 #else
886 /* I leave this here, commented, in case the "bug"(?) comes up again.
887    It is not an Exim bug, but we can provide a workaround.
888    See Bug 2391
889    HS 2019-04-18 */
890
891 struct stat buf;
892
893 if (0 == (fd < 0 ? stat(name, &buf) : fstat(fd, &buf)))
894   {
895   if (buf.st_uid == owner && buf.st_gid == group) return 0;
896   log_write(0, LOG_MAIN|LOG_PANIC, "Wrong ownership on %s", name);
897   }
898 else log_write(0, LOG_MAIN|LOG_PANIC, "Stat failed on %s: %s", name, strerror(errno));
899
900 #endif
901 errno = saved_errno;
902 return -1;
903 }
904
905
906 /* Bump the index for argv, checking for overflow,
907 and return the argument. */
908
909 static const uschar *
910 next_argv(const uschar ** argv, int * pi, int argc, const uschar * where)
911 {
912 int i = *pi;
913 if (++i >= argc) exim_fail("exim: bad item for: %s\n", where);
914 return argv[*pi = i];
915 }
916
917
918 /*************************************************
919 *         Extract port from host address         *
920 *************************************************/
921
922 /* Called to extract the port from the values given to -oMa and -oMi.
923 It also checks the syntax of the address, and terminates it before the
924 port data when a port is extracted.
925
926 Argument:
927   address   the address, with possible port on the end
928
929 Returns:    the port, or zero if there isn't one
930             bombs out on a syntax error
931 */
932
933 static int
934 check_port(uschar *address)
935 {
936 int port = host_address_extract_port(address);
937 if (string_is_ip_address(address, NULL) == 0)
938   exim_fail("exim abandoned: \"%s\" is not an IP address\n", address);
939 return port;
940 }
941
942
943
944 /*************************************************
945 *              Test/verify an address            *
946 *************************************************/
947
948 /* This function is called by the -bv and -bt code. It extracts a working
949 address from a full RFC 822 address. This isn't really necessary per se, but it
950 has the effect of collapsing source routes.
951
952 Arguments:
953   s            the address string
954   flags        flag bits for verify_address()
955   exit_value   to be set for failures
956
957 Returns:       nothing
958 */
959
960 static void
961 test_address(uschar *s, int flags, int *exit_value)
962 {
963 int start, end, domain;
964 uschar *parse_error = NULL;
965 uschar *address = parse_extract_address(s, &parse_error, &start, &end, &domain,
966   FALSE);
967 if (!address)
968   {
969   fprintf(stdout, "syntax error: %s\n", parse_error);
970   *exit_value = 2;
971   }
972 else
973   {
974   int rc = verify_address(deliver_make_addr(address,TRUE), stdout, flags, -1,
975     -1, -1, NULL, NULL, NULL);
976   if (rc == FAIL) *exit_value = 2;
977   else if (rc == DEFER && *exit_value == 0) *exit_value = 1;
978   }
979 }
980
981
982
983 /*************************************************
984 *          Show supported features               *
985 *************************************************/
986
987 static void
988 show_string(BOOL is_stdout, gstring * g)
989 {
990 const uschar * s = string_from_gstring(g);
991 if (s)
992   if (is_stdout) fputs(CCS s, stdout);
993   else debug_printf("%s", s);
994 }
995
996
997 static gstring *
998 show_db_version(gstring * g)
999 {
1000 g = string_cat(g, US"Hints DB:\n");
1001 #ifdef DB_VERSION_STRING
1002 DEBUG(D_any)
1003   {
1004   g = string_fmt_append(g, " Library version: BDB: Compile: %s\n", DB_VERSION_STRING);
1005   g = string_fmt_append(g, "                       Runtime: %s\n",
1006     db_version(NULL, NULL, NULL));
1007   }
1008 else
1009   g = string_fmt_append(g, " Berkeley DB: %s\n", DB_VERSION_STRING);
1010
1011 #elif defined(BTREEVERSION) && defined(HASHVERSION)
1012 # ifdef USE_DB
1013   g = string_cat(g, US" Probably Berkeley DB version 1.8x (native mode)\n");
1014 # else
1015   g = string_cat(g, US" Probably Berkeley DB version 1.8x (compatibility mode)\n");
1016 # endif
1017
1018 #elif defined(_DBM_RDONLY) || defined(dbm_dirfno)
1019 g = string_cat(g, US" Probably ndbm\n");
1020 #elif defined(USE_SQLITE)
1021 g = string_cat(g, US" Using sqlite3\n");
1022 #elif defined(USE_TDB)
1023 g = string_cat(g, US" Using tdb\n");
1024 #else
1025 # ifdef USE_GDBM
1026 g = string_cat(g, US" Probably GDBM (native mode)\n");
1027 # else
1028 g = string_cat(g, US" Probably GDBM (compatibility mode)\n");
1029 # endif
1030 #endif
1031 return g;
1032 }
1033
1034
1035 /* This function is called for -bV/--version and for -d to output the optional
1036 features of the current Exim binary.
1037
1038 Arguments:  BOOL, true for stdout else debug channel
1039 Returns:    nothing
1040 */
1041
1042 static void
1043 show_whats_supported(BOOL is_stdout)
1044 {
1045 rmark reset_point = store_mark();
1046 gstring * g = NULL;
1047
1048 DEBUG(D_any) {} else g = show_db_version(g);
1049
1050 g = string_cat(g, US"Support for:");
1051 #ifdef WITH_CONTENT_SCAN
1052   g = string_cat(g, US" Content_Scanning");
1053 #endif
1054 #ifdef SUPPORT_CRYPTEQ
1055   g = string_cat(g, US" crypteq");
1056 #endif
1057 #ifdef EXPAND_DLFUNC
1058   g = string_cat(g, US" Expand_dlfunc");
1059 #endif
1060 #if HAVE_ICONV
1061   g = string_cat(g, US" iconv()");
1062 #endif
1063 #if HAVE_IPV6
1064   g = string_cat(g, US" IPv6");
1065 #endif
1066 #ifdef SUPPORT_PAM
1067   g = string_cat(g, US" PAM");
1068 #endif
1069 #ifdef EXIM_PERL
1070   g = string_cat(g, US" Perl");
1071 #endif
1072 #ifdef USE_GNUTLS
1073   g = string_cat(g, US" GnuTLS");
1074 #endif
1075 #ifdef SUPPORT_MOVE_FROZEN_MESSAGES
1076   g = string_cat(g, US" move_frozen_messages");
1077 #endif
1078 #ifdef USE_OPENSSL
1079   g = string_cat(g, US" OpenSSL");
1080 #endif
1081 #if defined(CYRUS_PWCHECK_SOCKET)
1082   g = string_cat(g, US" pwcheck");
1083 #endif
1084 #if defined(RADIUS_CONFIG_FILE)
1085   g = string_cat(g, US" radius");
1086 #endif
1087 #ifndef DISABLE_TLS_RESUME
1088   g = string_cat(g, US" TLS_resume");
1089 #endif
1090 #ifdef SUPPORT_TRANSLATE_IP_ADDRESS
1091   g = string_cat(g, US" translate_ip_address");
1092 #endif
1093 #ifdef USE_TCP_WRAPPERS
1094   g = string_cat(g, US" TCPwrappers");
1095 #endif
1096 #ifdef HAVE_SETCLASSRESOURCES
1097   g = string_cat(g, US" use_setclassresources");
1098 #endif
1099 #ifdef SUPPORT_DANE
1100   g = string_cat(g, US" DANE");
1101 #endif
1102 #ifndef DISABLE_DKIM
1103   g = string_cat(g, US" DKIM");
1104 #endif
1105 #ifdef SUPPORT_DMARC
1106   g = string_cat(g, US" DMARC");
1107 #endif
1108 #ifndef DISABLE_DNSSEC
1109   g = string_cat(g, US" DNSSEC");
1110 #endif
1111 #ifndef DISABLE_ESMTP_LIMITS
1112   g = string_cat(g, US" ESMTP_Limits");
1113 #endif
1114 #ifndef DISABLE_WELLKNOWN
1115   g = string_cat(g, US" ESMTP_Wellknown");
1116 #endif
1117 #ifndef DISABLE_EVENT
1118   g = string_cat(g, US" Event");
1119 #endif
1120 #ifdef SUPPORT_I18N
1121   g = string_cat(g, US" I18N");
1122 #endif
1123 #ifndef DISABLE_OCSP
1124   g = string_cat(g, US" OCSP");
1125 #endif
1126 #ifndef DISABLE_PIPE_CONNECT
1127   g = string_cat(g, US" PIPECONNECT");
1128 #endif
1129 #ifndef DISABLE_PRDR
1130   g = string_cat(g, US" PRDR");
1131 #endif
1132 #ifdef SUPPORT_PROXY
1133   g = string_cat(g, US" PROXY");
1134 #endif
1135 #ifndef DISABLE_QUEUE_RAMP
1136   g = string_cat(g, US" Queue_Ramp");
1137 #endif
1138 #ifdef SUPPORT_SOCKS
1139   g = string_cat(g, US" SOCKS");
1140 #endif
1141 #ifdef SUPPORT_SPF
1142   g = string_cat(g, US" SPF");
1143 #endif
1144 #if defined(SUPPORT_SRS)
1145   g = string_cat(g, US" SRS");
1146 #endif
1147 #ifdef TCP_FASTOPEN
1148   tcp_init();
1149   if (f.tcp_fastopen_ok) g = string_cat(g, US" TCP_Fast_Open");
1150 #endif
1151 #ifdef EXPERIMENTAL_ARC
1152   g = string_cat(g, US" Experimental_ARC");
1153 #endif
1154 #ifdef EXPERIMENTAL_BRIGHTMAIL
1155   g = string_cat(g, US" Experimental_Brightmail");
1156 #endif
1157 #ifdef EXPERIMENTAL_DCC
1158   g = string_cat(g, US" Experimental_DCC");
1159 #endif
1160 #ifdef EXPERIMENTAL_DSN_INFO
1161   g = string_cat(g, US" Experimental_DSN_info");
1162 #endif
1163 #ifdef EXPERIMENTAL_QUEUEFILE
1164   g = string_cat(g, US" Experimental_QUEUEFILE");
1165 #endif
1166 #ifdef EXPERIMENTAL_XCLIENT
1167   g = string_cat(g, US" Experimental_XCLIENT");
1168 #endif
1169 g = string_cat(g, US"\n");
1170
1171 g = string_cat(g, US"Lookups (built-in):");
1172 #if defined(LOOKUP_LSEARCH) && LOOKUP_LSEARCH!=2
1173   g = string_cat(g, US" lsearch wildlsearch nwildlsearch iplsearch");
1174 #endif
1175 #if defined(LOOKUP_CDB) && LOOKUP_CDB!=2
1176   g = string_cat(g, US" cdb");
1177 #endif
1178 #if defined(LOOKUP_DBM) && LOOKUP_DBM!=2
1179   g = string_cat(g, US" dbm dbmjz dbmnz");
1180 #endif
1181 #if defined(LOOKUP_DNSDB) && LOOKUP_DNSDB!=2
1182   g = string_cat(g, US" dnsdb");
1183 #endif
1184 #if defined(LOOKUP_DSEARCH) && LOOKUP_DSEARCH!=2
1185   g = string_cat(g, US" dsearch");
1186 #endif
1187 #if defined(LOOKUP_IBASE) && LOOKUP_IBASE!=2
1188   g = string_cat(g, US" ibase");
1189 #endif
1190 #if defined(LOOKUP_JSON) && LOOKUP_JSON!=2
1191   g = string_cat(g, US" json");
1192 #endif
1193 #if defined(LOOKUP_LDAP) && LOOKUP_LDAP!=2
1194   g = string_cat(g, US" ldap ldapdn ldapm");
1195 #endif
1196 #ifdef LOOKUP_LMDB
1197   g = string_cat(g, US" lmdb");
1198 #endif
1199 #if defined(LOOKUP_MYSQL) && LOOKUP_MYSQL!=2
1200   g = string_cat(g, US" mysql");
1201 #endif
1202 #if defined(LOOKUP_NIS) && LOOKUP_NIS!=2
1203   g = string_cat(g, US" nis nis0");
1204 #endif
1205 #if defined(LOOKUP_NISPLUS) && LOOKUP_NISPLUS!=2
1206   g = string_cat(g, US" nisplus");
1207 #endif
1208 #if defined(LOOKUP_ORACLE) && LOOKUP_ORACLE!=2
1209   g = string_cat(g, US" oracle");
1210 #endif
1211 #if defined(LOOKUP_PASSWD) && LOOKUP_PASSWD!=2
1212   g = string_cat(g, US" passwd");
1213 #endif
1214 #if defined(LOOKUP_PGSQL) && LOOKUP_PGSQL!=2
1215   g = string_cat(g, US" pgsql");
1216 #endif
1217 #if defined(LOOKUP_REDIS) && LOOKUP_REDIS!=2
1218   g = string_cat(g, US" redis");
1219 #endif
1220 #if defined(LOOKUP_SQLITE) && LOOKUP_SQLITE!=2
1221   g = string_cat(g, US" sqlite");
1222 #endif
1223 #if defined(LOOKUP_TESTDB) && LOOKUP_TESTDB!=2
1224   g = string_cat(g, US" testdb");
1225 #endif
1226 #if defined(LOOKUP_WHOSON) && LOOKUP_WHOSON!=2
1227   g = string_cat(g, US" whoson");
1228 #endif
1229 g = string_cat(g, US"\n");
1230
1231 g = auth_show_supported(g);
1232 g = route_show_supported(g);
1233 g = transport_show_supported(g);
1234
1235 #ifdef WITH_CONTENT_SCAN
1236 g = malware_show_supported(g);
1237 #endif
1238 show_string(is_stdout, g); g = NULL;
1239
1240 if (fixed_never_users[0] > 0)
1241   {
1242   int i;
1243   g = string_cat(g, US"Fixed never_users: ");
1244   for (i = 1; i <= (int)fixed_never_users[0] - 1; i++)
1245     string_fmt_append(g, "%u:", (unsigned)fixed_never_users[i]);
1246   g = string_fmt_append(g, "%u\n", (unsigned)fixed_never_users[i]);
1247   }
1248
1249 g = string_fmt_append(g, "Configure owner: %d:%d\n", config_uid, config_gid);
1250
1251 g = string_fmt_append(g, "Size of off_t: " SIZE_T_FMT "\n", sizeof(off_t));
1252
1253 /* Everything else is details which are only worth reporting when debugging.
1254 Perhaps the tls_version_report should move into this too. */
1255 DEBUG(D_any)
1256   {
1257
1258 /* clang defines __GNUC__ (at least, for me) so test for it first */
1259 #if defined(__clang__)
1260   g = string_fmt_append(g, "Compiler: CLang [%s]\n", __clang_version__);
1261 #elif defined(__GNUC__)
1262 # ifdef __VERSION__
1263   g = string_fmt_append(g, "Compiler: GCC [%s]\n", __VERSION__);
1264 # else
1265   g = string_fmt_append(g, "Compiler: GCC [%s]\n", "? unknown version ?";
1266 # endif
1267 #else
1268   g = string_cat(g, US"Compiler: <unknown>\n");
1269 #endif
1270
1271 #if defined(__GLIBC__) && !defined(__UCLIBC__)
1272   g = string_fmt_append(g, "Library version: Glibc: Compile: %d.%d\n",
1273                 __GLIBC__, __GLIBC_MINOR__);
1274   if (__GLIBC_PREREQ(2, 1))
1275     g = string_fmt_append(g, "                        Runtime: %s\n",
1276                 gnu_get_libc_version());
1277 #endif
1278
1279 g = show_db_version(g);
1280
1281 #ifndef DISABLE_TLS
1282   g = tls_version_report(g);
1283 #endif
1284 #ifdef SUPPORT_I18N
1285   g = utf8_version_report(g);
1286 #endif
1287 #ifdef SUPPORT_DMARC
1288   g = dmarc_version_report(g);
1289 #endif
1290 #ifdef SUPPORT_SPF
1291   g = spf_lib_version_report(g);
1292 #endif
1293
1294 show_string(is_stdout, g);
1295 g = NULL;
1296
1297 for (auth_info * authi = auths_available; *authi->driver_name != '\0'; ++authi)
1298   if (authi->version_report)
1299     g = (*authi->version_report)(g);
1300
1301   /* PCRE_PRERELEASE is either defined and empty or a bare sequence of
1302   characters; unless it's an ancient version of PCRE in which case it
1303   is not defined. */
1304 #ifndef PCRE_PRERELEASE
1305 # define PCRE_PRERELEASE
1306 #endif
1307 #define QUOTE(X) #X
1308 #define EXPAND_AND_QUOTE(X) QUOTE(X)
1309   {
1310   uschar buf[24];
1311   pcre2_config(PCRE2_CONFIG_VERSION, buf);
1312   g = string_fmt_append(g, "Library version: PCRE2: Compile: %d.%d%s\n"
1313               "                        Runtime: %s\n",
1314           PCRE2_MAJOR, PCRE2_MINOR,
1315           EXPAND_AND_QUOTE(PCRE2_PRERELEASE) "",
1316           buf);
1317   }
1318 #undef QUOTE
1319 #undef EXPAND_AND_QUOTE
1320
1321 show_string(is_stdout, g);
1322 g = NULL;
1323
1324 init_lookup_list();
1325 for (int i = 0; i < lookup_list_count; i++)
1326   if (lookup_list[i]->version_report)
1327     g = lookup_list[i]->version_report(g);
1328 show_string(is_stdout, g);
1329 g = NULL;
1330
1331 #ifdef WHITELIST_D_MACROS
1332   g = string_fmt_append(g, "WHITELIST_D_MACROS: \"%s\"\n", WHITELIST_D_MACROS);
1333 #else
1334   g = string_cat(g, US"WHITELIST_D_MACROS unset\n");
1335 #endif
1336 #ifdef TRUSTED_CONFIG_LIST
1337   g = string_fmt_append(g, "TRUSTED_CONFIG_LIST: \"%s\"\n", TRUSTED_CONFIG_LIST);
1338 #else
1339   g = string_cat(g, US"TRUSTED_CONFIG_LIST unset\n");
1340 #endif
1341   }
1342
1343 show_string(is_stdout, g);
1344 store_reset(reset_point);
1345 }
1346
1347
1348 /*************************************************
1349 *     Show auxiliary information about Exim      *
1350 *************************************************/
1351
1352 static void
1353 show_exim_information(enum commandline_info request, FILE *stream)
1354 {
1355 switch(request)
1356   {
1357   case CMDINFO_NONE:
1358     fprintf(stream, "Oops, something went wrong.\n");
1359     return;
1360   case CMDINFO_HELP:
1361     fprintf(stream,
1362 "The -bI: flag takes a string indicating which information to provide.\n"
1363 "If the string is not recognised, you'll get this help (on stderr).\n"
1364 "\n"
1365 "  exim -bI:help    this information\n"
1366 "  exim -bI:dscp    list of known dscp value keywords\n"
1367 "  exim -bI:sieve   list of supported sieve extensions\n"
1368 );
1369     return;
1370   case CMDINFO_SIEVE:
1371     for (const uschar ** pp = exim_sieve_extension_list; *pp; ++pp)
1372       fprintf(stream, "%s\n", *pp);
1373     return;
1374   case CMDINFO_DSCP:
1375     dscp_list_to_stream(stream);
1376     return;
1377   }
1378 }
1379
1380
1381 /*************************************************
1382 *               Quote a local part               *
1383 *************************************************/
1384
1385 /* This function is used when a sender address or a From: or Sender: header
1386 line is being created from the caller's login, or from an authenticated_id. It
1387 applies appropriate quoting rules for a local part.
1388
1389 Argument:    the local part
1390 Returns:     the local part, quoted if necessary
1391 */
1392
1393 const uschar *
1394 local_part_quote(const uschar * lpart)
1395 {
1396 BOOL needs_quote = FALSE;
1397 gstring * g;
1398
1399 for (const uschar * t = lpart; !needs_quote && *t; t++)
1400   needs_quote = !isalnum(*t) && strchr("!#$%&'*+-/=?^_`{|}~", *t) == NULL &&
1401     (*t != '.' || t == lpart || t[1] == 0);
1402
1403 if (!needs_quote) return lpart;
1404
1405 g = string_catn(NULL, US"\"", 1);
1406
1407 for (;;)
1408   {
1409   uschar * nq = US Ustrpbrk(lpart, "\\\"");
1410   if (!nq)
1411     {
1412     g = string_cat(g, lpart);
1413     break;
1414     }
1415   g = string_catn(g, lpart, nq - lpart);
1416   g = string_catn(g, US"\\", 1);
1417   g = string_catn(g, nq, 1);
1418   lpart = nq + 1;
1419   }
1420
1421 g = string_catn(g, US"\"", 1);
1422 return string_from_gstring(g);
1423 }
1424
1425
1426
1427 #ifdef USE_READLINE
1428 /*************************************************
1429 *         Load readline() functions              *
1430 *************************************************/
1431
1432 /* This function is called from testing executions that read data from stdin,
1433 but only when running as the calling user. Currently, only -be does this. The
1434 function loads the readline() function library and passes back the functions.
1435 On some systems, it needs the curses library, so load that too, but try without
1436 it if loading fails. All this functionality has to be requested at build time.
1437
1438 Arguments:
1439   fn_readline_ptr   pointer to where to put the readline pointer
1440   fn_addhist_ptr    pointer to where to put the addhistory function
1441
1442 Returns:            the dlopen handle or NULL on failure
1443 */
1444
1445 static void *
1446 set_readline(char * (**fn_readline_ptr)(const char *),
1447              void   (**fn_addhist_ptr)(const char *))
1448 {
1449 void *dlhandle;
1450 void *dlhandle_curses = dlopen("libcurses." DYNLIB_FN_EXT, RTLD_GLOBAL|RTLD_LAZY);
1451
1452 dlhandle = dlopen("libreadline." DYNLIB_FN_EXT, RTLD_GLOBAL|RTLD_NOW);
1453 if (dlhandle_curses) dlclose(dlhandle_curses);
1454
1455 if (dlhandle)
1456   {
1457   /* Checked manual pages; at least in GNU Readline 6.1, the prototypes are:
1458    *   char * readline (const char *prompt);
1459    *   void add_history (const char *string);
1460    */
1461   *fn_readline_ptr = (char *(*)(const char*))dlsym(dlhandle, "readline");
1462   *fn_addhist_ptr = (void(*)(const char*))dlsym(dlhandle, "add_history");
1463   }
1464 else
1465   DEBUG(D_any) debug_printf("failed to load readline: %s\n", dlerror());
1466
1467 return dlhandle;
1468 }
1469 #endif
1470
1471
1472
1473 /*************************************************
1474 *    Get a line from stdin for testing things    *
1475 *************************************************/
1476
1477 /* This function is called when running tests that can take a number of lines
1478 of input (for example, -be and -bt). It handles continuations and trailing
1479 spaces. And prompting and a blank line output on eof. If readline() is in use,
1480 the arguments are non-NULL and provide the relevant functions.
1481
1482 Arguments:
1483   fn_readline   readline function or NULL
1484   fn_addhist    addhist function or NULL
1485
1486 Returns:        pointer to dynamic memory, or NULL at end of file
1487 */
1488
1489 static uschar *
1490 get_stdinput(char *(*fn_readline)(const char *), void(*fn_addhist)(const char *))
1491 {
1492 gstring * g = NULL;
1493 BOOL had_input = FALSE;
1494
1495 if (!fn_readline) { printf("> "); fflush(stdout); }
1496
1497 for (int i = 0;; i++)
1498   {
1499   uschar buffer[1024];
1500   uschar * p, * ss;
1501
1502 #ifdef USE_READLINE
1503   char *readline_line = NULL;
1504   if (fn_readline)
1505     {
1506     if (!(readline_line = fn_readline((i > 0)? "":"> "))) break;
1507     if (*readline_line && fn_addhist) fn_addhist(readline_line);
1508     p = US readline_line;
1509     }
1510   else
1511 #endif
1512
1513   /* readline() not in use */
1514
1515     {
1516     if (Ufgets(buffer, sizeof(buffer), stdin) == NULL) break;   /*EOF*/
1517     p = buffer;
1518     }
1519
1520   /* Handle the line */
1521
1522   had_input = TRUE;
1523   ss = p + Ustrlen(p);
1524   while (ss > p && isspace(ss[-1])) ss--; /* strip trailing newline (and spaces) */
1525
1526   if (i > 0)
1527     while (p < ss && isspace(*p)) p++;   /* strip leading space after cont */
1528
1529   g = string_catn(g, p, ss - p);
1530
1531 #ifdef USE_READLINE
1532   if (fn_readline) free(readline_line);
1533 #endif
1534
1535   /* g can only be NULL if ss==p */
1536   if (ss == p || gstring_last_char(g) != '\\') /* not continuation; done */
1537     break;
1538
1539   gstring_trim(g, 1);                           /* drop the \ */
1540   }
1541
1542 if (had_input) return g ? string_from_gstring(g) : US"";
1543 printf("\n");
1544 return NULL;
1545 }
1546
1547
1548
1549 /*************************************************
1550 *    Output usage information for the program    *
1551 *************************************************/
1552
1553 /* This function is called when there are no recipients
1554    or a specific --help argument was added.
1555
1556 Arguments:
1557   progname      information on what name we were called by
1558
1559 Returns:        DOES NOT RETURN
1560 */
1561
1562 static void
1563 exim_usage(const uschar * progname)
1564 {
1565
1566 /* Handle specific program invocation variants */
1567 if (Ustrcmp(progname, US"-mailq") == 0)
1568   exim_fail(
1569     "mailq - list the contents of the mail queue\n\n"
1570     "For a list of options, see the Exim documentation.\n");
1571
1572 /* Generic usage - we output this whatever happens */
1573 exim_fail(
1574   "Exim is a Mail Transfer Agent. It is normally called by Mail User Agents,\n"
1575   "not directly from a shell command line. Options and/or arguments control\n"
1576   "what it does when called. For a list of options, see the Exim documentation.\n");
1577 }
1578
1579
1580
1581 /*************************************************
1582 *    Validate that the macros given are okay     *
1583 *************************************************/
1584
1585 /* Typically, Exim will drop privileges if macros are supplied.  In some
1586 cases, we want to not do so.
1587
1588 Arguments:    opt_D_used - true if the commandline had a "-D" option
1589 Returns:      true if trusted, false otherwise
1590 */
1591
1592 static BOOL
1593 macros_trusted(BOOL opt_D_used)
1594 {
1595 #ifdef WHITELIST_D_MACROS
1596 uschar *whitelisted, *end, *p, **whites;
1597 int white_count, i, n;
1598 size_t len;
1599 BOOL prev_char_item, found;
1600 #endif
1601
1602 if (!opt_D_used)
1603   return TRUE;
1604 #ifndef WHITELIST_D_MACROS
1605 return FALSE;
1606 #else
1607
1608 /* We only trust -D overrides for some invoking users:
1609 root, the exim run-time user, the optional config owner user.
1610 I don't know why config-owner would be needed, but since they can own the
1611 config files anyway, there's no security risk to letting them override -D. */
1612 if ( ! ((real_uid == root_uid)
1613      || (real_uid == exim_uid)
1614 #ifdef CONFIGURE_OWNER
1615      || (real_uid == config_uid)
1616 #endif
1617    ))
1618   {
1619   debug_printf("macros_trusted rejecting macros for uid %d\n", (int) real_uid);
1620   return FALSE;
1621   }
1622
1623 /* Get a list of macros which are whitelisted */
1624 whitelisted = string_copy_perm(US WHITELIST_D_MACROS, FALSE);
1625 prev_char_item = FALSE;
1626 white_count = 0;
1627 for (p = whitelisted; *p != '\0'; ++p)
1628   {
1629   if (*p == ':' || isspace(*p))
1630     {
1631     *p = '\0';
1632     if (prev_char_item)
1633       ++white_count;
1634     prev_char_item = FALSE;
1635     continue;
1636     }
1637   if (!prev_char_item)
1638     prev_char_item = TRUE;
1639   }
1640 end = p;
1641 if (prev_char_item)
1642   ++white_count;
1643 if (!white_count)
1644   return FALSE;
1645 whites = store_malloc(sizeof(uschar *) * (white_count+1));
1646 for (p = whitelisted, i = 0; (p != end) && (i < white_count); ++p)
1647   {
1648   if (*p != '\0')
1649     {
1650     whites[i++] = p;
1651     if (i == white_count)
1652       break;
1653     while (*p != '\0' && p < end)
1654       ++p;
1655     }
1656   }
1657 whites[i] = NULL;
1658
1659 /* The list of commandline macros should be very short.
1660 Accept the N*M complexity. */
1661 for (macro_item * m = macros_user; m; m = m->next) if (m->command_line)
1662   {
1663   found = FALSE;
1664   for (uschar ** w = whites; *w; ++w)
1665     if (Ustrcmp(*w, m->name) == 0)
1666       {
1667       found = TRUE;
1668       break;
1669       }
1670   if (!found)
1671     return FALSE;
1672   if (!m->replacement)
1673     continue;
1674   if ((len = m->replen) == 0)
1675     continue;
1676   if (!regex_match(regex_whitelisted_macro, m->replacement, len, NULL))
1677     return FALSE;
1678   }
1679 DEBUG(D_any) debug_printf("macros_trusted overridden to true by whitelisting\n");
1680 return TRUE;
1681 #endif
1682 }
1683
1684
1685 /*************************************************
1686 *          Expansion testing                     *
1687 *************************************************/
1688
1689 /* Expand and print one item, doing macro-processing.
1690
1691 Arguments:
1692   item          line for expansion
1693 */
1694
1695 static void
1696 expansion_test_line(const uschar * line)
1697 {
1698 int len;
1699 BOOL dummy_macexp;
1700 uschar * s;
1701
1702 Ustrncpy(big_buffer, line, big_buffer_size);
1703 big_buffer[big_buffer_size-1] = '\0';
1704 len = Ustrlen(big_buffer);
1705
1706 (void) macros_expand(0, &len, &dummy_macexp);
1707
1708 if (isupper(big_buffer[0]))
1709   {
1710   if (macro_read_assignment(big_buffer))
1711     printf("Defined macro '%s'\n", mlast->name);
1712   }
1713 else if (Ustrncmp(big_buffer, "set,t ", 6) == 0)
1714   printf("%s\n", acl_standalone_setvar(big_buffer+6, TRUE));
1715 else if (Ustrncmp(big_buffer, "set ", 4) == 0)
1716   printf("%s\n", acl_standalone_setvar(big_buffer+4, FALSE));
1717 else
1718   if ((s = expand_string(big_buffer))) printf("%s\n", CS s);
1719   else printf("Failed: %s\n", expand_string_message);
1720 }
1721
1722
1723
1724 /*************************************************
1725 *          Queue-runner operations               *
1726 *************************************************/
1727
1728 /* Prefix a new qrunner descriptor to the qrunners list */
1729
1730 static qrunner *
1731 alloc_qrunner(void)
1732 {
1733 qrunner * q = qrunners;
1734 qrunners = store_get(sizeof(qrunner), GET_UNTAINTED);
1735 memset(qrunners, 0, sizeof(qrunner));           /* default queue, zero interval */
1736 qrunners->next = q;
1737 qrunners->next_tick = time(NULL);               /* run right away */
1738 return qrunners;
1739 }
1740
1741 static qrunner *
1742 alloc_onetime_qrunner(void)
1743 {
1744 qrunners = store_get_perm(sizeof(qrunner), GET_UNTAINTED);
1745 memset(qrunners, 0, sizeof(qrunner));           /* default queue, zero interval */
1746 qrunners->next_tick = time(NULL);               /* run right away */
1747 qrunners->run_max = 1;
1748 return qrunners;
1749 }
1750
1751
1752 /*************************************************
1753 *          Entry point and high-level code       *
1754 *************************************************/
1755
1756 /* Entry point for the Exim mailer. Analyse the arguments and arrange to take
1757 the appropriate action. All the necessary functions are present in the one
1758 binary. I originally thought one should split it up, but it turns out that so
1759 much of the apparatus is needed in each chunk that one might as well just have
1760 it all available all the time, which then makes the coding easier as well.
1761
1762 Arguments:
1763   argc      count of entries in argv
1764   argv      argument strings, with argv[0] being the program name
1765
1766 Returns:    EXIT_SUCCESS if terminated successfully
1767             EXIT_FAILURE otherwise, except when a message has been sent
1768               to the sender, and -oee was given
1769 */
1770
1771 int
1772 main(int argc, char ** cargv)
1773 {
1774 const uschar ** argv = CUSS cargv;
1775 int  arg_receive_timeout = -1;
1776 int  arg_smtp_receive_timeout = -1;
1777 int  arg_error_handling = error_handling;
1778 int  filter_sfd = -1;
1779 int  filter_ufd = -1;
1780 int  group_count;
1781 int  i, rv;
1782 int  list_queue_option = QL_BASIC;
1783 int  msg_action = 0;
1784 int  msg_action_arg = -1;
1785 int  namelen = argv[0] ? Ustrlen(argv[0]) : 0;
1786 int  queue_only_reason = 0;
1787 #ifdef EXIM_PERL
1788 int  perl_start_option = 0;
1789 #endif
1790 int  recipients_arg = argc;
1791 int  sender_address_domain = 0;
1792 int  test_retry_arg = -1;
1793 int  test_rewrite_arg = -1;
1794 gid_t original_egid;
1795 BOOL arg_queue_only = FALSE;
1796 BOOL bi_option = FALSE;
1797 BOOL checking = FALSE;
1798 BOOL count_queue = FALSE;
1799 BOOL expansion_test = FALSE;
1800 BOOL extract_recipients = FALSE;
1801 BOOL flag_G = FALSE;
1802 BOOL flag_n = FALSE;
1803 BOOL forced_delivery = FALSE;
1804 BOOL f_end_dot = FALSE;
1805 BOOL deliver_give_up = FALSE;
1806 BOOL list_queue = FALSE;
1807 BOOL list_options = FALSE;
1808 BOOL list_config = FALSE;
1809 BOOL local_queue_only;
1810 BOOL one_msg_action = FALSE;
1811 BOOL opt_D_used = FALSE;
1812 BOOL queue_only_set = FALSE;
1813 BOOL receiving_message = TRUE;
1814 BOOL sender_ident_set = FALSE;
1815 BOOL session_local_queue_only;
1816 BOOL unprivileged;
1817 BOOL removed_privilege = FALSE;
1818 BOOL usage_wanted = FALSE;
1819 BOOL verify_address_mode = FALSE;
1820 BOOL verify_as_sender = FALSE;
1821 BOOL rcpt_verify_quota = FALSE;
1822 BOOL version_printed = FALSE;
1823 const uschar * alias_arg = NULL;
1824 const uschar * called_as = US"";
1825 const uschar * cmdline_syslog_name = NULL;
1826 const uschar * start_queue_run_id = NULL;
1827 const uschar * stop_queue_run_id = NULL;
1828 const uschar * expansion_test_message = NULL;
1829 const uschar * ftest_domain = NULL;
1830 const uschar * ftest_localpart = NULL;
1831 const uschar * ftest_prefix = NULL;
1832 const uschar * ftest_suffix = NULL;
1833 uschar * log_oneline = NULL;
1834 const uschar * malware_test_file = NULL;
1835 const uschar * real_sender_address;
1836 uschar * originator_home = US"/";
1837 size_t sz;
1838
1839 struct passwd *pw;
1840 struct stat statbuf;
1841 pid_t passed_qr_pid = (pid_t)0;
1842 int passed_qr_pipe = -1;
1843 gid_t group_list[EXIM_GROUPLIST_SIZE];
1844
1845 /* For the -bI: flag */
1846 enum commandline_info info_flag = CMDINFO_NONE;
1847 BOOL info_stdout = FALSE;
1848
1849 /* Possible options for -R and -S */
1850
1851 static uschar *rsopts[] = { US"f", US"ff", US"r", US"rf", US"rff" };
1852
1853 /* Need to define this in case we need to change the environment in order
1854 to get rid of a bogus time zone. We have to make it char rather than uschar
1855 because some OS define it in /usr/include/unistd.h. */
1856
1857 extern char **environ;
1858
1859 #ifdef MEASURE_TIMING
1860 (void)gettimeofday(&timestamp_startup, NULL);
1861 #endif
1862
1863 store_init();   /* Initialise the memory allocation susbsystem */
1864 pcre_init();    /* Set up memory handling for pcre */
1865
1866 /* If the Exim user and/or group and/or the configuration file owner/group were
1867 defined by ref:name at build time, we must now find the actual uid/gid values.
1868 This is a feature to make the lives of binary distributors easier. */
1869
1870 #ifdef EXIM_USERNAME
1871 if (route_finduser(US EXIM_USERNAME, &pw, &exim_uid))
1872   {
1873   if (exim_uid == 0)
1874     exim_fail("exim: refusing to run with uid 0 for \"%s\"\n", EXIM_USERNAME);
1875
1876   /* If ref:name uses a number as the name, route_finduser() returns
1877   TRUE with exim_uid set and pw coerced to NULL. */
1878   if (pw)
1879     exim_gid = pw->pw_gid;
1880 #ifndef EXIM_GROUPNAME
1881   else
1882     exim_fail(
1883         "exim: ref:name should specify a usercode, not a group.\n"
1884         "exim: can't let you get away with it unless you also specify a group.\n");
1885 #endif
1886   }
1887 else
1888   exim_fail("exim: failed to find uid for user name \"%s\"\n", EXIM_USERNAME);
1889 #endif
1890
1891 #ifdef EXIM_GROUPNAME
1892 if (!route_findgroup(US EXIM_GROUPNAME, &exim_gid))
1893   exim_fail("exim: failed to find gid for group name \"%s\"\n", EXIM_GROUPNAME);
1894 #endif
1895
1896 #ifdef CONFIGURE_OWNERNAME
1897 if (!route_finduser(US CONFIGURE_OWNERNAME, NULL, &config_uid))
1898   exim_fail("exim: failed to find uid for user name \"%s\"\n",
1899     CONFIGURE_OWNERNAME);
1900 #endif
1901
1902 /* We default the system_filter_user to be the Exim run-time user, as a
1903 sane non-root value. */
1904 system_filter_uid = exim_uid;
1905
1906 #ifdef CONFIGURE_GROUPNAME
1907 if (!route_findgroup(US CONFIGURE_GROUPNAME, &config_gid))
1908   exim_fail("exim: failed to find gid for group name \"%s\"\n",
1909     CONFIGURE_GROUPNAME);
1910 #endif
1911
1912 /* In the Cygwin environment, some initialization used to need doing.
1913 It was fudged in by means of this macro; now no longer but we'll leave
1914 it in case of others. */
1915
1916 #ifdef OS_INIT
1917 OS_INIT
1918 #endif
1919
1920 /* Check a field which is patched when we are running Exim within its
1921 testing harness; do a fast initial check, and then the whole thing. */
1922
1923 f.running_in_test_harness =
1924   *running_status == '<' && Ustrcmp(running_status, "<<<testing>>>") == 0;
1925 if (f.running_in_test_harness)
1926   debug_store = TRUE;
1927
1928 /* Protect against abusive argv[0] */
1929 if (!argv[0] || !argc) exim_fail("exim: executable name required\n");
1930 exim_str_fail_toolong(argv[0], PATH_MAX, "argv[0]");
1931
1932 /* The C standard says that the equivalent of setlocale(LC_ALL, "C") is obeyed
1933 at the start of a program; however, it seems that some environments do not
1934 follow this. A "strange" locale can affect the formatting of timestamps, so we
1935 make quite sure. */
1936
1937 setlocale(LC_ALL, "C");
1938
1939 /* Get the offset between CLOCK_MONOTONIC/CLOCK_BOOTTIME and wallclock */
1940
1941 #ifdef _POSIX_MONOTONIC_CLOCK
1942 exim_clock_init();
1943 #endif
1944
1945 /* Set up the default handler for timing using alarm(). */
1946
1947 os_non_restarting_signal(SIGALRM, sigalrm_handler);
1948
1949 /* Ensure we have a buffer for constructing log entries. Use malloc directly,
1950 because store_malloc writes a log entry on failure. */
1951
1952 if (!(log_buffer = US malloc(LOG_BUFFER_SIZE)))
1953   exim_fail("exim: failed to get store for log buffer\n");
1954
1955 /* Initialize the default log options. */
1956
1957 bits_set(log_selector, log_selector_size, log_default);
1958
1959 /* Set log_stderr to stderr, provided that stderr exists. This gets reset to
1960 NULL when the daemon is run and the file is closed. We have to use this
1961 indirection, because some systems don't allow writing to the variable "stderr".
1962 */
1963
1964 if (fstat(fileno(stderr), &statbuf) >= 0) log_stderr = stderr;
1965
1966 /* Ensure there is a big buffer for temporary use in several places. It is put
1967 in malloc store so that it can be freed for enlargement if necessary. */
1968
1969 big_buffer = store_malloc(big_buffer_size);
1970
1971 /* Set up the handler for the data request signal, and set the initial
1972 descriptive text. */
1973
1974 process_info = store_get(PROCESS_INFO_SIZE, GET_TAINTED);
1975 set_process_info("initializing");
1976 os_restarting_signal(SIGUSR1, usr1_handler);            /* exiwhat */
1977 #ifdef SA_SIGINFO
1978   {
1979   struct sigaction act = { .sa_sigaction = segv_handler, .sa_flags = SA_RESETHAND | SA_SIGINFO };
1980   sigaction(SIGSEGV, &act, NULL);
1981   }
1982 #else
1983 signal(SIGSEGV, segv_handler);                          /* log faults */
1984 #endif
1985
1986 /* If running in a dockerized environment, the TERM signal is only
1987 delegated to the PID 1 if we request it by setting an signal handler */
1988
1989 if (getpid() == 1) signal(SIGTERM, term_handler);
1990
1991 /* SIGHUP is used to get the daemon to reconfigure. It gets set as appropriate
1992 in the daemon code. For the rest of Exim's uses, we ignore it. */
1993
1994 signal(SIGHUP, SIG_IGN);
1995
1996 /* We don't want to die on pipe errors as the code is written to handle
1997 the write error instead. */
1998
1999 signal(SIGPIPE, SIG_IGN);
2000
2001 /* Under some circumstance on some OS, Exim can get called with SIGCHLD
2002 set to SIG_IGN. This causes subprocesses that complete before the parent
2003 process waits for them not to hang around, so when Exim calls wait(), nothing
2004 is there. The wait() code has been made robust against this, but let's ensure
2005 that SIGCHLD is set to SIG_DFL, because it's tidier to wait and get a process
2006 ending status. We use sigaction rather than plain signal() on those OS where
2007 SA_NOCLDWAIT exists, because we want to be sure it is turned off. (There was a
2008 problem on AIX with this.) */
2009
2010 #ifdef SA_NOCLDWAIT
2011   {
2012   struct sigaction act;
2013   act.sa_handler = SIG_DFL;
2014   sigemptyset(&(act.sa_mask));
2015   act.sa_flags = 0;
2016   sigaction(SIGCHLD, &act, NULL);
2017   }
2018 #else
2019 signal(SIGCHLD, SIG_DFL);
2020 #endif
2021
2022 /* Save the arguments for use if we re-exec exim as a daemon after receiving
2023 SIGHUP. */
2024
2025 sighup_argv = argv;
2026
2027 /* Set up the version number. Set up the leading 'E' for the external form of
2028 message ids, set the pointer to the internal form, and initialize it to
2029 indicate no message being processed. */
2030
2031 version_init();
2032 message_id_option[0] = '-';
2033 message_id_external = message_id_option + 1;
2034 message_id_external[0] = 'E';
2035 message_id = message_id_external + 1;
2036 message_id[0] = 0;
2037
2038 /* Set the umask to zero so that any files Exim creates using open() are
2039 created with the modes that it specifies. NOTE: Files created with fopen() have
2040 a problem, which was not recognized till rather late (February 2006). With this
2041 umask, such files will be world writeable. (They are all content scanning files
2042 in the spool directory, which isn't world-accessible, so this is not a
2043 disaster, but it's untidy.) I don't want to change this overall setting,
2044 however, because it will interact badly with the open() calls. Instead, there's
2045 now a function called modefopen() that fiddles with the umask while calling
2046 fopen(). */
2047
2048 (void)umask(0);
2049
2050 /* Precompile the regular expression for matching a message id. Keep this in
2051 step with the code that generates ids in the accept.c module. We need to do
2052 this here, because the -M options check their arguments for syntactic validity
2053 using mac_ismsgid, which uses this. */
2054
2055 regex_ismsgid =
2056   regex_must_compile(US"^(?:"
2057           "[^\\W_]{" str(MESSAGE_ID_TIME_LEN) "}"
2058           "-[^\\W_]{" str(MESSAGE_ID_PID_LEN) "}"
2059           "-[^\\W_]{" str(MESSAGE_ID_SUBTIME_LEN) "}"
2060         "|"
2061           "(?:[^\\W_]{6}-){2}[^\\W_]{2}"                /* old ID format */
2062         ")$",
2063     MCS_NOFLAGS, TRUE);
2064
2065 /* Precompile the regular expression that is used for matching an SMTP error
2066 code, possibly extended, at the start of an error message. Note that the
2067 terminating whitespace character is included. */
2068
2069 regex_smtp_code =
2070   regex_must_compile(US"^\\d\\d\\d\\s(?:\\d\\.\\d\\d?\\d?\\.\\d\\d?\\d?\\s)?",
2071     MCS_NOFLAGS, TRUE);
2072
2073 #ifdef WHITELIST_D_MACROS
2074 /* Precompile the regular expression used to filter the content of macros
2075 given to -D for permissibility. */
2076
2077 regex_whitelisted_macro =
2078   regex_must_compile(US"^[A-Za-z0-9_/.-]*$", MCS_NOFLAGS, TRUE);
2079 #endif
2080
2081 /* If the program is called as "mailq" treat it as equivalent to "exim -bp";
2082 this seems to be a generally accepted convention, since one finds symbolic
2083 links called "mailq" in standard OS configurations. */
2084
2085 if ((namelen == 5 && Ustrcmp(argv[0], "mailq") == 0) ||
2086     (namelen  > 5 && Ustrncmp(argv[0] + namelen - 6, "/mailq", 6) == 0))
2087   {
2088   list_queue = TRUE;
2089   receiving_message = FALSE;
2090   called_as = US"-mailq";
2091   }
2092
2093 /* If the program is called as "rmail" treat it as equivalent to
2094 "exim -i -oee", thus allowing UUCP messages to be input using non-SMTP mode,
2095 i.e. preventing a single dot on a line from terminating the message, and
2096 returning with zero return code, even in cases of error (provided an error
2097 message has been sent). */
2098
2099 if ((namelen == 5 && Ustrcmp(argv[0], "rmail") == 0) ||
2100     (namelen  > 5 && Ustrncmp(argv[0] + namelen - 6, "/rmail", 6) == 0))
2101   {
2102   f.dot_ends = FALSE;
2103   called_as = US"-rmail";
2104   errors_sender_rc = EXIT_SUCCESS;
2105   }
2106
2107 /* If the program is called as "rsmtp" treat it as equivalent to "exim -bS";
2108 this is a smail convention. */
2109
2110 if ((namelen == 5 && Ustrcmp(argv[0], "rsmtp") == 0) ||
2111     (namelen  > 5 && Ustrncmp(argv[0] + namelen - 6, "/rsmtp", 6) == 0))
2112   {
2113   smtp_input = smtp_batched_input = TRUE;
2114   called_as = US"-rsmtp";
2115   }
2116
2117 /* If the program is called as "runq" treat it as equivalent to "exim -q";
2118 this is a smail convention. */
2119
2120 if ((namelen == 4 && Ustrcmp(argv[0], "runq") == 0) ||
2121     (namelen  > 4 && Ustrncmp(argv[0] + namelen - 5, "/runq", 5) == 0))
2122   {
2123   alloc_onetime_qrunner();
2124   receiving_message = FALSE;
2125   called_as = US"-runq";
2126   }
2127
2128 /* If the program is called as "newaliases" treat it as equivalent to
2129 "exim -bi"; this is a sendmail convention. */
2130
2131 if ((namelen == 10 && Ustrcmp(argv[0], "newaliases") == 0) ||
2132     (namelen  > 10 && Ustrncmp(argv[0] + namelen - 11, "/newaliases", 11) == 0))
2133   {
2134   bi_option = TRUE;
2135   receiving_message = FALSE;
2136   called_as = US"-newaliases";
2137   }
2138
2139 /* Save the original effective uid for a couple of uses later. It should
2140 normally be root, but in some esoteric environments it may not be. */
2141
2142 original_euid = geteuid();
2143 original_egid = getegid();
2144
2145 /* Get the real uid and gid. If the caller is root, force the effective uid/gid
2146 to be the same as the real ones. This makes a difference only if Exim is setuid
2147 (or setgid) to something other than root, which could be the case in some
2148 special configurations. */
2149
2150 real_uid = getuid();
2151 real_gid = getgid();
2152
2153 if (real_uid == root_uid)
2154   {
2155   if ((rv = setgid(real_gid)))
2156     exim_fail("exim: setgid(%ld) failed: %s\n",
2157         (long int)real_gid, strerror(errno));
2158   if ((rv = setuid(real_uid)))
2159     exim_fail("exim: setuid(%ld) failed: %s\n",
2160         (long int)real_uid, strerror(errno));
2161   }
2162
2163 /* If neither the original real uid nor the original euid was root, Exim is
2164 running in an unprivileged state. */
2165
2166 unprivileged = (real_uid != root_uid && original_euid != root_uid);
2167
2168 /* For most of the args-parsing we need to use permanent pool memory */
2169  {
2170  int old_pool = store_pool;
2171  store_pool = POOL_PERM;
2172
2173 /* Scan the program's arguments. Some can be dealt with right away; others are
2174 simply recorded for checking and handling afterwards. Do a high-level switch
2175 on the second character (the one after '-'), to save some effort. */
2176
2177  for (i = 1; i < argc; i++)
2178   {
2179   BOOL badarg = FALSE;
2180   const uschar * arg = argv[i];
2181   const uschar * argrest;
2182   uschar switchchar;
2183
2184   /* An argument not starting with '-' is the start of a recipients list;
2185   break out of the options-scanning loop. */
2186
2187   if (arg[0] != '-')
2188     {
2189     recipients_arg = i;
2190     break;
2191     }
2192
2193   /* An option consisting of -- terminates the options */
2194
2195   if (Ustrcmp(arg, "--") == 0)
2196     {
2197     recipients_arg = i + 1;
2198     break;
2199     }
2200
2201   /* Handle flagged options */
2202
2203   switchchar = arg[1];
2204   argrest = arg+2;
2205
2206   /* Make all -ex options synonymous with -oex arguments, since that
2207   is assumed by various callers. Also make -qR options synonymous with -R
2208   options, as that seems to be required as well. Allow for -qqR too, and
2209   the same for -S options. */
2210
2211   if (Ustrncmp(arg+1, "oe", 2) == 0 ||
2212       Ustrncmp(arg+1, "qR", 2) == 0 ||
2213       Ustrncmp(arg+1, "qS", 2) == 0)
2214     {
2215     switchchar = arg[2];
2216     argrest++;
2217     }
2218   else if (Ustrncmp(arg+1, "qqR", 3) == 0 || Ustrncmp(arg+1, "qqS", 3) == 0)
2219     {
2220     switchchar = arg[3];
2221     argrest += 2;
2222     f.queue_2stage = TRUE;
2223     }
2224
2225   /* Make -r synonymous with -f, since it is a documented alias */
2226
2227   else if (arg[1] == 'r') switchchar = 'f';
2228
2229   /* Make -ov synonymous with -v */
2230
2231   else if (Ustrcmp(arg, "-ov") == 0)
2232     {
2233     switchchar = 'v';
2234     argrest++;
2235     }
2236
2237   /* deal with --option_aliases */
2238   else if (switchchar == '-')
2239     {
2240     if (Ustrcmp(argrest, "help") == 0)
2241       {
2242       usage_wanted = TRUE;
2243       break;
2244       }
2245     else if (Ustrcmp(argrest, "version") == 0)
2246       {
2247       switchchar = 'b';
2248       argrest = US"V";
2249       }
2250     }
2251
2252   /* High-level switch on active initial letter */
2253
2254   switch(switchchar)
2255     {
2256
2257     /* sendmail uses -Ac and -Am to control which .cf file is used;
2258     we ignore them. */
2259     case 'A':
2260     if (!*argrest) { badarg = TRUE; break; }
2261     else
2262       {
2263       BOOL ignore = FALSE;
2264       switch (*argrest)
2265         {
2266         case 'c':
2267         case 'm':
2268           if (*(argrest + 1) == '\0')
2269             ignore = TRUE;
2270           break;
2271         }
2272       if (!ignore) badarg = TRUE;
2273       }
2274     break;
2275
2276     /* -Btype is a sendmail option for 7bit/8bit setting. Exim is 8-bit clean
2277     so has no need of it. */
2278
2279     case 'B':
2280     if (!*argrest) i++;       /* Skip over the type */
2281     break;
2282
2283
2284     case 'b':
2285       {
2286       receiving_message = FALSE;    /* Reset TRUE for -bm, -bS, -bs below */
2287
2288       switch (*argrest++)
2289         {
2290         /* -bd:  Run in daemon mode, awaiting SMTP connections.
2291            -bdf: Ditto, but in the foreground.
2292         */
2293         case 'd':
2294           f.daemon_listen = f.daemon_scion = TRUE;
2295           if (*argrest == 'f') f.background_daemon = FALSE;
2296           else if (*argrest) badarg = TRUE;
2297           break;
2298
2299         /* -be:  Run in expansion test mode
2300            -bem: Ditto, but read a message from a file first
2301         */
2302         case 'e':
2303           expansion_test = checking = TRUE;
2304           if (*argrest == 'm')
2305             {
2306             if (++i >= argc) { badarg = TRUE; break; }
2307             expansion_test_message = argv[i];
2308             argrest++;
2309             }
2310           if (*argrest) badarg = TRUE;
2311           break;
2312
2313         /* -bF:  Run system filter test */
2314         case 'F':
2315           filter_test |= checking = FTEST_SYSTEM;
2316           if (*argrest) badarg = TRUE;
2317           else if (++i < argc) filter_test_sfile = argv[i];
2318           else exim_fail("exim: file name expected after %s\n", argv[i-1]);
2319           break;
2320
2321         /* -bf:  Run user filter test
2322            -bfd: Set domain for filter testing
2323            -bfl: Set local part for filter testing
2324            -bfp: Set prefix for filter testing
2325            -bfs: Set suffix for filter testing
2326         */
2327         case 'f':
2328           if (!*argrest)
2329             {
2330             filter_test |= checking = FTEST_USER;
2331             if (++i < argc) filter_test_ufile = argv[i];
2332             else exim_fail("exim: file name expected after %s\n", argv[i-1]);
2333             }
2334           else
2335             {
2336             if (++i >= argc)
2337               exim_fail("exim: string expected after %s\n", arg);
2338             if (Ustrcmp(argrest, "d") == 0) ftest_domain = exim_str_fail_toolong(argv[i], EXIM_DOMAINNAME_MAX, "-bfd");
2339             else if (Ustrcmp(argrest, "l") == 0) ftest_localpart = exim_str_fail_toolong(argv[i], EXIM_LOCALPART_MAX, "-bfl");
2340             else if (Ustrcmp(argrest, "p") == 0) ftest_prefix = exim_str_fail_toolong(argv[i], EXIM_LOCALPART_MAX, "-bfp");
2341             else if (Ustrcmp(argrest, "s") == 0) ftest_suffix = exim_str_fail_toolong(argv[i], EXIM_LOCALPART_MAX, "-bfs");
2342             else badarg = TRUE;
2343             }
2344           break;
2345
2346         /* -bh: Host checking - an IP address must follow. */
2347         case 'h':
2348           if (  (!*argrest || Ustrcmp(argrest, "c") == 0)
2349              && ++i < argc)
2350             {
2351             sender_host_address = string_copy_taint(
2352                   exim_str_fail_toolong(argv[i], EXIM_IPADDR_MAX, "-bh"),
2353                   GET_TAINTED);
2354             host_checking = checking = f.log_testing_mode = TRUE;
2355             f.host_checking_callout = *argrest == 'c';
2356             message_logs = FALSE;
2357             }
2358           else
2359             badarg = TRUE;
2360           break;
2361
2362         /* -bi: This option is used by sendmail to initialize *the* alias file,
2363         though it has the -oA option to specify a different file. Exim has no
2364         concept of *the* alias file, but since Sun's YP make script calls
2365         sendmail this way, some support must be provided. */
2366         case 'i':
2367           if (!*argrest) bi_option = TRUE;
2368           else badarg = TRUE;
2369           break;
2370
2371         /* -bI: provide information, of the type to follow after a colon.
2372         This is an Exim flag. */
2373         case 'I':
2374           if (Ustrlen(argrest) >= 1 && *argrest == ':')
2375             {
2376             const uschar * p = argrest+1;
2377             info_flag = CMDINFO_HELP;
2378             if (Ustrlen(p))
2379               if (strcmpic(p, CUS"sieve") == 0)
2380                 {
2381                 info_flag = CMDINFO_SIEVE;
2382                 info_stdout = TRUE;
2383                 }
2384               else if (strcmpic(p, CUS"dscp") == 0)
2385                 {
2386                 info_flag = CMDINFO_DSCP;
2387                 info_stdout = TRUE;
2388                 }
2389               else if (strcmpic(p, CUS"help") == 0)
2390                 info_stdout = TRUE;
2391             }
2392           else badarg = TRUE;
2393           break;
2394
2395         /* -bm: Accept and deliver message - the default option. Reinstate
2396         receiving_message, which got turned off for all -b options.
2397            -bmalware: test the filename given for malware */
2398         case 'm':
2399           if (!*argrest) receiving_message = TRUE;
2400           else if (Ustrcmp(argrest, "alware") == 0)
2401             {
2402             if (++i >= argc) { badarg = TRUE; break; }
2403             checking = TRUE;
2404             malware_test_file = argv[i];
2405             }
2406           else badarg = TRUE;
2407           break;
2408
2409         /* -bnq: For locally originating messages, do not qualify unqualified
2410         addresses. In the envelope, this causes errors; in header lines they
2411         just get left. */
2412         case 'n':
2413           if (Ustrcmp(argrest, "q") == 0)
2414             {
2415             f.allow_unqualified_sender = FALSE;
2416             f.allow_unqualified_recipient = FALSE;
2417             }
2418           else badarg = TRUE;
2419           break;
2420
2421         /* -bpxx: List the contents of the mail queue, in various forms. If
2422         the option is -bpc, just a queue count is needed. Otherwise, if the
2423         first letter after p is r, then order is random. */
2424         case 'p':
2425           if (*argrest == 'c')
2426             {
2427             count_queue = TRUE;
2428             if (*++argrest) badarg = TRUE;
2429             break;
2430             }
2431
2432           if (*argrest == 'r')
2433             list_queue_option = QL_UNSORTED, argrest++;
2434           else
2435             list_queue_option = QL_BASIC;
2436
2437           list_queue = TRUE;
2438
2439           /* -bp: List the contents of the mail queue, top-level only */
2440
2441           if (!*argrest) {}
2442
2443           /* -bpu: List the contents of the mail queue, top-level undelivered */
2444
2445           else if (Ustrcmp(argrest, "u") == 0) list_queue_option |= QL_UNDELIVERED_ONLY;
2446
2447           /* -bpa: List the contents of the mail queue, including all delivered */
2448
2449           else if (Ustrcmp(argrest, "a") == 0) list_queue_option |= QL_PLUS_GENERATED;
2450
2451           /* -bpi: List only message IDs */
2452
2453           else if (Ustrcmp(argrest, "i") == 0) list_queue_option |= QL_MSGID_ONLY;
2454
2455           /* Unknown after -bp[r] */
2456
2457           else badarg = TRUE;
2458           break;
2459
2460
2461         /* -bP: List the configuration variables given as the address list.
2462         Force -v, so configuration errors get displayed. */
2463         case 'P':
2464
2465           /* -bP config: we need to setup here, because later,
2466           when list_options is checked, the config is read already */
2467           if (*argrest)
2468             badarg = TRUE;
2469           else if (argv[i+1] && Ustrcmp(argv[i+1], "config") == 0)
2470             {
2471             list_config = TRUE;
2472             readconf_save_config(version_string);
2473             }
2474           else
2475             {
2476             list_options = TRUE;
2477             debug_selector |= D_v;
2478             debug_file = stderr;
2479             }
2480           break;
2481
2482         /* -brt: Test retry configuration lookup */
2483         case 'r':
2484           if (Ustrcmp(argrest, "t") == 0)
2485             {
2486             checking = TRUE;
2487             test_retry_arg = i + 1;
2488             goto END_ARG;
2489             }
2490
2491           /* -brw: Test rewrite configuration */
2492
2493           else if (Ustrcmp(argrest, "w") == 0)
2494             {
2495             checking = TRUE;
2496             test_rewrite_arg = i + 1;
2497             goto END_ARG;
2498             }
2499           else badarg = TRUE;
2500           break;
2501
2502         /* -bS: Read SMTP commands on standard input, but produce no replies -
2503         all errors are reported by sending messages. */
2504         case 'S':
2505           if (!*argrest)
2506             smtp_input = smtp_batched_input = receiving_message = TRUE;
2507           else badarg = TRUE;
2508           break;
2509
2510         /* -bs: Read SMTP commands on standard input and produce SMTP replies
2511         on standard output. */
2512         case 's':
2513           if (!*argrest) smtp_input = receiving_message = TRUE;
2514           else badarg = TRUE;
2515           break;
2516
2517         /* -bt: address testing mode */
2518         case 't':
2519           if (!*argrest)
2520             f.address_test_mode = checking = f.log_testing_mode = TRUE;
2521           else badarg = TRUE;
2522           break;
2523
2524         /* -bv: verify addresses */
2525         case 'v':
2526           if (!*argrest)
2527             verify_address_mode = checking = f.log_testing_mode = TRUE;
2528
2529         /* -bvs: verify sender addresses */
2530
2531           else if (Ustrcmp(argrest, "s") == 0)
2532             {
2533             verify_address_mode = checking = f.log_testing_mode = TRUE;
2534             verify_as_sender = TRUE;
2535             }
2536           else badarg = TRUE;
2537           break;
2538
2539         /* -bV: Print version string and support details */
2540         case 'V':
2541           if (!*argrest)
2542             {
2543             printf("Exim version %s #%s built %s\n", version_string,
2544               version_cnumber, version_date);
2545             printf("%s\n", CS version_copyright);
2546             version_printed = TRUE;
2547             show_whats_supported(TRUE);
2548             f.log_testing_mode = TRUE;
2549             }
2550           else badarg = TRUE;
2551           break;
2552
2553         /* -bw: inetd wait mode, accept a listening socket as stdin */
2554         case 'w':
2555           f.inetd_wait_mode = TRUE;
2556           f.background_daemon = FALSE;
2557           f.daemon_listen = f.daemon_scion = TRUE;
2558           if (*argrest)
2559             if ((inetd_wait_timeout = readconf_readtime(argrest, 0, FALSE)) <= 0)
2560               exim_fail("exim: bad time value %s: abandoned\n", argv[i]);
2561           break;
2562
2563         default:
2564           badarg = TRUE;
2565           break;
2566         }
2567       break;
2568       }
2569
2570
2571     /* -C: change configuration file list; ignore if it isn't really
2572     a change! Enforce a prefix check if required. */
2573
2574     case 'C':
2575     if (!*argrest)
2576       if (++i < argc) argrest = argv[i]; else { badarg = TRUE; break; }
2577     if (Ustrcmp(config_main_filelist, argrest) != 0)
2578       {
2579       #ifdef ALT_CONFIG_PREFIX
2580       int sep = 0;
2581       int len = Ustrlen(ALT_CONFIG_PREFIX);
2582       const uschar *list = argrest;
2583       uschar *filename;
2584       /* The argv is untainted, so big_buffer (also untainted) is ok to use */
2585       while((filename = string_nextinlist(&list, &sep, big_buffer,
2586              big_buffer_size)))
2587         if (  (  Ustrlen(filename) < len
2588               || Ustrncmp(filename, ALT_CONFIG_PREFIX, len) != 0
2589               || Ustrstr(filename, "/../") != NULL
2590               )
2591            && (Ustrcmp(filename, "/dev/null") != 0 || real_uid != root_uid)
2592            )
2593           exim_fail("-C Permission denied\n");
2594       #endif
2595       if (real_uid != root_uid)
2596         {
2597         #ifdef TRUSTED_CONFIG_LIST
2598
2599         if (real_uid != exim_uid
2600             #ifdef CONFIGURE_OWNER
2601             && real_uid != config_uid
2602             #endif
2603             )
2604           f.trusted_config = FALSE;
2605         else
2606           {
2607           FILE *trust_list = Ufopen(TRUSTED_CONFIG_LIST, "rb");
2608           if (trust_list)
2609             {
2610             struct stat statbuf;
2611
2612             if (fstat(fileno(trust_list), &statbuf) != 0 ||
2613                 (statbuf.st_uid != root_uid        /* owner not root */
2614                  #ifdef CONFIGURE_OWNER
2615                  && statbuf.st_uid != config_uid   /* owner not the special one */
2616                  #endif
2617                    ) ||                            /* or */
2618                 (statbuf.st_gid != root_gid        /* group not root */
2619                  #ifdef CONFIGURE_GROUP
2620                  && statbuf.st_gid != config_gid   /* group not the special one */
2621                  #endif
2622                  && (statbuf.st_mode & 020) != 0   /* group writeable */
2623                    ) ||                            /* or */
2624                 (statbuf.st_mode & 2) != 0)        /* world writeable */
2625               {
2626               f.trusted_config = FALSE;
2627               fclose(trust_list);
2628               }
2629             else
2630               {
2631               /* Well, the trust list at least is up to scratch... */
2632               rmark reset_point;
2633               uschar *trusted_configs[32];
2634               int nr_configs = 0;
2635               int i = 0;
2636               int old_pool = store_pool;
2637               store_pool = POOL_MAIN;
2638
2639               reset_point = store_mark();
2640               while (Ufgets(big_buffer, big_buffer_size, trust_list))
2641                 {
2642                 uschar * start = big_buffer, * nl;
2643                 if (Uskip_whitespace(&start) != '/')
2644                   continue;
2645                 if ((nl = Ustrchr(start, '\n')))
2646                   *nl = '\0';
2647                 trusted_configs[nr_configs++] = string_copy(start);
2648                 if (nr_configs == nelem(trusted_configs))
2649                   break;
2650                 }
2651               fclose(trust_list);
2652
2653               if (nr_configs)
2654                 {
2655                 int sep = 0;
2656                 const uschar *list = argrest;
2657                 uschar *filename;
2658                 while (f.trusted_config && (filename = string_nextinlist(&list,
2659                         &sep, big_buffer, big_buffer_size)))
2660                   {
2661                   for (i=0; i < nr_configs; i++)
2662                     if (Ustrcmp(filename, trusted_configs[i]) == 0)
2663                       break;
2664                   if (i == nr_configs)
2665                     {
2666                     f.trusted_config = FALSE;
2667                     break;
2668                     }
2669                   }
2670                 }
2671               else      /* No valid prefixes found in trust_list file. */
2672                 f.trusted_config = FALSE;
2673               store_reset(reset_point);
2674               store_pool = old_pool;
2675               }
2676             }
2677           else          /* Could not open trust_list file. */
2678             f.trusted_config = FALSE;
2679           }
2680       #else
2681         /* Not root; don't trust config */
2682         f.trusted_config = FALSE;
2683       #endif
2684         }
2685
2686       config_main_filelist = argrest;
2687       f.config_changed = TRUE;
2688       }
2689     break;
2690
2691
2692     /* -D: set up a macro definition */
2693
2694     case 'D':
2695 #ifdef DISABLE_D_OPTION
2696       exim_fail("exim: -D is not available in this Exim binary\n");
2697 #else
2698       {
2699       int ptr = 0;
2700       macro_item * m;
2701       uschar name[24];
2702       const uschar * s = argrest;
2703
2704       opt_D_used = TRUE;
2705       Uskip_whitespace(&s);
2706
2707       if (*s < 'A' || *s > 'Z')
2708         exim_fail("exim: macro name set by -D must start with "
2709           "an upper case letter\n");
2710
2711       while (isalnum(*s) || *s == '_')
2712         {
2713         if (ptr < sizeof(name)-1) name[ptr++] = *s;
2714         s++;
2715         }
2716       name[ptr] = 0;
2717       if (ptr == 0) { badarg = TRUE; break; }
2718       if (Uskip_whitespace(&s))
2719         {
2720         if (*s++ != '=') { badarg = TRUE; break; }
2721         Uskip_whitespace(&s);
2722         }
2723
2724       for (m = macros_user; m; m = m->next)
2725         if (Ustrcmp(m->name, name) == 0)
2726           exim_fail("exim: duplicated -D in command line\n");
2727
2728       m = macro_create(name, s, TRUE);
2729
2730       if (clmacro_count >= MAX_CLMACROS)
2731         exim_fail("exim: too many -D options on command line\n");
2732       clmacros[clmacro_count++] =
2733         string_sprintf("-D%s=%s", m->name, m->replacement);
2734       }
2735     #endif
2736     break;
2737
2738     case 'd':
2739
2740     /* -dropcr: Set this option.  Now a no-op, retained for compatibility only. */
2741
2742     if (Ustrcmp(argrest, "ropcr") == 0)
2743       {
2744       /* drop_cr = TRUE; */
2745       }
2746
2747     /* -dp: Set up a debug pretrigger buffer with given size. */
2748
2749     else if (Ustrcmp(argrest, "p") == 0)
2750       if (++i >= argc)
2751         badarg = TRUE;
2752       else
2753         debug_pretrigger_setup(argv[i]);
2754
2755     /* -dt: Set a debug trigger selector */
2756
2757     else if (Ustrncmp(argrest, "t=", 2) == 0)
2758       dtrigger_selector = (unsigned int) Ustrtol(argrest + 2, NULL, 0);
2759
2760     /* -d: Set debug level (see also -v below).
2761     If -dd is used, debugging subprocesses of the daemon is disabled. */
2762
2763     else
2764       {
2765       /* Use an intermediate variable so that we don't set debugging while
2766       decoding the debugging bits. */
2767
2768       unsigned int selector = D_default;
2769       debug_selector = 0;
2770       debug_file = NULL;
2771       if (*argrest == 'd')
2772         {
2773         f.debug_daemon = TRUE;
2774         argrest++;
2775         }
2776       if (*argrest)
2777         decode_bits(&selector, 1, debug_notall, argrest,
2778           debug_options, debug_options_count, US"debug", 0);
2779       debug_selector = selector;
2780       }
2781     break;
2782
2783
2784     /* -E: This is a local error message. This option is not intended for
2785     external use at all, but is not restricted to trusted callers because it
2786     does no harm (just suppresses certain error messages) and if Exim is run
2787     not setuid root it won't always be trusted when it generates error
2788     messages using this option. If there is a message id following -E, point
2789     message_reference at it, for logging. */
2790
2791     case 'E':
2792     f.local_error_message = TRUE;
2793     if (mac_ismsgid(argrest)) message_reference = argrest;
2794     break;
2795
2796
2797     /* -ex: The vacation program calls sendmail with the undocumented "-eq"
2798     option, so it looks as if historically the -oex options are also callable
2799     without the leading -o. So we have to accept them. Before the switch,
2800     anything starting -oe has been converted to -e. Exim does not support all
2801     of the sendmail error options. */
2802
2803     case 'e':
2804     if (Ustrcmp(argrest, "e") == 0)
2805       {
2806       arg_error_handling = ERRORS_SENDER;
2807       errors_sender_rc = EXIT_SUCCESS;
2808       }
2809     else if (Ustrcmp(argrest, "m") == 0) arg_error_handling = ERRORS_SENDER;
2810     else if (Ustrcmp(argrest, "p") == 0) arg_error_handling = ERRORS_STDERR;
2811     else if (Ustrcmp(argrest, "q") == 0) arg_error_handling = ERRORS_STDERR;
2812     else if (Ustrcmp(argrest, "w") == 0) arg_error_handling = ERRORS_SENDER;
2813     else badarg = TRUE;
2814     break;
2815
2816
2817     /* -F: Set sender's full name, used instead of the gecos entry from
2818     the password file. Since users can usually alter their gecos entries,
2819     there's no security involved in using this instead. The data can follow
2820     the -F or be in the next argument. */
2821
2822     case 'F':
2823     if (!*argrest)
2824       if (++i < argc) argrest = argv[i]; else { badarg = TRUE; break; }
2825     originator_name = string_copy_taint(
2826                   exim_str_fail_toolong(argrest, EXIM_HUMANNAME_MAX, "-F"),
2827                   GET_TAINTED);
2828     f.sender_name_forced = TRUE;
2829     break;
2830
2831
2832     /* -f: Set sender's address - this value is only actually used if Exim is
2833     run by a trusted user, or if untrusted_set_sender is set and matches the
2834     address, except that the null address can always be set by any user. The
2835     test for this happens later, when the value given here is ignored when not
2836     permitted. For an untrusted user, the actual sender is still put in Sender:
2837     if it doesn't match the From: header (unless no_local_from_check is set).
2838     The data can follow the -f or be in the next argument. The -r switch is an
2839     obsolete form of -f but since there appear to be programs out there that
2840     use anything that sendmail has ever supported, better accept it - the
2841     synonymizing is done before the switch above.
2842
2843     At this stage, we must allow domain literal addresses, because we don't
2844     know what the setting of allow_domain_literals is yet. Ditto for trailing
2845     dots and strip_trailing_dot. */
2846
2847     case 'f':
2848       {
2849       int dummy_start, dummy_end;
2850       uschar *errmess;
2851       if (!*argrest)
2852         if (i+1 < argc) argrest = argv[++i]; else { badarg = TRUE; break; }
2853       (void) exim_str_fail_toolong(argrest, EXIM_DISPLAYMAIL_MAX, "-f");
2854       if (!*argrest)
2855         {
2856         uschar * s = store_get(1, GET_UNTAINTED);       /* Ensure writeable memory */
2857         *s = '\0';
2858         sender_address = s;
2859         }
2860       else
2861         {
2862         const uschar * temp = argrest + Ustrlen(argrest) - 1;
2863         while (temp >= argrest && isspace(*temp)) temp--;
2864         if (temp >= argrest && *temp == '.') f_end_dot = TRUE;
2865         allow_domain_literals = TRUE;
2866         strip_trailing_dot = TRUE;
2867 #ifdef SUPPORT_I18N
2868         allow_utf8_domains = TRUE;
2869 #endif
2870         if (!(sender_address = parse_extract_address(argrest, &errmess,
2871                   &dummy_start, &dummy_end, &sender_address_domain, TRUE)))
2872           exim_fail("exim: bad -f address \"%s\": %s\n", argrest, errmess);
2873
2874         sender_address = string_copy_taint(sender_address, GET_TAINTED);
2875 #ifdef SUPPORT_I18N
2876         message_smtputf8 =  string_is_utf8(sender_address);
2877         allow_utf8_domains = FALSE;
2878 #endif
2879         allow_domain_literals = FALSE;
2880         strip_trailing_dot = FALSE;
2881         }
2882       f.sender_address_forced = TRUE;
2883       }
2884     break;
2885
2886     /* -G: sendmail invocation to specify that it's a gateway submission and
2887     sendmail may complain about problems instead of fixing them.
2888     We make it equivalent to an ACL "control = suppress_local_fixups" and do
2889     not at this time complain about problems. */
2890
2891     case 'G':
2892     flag_G = TRUE;
2893     break;
2894
2895     /* -h: Set the hop count for an incoming message. Exim does not currently
2896     support this; it always computes it by counting the Received: headers.
2897     To put it in will require a change to the spool header file format. */
2898
2899     case 'h':
2900     if (!*argrest)
2901       if (++i < argc) argrest = argv[i]; else { badarg = TRUE; break; }
2902     if (!isdigit(*argrest)) badarg = TRUE;
2903     break;
2904
2905
2906     /* -i: Set flag so dot doesn't end non-SMTP input (same as -oi, seems
2907     not to be documented for sendmail but mailx (at least) uses it) */
2908
2909     case 'i':
2910     if (!*argrest) f.dot_ends = FALSE; else badarg = TRUE;
2911     break;
2912
2913
2914     /* -L: set the identifier used for syslog; equivalent to setting
2915     syslog_processname in the config file, but needs to be an admin option. */
2916
2917     case 'L':
2918     if (!*argrest)
2919       if (++i < argc) argrest = argv[i]; else { badarg = TRUE; break; }
2920     if ((sz = Ustrlen(argrest)) > 32)
2921       exim_fail("exim: the -L syslog name is too long: \"%s\"\n", argrest);
2922     if (sz < 1)
2923       exim_fail("exim: the -L syslog name is too short\n");
2924     cmdline_syslog_name = string_copy_taint(argrest, GET_TAINTED);
2925     break;
2926
2927     case 'M':
2928     receiving_message = FALSE;
2929
2930     /* -MC:  continue delivery of another message via an existing open
2931     file descriptor. This option is used for an internal call by the
2932     smtp transport when there is a pending message waiting to go to an
2933     address to which it has got a connection. Five subsequent arguments are
2934     required: transport name, host name, IP address, sequence number, and
2935     message_id. Transports may decline to create new processes if the sequence
2936     number gets too big. The channel is stdin. This (-MC) must be the last
2937     argument. There's a subsequent check that the real-uid is privileged.
2938
2939     If we are running in the test harness. delay for a bit, to let the process
2940     that set this one up complete. This makes for repeatability of the logging,
2941     etc. output. */
2942
2943     if (Ustrcmp(argrest, "C") == 0)
2944       {
2945       union sockaddr_46 interface_sock;
2946       EXIM_SOCKLEN_T size = sizeof(interface_sock);
2947
2948       if (argc != i + 6)
2949         exim_fail("exim: too many or too few arguments after -MC\n");
2950
2951       if (msg_action_arg >= 0)
2952         exim_fail("exim: incompatible arguments\n");
2953
2954       continue_transport = string_copy_taint(
2955         exim_str_fail_toolong(argv[++i], EXIM_DRIVERNAME_MAX, "-C internal transport"),
2956         GET_TAINTED);
2957       continue_hostname = string_copy_taint(
2958         exim_str_fail_toolong(argv[++i], EXIM_HOSTNAME_MAX, "-C internal hostname"),
2959         GET_TAINTED);
2960       continue_host_address = string_copy_taint(
2961         exim_str_fail_toolong(argv[++i], EXIM_IPADDR_MAX, "-C internal hostaddr"),
2962         GET_TAINTED);
2963       continue_sequence = Uatoi(argv[++i]);
2964       msg_action = MSG_DELIVER;
2965       msg_action_arg = ++i;
2966       forced_delivery = TRUE;
2967       queue_run_pid = passed_qr_pid;
2968       queue_run_pipe = passed_qr_pipe;
2969
2970       if (!mac_ismsgid(argv[i]))
2971         exim_fail("exim: malformed message id %s after -MC option\n",
2972           argv[i]);
2973
2974       /* Set up $sending_ip_address and $sending_port, unless proxied */
2975
2976       if (!continue_proxy_cipher)
2977         if (getsockname(fileno(stdin), (struct sockaddr *)(&interface_sock),
2978             &size) == 0)
2979           sending_ip_address = host_ntoa(-1, &interface_sock, NULL,
2980             &sending_port);
2981         else
2982           exim_fail("exim: getsockname() failed after -MC option: %s\n",
2983             strerror(errno));
2984
2985       testharness_pause_ms(500);
2986       break;
2987       }
2988
2989     else if (*argrest == 'C' && argrest[1] && !argrest[2])
2990       {
2991       switch(argrest[1])
2992         {
2993     /* -MCA: set the smtp_authenticated flag; this is useful only when it
2994     precedes -MC (see above). The flag indicates that the host to which
2995     Exim is connected has accepted an AUTH sequence. */
2996
2997         case 'A': f.smtp_authenticated = TRUE; break;
2998
2999     /* -MCD: set the smtp_use_dsn flag; this indicates that the host
3000        that exim is connected to supports the esmtp extension DSN */
3001
3002         case 'D': smtp_peer_options |= OPTION_DSN; break;
3003
3004     /* -MCd: for debug, set a process-purpose string */
3005
3006         case 'd': if (++i < argc)
3007                     process_purpose = string_copy_taint(
3008                       exim_str_fail_toolong(argv[i], EXIM_DRIVERNAME_MAX, "-MCd"),
3009                       GET_TAINTED);
3010                   else badarg = TRUE;
3011                   break;
3012
3013     /* -MCG: set the queue name, to a non-default value. Arguably, anything
3014        from the commandline should be tainted - but we will need an untainted
3015        value for the spoolfile when doing a -odi delivery process. */
3016
3017         case 'G': if (++i < argc) queue_name = string_copy_taint(
3018                       exim_str_fail_toolong(argv[i], EXIM_DRIVERNAME_MAX, "-MCG"),
3019                       GET_UNTAINTED);
3020                   else badarg = TRUE;
3021                   break;
3022
3023     /* -MCK: the peer offered CHUNKING.  Must precede -MC */
3024
3025         case 'K': smtp_peer_options |= OPTION_CHUNKING; break;
3026
3027 #ifndef DISABLE_ESMTP_LIMITS
3028     /* -MCL: peer used LIMITS RCPTMAX and/or RCPTDOMAINMAX */
3029         case 'L': if (++i < argc) continue_limit_mail = Uatoi(argv[i]);
3030                   else badarg = TRUE;
3031                   if (++i < argc) continue_limit_rcpt = Uatoi(argv[i]);
3032                   else badarg = TRUE;
3033                   if (++i < argc) continue_limit_rcptdom = Uatoi(argv[i]);
3034                   else badarg = TRUE;
3035                   break;
3036 #endif
3037
3038     /* -MCP: set the smtp_use_pipelining flag; this is useful only when
3039     it preceded -MC (see above) */
3040
3041         case 'P': smtp_peer_options |= OPTION_PIPE; break;
3042
3043 #ifdef SUPPORT_SOCKS
3044     /* -MCp: Socks proxy in use; nearside IP, port, external IP, port */
3045         case 'p': proxy_session = TRUE;
3046                   if (++i < argc)
3047                     {
3048                     proxy_local_address = string_copy_taint(argv[i], GET_TAINTED);
3049                     if (++i < argc)
3050                       {
3051                       proxy_local_port = Uatoi(argv[i]);
3052                       if (++i < argc)
3053                         {
3054                         proxy_external_address = string_copy_taint(argv[i], GET_TAINTED);
3055                         if (++i < argc)
3056                           {
3057                           proxy_external_port = Uatoi(argv[i]);
3058                           break;
3059                     } } } }
3060                   badarg = TRUE;
3061                   break;
3062 #endif
3063     /* -MCQ: pass on the pid of the queue-running process that started
3064     this chain of deliveries and the fd of its synchronizing pipe; this
3065     is useful only when it precedes -MC (see above) */
3066
3067         case 'Q': if (++i < argc) passed_qr_pid = (pid_t)(Uatol(argv[i]));
3068                   else badarg = TRUE;
3069                   if (++i < argc) passed_qr_pipe = (int)(Uatol(argv[i]));
3070                   else badarg = TRUE;
3071                   break;
3072
3073     /* -MCq: do a quota check on the given recipient for the given size
3074     of message.  Separate from -MC. */
3075         case 'q': rcpt_verify_quota = TRUE;
3076                   if (++i < argc) message_size = Uatoi(argv[i]);
3077                   else badarg = TRUE;
3078                   break;
3079
3080     /* -MCS: set the smtp_use_size flag; this is useful only when it
3081     precedes -MC (see above) */
3082
3083         case 'S': smtp_peer_options |= OPTION_SIZE; break;
3084
3085 #ifndef DISABLE_TLS
3086     /* -MCs: used with -MCt; SNI was sent */
3087     /* -MCr: ditto, DANE */
3088
3089         case 'r':
3090         case 's': if (++i < argc)
3091                     {
3092                     continue_proxy_sni = string_copy_taint(
3093                       exim_str_fail_toolong(argv[i], EXIM_HOSTNAME_MAX, "-MCr/-MCs"),
3094                       GET_TAINTED);
3095                     if (argrest[1] == 'r') continue_proxy_dane = TRUE;
3096                     }
3097                   else badarg = TRUE;
3098                   break;
3099
3100     /* -MCt: similar to -MCT below but the connection is still open
3101     via a proxy process which handles the TLS context and coding.
3102     Require three arguments for the proxied local address and port,
3103     and the TLS cipher. */
3104
3105         case 't': if (++i < argc)
3106                     sending_ip_address = string_copy_taint(
3107                       exim_str_fail_toolong(argv[i], EXIM_IPADDR_MAX, "-MCt IP"),
3108                       GET_TAINTED);
3109                   else badarg = TRUE;
3110                   if (++i < argc)
3111                     sending_port = (int)(Uatol(argv[i]));
3112                   else badarg = TRUE;
3113                   if (++i < argc)
3114                     continue_proxy_cipher = string_copy_taint(
3115                       exim_str_fail_toolong(argv[i], EXIM_CIPHERNAME_MAX, "-MCt cipher"),
3116                       GET_TAINTED);
3117                   else badarg = TRUE;
3118                   /*FALLTHROUGH*/
3119
3120     /* -MCT: set the tls_offered flag; this is useful only when it
3121     precedes -MC (see above). The flag indicates that the host to which
3122     Exim is connected has offered TLS support. */
3123
3124         case 'T': smtp_peer_options |= OPTION_TLS; break;
3125 #endif
3126
3127         default:  badarg = TRUE; break;
3128         }
3129       break;
3130       }
3131
3132     /* -M[x]: various operations on the following list of message ids:
3133        -M    deliver the messages, ignoring next retry times and thawing
3134        -Mc   deliver the messages, checking next retry times, no thawing
3135        -Mf   freeze the messages
3136        -Mg   give up on the messages
3137        -Mt   thaw the messages
3138        -Mrm  remove the messages
3139     In the above cases, this must be the last option. There are also the
3140     following options which are followed by a single message id, and which
3141     act on that message. Some of them use the "recipient" addresses as well.
3142        -Mar  add recipient(s)
3143        -MG   move to a different queue
3144        -Mmad mark all recipients delivered
3145        -Mmd  mark recipients(s) delivered
3146        -Mes  edit sender
3147        -Mset load a message for use with -be
3148        -Mvb  show body
3149        -Mvc  show copy (of whole message, in RFC 2822 format)
3150        -Mvh  show header
3151        -Mvl  show log
3152     */
3153
3154     else if (!*argrest)
3155       {
3156       msg_action = MSG_DELIVER;
3157       forced_delivery = f.deliver_force_thaw = TRUE;
3158       }
3159     else if (Ustrcmp(argrest, "ar") == 0)
3160       {
3161       msg_action = MSG_ADD_RECIPIENT;
3162       one_msg_action = TRUE;
3163       }
3164     else if (Ustrcmp(argrest, "c") == 0)  msg_action = MSG_DELIVER;
3165     else if (Ustrcmp(argrest, "es") == 0)
3166       {
3167       msg_action = MSG_EDIT_SENDER;
3168       one_msg_action = TRUE;
3169       }
3170     else if (Ustrcmp(argrest, "f") == 0)  msg_action = MSG_FREEZE;
3171     else if (Ustrcmp(argrest, "g") == 0)
3172       {
3173       msg_action = MSG_DELIVER;
3174       deliver_give_up = TRUE;
3175       }
3176    else if (Ustrcmp(argrest, "G") == 0)
3177       {
3178       msg_action = MSG_SETQUEUE;
3179       queue_name_dest = string_copy_taint(
3180         exim_str_fail_toolong(next_argv(argv, &i, argc, arg),
3181                               EXIM_DRIVERNAME_MAX, "-MG"),
3182         GET_TAINTED);
3183       }
3184     else if (Ustrcmp(argrest, "mad") == 0) msg_action = MSG_MARK_ALL_DELIVERED;
3185     else if (Ustrcmp(argrest, "md") == 0)
3186       {
3187       msg_action = MSG_MARK_DELIVERED;
3188       one_msg_action = TRUE;
3189       }
3190     else if (Ustrcmp(argrest, "rm") == 0) msg_action = MSG_REMOVE;
3191     else if (Ustrcmp(argrest, "set") == 0)
3192       {
3193       msg_action = MSG_LOAD;
3194       one_msg_action = TRUE;
3195       }
3196     else if (Ustrcmp(argrest, "t") == 0)  msg_action = MSG_THAW;
3197     else if (Ustrcmp(argrest, "vb") == 0)
3198       {
3199       msg_action = MSG_SHOW_BODY;
3200       one_msg_action = TRUE;
3201       }
3202     else if (Ustrcmp(argrest, "vc") == 0)
3203       {
3204       msg_action = MSG_SHOW_COPY;
3205       one_msg_action = TRUE;
3206       }
3207     else if (Ustrcmp(argrest, "vh") == 0)
3208       {
3209       msg_action = MSG_SHOW_HEADER;
3210       one_msg_action = TRUE;
3211       }
3212     else if (Ustrcmp(argrest, "vl") == 0)
3213       {
3214       msg_action = MSG_SHOW_LOG;
3215       one_msg_action = TRUE;
3216       }
3217     else { badarg = TRUE; break; }
3218
3219     /* All the -Mxx options require at least one message id. */
3220
3221     msg_action_arg = i + 1;
3222     if (msg_action_arg >= argc)
3223       exim_fail("exim: no message ids given after %s option\n", arg);
3224
3225     /* Some require only message ids to follow */
3226
3227     if (!one_msg_action)
3228       {
3229       for (int j = msg_action_arg; j < argc; j++) if (!mac_ismsgid(argv[j]))
3230         exim_fail("exim: malformed message id %s after %s option\n",
3231           argv[j], arg);
3232       goto END_ARG;   /* Remaining args are ids */
3233       }
3234
3235     /* Others require only one message id, possibly followed by addresses,
3236     which will be handled as normal arguments. */
3237
3238     else
3239       {
3240       if (!mac_ismsgid(argv[msg_action_arg]))
3241         exim_fail("exim: malformed message id %s after %s option\n",
3242           argv[msg_action_arg], arg);
3243       i++;
3244       }
3245     break;
3246
3247
3248     /* Some programs seem to call the -om option without the leading o;
3249     for sendmail it askes for "me too". Exim always does this. */
3250
3251     case 'm':
3252     if (*argrest) badarg = TRUE;
3253     break;
3254
3255
3256     /* -N: don't do delivery - a debugging option that stops transports doing
3257     their thing. It implies debugging at the D_v level. */
3258
3259     case 'N':
3260     if (!*argrest)
3261       {
3262       f.dont_deliver = TRUE;
3263       debug_selector |= D_v;
3264       debug_file = stderr;
3265       }
3266     else badarg = TRUE;
3267     break;
3268
3269
3270     /* -n: This means "don't alias" in sendmail, apparently.
3271     For normal invocations, it has no effect.
3272     It may affect some other options. */
3273
3274     case 'n':
3275     flag_n = TRUE;
3276     break;
3277
3278     /* -O: Just ignore it. In sendmail, apparently -O option=value means set
3279     option to the specified value. This form uses long names. We need to handle
3280     -O option=value and -Ooption=value. */
3281
3282     case 'O':
3283     if (!*argrest)
3284       if (++i >= argc)
3285         exim_fail("exim: string expected after -O\n");
3286     break;
3287
3288     case 'o':
3289     switch (*argrest++)
3290       {
3291       /* -oA: Set an argument for the bi command (sendmail's "alternate alias
3292       file" option). */
3293       case 'A':
3294         if (!*(alias_arg = argrest))
3295           if (i+1 < argc) alias_arg = argv[++i];
3296           else exim_fail("exim: string expected after -oA\n");
3297         break;
3298
3299       /* -oB: Set a connection message max value for remote deliveries */
3300       case 'B':
3301         {
3302         const uschar * p = argrest;
3303         if (!*p)
3304           if (i+1 < argc && isdigit((argv[i+1][0])))
3305             p = argv[++i];
3306           else
3307             {
3308             connection_max_messages = 1;
3309             p = NULL;
3310             }
3311
3312         if (p)
3313           {
3314           if (!isdigit(*p))
3315             exim_fail("exim: number expected after -oB\n");
3316           connection_max_messages = Uatoi(p);
3317           }
3318         }
3319         break;
3320
3321       /* -odb: background delivery */
3322
3323       case 'd':
3324         if (Ustrcmp(argrest, "b") == 0)
3325           {
3326           f.synchronous_delivery = FALSE;
3327           arg_queue_only = FALSE;
3328           queue_only_set = TRUE;
3329           }
3330
3331       /* -odd: testsuite-only: add no inter-process delays */
3332
3333         else if (Ustrcmp(argrest, "d") == 0)
3334           f.testsuite_delays = FALSE;
3335
3336       /* -odf: foreground delivery (smail-compatible option); same effect as
3337          -odi: interactive (synchronous) delivery (sendmail-compatible option)
3338       */
3339
3340         else if (Ustrcmp(argrest, "f") == 0 || Ustrcmp(argrest, "i") == 0)
3341           {
3342           f.synchronous_delivery = TRUE;
3343           arg_queue_only = FALSE;
3344           queue_only_set = TRUE;
3345           }
3346
3347       /* -odq: queue only */
3348
3349         else if (Ustrcmp(argrest, "q") == 0)
3350           {
3351           f.synchronous_delivery = FALSE;
3352           arg_queue_only = TRUE;
3353           queue_only_set = TRUE;
3354           }
3355
3356       /* -odqs: queue SMTP only - do local deliveries and remote routing,
3357       but no remote delivery */
3358
3359         else if (Ustrcmp(argrest, "qs") == 0)
3360           {
3361           f.queue_smtp = TRUE;
3362           arg_queue_only = FALSE;
3363           queue_only_set = TRUE;
3364           }
3365         else badarg = TRUE;
3366         break;
3367
3368       /* -oex: Sendmail error flags. As these are also accepted without the
3369       leading -o prefix, for compatibility with vacation and other callers,
3370       they are handled with -e above. */
3371
3372       /* -oi:     Set flag so dot doesn't end non-SMTP input (same as -i)
3373          -oitrue: Another sendmail syntax for the same */
3374
3375       case 'i':
3376         if (!*argrest || Ustrcmp(argrest, "true") == 0)
3377           f.dot_ends = FALSE;
3378         else badarg = TRUE;
3379         break;
3380
3381     /* -oM*: Set various characteristics for an incoming message; actually
3382     acted on for trusted callers only. */
3383
3384       case 'M':
3385         {
3386         if (i+1 >= argc)
3387           exim_fail("exim: data expected after -oM%s\n", argrest);
3388
3389         /* -oMa: Set sender host address */
3390
3391         if (Ustrcmp(argrest, "a") == 0)
3392           sender_host_address = string_copy_taint(
3393             exim_str_fail_toolong(next_argv(argv, &i, argc, arg),
3394                                   EXIM_IPADDR_MAX, "-oMa"), GET_TAINTED);
3395
3396         /* -oMaa: Set authenticator name */
3397
3398         else if (Ustrcmp(argrest, "aa") == 0)
3399           sender_host_authenticated = string_copy_taint(
3400             exim_str_fail_toolong(next_argv(argv, &i, argc, arg),
3401                                   EXIM_DRIVERNAME_MAX, "-oMaa"), GET_TAINTED);
3402
3403         /* -oMas: setting authenticated sender */
3404
3405         else if (Ustrcmp(argrest, "as") == 0)
3406           authenticated_sender = string_copy_taint(
3407             exim_str_fail_toolong(next_argv(argv, &i, argc, arg),
3408                                   EXIM_EMAILADDR_MAX, "-oMas"), GET_TAINTED);
3409
3410         /* -oMai: setting authenticated id */
3411
3412         else if (Ustrcmp(argrest, "ai") == 0)
3413           authenticated_id = string_copy_taint(
3414             exim_str_fail_toolong(next_argv(argv, &i, argc, arg),
3415                                   EXIM_EMAILADDR_MAX, "-oMai"), GET_TAINTED);
3416
3417         /* -oMi: Set incoming interface address */
3418
3419         else if (Ustrcmp(argrest, "i") == 0)
3420           interface_address = string_copy_taint(
3421             exim_str_fail_toolong(next_argv(argv, &i, argc, arg),
3422                                   EXIM_IPADDR_MAX, "-oMi"), GET_TAINTED);
3423
3424         /* -oMm: Message reference */
3425
3426         else if (Ustrcmp(argrest, "m") == 0)
3427           {
3428           if (!mac_ismsgid(argv[i+1]))
3429               exim_fail("-oMm must be a valid message ID\n");
3430           if (!f.trusted_config)
3431               exim_fail("-oMm must be called by a trusted user/config\n");
3432             message_reference = next_argv(argv, &i, argc, arg);
3433           }
3434
3435         /* -oMr: Received protocol */
3436
3437         else if (Ustrcmp(argrest, "r") == 0)
3438
3439           if (received_protocol)
3440             exim_fail("received_protocol is set already\n");
3441           else
3442             if (++i >= argc) badarg = TRUE;
3443             else
3444               received_protocol = string_copy_taint(
3445                 exim_str_fail_toolong(argv[i], EXIM_DRIVERNAME_MAX, "-oMr"),
3446                 GET_TAINTED);
3447
3448         /* -oMs: Set sender host name */
3449
3450         else if (Ustrcmp(argrest, "s") == 0)
3451           if (++i >= argc) badarg = TRUE;
3452           else
3453             sender_host_name = string_copy_taint(
3454               exim_str_fail_toolong(argv[i], EXIM_HOSTNAME_MAX, "-oMs"),
3455               GET_TAINTED);
3456
3457         /* -oMt: Set sender ident */
3458
3459         else if (Ustrcmp(argrest, "t") == 0)
3460           if (++i >= argc) badarg = TRUE;
3461           else
3462             {
3463             sender_ident_set = TRUE;
3464             sender_ident = string_copy_taint(
3465               exim_str_fail_toolong(argv[i], EXIM_IDENTUSER_MAX, "-oMt"),
3466               GET_TAINTED);
3467             }
3468
3469         /* Else a bad argument */
3470
3471         else
3472           badarg = TRUE;
3473         }
3474         break;
3475
3476       /* -om: Me-too flag for aliases. Exim always does this. Some programs
3477       seem to call this as -m (undocumented), so that is also accepted (see
3478       above). */
3479       /* -oo: An ancient flag for old-style addresses which still seems to
3480       crop up in some calls (see in SCO). */
3481
3482       case 'm':
3483       case 'o':
3484         if (*argrest) badarg = TRUE;
3485         break;
3486
3487       /* -oP <name>: set pid file path for daemon
3488          -oPX:       delete pid file of daemon */
3489
3490       case 'P':
3491         if (!f.running_in_test_harness && real_uid != root_uid && real_uid != exim_uid)
3492           exim_fail("exim: only uid=%d or uid=%d can use -oP and -oPX "
3493                     "(uid=%d euid=%d | %d)\n",
3494                     root_uid, exim_uid, getuid(), geteuid(), real_uid);
3495         if (!*argrest)
3496           if (++i < argc) override_pid_file_path = argv[i];
3497           else badarg = TRUE;
3498         else if (Ustrcmp(argrest, "X") == 0) delete_pid_file();
3499         else badarg = TRUE;
3500         break;
3501
3502
3503       /* -or <n>: set timeout for non-SMTP acceptance
3504          -os <n>: set timeout for SMTP acceptance */
3505
3506       case 'r':
3507       case 's':
3508         {
3509         int * tp = argrest[-1] == 'r'
3510           ? &arg_receive_timeout : &arg_smtp_receive_timeout;
3511         if (*argrest)
3512           *tp = readconf_readtime(argrest, 0, FALSE);
3513         else if (i+1 < argc)
3514           *tp = readconf_readtime(argv[++i], 0, FALSE);
3515
3516         if (*tp < 0)
3517           exim_fail("exim: bad time value %s: abandoned\n", argv[i]);
3518         }
3519         break;
3520
3521       /* -oX <list>: Override local_interfaces and/or default daemon ports */
3522       /* Limits: Is there a real limit we want here?  1024 is very arbitrary. */
3523
3524       case 'X':
3525         if (*argrest || ++i >= argc) badarg = TRUE;
3526         else override_local_interfaces = string_copy_taint(
3527           exim_str_fail_toolong(argv[i], 1024, "-oX"), GET_TAINTED);
3528         break;
3529
3530       /* -oY: Override creation of daemon notifier socket */
3531
3532       case 'Y':
3533         if (*argrest) badarg = TRUE;
3534         else f.notifier_socket_en = FALSE;
3535         break;
3536
3537       /* Unknown -o argument */
3538
3539       default:
3540         badarg = TRUE;
3541       }
3542     break;
3543
3544
3545     /* -ps: force Perl startup; -pd force delayed Perl startup */
3546
3547     case 'p':
3548     #ifdef EXIM_PERL
3549     if (*argrest == 's' && argrest[1] == 0)
3550       {
3551       perl_start_option = 1;
3552       break;
3553       }
3554     if (*argrest == 'd' && argrest[1] == 0)
3555       {
3556       perl_start_option = -1;
3557       break;
3558       }
3559     #endif
3560
3561     /* -panythingelse is taken as the Sendmail-compatible argument -prval:sval,
3562     which sets the host protocol and host name */
3563
3564     if (!*argrest)
3565       argrest = next_argv(argv, &i, argc, arg);
3566
3567     if (*argrest)
3568       {
3569       uschar * hn = Ustrchr(argrest, ':');
3570
3571       if (received_protocol)
3572         exim_fail("received_protocol is set already\n");
3573
3574       if (!hn)
3575         received_protocol = string_copy_taint(
3576           exim_str_fail_toolong(argrest, EXIM_DRIVERNAME_MAX, "-p<protocol>"),
3577           GET_TAINTED);
3578       else
3579         {
3580         (void) exim_str_fail_toolong(argrest, (EXIM_DRIVERNAME_MAX+1+EXIM_HOSTNAME_MAX), "-p<protocol>:<host>");
3581         received_protocol = string_copyn_taint(argrest, hn - argrest, GET_TAINTED);
3582         sender_host_name = string_copy_taint(hn + 1, GET_TAINTED);
3583         }
3584       }
3585     break;
3586
3587     /* -q:  set up queue runs */
3588
3589     case 'q':
3590       {
3591       BOOL two_stage, first_del, force, thaw = FALSE, local;
3592
3593       receiving_message = FALSE;
3594
3595       /* -qq...: Do queue runs in a 2-stage manner */
3596
3597       if ((two_stage = *argrest == 'q'))
3598         argrest++;
3599
3600       /* -qi...: Do only first (initial) deliveries */
3601
3602       if ((first_del = *argrest == 'i'))
3603         argrest++;
3604
3605       /* -qf...: Run the queue, forcing deliveries
3606          -qff..: Ditto, forcing thawing as well */
3607
3608       if ((force = *argrest == 'f'))
3609         if ((thaw = *++argrest == 'f'))
3610           argrest++;
3611
3612       /* -q[f][f]l...: Run the queue only on local deliveries */
3613
3614       if ((local = *argrest == 'l'))
3615         argrest++;
3616
3617       /* -q[f][f][l][G<name>]... Work on the named queue */
3618
3619       if (*argrest == 'G')
3620         {
3621         int i;
3622         for (argrest++, i = 0; argrest[i] && argrest[i] != '/'; ) i++;
3623         exim_len_fail_toolong(i, EXIM_DRIVERNAME_MAX, "-q*G<name>");
3624         queue_name = string_copyn(argrest, i);
3625         argrest += i;
3626         if (*argrest == '/') argrest++;
3627         }
3628
3629       /* -q[f][f][l][G<name>]: Run the queue, optionally forced, optionally local
3630       only, optionally named, optionally starting from a given message id. */
3631
3632       if (!(list_queue || count_queue))
3633         {
3634         qrunner * q;
3635
3636         if (  !*argrest
3637            && (i + 1 >= argc || argv[i+1][0] == '-' || mac_ismsgid(argv[i+1])))
3638           {
3639           q = alloc_onetime_qrunner();
3640           if (i+1 < argc && mac_ismsgid(argv[i+1]))
3641             start_queue_run_id = string_copy_taint(argv[++i], GET_TAINTED);
3642           if (i+1 < argc && mac_ismsgid(argv[i+1]))
3643             stop_queue_run_id = string_copy_taint(argv[++i], GET_TAINTED);
3644           }
3645
3646       /* -q[f][f][l][G<name>/]<n>: Run the queue at regular intervals, optionally
3647       forced, optionally local only, optionally named. */
3648
3649         else
3650           {
3651           int intvl;
3652           const uschar * s;
3653
3654           if (*argrest) s = argrest;
3655           else if (++i < argc) { badarg = TRUE; break; }
3656           else s = argv[i];
3657
3658           if ((intvl = readconf_readtime(s, 0, FALSE)) <= 0)
3659             exim_fail("exim: bad time value %s: abandoned\n", argv[i]);
3660
3661           for (qrunner * qq = qrunners; qq; qq = qq->next)
3662             if (  queue_name && qq->name && Ustrcmp(queue_name, qq->name) == 0
3663                || !queue_name && !qq->name)
3664               exim_fail("exim: queue-runner specified more than once\n");
3665
3666           q = alloc_qrunner();
3667           q->interval = intvl;
3668           }
3669
3670         q->name = *queue_name ? queue_name : NULL;      /* will be NULL for the default queue */
3671         q->queue_run_force = force;
3672         q->deliver_force_thaw = thaw;
3673         q->queue_run_first_delivery = first_del;
3674         q->queue_run_local = local;
3675         q->queue_2stage = two_stage;
3676         }
3677
3678       break;
3679       }
3680
3681
3682     case 'R':   /* Synonymous with -qR... */
3683     case 'S':   /* Synonymous with -qS... */
3684       {
3685       const uschar * tainted_selectstr;
3686       uschar * s;
3687
3688       receiving_message = FALSE;
3689
3690     /* -Rf:   As -R (below) but force all deliveries,
3691        -Rff:  Ditto, but also thaw all frozen messages,
3692        -Rr:   String is regex
3693        -Rrf:  Regex and force
3694        -Rrff: Regex and force and thaw
3695
3696        -S...: Like -R but works on sender.
3697
3698     in all cases provided there are no further characters in this
3699     argument. */
3700
3701       if (!qrunners) alloc_onetime_qrunner();
3702       qrunners->queue_2stage = f.queue_2stage;
3703       if (*argrest)
3704         for (int i = 0; i < nelem(rsopts); i++)
3705           if (Ustrcmp(argrest, rsopts[i]) == 0)
3706             {
3707             if (i != 2) qrunners->queue_run_force = TRUE;
3708             if (i >= 2)
3709               if (switchchar == 'R')
3710                 f.deliver_selectstring_regex = TRUE;
3711               else
3712                 f.deliver_selectstring_sender_regex = TRUE;
3713             if (i == 1 || i == 4) qrunners->deliver_force_thaw = TRUE;
3714             argrest += Ustrlen(rsopts[i]);
3715             }
3716
3717     /* -R or -S: Set string to match in addresses for forced queue run to
3718     pick out particular messages. */
3719
3720       /* Avoid attacks from people providing very long strings, and do so before
3721       we make copies. */
3722       if (*argrest)
3723         tainted_selectstr = argrest;
3724       else if (i+1 < argc)
3725         tainted_selectstr = argv[++i];
3726       else
3727         exim_fail("exim: string expected after %s\n", switchchar == 'R' ? "-R" : "-S");
3728
3729       s = string_copy_taint(
3730         exim_str_fail_toolong(tainted_selectstr, EXIM_EMAILADDR_MAX, "-R"),
3731         GET_TAINTED);
3732
3733       if (switchchar == 'R')
3734         deliver_selectstring = s;
3735       else
3736         deliver_selectstring_sender = s;
3737       }
3738     break;
3739
3740
3741     /* -r: an obsolete synonym for -f (see above) */
3742
3743     /* -Tqt is an option that is exclusively for use by the testing suite.
3744     It is not recognized in other circumstances. It allows for the setting up
3745     of explicit "queue times" so that various warning/retry things can be
3746     tested. Otherwise variability of clock ticks etc. cause problems. */
3747
3748     case 'T':
3749     if (f.running_in_test_harness && Ustrcmp(argrest, "qt") == 0 && ++i < argc)
3750       fudged_queue_times = string_copy_taint(argv[i], GET_TAINTED);
3751     else badarg = TRUE;
3752     break;
3753
3754
3755     /* -t: Set flag to extract recipients from body of message. */
3756
3757     case 't':
3758     if (!*argrest) extract_recipients = TRUE;
3759
3760     /* -ti: Set flag to extract recipients from body of message, and also
3761     specify that dot does not end the message. */
3762
3763     else if (Ustrcmp(argrest, "i") == 0)
3764       {
3765       extract_recipients = TRUE;
3766       f.dot_ends = FALSE;
3767       }
3768
3769     /* -tls-on-connect: don't wait for STARTTLS (for old clients) */
3770
3771     #ifndef DISABLE_TLS
3772     else if (Ustrcmp(argrest, "ls-on-connect") == 0) tls_in.on_connect = TRUE;
3773     #endif
3774
3775     else badarg = TRUE;
3776     break;
3777
3778
3779     /* -U: This means "initial user submission" in sendmail, apparently. The
3780     doc claims that in future sendmail may refuse syntactically invalid
3781     messages instead of fixing them. For the moment, we just ignore it. */
3782
3783     case 'U':
3784     break;
3785
3786
3787     /* -v: verify things - this is a very low-level debugging */
3788
3789     case 'v':
3790     if (!*argrest)
3791       {
3792       debug_selector |= D_v;
3793       debug_file = stderr;
3794       }
3795     else badarg = TRUE;
3796     break;
3797
3798
3799     /* -x: AIX uses this to indicate some fancy 8-bit character stuff:
3800
3801       The -x flag tells the sendmail command that mail from a local
3802       mail program has National Language Support (NLS) extended characters
3803       in the body of the mail item. The sendmail command can send mail with
3804       extended NLS characters across networks that normally corrupts these
3805       8-bit characters.
3806
3807     As Exim is 8-bit clean, it just ignores this flag. */
3808
3809     case 'x':
3810     if (*argrest) badarg = TRUE;
3811     break;
3812
3813     /* -X: in sendmail: takes one parameter, logfile, and sends debugging
3814     logs to that file.  We swallow the parameter and otherwise ignore it. */
3815
3816     case 'X':
3817     if (!*argrest)
3818       if (++i >= argc)
3819         exim_fail("exim: string expected after -X\n");
3820     break;
3821
3822     /* -z: a line of text to log */
3823
3824     case 'z':
3825     if (!*argrest)
3826       if (++i < argc)
3827         log_oneline = string_copy_taint(
3828           exim_str_fail_toolong(argv[i], 2048, "-z logtext"),
3829           GET_TAINTED);
3830       else
3831         exim_fail("exim: file name expected after %s\n", argv[i-1]);
3832     break;
3833
3834     /* All other initial characters are errors */
3835
3836     default:
3837     badarg = TRUE;
3838     break;
3839     }         /* End of high-level switch statement */
3840
3841   /* Failed to recognize the option, or syntax error */
3842
3843   if (badarg)
3844     exim_fail("exim abandoned: unknown, malformed, or incomplete "
3845       "option %s\n", arg);
3846   }
3847
3848
3849 /* If -R or -S have been specified without -q, assume a single queue run. */
3850
3851  if ((deliver_selectstring || deliver_selectstring_sender) && !qrunners)
3852   alloc_onetime_qrunner();
3853
3854
3855 END_ARG:
3856  store_pool = old_pool;
3857  }
3858
3859 /* If usage_wanted is set we call the usage function - which never returns */
3860 if (usage_wanted) exim_usage(called_as);
3861
3862 /* Arguments have been processed. Check for incompatibilities. */
3863 if (  (  (smtp_input || extract_recipients || recipients_arg < argc)
3864       && (  f.daemon_listen || qrunners || bi_option
3865          || test_retry_arg >= 0 || test_rewrite_arg >= 0
3866          || filter_test != FTEST_NONE
3867          || msg_action_arg > 0 && !one_msg_action
3868       )  )
3869    || (  msg_action_arg > 0
3870       && (  f.daemon_listen || is_multiple_qrun() || list_options
3871          || checking && msg_action != MSG_LOAD
3872          || bi_option || test_retry_arg >= 0 || test_rewrite_arg >= 0
3873       )  )
3874    || (  (f.daemon_listen || is_multiple_qrun())
3875       && (  sender_address || list_options || list_queue || checking
3876          || bi_option
3877       )  )
3878    || f.daemon_listen && is_onetime_qrun()
3879    || f.inetd_wait_mode && qrunners
3880    || (  list_options
3881       && (  checking || smtp_input || extract_recipients
3882          || filter_test != FTEST_NONE || bi_option
3883       )  )
3884    || (  verify_address_mode
3885       && (  f.address_test_mode || smtp_input || extract_recipients
3886          || filter_test != FTEST_NONE || bi_option
3887       )  )
3888    || (  f.address_test_mode
3889       && (  smtp_input || extract_recipients || filter_test != FTEST_NONE
3890          || bi_option
3891       )  )
3892    || (  smtp_input
3893       && (sender_address || filter_test != FTEST_NONE || extract_recipients)
3894       )
3895    || deliver_selectstring && !qrunners
3896    || msg_action == MSG_LOAD && (!expansion_test || expansion_test_message)
3897    )
3898   exim_fail("exim: incompatible command-line options or arguments\n");
3899
3900 /* If debugging is set up, set the file and the file descriptor to pass on to
3901 child processes. It should, of course, be 2 for stderr. Also, force the daemon
3902 to run in the foreground. */
3903
3904 if (debug_selector != 0)
3905   {
3906   debug_file = stderr;
3907   debug_fd = fileno(debug_file);
3908   f.background_daemon = FALSE;
3909   testharness_pause_ms(100);   /* lets caller finish */
3910   if (debug_selector != D_v)    /* -v only doesn't show this */
3911     {
3912     debug_printf("Exim version %s uid=%ld gid=%ld pid=%d D=%x\n",
3913       version_string, (long int)real_uid, (long int)real_gid, (int)getpid(),
3914       debug_selector);
3915     if (!version_printed)
3916       show_whats_supported(FALSE);
3917     }
3918   }
3919
3920 /* When started with root privilege, ensure that the limits on the number of
3921 open files and the number of processes (where that is accessible) are
3922 sufficiently large, or are unset, in case Exim has been called from an
3923 environment where the limits are screwed down. Not all OS have the ability to
3924 change some of these limits. */
3925
3926 if (unprivileged)
3927   {
3928   DEBUG(D_any) debug_print_ids(US"Exim has no root privilege:");
3929   }
3930 else
3931   {
3932   struct rlimit rlp;
3933
3934 #ifdef RLIMIT_NOFILE
3935   if (getrlimit(RLIMIT_NOFILE, &rlp) < 0)
3936     {
3937     log_write(0, LOG_MAIN|LOG_PANIC, "getrlimit(RLIMIT_NOFILE) failed: %s",
3938       strerror(errno));
3939     rlp.rlim_cur = rlp.rlim_max = 0;
3940     }
3941
3942   /* I originally chose 1000 as a nice big number that was unlikely to
3943   be exceeded. It turns out that some older OS have a fixed upper limit of
3944   256. */
3945
3946   if (rlp.rlim_cur < 1000)
3947     {
3948     rlp.rlim_cur = rlp.rlim_max = 1000;
3949     if (setrlimit(RLIMIT_NOFILE, &rlp) < 0)
3950       {
3951       rlp.rlim_cur = rlp.rlim_max = 256;
3952       if (setrlimit(RLIMIT_NOFILE, &rlp) < 0)
3953         log_write(0, LOG_MAIN|LOG_PANIC, "setrlimit(RLIMIT_NOFILE) failed: %s",
3954           strerror(errno));
3955       }
3956     }
3957 #endif
3958
3959 #ifdef RLIMIT_NPROC
3960   if (getrlimit(RLIMIT_NPROC, &rlp) < 0)
3961     {
3962     log_write(0, LOG_MAIN|LOG_PANIC, "getrlimit(RLIMIT_NPROC) failed: %s",
3963       strerror(errno));
3964     rlp.rlim_cur = rlp.rlim_max = 0;
3965     }
3966
3967 # ifdef RLIM_INFINITY
3968   if (rlp.rlim_cur != RLIM_INFINITY && rlp.rlim_cur < 1000)
3969     {
3970     rlp.rlim_cur = rlp.rlim_max = RLIM_INFINITY;
3971 # else
3972   if (rlp.rlim_cur < 1000)
3973     {
3974     rlp.rlim_cur = rlp.rlim_max = 1000;
3975 # endif
3976     if (setrlimit(RLIMIT_NPROC, &rlp) < 0)
3977       log_write(0, LOG_MAIN|LOG_PANIC, "setrlimit(RLIMIT_NPROC) failed: %s",
3978         strerror(errno));
3979     }
3980 #endif
3981   }
3982
3983 /* Exim is normally entered as root (but some special configurations are
3984 possible that don't do this). However, it always spins off sub-processes that
3985 set their uid and gid as required for local delivery. We don't want to pass on
3986 any extra groups that root may belong to, so we want to get rid of them all at
3987 this point.
3988
3989 We need to obey setgroups() at this stage, before possibly giving up root
3990 privilege for a changed configuration file, but later on we might need to
3991 check on the additional groups for the admin user privilege - can't do that
3992 till after reading the config, which might specify the exim gid. Therefore,
3993 save the group list here first. */
3994
3995 if ((group_count = getgroups(nelem(group_list), group_list)) < 0)
3996   exim_fail("exim: getgroups() failed: %s\n", strerror(errno));
3997
3998 /* There is a fundamental difference in some BSD systems in the matter of
3999 groups. FreeBSD and BSDI are known to be different; NetBSD and OpenBSD are
4000 known not to be different. On the "different" systems there is a single group
4001 list, and the first entry in it is the current group. On all other versions of
4002 Unix there is a supplementary group list, which is in *addition* to the current
4003 group. Consequently, to get rid of all extraneous groups on a "standard" system
4004 you pass over 0 groups to setgroups(), while on a "different" system you pass
4005 over a single group - the current group, which is always the first group in the
4006 list. Calling setgroups() with zero groups on a "different" system results in
4007 an error return. The following code should cope with both types of system.
4008
4009  Unfortunately, recent MacOS, which should be a FreeBSD, "helpfully" succeeds
4010  the "setgroups() with zero groups" - and changes the egid.
4011  Thanks to that we had to stash the original_egid above, for use below
4012  in the call to exim_setugid().
4013
4014 However, if this process isn't running as root, setgroups() can't be used
4015 since you have to be root to run it, even if throwing away groups.
4016 Except, sigh, for Hurd - where you can.
4017 Not being root here happens only in some unusual configurations. */
4018
4019 if (  !unprivileged
4020 #ifndef OS_SETGROUPS_ZERO_DROPS_ALL
4021    && setgroups(0, NULL) != 0
4022 #endif
4023    && setgroups(1, group_list) != 0)
4024   exim_fail("exim: setgroups() failed: %s\n", strerror(errno));
4025
4026 /* If the configuration file name has been altered by an argument on the
4027 command line (either a new file name or a macro definition) and the caller is
4028 not root, or if this is a filter testing run, remove any setuid privilege the
4029 program has and run as the underlying user.
4030
4031 The exim user is locked out of this, which severely restricts the use of -C
4032 for some purposes.
4033
4034 Otherwise, set the real ids to the effective values (should be root unless run
4035 from inetd, which it can either be root or the exim uid, if one is configured).
4036
4037 There is a private mechanism for bypassing some of this, in order to make it
4038 possible to test lots of configurations automatically, without having either to
4039 recompile each time, or to patch in an actual configuration file name and other
4040 values (such as the path name). If running in the test harness, pretend that
4041 configuration file changes and macro definitions haven't happened. */
4042
4043 if ((                                            /* EITHER */
4044     (!f.trusted_config ||                          /* Config changed, or */
4045      !macros_trusted(opt_D_used)) &&             /*  impermissible macros and */
4046     real_uid != root_uid &&                      /* Not root, and */
4047     !f.running_in_test_harness                     /* Not fudged */
4048     ) ||                                         /*   OR   */
4049     expansion_test                               /* expansion testing */
4050     ||                                           /*   OR   */
4051     filter_test != FTEST_NONE)                   /* Filter testing */
4052   {
4053   setgroups(group_count, group_list);
4054   exim_setugid(real_uid, real_gid, FALSE,
4055     US"-C, -D, -be or -bf forces real uid");
4056   removed_privilege = TRUE;
4057
4058   /* In the normal case when Exim is called like this, stderr is available
4059   and should be used for any logging information because attempts to write
4060   to the log will usually fail. To arrange this, we unset really_exim. However,
4061   if no stderr is available there is no point - we might as well have a go
4062   at the log (if it fails, syslog will be written).
4063
4064   Note that if the invoker is Exim, the logs remain available. Messing with
4065   this causes unlogged successful deliveries.  */
4066
4067   if (log_stderr && real_uid != exim_uid)
4068     f.really_exim = FALSE;
4069   }
4070
4071 /* Privilege is to be retained for the moment. It may be dropped later,
4072 depending on the job that this Exim process has been asked to do. For now, set
4073 the real uid to the effective so that subsequent re-execs of Exim are done by a
4074 privileged user. */
4075
4076 else
4077   exim_setugid(geteuid(), original_egid, FALSE, US"forcing real = effective");
4078
4079 /* If testing a filter, open the file(s) now, before wasting time doing other
4080 setups and reading the message. */
4081
4082 if (filter_test & FTEST_SYSTEM)
4083   if ((filter_sfd = Uopen(filter_test_sfile, O_RDONLY, 0)) < 0)
4084     exim_fail("exim: failed to open %s: %s\n", filter_test_sfile,
4085       strerror(errno));
4086
4087 if (filter_test & FTEST_USER)
4088   if ((filter_ufd = Uopen(filter_test_ufile, O_RDONLY, 0)) < 0)
4089     exim_fail("exim: failed to open %s: %s\n", filter_test_ufile,
4090       strerror(errno));
4091
4092 /* Initialise lookup_list
4093 If debugging, already called above via version reporting.
4094 In either case, we initialise the list of available lookups while running
4095 as root.  All dynamically modules are loaded from a directory which is
4096 hard-coded into the binary and is code which, if not a module, would be
4097 part of Exim already.  Ability to modify the content of the directory
4098 is equivalent to the ability to modify a setuid binary!
4099
4100 This needs to happen before we read the main configuration. */
4101 init_lookup_list();
4102
4103 /*XXX this excrescence could move to the testsuite standard config setup file */
4104 #ifdef SUPPORT_I18N
4105 if (f.running_in_test_harness) smtputf8_advertise_hosts = NULL;
4106 #endif
4107
4108 /* Read the main runtime configuration data; this gives up if there
4109 is a failure. It leaves the configuration file open so that the subsequent
4110 configuration data for delivery can be read if needed.
4111
4112 NOTE: immediately after opening the configuration file we change the working
4113 directory to "/"! Later we change to $spool_directory. We do it there, because
4114 during readconf_main() some expansion takes place already. */
4115
4116 /* Store the initial cwd before we change directories.  Can be NULL if the
4117 dir has already been unlinked. */
4118 initial_cwd = os_getcwd(NULL, 0);
4119 if (!initial_cwd && errno)
4120   exim_fail("exim: getting initial cwd failed: %s\n", strerror(errno));
4121
4122 if (initial_cwd && (strlen(CCS initial_cwd) >= BIG_BUFFER_SIZE))
4123   exim_fail("exim: initial cwd is far too long (%d)\n", Ustrlen(CCS initial_cwd));
4124
4125 /* checking:
4126     -be[m] expansion test        -
4127     -b[fF] filter test           new
4128     -bh[c] host test             -
4129     -bmalware malware_test_file  new
4130     -brt   retry test            new
4131     -brw   rewrite test          new
4132     -bt    address test          -
4133     -bv[s] address verify        -
4134    list_options:
4135     -bP <option> (except -bP config, which sets list_config)
4136
4137 If any of these options is set, we suppress warnings about configuration
4138 issues (currently about tls_advertise_hosts and keep_environment not being
4139 defined) */
4140
4141   {
4142   int old_pool = store_pool;
4143 #ifdef MEASURE_TIMING
4144   struct timeval t0;
4145   (void)gettimeofday(&t0, NULL);
4146 #endif
4147
4148   store_pool = POOL_CONFIG;
4149   readconf_main(checking || list_options);
4150   store_pool = old_pool;
4151
4152 #ifdef MEASURE_TIMING
4153   report_time_since(&t0, US"readconf_main (delta)");
4154 #endif
4155   }
4156
4157 /* Now in directory "/" */
4158
4159 if (cleanup_environment() == FALSE)
4160   log_write(0, LOG_PANIC_DIE, "Can't cleanup environment");
4161
4162
4163 /* If an action on specific messages is requested, or if a daemon or queue
4164 runner is being started, we need to know if Exim was called by an admin user.
4165 This is the case if the real user is root or exim, or if the real group is
4166 exim, or if one of the supplementary groups is exim or a group listed in
4167 admin_groups. We don't fail all message actions immediately if not admin_user,
4168 since some actions can be performed by non-admin users. Instead, set admin_user
4169 for later interrogation. */
4170
4171 if (real_uid == root_uid || real_uid == exim_uid || real_gid == exim_gid)
4172   f.admin_user = TRUE;
4173 else
4174   for (int i = 0; i < group_count && !f.admin_user; i++)
4175     if (group_list[i] == exim_gid)
4176       f.admin_user = TRUE;
4177     else if (admin_groups)
4178       for (int j = 1; j <= (int)admin_groups[0] && !f.admin_user; j++)
4179         if (admin_groups[j] == group_list[i])
4180           f.admin_user = TRUE;
4181
4182 /* Another group of privileged users are the trusted users. These are root,
4183 exim, and any caller matching trusted_users or trusted_groups. Trusted callers
4184 are permitted to specify sender_addresses with -f on the command line, and
4185 other message parameters as well. */
4186
4187 if (real_uid == root_uid || real_uid == exim_uid)
4188   f.trusted_caller = TRUE;
4189 else
4190   {
4191   if (trusted_users)
4192     for (int i = 1; i <= (int)trusted_users[0] && !f.trusted_caller; i++)
4193       if (trusted_users[i] == real_uid)
4194         f.trusted_caller = TRUE;
4195
4196   if (trusted_groups)
4197     for (int i = 1; i <= (int)trusted_groups[0] && !f.trusted_caller; i++)
4198       if (trusted_groups[i] == real_gid)
4199         f.trusted_caller = TRUE;
4200       else for (int j = 0; j < group_count && !f.trusted_caller; j++)
4201         if (trusted_groups[i] == group_list[j])
4202           f.trusted_caller = TRUE;
4203   }
4204
4205 /* At this point, we know if the user is privileged and some command-line
4206 options become possibly impermissible, depending upon the configuration file. */
4207
4208 if (checking && commandline_checks_require_admin && !f.admin_user)
4209   exim_fail("exim: those command-line flags are set to require admin\n");
4210
4211 /* Handle the decoding of logging options. */
4212
4213 decode_bits(log_selector, log_selector_size, log_notall,
4214   log_selector_string, log_options, log_options_count, US"log", 0);
4215
4216 DEBUG(D_any)
4217   {
4218   debug_printf("configuration file is %s\n", config_main_filename);
4219   debug_printf("log selectors =");
4220   for (int i = 0; i < log_selector_size; i++)
4221     debug_printf(" %08x", log_selector[i]);
4222   debug_printf("\n");
4223   }
4224
4225 /* If domain literals are not allowed, check the sender address that was
4226 supplied with -f. Ditto for a stripped trailing dot. */
4227
4228 if (sender_address)
4229   {
4230   if (sender_address[sender_address_domain] == '[' && !allow_domain_literals)
4231     exim_fail("exim: bad -f address \"%s\": domain literals not "
4232       "allowed\n", sender_address);
4233   if (f_end_dot && !strip_trailing_dot)
4234     exim_fail("exim: bad -f address \"%s.\": domain is malformed "
4235       "(trailing dot not allowed)\n", sender_address);
4236   }
4237
4238 /* See if an admin user overrode our logging. */
4239
4240 if (cmdline_syslog_name)
4241   if (f.admin_user)
4242     {
4243     syslog_processname = cmdline_syslog_name;
4244     log_file_path = string_copy(CUS"syslog");
4245     }
4246   else
4247     /* not a panic, non-privileged users should not be able to spam paniclog */
4248     exim_fail(
4249         "exim: you lack sufficient privilege to specify syslog process name\n");
4250
4251 /* Paranoia check of maximum lengths of certain strings. There is a check
4252 on the length of the log file path in log.c, which will come into effect
4253 if there are any calls to write the log earlier than this. However, if we
4254 get this far but the string is very long, it is better to stop now than to
4255 carry on and (e.g.) receive a message and then have to collapse. The call to
4256 log_write() from here will cause the ultimate panic collapse if the complete
4257 file name exceeds the buffer length. */
4258
4259 if (Ustrlen(log_file_path) > 200)
4260   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
4261     "log_file_path is longer than 200 chars: aborting");
4262
4263 if (Ustrlen(pid_file_path) > 200)
4264   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
4265     "pid_file_path is longer than 200 chars: aborting");
4266
4267 if (Ustrlen(spool_directory) > 200)
4268   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
4269     "spool_directory is longer than 200 chars: aborting");
4270
4271 /* Length check on the process name given to syslog for its TAG field,
4272 which is only permitted to be 32 characters or less. See RFC 3164. */
4273
4274 if (Ustrlen(syslog_processname) > 32)
4275   log_write(0, LOG_MAIN|LOG_PANIC_DIE,
4276     "syslog_processname is longer than 32 chars: aborting");
4277
4278 if (log_oneline)
4279   if (f.admin_user)
4280     {
4281     log_write(0, LOG_MAIN, "%s", log_oneline);
4282     return EXIT_SUCCESS;
4283     }
4284   else
4285     return EXIT_FAILURE;
4286
4287 /* In some operating systems, the environment variable TMPDIR controls where
4288 temporary files are created; Exim doesn't use these (apart from when delivering
4289 to MBX mailboxes), but called libraries such as DBM libraries may require them.
4290 If TMPDIR is found in the environment, reset it to the value defined in the
4291 EXIM_TMPDIR macro, if this macro is defined.  For backward compatibility this
4292 macro may be called TMPDIR in old "Local/Makefile"s. It's converted to
4293 EXIM_TMPDIR by the build scripts.
4294 */
4295
4296 #ifdef EXIM_TMPDIR
4297   if (environ) for (uschar ** p = USS environ; *p; p++)
4298     if (Ustrncmp(*p, "TMPDIR=", 7) == 0 && Ustrcmp(*p+7, EXIM_TMPDIR) != 0)
4299       {
4300       uschar * newp = store_malloc(Ustrlen(EXIM_TMPDIR) + 8);
4301       sprintf(CS newp, "TMPDIR=%s", EXIM_TMPDIR);
4302       *p = newp;
4303       DEBUG(D_any) debug_printf("reset TMPDIR=%s in environment\n", EXIM_TMPDIR);
4304       }
4305 #endif
4306
4307 /* Timezone handling. If timezone_string is "utc", set a flag to cause all
4308 timestamps to be in UTC (gmtime() is used instead of localtime()). Otherwise,
4309 we may need to get rid of a bogus timezone setting. This can arise when Exim is
4310 called by a user who has set the TZ variable. This then affects the timestamps
4311 in log files and in Received: headers, and any created Date: header lines. The
4312 required timezone is settable in the configuration file, so nothing can be done
4313 about this earlier - but hopefully nothing will normally be logged earlier than
4314 this. We have to make a new environment if TZ is wrong, but don't bother if
4315 timestamps_utc is set, because then all times are in UTC anyway. */
4316
4317 if (timezone_string && strcmpic(timezone_string, US"UTC") == 0)
4318   f.timestamps_utc = TRUE;
4319 else
4320   {
4321   uschar *envtz = US getenv("TZ");
4322   if (envtz
4323       ? !timezone_string || Ustrcmp(timezone_string, envtz) != 0
4324       : timezone_string != NULL
4325      )
4326     {
4327     uschar **p = USS environ;
4328     uschar **new;
4329     uschar **newp;
4330     int count = 0;
4331     if (environ) while (*p++) count++;
4332     if (!envtz) count++;
4333     newp = new = store_malloc(sizeof(uschar *) * (count + 1));
4334     if (environ) for (p = USS environ; *p; p++)
4335       if (Ustrncmp(*p, "TZ=", 3) != 0) *newp++ = *p;
4336     if (timezone_string)
4337       {
4338       *newp = store_malloc(Ustrlen(timezone_string) + 4);
4339       sprintf(CS *newp++, "TZ=%s", timezone_string);
4340       }
4341     *newp = NULL;
4342     environ = CSS new;
4343     tzset();
4344     DEBUG(D_any) debug_printf("Reset TZ to %s: time is %s\n", timezone_string,
4345       tod_stamp(tod_log));
4346     }
4347   }
4348
4349 /* Handle the case when we have removed the setuid privilege because of -C or
4350 -D. This means that the caller of Exim was not root.
4351
4352 There is a problem if we were running as the Exim user. The sysadmin may
4353 expect this case to retain privilege because "the binary was called by the
4354 Exim user", but it hasn't, because either the -D option set macros, or the
4355 -C option set a non-trusted configuration file. There are two possibilities:
4356
4357   (1) If deliver_drop_privilege is set, Exim is not going to re-exec in order
4358       to do message deliveries. Thus, the fact that it is running as a
4359       non-privileged user is plausible, and might be wanted in some special
4360       configurations. However, really_exim will have been set false when
4361       privilege was dropped, to stop Exim trying to write to its normal log
4362       files. Therefore, re-enable normal log processing, assuming the sysadmin
4363       has set up the log directory correctly.
4364
4365   (2) If deliver_drop_privilege is not set, the configuration won't work as
4366       apparently intended, and so we log a panic message. In order to retain
4367       root for -C or -D, the caller must either be root or be invoking a
4368       trusted configuration file (when deliver_drop_privilege is false). */
4369
4370 if (  removed_privilege
4371    && (!f.trusted_config || opt_D_used)
4372    && real_uid == exim_uid)
4373   if (deliver_drop_privilege)
4374     f.really_exim = TRUE; /* let logging work normally */
4375   else
4376     log_write(0, LOG_MAIN|LOG_PANIC,
4377       "exim user lost privilege for using %s option",
4378       f.trusted_config? "-D" : "-C");
4379
4380 /* Start up Perl interpreter if Perl support is configured and there is a
4381 perl_startup option, and the configuration or the command line specifies
4382 initializing starting. Note that the global variables are actually called
4383 opt_perl_xxx to avoid clashing with perl's namespace (perl_*). */
4384
4385 #ifdef EXIM_PERL
4386 if (perl_start_option != 0)
4387   opt_perl_at_start = (perl_start_option > 0);
4388 if (opt_perl_at_start && opt_perl_startup != NULL)
4389   {
4390   uschar *errstr;
4391   DEBUG(D_any) debug_printf("Starting Perl interpreter\n");
4392   if ((errstr = init_perl(opt_perl_startup)))
4393     exim_fail("exim: error in perl_startup code: %s\n", errstr);
4394   opt_perl_started = TRUE;
4395   }
4396 #endif /* EXIM_PERL */
4397
4398 /* Log the arguments of the call if the configuration file said so. This is
4399 a debugging feature for finding out what arguments certain MUAs actually use.
4400 Don't attempt it if logging is disabled, or if listing variables or if
4401 verifying/testing addresses or expansions. */
4402
4403 if (  (debug_selector & D_any  ||  LOGGING(arguments))
4404    && f.really_exim && !list_options && !checking)
4405   {
4406   uschar *p = big_buffer;
4407   Ustrcpy(p, US"cwd= (failed)");
4408
4409   if (!initial_cwd)
4410     p += 13;
4411   else
4412     {
4413     p += 4;
4414     snprintf(CS p, big_buffer_size - (p - big_buffer), "%s", CCS initial_cwd);
4415     p += Ustrlen(CCS p);
4416     }
4417
4418   (void)string_format(p, big_buffer_size - (p - big_buffer), " %d args:", argc);
4419   while (*p) p++;
4420   for (int i = 0; i < argc; i++)
4421     {
4422     int len = Ustrlen(argv[i]);
4423     const uschar *printing;
4424     uschar *quote;
4425     if (p + len + 8 >= big_buffer + big_buffer_size)
4426       {
4427       Ustrcpy(p, US" ...");
4428       log_write(0, LOG_MAIN, "%s", big_buffer);
4429       Ustrcpy(big_buffer, US"...");
4430       p = big_buffer + 3;
4431       }
4432     printing = string_printing(argv[i]);
4433     if (!*printing) quote = US"\"";
4434     else
4435       {
4436       const uschar *pp = printing;
4437       quote = US"";
4438       while (*pp) if (isspace(*pp++)) { quote = US"\""; break; }
4439       }
4440     p += sprintf(CS p, " %s%.*s%s", quote, (int)(big_buffer_size -
4441       (p - big_buffer) - 4), printing, quote);
4442     }
4443
4444   if (LOGGING(arguments))
4445     log_write(0, LOG_MAIN, "%s", big_buffer);
4446   else
4447     debug_printf("%s\n", big_buffer);
4448   }
4449
4450 /* Set the working directory to be the top-level spool directory. We don't rely
4451 on this in the code, which always uses fully qualified names, but it's useful
4452 for core dumps etc. Don't complain if it fails - the spool directory might not
4453 be generally accessible and calls with the -C option (and others) have lost
4454 privilege by now. Before the chdir, we try to ensure that the directory exists.
4455 */
4456
4457 if (Uchdir(spool_directory) != 0)
4458   {
4459   (void) directory_make(spool_directory, US"", SPOOL_DIRECTORY_MODE, FALSE);
4460   (void) Uchdir(spool_directory);
4461   }
4462
4463 /* Handle calls with the -bi option. This is a sendmail option to rebuild *the*
4464 alias file. Exim doesn't have such a concept, but this call is screwed into
4465 Sun's YP makefiles. Handle this by calling a configured script, as the real
4466 user who called Exim. The -oA option can be used to pass an argument to the
4467 script. */
4468
4469 if (bi_option)
4470   {
4471   (void) fclose(config_file);
4472   if (bi_command && *bi_command)
4473     {
4474     int i = 0;
4475     const uschar * argv[3];
4476     argv[i++] = bi_command;     /* nonexpanded option so assume untainted */
4477     if (alias_arg) argv[i++] = alias_arg;
4478     argv[i++] = NULL;
4479
4480     setgroups(group_count, group_list);
4481     exim_setugid(real_uid, real_gid, FALSE, US"running bi_command");
4482
4483     DEBUG(D_exec) debug_printf("exec '%.256s' %s%.256s%s\n", argv[0],
4484       argv[1] ? "'" : "", argv[1] ? argv[1] : US"", argv[1] ? "'" : "");
4485
4486     execv(CS argv[0], (char *const *)argv);
4487     exim_fail("exim: exec '%s' failed: %s\n", argv[0], strerror(errno));
4488     }
4489   else
4490     {
4491     DEBUG(D_any) debug_printf("-bi used but bi_command not set; exiting\n");
4492     exit(EXIT_SUCCESS);
4493     }
4494   }
4495
4496 /* We moved the admin/trusted check to be immediately after reading the
4497 configuration file.  We leave these prints here to ensure that syslog setup,
4498 logfile setup, and so on has already happened. */
4499
4500 if (f.trusted_caller) DEBUG(D_any) debug_printf("trusted user\n");
4501 if (f.admin_user) DEBUG(D_any) debug_printf("admin user\n");
4502
4503 /* Only an admin user may start the daemon or force a queue run in the default
4504 configuration, but the queue run restriction can be relaxed. Only an admin
4505 user may request that a message be returned to its sender forthwith. Only an
4506 admin user may specify a debug level greater than D_v (because it might show
4507 passwords, etc. in lookup queries). Only an admin user may request a queue
4508 count. Only an admin user can use the test interface to scan for email
4509 (because Exim will be in the spool dir and able to look at mails). */
4510
4511 if (!f.admin_user)
4512   {
4513   BOOL debugset = (debug_selector & ~D_v) != 0;
4514   if (  deliver_give_up || f.daemon_listen || malware_test_file
4515      || count_queue && queue_list_requires_admin
4516      || list_queue && queue_list_requires_admin
4517      || qrunners && prod_requires_admin
4518      || queue_name_dest && prod_requires_admin
4519      || debugset && !f.running_in_test_harness
4520      )
4521     exim_fail("exim:%s permission denied; not admin\n",
4522               debugset ? " debugging" : "");
4523   }
4524
4525 /* If the real user is not root or the exim uid, the argument for passing
4526 in an open TCP/IP connection for another message is not permitted, nor is
4527 running with the -N option for any delivery action, unless this call to exim is
4528 one that supplied an input message, or we are using a patched exim for
4529 regression testing. */
4530
4531 if (  real_uid != root_uid && real_uid != exim_uid
4532    && (  continue_hostname
4533       || (  f.dont_deliver
4534          && (qrunners || f.daemon_listen || msg_action_arg > 0)
4535       )  )
4536    && !f.running_in_test_harness
4537    )
4538   exim_fail("exim: Permission denied; not exim user or root\n");
4539
4540 /* If the caller is not trusted, certain arguments are ignored when running for
4541 real, but are permitted when checking things (-be, -bv, -bt, -bh, -bf, -bF).
4542 Note that authority for performing certain actions on messages is tested in the
4543 queue_action() function. */
4544
4545 if (!f.trusted_caller && !checking)
4546   {
4547   sender_host_name = sender_host_address = interface_address =
4548     sender_ident = received_protocol = NULL;
4549   sender_host_port = interface_port = 0;
4550   sender_host_authenticated = authenticated_sender = authenticated_id = NULL;
4551   }
4552
4553 /* If a sender host address is set, extract the optional port number off the
4554 end of it and check its syntax. Do the same thing for the interface address.
4555 Exim exits if the syntax is bad. */
4556
4557 else
4558   {
4559   if (sender_host_address)
4560     sender_host_port = check_port(sender_host_address);
4561   if (interface_address)
4562     interface_port = check_port(interface_address);
4563   }
4564
4565 /* If the caller is trusted, then they can use -G to suppress_local_fixups. */
4566 if (flag_G)
4567   {
4568   if (f.trusted_caller)
4569     {
4570     f.suppress_local_fixups = f.suppress_local_fixups_default = TRUE;
4571     DEBUG(D_acl) debug_printf("suppress_local_fixups forced on by -G\n");
4572     }
4573   else
4574     exim_fail("exim: permission denied (-G requires a trusted user)\n");
4575   }
4576
4577 /* If an SMTP message is being received check to see if the standard input is a
4578 TCP/IP socket. If it is, we assume that Exim was called from inetd if the
4579 caller is root or the Exim user, or if the port is a privileged one. Otherwise,
4580 barf. */
4581
4582 if (smtp_input)
4583   {
4584   union sockaddr_46 inetd_sock;
4585   EXIM_SOCKLEN_T size = sizeof(inetd_sock);
4586   if (getpeername(0, (struct sockaddr *)(&inetd_sock), &size) == 0)
4587     {
4588     int family = ((struct sockaddr *)(&inetd_sock))->sa_family;
4589     if (family == AF_INET || family == AF_INET6)
4590       {
4591       union sockaddr_46 interface_sock;
4592       size = sizeof(interface_sock);
4593
4594       if (getsockname(0, (struct sockaddr *)(&interface_sock), &size) == 0)
4595         interface_address = host_ntoa(-1, &interface_sock, NULL,
4596           &interface_port);
4597
4598       if (host_is_tls_on_connect_port(interface_port)) tls_in.on_connect = TRUE;
4599
4600       if (real_uid == root_uid || real_uid == exim_uid || interface_port < 1024)
4601         {
4602         f.is_inetd = TRUE;
4603         sender_host_address = host_ntoa(-1, (struct sockaddr *)(&inetd_sock),
4604           NULL, &sender_host_port);
4605         if (mua_wrapper) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Input from "
4606           "inetd is not supported when mua_wrapper is set");
4607         }
4608       else
4609         exim_fail(
4610           "exim: Permission denied (unprivileged user, unprivileged port)\n");
4611       }
4612     }
4613   }
4614
4615 /* If the load average is going to be needed while receiving a message, get it
4616 now for those OS that require the first call to os_getloadavg() to be done as
4617 root. There will be further calls later for each message received. */
4618
4619 #ifdef LOAD_AVG_NEEDS_ROOT
4620 if (  receiving_message
4621    && (queue_only_load >= 0 || (f.is_inetd && smtp_load_reserve >= 0)))
4622   load_average = OS_GETLOADAVG();
4623 #endif
4624
4625 /* The queue_only configuration option can be overridden by -odx on the command
4626 line, except that if queue_only_override is false, queue_only cannot be unset
4627 from the command line. */
4628
4629 if (queue_only_set && (queue_only_override || arg_queue_only))
4630   queue_only = arg_queue_only;
4631
4632 /* The receive_timeout and smtp_receive_timeout options can be overridden by
4633 -or and -os. */
4634
4635 if (arg_receive_timeout >= 0) receive_timeout = arg_receive_timeout;
4636 if (arg_smtp_receive_timeout >= 0)
4637   smtp_receive_timeout = arg_smtp_receive_timeout;
4638
4639 /* If Exim was started with root privilege, unless we have already removed the
4640 root privilege above as a result of -C, -D, -be, -bf or -bF, remove it now
4641 except when starting the daemon or doing some kind of delivery or address
4642 testing (-bt). These are the only cases when root need to be retained. We run
4643 as exim for -bv and -bh. However, if deliver_drop_privilege is set, root is
4644 retained only for starting the daemon. We always do the initgroups() in this
4645 situation (controlled by the TRUE below), in order to be as close as possible
4646 to the state Exim usually runs in. */
4647
4648 if (  !unprivileged                             /* originally had root AND */
4649    && !removed_privilege                        /* still got root AND      */
4650    && !f.daemon_listen                          /* not starting the daemon */
4651    && (!qrunners || is_onetime_qrun())          /* (either kind of daemon) */
4652    && (                                         /*    AND EITHER           */
4653          deliver_drop_privilege                 /* requested unprivileged  */
4654       || (                                      /*       OR                */
4655             !qrunners                           /* not running the queue   */
4656          && (  msg_action_arg < 0               /*       and               */
4657             || msg_action != MSG_DELIVER        /* not delivering          */
4658             )                                   /*       and               */
4659          && (!checking || !f.address_test_mode) /* not address checking    */
4660          && !rcpt_verify_quota                  /* and not quota checking  */
4661    )  )  )
4662   exim_setugid(exim_uid, exim_gid, TRUE, US"privilege not needed");
4663
4664 /* When we are retaining a privileged uid, we still change to the exim gid. */
4665
4666 else
4667   {
4668   int rv;
4669   DEBUG(D_any) debug_printf("dropping to exim gid; retaining priv uid\n");
4670   rv = setgid(exim_gid);
4671   /* Impact of failure is that some stuff might end up with an incorrect group.
4672   We track this for failures from root, since any attempt to change privilege
4673   by root should succeed and failures should be examined.  For non-root,
4674   there's no security risk.  For me, it's { exim -bV } on a just-built binary,
4675   no need to complain then. */
4676   if (rv == -1)
4677     if (!(unprivileged || removed_privilege))
4678       exim_fail("exim: changing group failed: %s\n", strerror(errno));
4679     else
4680       {
4681       DEBUG(D_any) debug_printf("changing group to %ld failed: %s\n",
4682           (long int)exim_gid, strerror(errno));
4683       }
4684   }
4685
4686 /* Handle a request to scan a file for malware */
4687 if (malware_test_file)
4688   {
4689 #ifdef WITH_CONTENT_SCAN
4690   int result;
4691   set_process_info("scanning file for malware");
4692   if ((result = malware_in_file(malware_test_file)) == FAIL)
4693     {
4694     printf("No malware found.\n");
4695     exit(EXIT_SUCCESS);
4696     }
4697   if (result != OK)
4698     {
4699     printf("Malware lookup returned non-okay/fail: %d\n", result);
4700     exit(EXIT_FAILURE);
4701     }
4702   if (malware_name)
4703     printf("Malware found: %s\n", malware_name);
4704   else
4705     printf("Malware scan detected malware of unknown name.\n");
4706 #else
4707   printf("Malware scanning not enabled at compile time.\n");
4708 #endif
4709   exit(EXIT_FAILURE);
4710   }
4711
4712 /* Handle a request to list the delivery queue */
4713
4714 if (list_queue)
4715   {
4716   set_process_info("listing the queue");
4717   queue_list(list_queue_option, argv + recipients_arg, argc - recipients_arg);
4718   exit(EXIT_SUCCESS);
4719   }
4720
4721 /* Handle a request to count the delivery queue */
4722
4723 if (count_queue)
4724   {
4725   set_process_info("counting the queue");
4726   fprintf(stdout, "%u\n", queue_count());
4727   exit(EXIT_SUCCESS);
4728   }
4729
4730 /* Handle actions on specific messages, except for the force delivery and
4731 message load actions, which are done below. Some actions take a whole list of
4732 message ids, which are known to continue up to the end of the arguments. Others
4733 take a single message id and then operate on the recipients list. */
4734
4735 if (msg_action_arg > 0 && msg_action != MSG_DELIVER && msg_action != MSG_LOAD)
4736   {
4737   int yield = EXIT_SUCCESS;
4738   set_process_info("acting on specified messages");
4739
4740   /* ACL definitions may be needed when removing a message (-Mrm) because
4741   event_action gets expanded */
4742
4743   if (msg_action == MSG_REMOVE)
4744     {
4745     int old_pool = store_pool;
4746     store_pool = POOL_CONFIG;
4747     readconf_rest();
4748     store_pool = old_pool;
4749     store_writeprotect(POOL_CONFIG);
4750     }
4751
4752   if (!one_msg_action)
4753     {
4754     for (i = msg_action_arg; i < argc; i++)
4755       if (!queue_action(argv[i], msg_action, NULL, 0, 0))
4756         yield = EXIT_FAILURE;
4757     switch (msg_action)
4758       {
4759       case MSG_REMOVE: case MSG_FREEZE: case MSG_THAW: break;
4760       default: printf("\n"); break;
4761       }
4762     }
4763
4764   else if (!queue_action(argv[msg_action_arg], msg_action, argv, argc,
4765     recipients_arg)) yield = EXIT_FAILURE;
4766   exit(yield);
4767   }
4768
4769 /* We used to set up here to skip reading the ACL section, on
4770  (msg_action_arg > 0 || (is_onetime_qrun() && !f.daemon_listen)
4771 Now, since the intro of the ${acl } expansion, ACL definitions may be
4772 needed in transports so we lost the optimisation. */
4773
4774   {
4775   int old_pool = store_pool;
4776 #ifdef MEASURE_TIMING
4777   struct timeval t0;
4778   (void)gettimeofday(&t0, NULL);
4779 #endif
4780
4781   store_pool = POOL_CONFIG;
4782   readconf_rest();
4783   store_pool = old_pool;
4784
4785   /* -be can add macro definitions, needing to link to the macro structure
4786   chain.  Otherwise, make the memory used for config data readonly. */
4787
4788   if (!expansion_test)
4789     store_writeprotect(POOL_CONFIG);
4790
4791 #ifdef MEASURE_TIMING
4792   report_time_since(&t0, US"readconf_rest (delta)");
4793 #endif
4794   }
4795
4796 /* Handle a request to check quota */
4797 if (rcpt_verify_quota)
4798   if (real_uid != root_uid && real_uid != exim_uid)
4799     exim_fail("exim: Permission denied\n");
4800   else if (recipients_arg >= argc)
4801     exim_fail("exim: missing recipient for quota check\n");
4802   else
4803     {
4804     verify_quota(US argv[recipients_arg]);      /*XXX we lose track of const here */
4805     exim_exit(EXIT_SUCCESS);
4806     }
4807
4808 /* Handle the -brt option. This is for checking out retry configurations.
4809 The next three arguments are a domain name or a complete address, and
4810 optionally two error numbers. All it does is to call the function that
4811 scans the retry configuration data. */
4812
4813 if (test_retry_arg >= 0)
4814   {
4815   retry_config *yield;
4816   int basic_errno = 0;
4817   int more_errno = 0;
4818   const uschar *s1, *s2;
4819
4820   if (test_retry_arg >= argc)
4821     {
4822     printf("-brt needs a domain or address argument\n");
4823     exim_exit(EXIT_FAILURE);
4824     }
4825   s1 = exim_str_fail_toolong(argv[test_retry_arg++], EXIM_EMAILADDR_MAX, "-brt");
4826   s2 = NULL;
4827
4828   /* If the first argument contains no @ and no . it might be a local user
4829   or it might be a single-component name. Treat as a domain. */
4830
4831   if (Ustrchr(s1, '@') == NULL && Ustrchr(s1, '.') == NULL)
4832     {
4833     printf("Warning: \"%s\" contains no '@' and no '.' characters. It is "
4834       "being \ntreated as a one-component domain, not as a local part.\n\n",
4835       s1);
4836     }
4837
4838   /* There may be an optional second domain arg. */
4839
4840   if (test_retry_arg < argc && Ustrchr(argv[test_retry_arg], '.') != NULL)
4841     s2 = exim_str_fail_toolong(argv[test_retry_arg++], EXIM_DOMAINNAME_MAX, "-brt 2nd");
4842
4843   /* The final arg is an error name */
4844
4845   if (test_retry_arg < argc)
4846     {
4847     const uschar *ss = exim_str_fail_toolong(argv[test_retry_arg], EXIM_DRIVERNAME_MAX, "-brt 3rd");
4848     uschar *error =
4849       readconf_retry_error(ss, ss + Ustrlen(ss), &basic_errno, &more_errno);
4850     if (error != NULL)
4851       {
4852       printf("%s\n", CS error);
4853       return EXIT_FAILURE;
4854       }
4855
4856     /* For the {MAIL,RCPT,DATA}_4xx errors, a value of 255 means "any", and a
4857     code > 100 as an error is for matching codes to the decade. Turn them into
4858     a real error code, off the decade. */
4859
4860     if (basic_errno == ERRNO_MAIL4XX ||
4861         basic_errno == ERRNO_RCPT4XX ||
4862         basic_errno == ERRNO_DATA4XX)
4863       {
4864       int code = (more_errno >> 8) & 255;
4865       if (code == 255)
4866         more_errno = (more_errno & 0xffff00ff) | (21 << 8);
4867       else if (code > 100)
4868         more_errno = (more_errno & 0xffff00ff) | ((code - 96) << 8);
4869       }
4870     }
4871
4872   if (!(yield = retry_find_config(s1, s2, basic_errno, more_errno)))
4873     printf("No retry information found\n");
4874   else
4875     {
4876     more_errno = yield->more_errno;
4877     printf("Retry rule: %s  ", yield->pattern);
4878
4879     if (yield->basic_errno == ERRNO_EXIMQUOTA)
4880       {
4881       printf("quota%s%s  ",
4882         (more_errno > 0)? "_" : "",
4883         (more_errno > 0)? readconf_printtime(more_errno) : US"");
4884       }
4885     else if (yield->basic_errno == ECONNREFUSED)
4886       {
4887       printf("refused%s%s  ",
4888         (more_errno > 0)? "_" : "",
4889         (more_errno == 'M')? "MX" :
4890         (more_errno == 'A')? "A" : "");
4891       }
4892     else if (yield->basic_errno == ETIMEDOUT)
4893       {
4894       printf("timeout");
4895       if ((more_errno & RTEF_CTOUT) != 0) printf("_connect");
4896       more_errno &= 255;
4897       if (more_errno != 0) printf("_%s",
4898         (more_errno == 'M')? "MX" : "A");
4899       printf("  ");
4900       }
4901     else if (yield->basic_errno == ERRNO_AUTHFAIL)
4902       printf("auth_failed  ");
4903     else printf("*  ");
4904
4905     for (retry_rule * r = yield->rules; r; r = r->next)
4906       {
4907       printf("%c,%s", r->rule, readconf_printtime(r->timeout)); /* Do not */
4908       printf(",%s", readconf_printtime(r->p1));                 /* amalgamate */
4909       if (r->rule == 'G')
4910         {
4911         int x = r->p2;
4912         int f = x % 1000;
4913         int d = 100;
4914         printf(",%d.", x/1000);
4915         do
4916           {
4917           printf("%d", f/d);
4918           f %= d;
4919           d /= 10;
4920           }
4921         while (f != 0);
4922         }
4923       printf("; ");
4924       }
4925
4926     printf("\n");
4927     }
4928   exim_exit(EXIT_SUCCESS);
4929   }
4930
4931 /* Handle a request to list one or more configuration options */
4932 /* If -n was set, we suppress some information */
4933
4934 if (list_options)
4935   {
4936   BOOL fail = FALSE;
4937   set_process_info("listing variables");
4938   if (recipients_arg >= argc)
4939     fail = !readconf_print(US"all", NULL, flag_n);
4940   else for (i = recipients_arg; i < argc; i++)
4941     {
4942     if (i < argc - 1 &&
4943         (Ustrcmp(argv[i], "router") == 0 ||
4944          Ustrcmp(argv[i], "transport") == 0 ||
4945          Ustrcmp(argv[i], "authenticator") == 0 ||
4946          Ustrcmp(argv[i], "macro") == 0 ||
4947          Ustrcmp(argv[i], "environment") == 0))
4948       {
4949       fail |= !readconf_print(exim_str_fail_toolong(argv[i+1], EXIM_DRIVERNAME_MAX, "-bP name"), argv[i], flag_n);
4950       i++;
4951       }
4952     else
4953       fail = !readconf_print(exim_str_fail_toolong(argv[i], EXIM_DRIVERNAME_MAX, "-bP item"), NULL, flag_n);
4954     }
4955   exim_exit(fail ? EXIT_FAILURE : EXIT_SUCCESS);
4956   }
4957
4958 if (list_config)
4959   {
4960   set_process_info("listing config");
4961   exim_exit(readconf_print(US"config", NULL, flag_n)
4962                 ? EXIT_SUCCESS : EXIT_FAILURE);
4963   }
4964
4965
4966 /* Initialise subsystems as required. */
4967
4968 tcp_init();
4969
4970 /* Handle a request to deliver one or more messages that are already on the
4971 queue. Values of msg_action other than MSG_DELIVER and MSG_LOAD are dealt with
4972 above. MSG_LOAD is handled with -be (which is the only time it applies) below.
4973
4974 Delivery of specific messages is typically used for a small number when
4975 prodding by hand (when the option forced_delivery will be set) or when
4976 re-execing to regain root privilege. Each message delivery must happen in a
4977 separate process, so we fork a process for each one, and run them sequentially
4978 so that debugging output doesn't get intertwined, and to avoid spawning too
4979 many processes if a long list is given. However, don't fork for the last one;
4980 this saves a process in the common case when Exim is called to deliver just one
4981 message. */
4982
4983 if (msg_action_arg > 0 && msg_action != MSG_LOAD)
4984   {
4985   if (prod_requires_admin && !f.admin_user)
4986     {
4987     fprintf(stderr, "exim: Permission denied\n");
4988     exim_exit(EXIT_FAILURE);
4989     }
4990   set_process_info("delivering specified messages");
4991   if (deliver_give_up) forced_delivery = f.deliver_force_thaw = TRUE;
4992   for (i = msg_action_arg; i < argc; i++)
4993     {
4994     int status;
4995     pid_t pid;
4996     /*XXX This use of argv[i] for msg_id should really be tainted, but doing
4997     that runs into a later copy into the untainted global message_id[] */
4998     /*XXX Do we need a length limit check here? */
4999     if (i == argc - 1)
5000       (void)deliver_message(argv[i], forced_delivery, deliver_give_up);
5001     else if ((pid = exim_fork(US"cmdline-delivery")) == 0)
5002       {
5003       (void)deliver_message(argv[i], forced_delivery, deliver_give_up);
5004       exim_underbar_exit(EXIT_SUCCESS);
5005       }
5006     else if (pid < 0)
5007       {
5008       fprintf(stderr, "failed to fork delivery process for %s: %s\n", argv[i],
5009         strerror(errno));
5010       exim_exit(EXIT_FAILURE);
5011       }
5012     else wait(&status);
5013     }
5014   exim_exit(EXIT_SUCCESS);
5015   }
5016
5017
5018 /* If only a single queue run is requested, without SMTP listening, we can just
5019 turn into a queue runner, with an optional starting message id. */
5020
5021 if (is_onetime_qrun() && !f.daemon_listen)
5022   {
5023   single_queue_run(qrunners, start_queue_run_id, stop_queue_run_id);
5024   exim_exit(EXIT_SUCCESS);
5025   }
5026
5027
5028 /* Find the login name of the real user running this process. This is always
5029 needed when receiving a message, because it is written into the spool file. It
5030 may also be used to construct a from: or a sender: header, and in this case we
5031 need the user's full name as well, so save a copy of it, checked for RFC822
5032 syntax and munged if necessary, if it hasn't previously been set by the -F
5033 argument. We may try to get the passwd entry more than once, in case NIS or
5034 other delays are in evidence. Save the home directory for use in filter testing
5035 (only). */
5036
5037 for (i = 0;;)
5038   {
5039   if ((pw = getpwuid(real_uid)) != NULL)
5040     {
5041     originator_login = string_copy(US pw->pw_name);
5042     originator_home = string_copy(US pw->pw_dir);
5043
5044     /* If user name has not been set by -F, set it from the passwd entry
5045     unless -f has been used to set the sender address by a trusted user. */
5046
5047     if (!originator_name)
5048       {
5049       if (!sender_address || (!f.trusted_caller && filter_test == FTEST_NONE))
5050         {
5051         uschar *name = US pw->pw_gecos;
5052         uschar *amp = Ustrchr(name, '&');
5053         uschar buffer[256];
5054
5055         /* Most Unix specify that a '&' character in the gecos field is
5056         replaced by a copy of the login name, and some even specify that
5057         the first character should be upper cased, so that's what we do. */
5058
5059         if (amp)
5060           {
5061           int loffset;
5062           string_format(buffer, sizeof(buffer), "%.*s%n%s%s",
5063             (int)(amp - name), name, &loffset, originator_login, amp + 1);
5064           buffer[loffset] = toupper(buffer[loffset]);
5065           name = buffer;
5066           }
5067
5068         /* If a pattern for matching the gecos field was supplied, apply
5069         it and then expand the name string. */
5070
5071         GET_OPTION("gecos_pattern");
5072         GET_OPTION("gecos_name");
5073         if (gecos_pattern && gecos_name)
5074           {
5075           const pcre2_code *re;
5076           re = regex_must_compile(gecos_pattern, MCS_NOFLAGS, TRUE); /* Use malloc */
5077
5078           if (regex_match_and_setup(re, name, 0, -1))
5079             {
5080             uschar *new_name = expand_string(gecos_name);
5081             expand_nmax = -1;
5082             if (new_name)
5083               {
5084               DEBUG(D_receive) debug_printf("user name \"%s\" extracted from "
5085                 "gecos field \"%s\"\n", new_name, name);
5086               name = new_name;
5087               }
5088             else DEBUG(D_receive) debug_printf("failed to expand gecos_name string "
5089               "\"%s\": %s\n", gecos_name, expand_string_message);
5090             }
5091           else DEBUG(D_receive) debug_printf("gecos_pattern \"%s\" did not match "
5092             "gecos field \"%s\"\n", gecos_pattern, name);
5093           store_free((void *)re);
5094           }
5095         originator_name = string_copy(name);
5096         }
5097
5098       /* A trusted caller has used -f but not -F */
5099
5100       else originator_name = US"";
5101       }
5102
5103     /* Break the retry loop */
5104
5105     break;
5106     }
5107
5108   if (++i > finduser_retries) break;
5109   sleep(1);
5110   }
5111
5112 /* If we cannot get a user login, log the incident and give up, unless the
5113 configuration specifies something to use. When running in the test harness,
5114 any setting of unknown_login overrides the actual name. */
5115
5116 if (!originator_login || f.running_in_test_harness)
5117   {
5118   GET_OPTION("unknown_login");
5119   if (unknown_login)
5120     {
5121     originator_login = expand_string(unknown_login);
5122     if (!originator_name && unknown_username)
5123       originator_name = expand_string(unknown_username);
5124     if (!originator_name) originator_name = US"";
5125     }
5126   if (!originator_login)
5127     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Failed to get user name for uid %d",
5128       (int)real_uid);
5129   }
5130
5131 /* Ensure that the user name is in a suitable form for use as a "phrase" in an
5132 RFC822 address.*/
5133
5134 originator_name = US parse_fix_phrase(originator_name, Ustrlen(originator_name));
5135
5136 /* If a message is created by this call of Exim, the uid/gid of its originator
5137 are those of the caller. These values are overridden if an existing message is
5138 read in from the spool. */
5139
5140 originator_uid = real_uid;
5141 originator_gid = real_gid;
5142
5143 DEBUG(D_receive) debug_printf("originator: uid=%d gid=%d login=%s name=%s\n",
5144   (int)originator_uid, (int)originator_gid, originator_login, originator_name);
5145
5146 /* Run in daemon and/or queue-running mode. The function daemon_go() never
5147 returns. We leave this till here so that the originator_ fields are available
5148 for incoming messages via the daemon. The daemon cannot be run in mua_wrapper
5149 mode. */
5150
5151 if (f.daemon_listen || f.inetd_wait_mode || is_multiple_qrun())
5152   {
5153   if (mua_wrapper)
5154     {
5155     fprintf(stderr, "Daemon cannot be run when mua_wrapper is set\n");
5156     log_write(0, LOG_MAIN|LOG_PANIC_DIE, "Daemon cannot be run when "
5157       "mua_wrapper is set");
5158     }
5159
5160 # ifndef DISABLE_TLS
5161   /* This also checks that the library linkage is working and we can call
5162   routines in it, so call even if tls_require_ciphers is unset */
5163     {
5164 # ifdef MEASURE_TIMING
5165     struct timeval t0;
5166     (void)gettimeofday(&t0, NULL);
5167 # endif
5168     if (!tls_dropprivs_validate_require_cipher(FALSE))
5169       exit(1);
5170 # ifdef MEASURE_TIMING
5171     report_time_since(&t0, US"validate_ciphers (delta)");
5172 # endif
5173     }
5174 #endif
5175
5176   daemon_go();
5177   }
5178
5179 /* If the sender ident has not been set (by a trusted caller) set it to
5180 the caller. This will get overwritten below for an inetd call. If a trusted
5181 caller has set it empty, unset it. */
5182
5183 if (!sender_ident) sender_ident = originator_login;
5184 else if (!*sender_ident) sender_ident = NULL;
5185
5186 /* Handle the -brw option, which is for checking out rewriting rules. Cause log
5187 writes (on errors) to go to stderr instead. Can't do this earlier, as want the
5188 originator_* variables set. */
5189
5190 if (test_rewrite_arg >= 0)
5191   {
5192   f.really_exim = FALSE;
5193   if (test_rewrite_arg >= argc)
5194     {
5195     printf("-brw needs an address argument\n");
5196     exim_exit(EXIT_FAILURE);
5197     }
5198   rewrite_test(exim_str_fail_toolong(argv[test_rewrite_arg], EXIM_EMAILADDR_MAX, "-brw"));
5199   exim_exit(EXIT_SUCCESS);
5200   }
5201
5202 /* A locally-supplied message is considered to be coming from a local user
5203 unless a trusted caller supplies a sender address with -f, or is passing in the
5204 message via SMTP (inetd invocation or otherwise). */
5205
5206 if (  !sender_address && !smtp_input
5207    || !f.trusted_caller && filter_test == FTEST_NONE)
5208   {
5209   f.sender_local = TRUE;
5210
5211   /* A trusted caller can supply authenticated_sender and authenticated_id
5212   via -oMas and -oMai and if so, they will already be set. Otherwise, force
5213   defaults except when host checking. */
5214
5215   if (!authenticated_sender && !host_checking)
5216     authenticated_sender = string_sprintf("%s@%s", originator_login,
5217       qualify_domain_sender);
5218   if (!authenticated_id && !host_checking)
5219     authenticated_id = originator_login;
5220   }
5221
5222 /* Trusted callers are always permitted to specify the sender address.
5223 Untrusted callers may specify it if it matches untrusted_set_sender, or if what
5224 is specified is the empty address. However, if a trusted caller does not
5225 specify a sender address for SMTP input, we leave sender_address unset. This
5226 causes the MAIL commands to be honoured. */
5227
5228 if (  !smtp_input && !sender_address
5229    || !receive_check_set_sender(sender_address))
5230   {
5231   /* Either the caller is not permitted to set a general sender, or this is
5232   non-SMTP input and the trusted caller has not set a sender. If there is no
5233   sender, or if a sender other than <> is set, override with the originator's
5234   login (which will get qualified below), except when checking things. */
5235
5236   if (  !sender_address                  /* No sender_address set */
5237      ||                                  /*         OR            */
5238        (sender_address[0] != 0 &&        /* Non-empty sender address, AND */
5239        !checking))                       /* Not running tests, including filter tests */
5240     {
5241     sender_address = originator_login;
5242     f.sender_address_forced = FALSE;
5243     sender_address_domain = 0;
5244     }
5245   }
5246
5247 /* Remember whether an untrusted caller set the sender address */
5248
5249 f.sender_set_untrusted = sender_address != originator_login && !f.trusted_caller;
5250
5251 /* Ensure that the sender address is fully qualified unless it is the empty
5252 address, which indicates an error message, or doesn't exist (root caller, smtp
5253 interface, no -f argument). */
5254
5255 if (sender_address && *sender_address && sender_address_domain == 0)
5256   sender_address = string_sprintf("%s@%s", local_part_quote(sender_address),
5257     qualify_domain_sender);
5258
5259 DEBUG(D_receive) debug_printf("sender address = %s\n", sender_address);
5260
5261 /* Handle a request to verify a list of addresses, or test them for delivery.
5262 This must follow the setting of the sender address, since routers can be
5263 predicated upon the sender. If no arguments are given, read addresses from
5264 stdin. Set debug_level to at least D_v to get full output for address testing.
5265 */
5266
5267 if (verify_address_mode || f.address_test_mode)
5268   {
5269   int exit_value = 0;
5270   int flags = vopt_qualify;
5271
5272   if (verify_address_mode)
5273     {
5274     if (!verify_as_sender) flags |= vopt_is_recipient;
5275     DEBUG(D_verify) debug_print_ids(US"Verifying:");
5276     }
5277
5278   else
5279     {
5280     flags |= vopt_is_recipient;
5281     debug_selector |= D_v;
5282     debug_file = stderr;
5283     debug_fd = fileno(debug_file);
5284     DEBUG(D_verify) debug_print_ids(US"Address testing:");
5285     }
5286
5287   if (recipients_arg < argc)
5288     while (recipients_arg < argc)
5289       {
5290       /* Supplied addresses are tainted since they come from a user */
5291       uschar * s = string_copy_taint(
5292         exim_str_fail_toolong(argv[recipients_arg++], EXIM_DISPLAYMAIL_MAX, "address verification"),
5293         GET_TAINTED);
5294       while (*s)
5295         {
5296         BOOL finished = FALSE;
5297         uschar *ss = parse_find_address_end(s, FALSE);
5298         if (*ss == ',') *ss = 0; else finished = TRUE;
5299         test_address(s, flags, &exit_value);
5300         s = ss;
5301         if (!finished)
5302           while (*++s == ',' || isspace(*s)) ;
5303         }
5304       }
5305
5306   else for (;;)
5307     {
5308     uschar * s = get_stdinput(NULL, NULL);
5309     if (!s) break;
5310     test_address(string_copy_taint(
5311         exim_str_fail_toolong(s, EXIM_DISPLAYMAIL_MAX, "address verification (stdin)"),
5312         GET_TAINTED),
5313       flags, &exit_value);
5314     }
5315
5316   route_tidyup();
5317   exim_exit(exit_value);
5318   }
5319
5320 /* Handle expansion checking. Either expand items on the command line, or read
5321 from stdin if there aren't any. If -Mset was specified, load the message so
5322 that its variables can be used, but restrict this facility to admin users.
5323 Otherwise, if -bem was used, read a message from stdin. */
5324
5325 if (expansion_test)
5326   {
5327   dns_init(FALSE, FALSE, FALSE);
5328   if (msg_action_arg > 0 && msg_action == MSG_LOAD)
5329     {
5330     uschar * spoolname;
5331     if (!f.admin_user)
5332       exim_fail("exim: permission denied\n");
5333     message_id = US exim_str_fail_toolong(argv[msg_action_arg], MESSAGE_ID_LENGTH, "message-id");
5334     /* Checking the length of the ID is sufficient to validate it.
5335     Get an untainted version so file opens can be done. */
5336     message_id = string_copy_taint(message_id, GET_UNTAINTED);
5337
5338     spoolname = string_sprintf("%s-H", message_id);
5339     if ((deliver_datafile = spool_open_datafile(message_id)) < 0)
5340       printf ("Failed to load message datafile %s\n", message_id);
5341     if (spool_read_header(spoolname, TRUE, FALSE) != spool_read_OK)
5342       printf ("Failed to load message %s\n", message_id);
5343     }
5344
5345   /* Read a test message from a file. We fudge it up to be on stdin, saving
5346   stdin itself for later reading of expansion strings. */
5347
5348   else if (expansion_test_message)
5349     {
5350     uschar * rme = expand_string(recipients_max);
5351     int save_stdin = dup(0);
5352     int fd = Uopen(expansion_test_message, O_RDONLY, 0);
5353     if (fd < 0)
5354       exim_fail("exim: failed to open %s: %s\n", expansion_test_message,
5355         strerror(errno));
5356     (void) dup2(fd, 0);
5357     filter_test = FTEST_USER;      /* Fudge to make it look like filter test */
5358     message_ended = END_NOTENDED;
5359     recipients_max_expanded = atoi(CCS rme);
5360     read_message_body(receive_msg(extract_recipients));
5361     message_linecount += body_linecount;
5362     (void)dup2(save_stdin, 0);
5363     (void)close(save_stdin);
5364     clearerr(stdin);               /* Required by Darwin */
5365     }
5366
5367   /* Only admin users may see config-file macros this way */
5368
5369   if (!f.admin_user) macros_user = macros = mlast = NULL;
5370
5371   /* Allow $recipients for this testing */
5372
5373   f.enable_dollar_recipients = TRUE;
5374
5375   /* Expand command line items */
5376
5377   if (recipients_arg < argc)
5378     while (recipients_arg < argc)
5379       expansion_test_line(exim_str_fail_toolong(argv[recipients_arg++], EXIM_EMAILADDR_MAX, "recipient"));
5380
5381   /* Read stdin */
5382
5383   else
5384     {
5385     char *(*fn_readline)(const char *) = NULL;
5386     void (*fn_addhist)(const char *) = NULL;
5387     uschar * s;
5388
5389 #ifdef USE_READLINE
5390     void *dlhandle = set_readline(&fn_readline, &fn_addhist);
5391 #endif
5392
5393     while (s = get_stdinput(fn_readline, fn_addhist))
5394       expansion_test_line(s);
5395
5396 #ifdef USE_READLINE
5397     if (dlhandle) dlclose(dlhandle);
5398 #endif
5399     }
5400
5401   /* The data file will be open after -Mset */
5402
5403   if (deliver_datafile >= 0)
5404     {
5405     (void)close(deliver_datafile);
5406     deliver_datafile = -1;
5407     }
5408
5409   exim_exit(EXIT_SUCCESS);
5410   }
5411
5412
5413 /* The active host name is normally the primary host name, but it can be varied
5414 for hosts that want to play several parts at once. We need to ensure that it is
5415 set for host checking, and for receiving messages. */
5416
5417 smtp_active_hostname = primary_hostname;
5418 GET_OPTION("smtp_active_hostname");
5419 if (raw_active_hostname)
5420   {
5421   uschar * nah = expand_string(raw_active_hostname);
5422   if (!nah)
5423     {
5424     if (!f.expand_string_forcedfail)
5425       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to expand \"%s\" "
5426         "(smtp_active_hostname): %s", raw_active_hostname,
5427         expand_string_message);
5428     }
5429   else if (nah[0]) smtp_active_hostname = nah;
5430   }
5431
5432 /* Handle host checking: this facility mocks up an incoming SMTP call from a
5433 given IP address so that the blocking and relay configuration can be tested.
5434 Unless a sender_ident was set by -oMt, we discard it (the default is the
5435 caller's login name). An RFC 1413 call is made only if we are running in the
5436 test harness and an incoming interface and both ports are specified, because
5437 there is no TCP/IP call to find the ident for. */
5438
5439 if (host_checking)
5440   {
5441   int x[4];
5442   int size;
5443
5444   if (!sender_ident_set)
5445     {
5446     sender_ident = NULL;
5447     if (f.running_in_test_harness && sender_host_port
5448        && interface_address && interface_port)
5449       verify_get_ident(1223);           /* note hardwired port number */
5450     }
5451
5452   /* In case the given address is a non-canonical IPv6 address, canonicalize
5453   it. Use the compressed form for IPv6. */
5454
5455   size = host_aton(sender_host_address, x);
5456   sender_host_address = store_get(48, GET_UNTAINTED);  /* large enough for full IPv6 */
5457   if (size == 1)
5458     (void) host_nmtoa(size, x, -1, sender_host_address, ':');
5459   else
5460     (void) ipv6_nmtoa(x, sender_host_address);
5461
5462   /* Now set up for testing */
5463
5464   host_build_sender_fullhost();
5465   smtp_input = TRUE;
5466   smtp_in = stdin;
5467   smtp_out = stdout;
5468   f.sender_local = FALSE;
5469   f.sender_host_notsocket = TRUE;
5470   debug_file = stderr;
5471   debug_fd = fileno(debug_file);
5472   fprintf(stdout, "\n**** SMTP testing session as if from host %s\n"
5473     "**** but without any ident (RFC 1413) callback.\n"
5474     "**** This is not for real!\n\n",
5475       sender_host_address);
5476
5477   connection_id = getpid();
5478   memset(sender_host_cache, 0, sizeof(sender_host_cache));
5479   if (verify_check_host(&hosts_connection_nolog) == OK)
5480     {
5481     BIT_CLEAR(log_selector, log_selector_size, Li_smtp_connection);
5482     BIT_CLEAR(log_selector, log_selector_size, Li_smtp_no_mail);
5483     }
5484   log_write(L_smtp_connection, LOG_MAIN, "%s", smtp_get_connection_info());
5485
5486   /* NOTE: We do *not* call smtp_log_no_mail() if smtp_start_session() fails,
5487   because a log line has already been written for all its failure exists
5488   (usually "connection refused: <reason>") and writing another one is
5489   unnecessary clutter. */
5490
5491   if (smtp_start_session())
5492     {
5493     rmark reset_point;
5494     for (; (reset_point = store_mark()); store_reset(reset_point))
5495       {
5496       if (smtp_setup_msg() <= 0) break;
5497       if (!receive_msg(FALSE)) break;
5498
5499       return_path = sender_address = NULL;
5500       dnslist_domain = dnslist_matched = NULL;
5501 #ifndef DISABLE_DKIM
5502       dkim_cur_signer = NULL;
5503 #endif
5504       acl_var_m = NULL;
5505       deliver_localpart_orig = NULL;
5506       deliver_domain_orig = NULL;
5507       callout_address = sending_ip_address = NULL;
5508       deliver_localpart_data = deliver_domain_data =
5509       recipient_data = sender_data = NULL;
5510       sender_rate = sender_rate_limit = sender_rate_period = NULL;
5511       }
5512     smtp_log_no_mail();
5513     }
5514   exim_exit(EXIT_SUCCESS);
5515   }
5516
5517
5518 /* Arrange for message reception if recipients or SMTP were specified;
5519 otherwise complain unless a version print (-bV) happened or this is a filter
5520 verification test or info dump.
5521 In the former case, show the configuration file name. */
5522
5523 if (recipients_arg >= argc && !extract_recipients && !smtp_input)
5524   {
5525   if (version_printed)
5526     {
5527     if (Ustrchr(config_main_filelist, ':'))
5528       printf("Configuration file search path is %s\n", config_main_filelist);
5529     printf("Configuration file is %s\n", config_main_filename);
5530     return EXIT_SUCCESS;
5531     }
5532
5533   if (info_flag != CMDINFO_NONE)
5534     {
5535     show_exim_information(info_flag, info_stdout ? stdout : stderr);
5536     return info_stdout ? EXIT_SUCCESS : EXIT_FAILURE;
5537     }
5538
5539   if (filter_test == FTEST_NONE)
5540     exim_usage(called_as);
5541   }
5542
5543
5544 /* If mua_wrapper is set, Exim is being used to turn an MUA that submits on the
5545 standard input into an MUA that submits to a smarthost over TCP/IP. We know
5546 that we are not called from inetd, because that is rejected above. The
5547 following configuration settings are forced here:
5548
5549   (1) Synchronous delivery (-odi)
5550   (2) Errors to stderr (-oep == -oeq)
5551   (3) No parallel remote delivery
5552   (4) Unprivileged delivery
5553
5554 We don't force overall queueing options because there are several of them;
5555 instead, queueing is avoided below when mua_wrapper is set. However, we do need
5556 to override any SMTP queueing. */
5557
5558 if (mua_wrapper)
5559   {
5560   f.synchronous_delivery = TRUE;
5561   arg_error_handling = ERRORS_STDERR;
5562   remote_max_parallel = 1;
5563   deliver_drop_privilege = TRUE;
5564   f.queue_smtp = FALSE;
5565   queue_smtp_domains = NULL;
5566 #ifdef SUPPORT_I18N
5567   message_utf8_downconvert = -1;        /* convert-if-needed */
5568 #endif
5569   }
5570
5571
5572 /* Prepare to accept one or more new messages on the standard input. When a
5573 message has been read, its id is returned in message_id[]. If doing immediate
5574 delivery, we fork a delivery process for each received message, except for the
5575 last one, where we can save a process switch.
5576
5577 It is only in non-smtp mode that error_handling is allowed to be changed from
5578 its default of ERRORS_SENDER by argument. (Idle thought: are any of the
5579 sendmail error modes other than -oem ever actually used? Later: yes.) */
5580
5581 if (!smtp_input) error_handling = arg_error_handling;
5582
5583 /* If this is an inetd call, ensure that stderr is closed to prevent panic
5584 logging being sent down the socket and make an identd call to get the
5585 sender_ident. */
5586
5587 else if (f.is_inetd)
5588   {
5589   (void)fclose(stderr);
5590   exim_nullstd();                       /* Re-open to /dev/null */
5591   verify_get_ident(IDENT_PORT);
5592   host_build_sender_fullhost();
5593   set_process_info("handling incoming connection from %s via inetd",
5594     sender_fullhost);
5595   }
5596
5597 /* If the sender host address has been set, build sender_fullhost if it hasn't
5598 already been done (which it will have been for inetd). This caters for the
5599 case when it is forced by -oMa. However, we must flag that it isn't a socket,
5600 so that the test for IP options is skipped for -bs input. */
5601
5602 if (sender_host_address && !sender_fullhost)
5603   {
5604   host_build_sender_fullhost();
5605   set_process_info("handling incoming connection from %s via -oMa",
5606     sender_fullhost);
5607   f.sender_host_notsocket = TRUE;
5608   }
5609
5610 /* Otherwise, set the sender host as unknown except for inetd calls. This
5611 prevents host checking in the case of -bs not from inetd and also for -bS. */
5612
5613 else if (!f.is_inetd) f.sender_host_unknown = TRUE;
5614
5615 /* If stdout does not exist, then dup stdin to stdout. This can happen
5616 if exim is started from inetd. In this case fd 0 will be set to the socket,
5617 but fd 1 will not be set. This also happens for passed SMTP channels. */
5618
5619 if (fstat(1, &statbuf) < 0) (void)dup2(0, 1);
5620
5621 /* Set up the incoming protocol name and the state of the program. Root is
5622 allowed to force received protocol via the -oMr option above. If we have come
5623 via inetd, the process info has already been set up. We don't set
5624 received_protocol here for smtp input, as it varies according to
5625 batch/HELO/EHLO/AUTH/TLS. */
5626
5627 if (smtp_input)
5628   {
5629   if (!f.is_inetd) set_process_info("accepting a local %sSMTP message from <%s>",
5630     smtp_batched_input? "batched " : "",
5631     sender_address ? sender_address : originator_login);
5632   }
5633 else
5634   {
5635   int old_pool = store_pool;
5636   store_pool = POOL_PERM;
5637   if (!received_protocol)
5638     received_protocol = string_sprintf("local%s", called_as);
5639   store_pool = old_pool;
5640   set_process_info("accepting a local non-SMTP message from <%s>",
5641     sender_address);
5642   }
5643
5644 /* Initialize the session_local_queue-only flag (this will be ignored if
5645 mua_wrapper is set) */
5646
5647 queue_check_only();
5648 session_local_queue_only = queue_only;
5649
5650 /* For non-SMTP and for batched SMTP input, check that there is enough space on
5651 the spool if so configured. On failure, we must not attempt to send an error
5652 message! (For interactive SMTP, the check happens at MAIL FROM and an SMTP
5653 error code is given.) */
5654
5655 if ((!smtp_input || smtp_batched_input) && !receive_check_fs(0))
5656   exim_fail("exim: insufficient disk space\n");
5657
5658 /* If this is smtp input of any kind, real or batched, handle the start of the
5659 SMTP session.
5660
5661 NOTE: We do *not* call smtp_log_no_mail() if smtp_start_session() fails,
5662 because a log line has already been written for all its failure exists
5663 (usually "connection refused: <reason>") and writing another one is
5664 unnecessary clutter. */
5665
5666 connection_id = getpid();
5667 if (smtp_input)
5668   {
5669   smtp_in = stdin;
5670   smtp_out = stdout;
5671   memset(sender_host_cache, 0, sizeof(sender_host_cache));
5672   if (verify_check_host(&hosts_connection_nolog) == OK)
5673     {
5674     BIT_CLEAR(log_selector, log_selector_size, Li_smtp_connection);
5675     BIT_CLEAR(log_selector, log_selector_size, Li_smtp_no_mail);
5676     }
5677   log_write(L_smtp_connection, LOG_MAIN, "%s", smtp_get_connection_info());
5678   if (!smtp_start_session())
5679     {
5680     mac_smtp_fflush();
5681     exim_exit(EXIT_SUCCESS);
5682     }
5683   }
5684
5685 /* Otherwise, set up the input size limit here and set no stdin stdio buffer
5686 (we handle buferring so as to have visibility of fill level). */
5687
5688 else
5689   {
5690   GET_OPTION("message_size_limit");
5691   thismessage_size_limit = expand_string_integer(message_size_limit, TRUE);
5692   if (expand_string_message)
5693     if (thismessage_size_limit == -1)
5694       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "failed to expand "
5695         "message_size_limit: %s", expand_string_message);
5696     else
5697       log_write(0, LOG_MAIN|LOG_PANIC_DIE, "invalid value for "
5698         "message_size_limit: %s", expand_string_message);
5699
5700   setvbuf(stdin, NULL, _IONBF, 0);
5701   }
5702
5703 /* Loop for several messages when reading SMTP input. If we fork any child
5704 processes, we don't want to wait for them unless synchronous delivery is
5705 requested, so set SIGCHLD to SIG_IGN in that case. This is not necessarily the
5706 same as SIG_DFL, despite the fact that documentation often lists the default as
5707 "ignore". This is a confusing area. This is what I know:
5708
5709 At least on some systems (e.g. Solaris), just setting SIG_IGN causes child
5710 processes that complete simply to go away without ever becoming defunct. You
5711 can't then wait for them - but we don't want to wait for them in the
5712 non-synchronous delivery case. However, this behaviour of SIG_IGN doesn't
5713 happen for all OS (e.g. *BSD is different).
5714
5715 But that's not the end of the story. Some (many? all?) systems have the
5716 SA_NOCLDWAIT option for sigaction(). This requests the behaviour that Solaris
5717 has by default, so it seems that the difference is merely one of default
5718 (compare restarting vs non-restarting signals).
5719
5720 To cover all cases, Exim sets SIG_IGN with SA_NOCLDWAIT here if it can. If not,
5721 it just sets SIG_IGN. To be on the safe side it also calls waitpid() at the end
5722 of the loop below. Paranoia rules.
5723
5724 February 2003: That's *still* not the end of the story. There are now versions
5725 of Linux (where SIG_IGN does work) that are picky. If, having set SIG_IGN, a
5726 process then calls waitpid(), a grumble is written to the system log, because
5727 this is logically inconsistent. In other words, it doesn't like the paranoia.
5728 As a consequence of this, the waitpid() below is now excluded if we are sure
5729 that SIG_IGN works. */
5730
5731 if (!f.synchronous_delivery)
5732   {
5733 #ifdef SA_NOCLDWAIT
5734   struct sigaction act;
5735   act.sa_handler = SIG_IGN;
5736   sigemptyset(&(act.sa_mask));
5737   act.sa_flags = SA_NOCLDWAIT;
5738   sigaction(SIGCHLD, &act, NULL);
5739 #else
5740   signal(SIGCHLD, SIG_IGN);
5741 #endif
5742   }
5743
5744 /* Save the current store pool point, for resetting at the start of
5745 each message, and save the real sender address, if any. */
5746
5747 real_sender_address = sender_address;
5748
5749 /* Loop to receive messages; receive_msg() returns TRUE if there are more
5750 messages to be read (SMTP input), or FALSE otherwise (not SMTP, or SMTP channel
5751 collapsed). */
5752
5753 for (BOOL more = TRUE; more; )
5754   {
5755   rmark reset_point = store_mark();
5756   message_id[0] = 0;
5757
5758   /* Handle the SMTP case; call smtp_setup_mst() to deal with the initial SMTP
5759   input and build the recipients list, before calling receive_msg() to read the
5760   message proper. Whatever sender address is given in the SMTP transaction is
5761   often ignored for local senders - we use the actual sender, which is normally
5762   either the underlying user running this process or a -f argument provided by
5763   a trusted caller. It is saved in real_sender_address. The test for whether to
5764   accept the SMTP sender is encapsulated in receive_check_set_sender(). */
5765
5766   if (smtp_input)
5767     {
5768     int rc;
5769     if ((rc = smtp_setup_msg()) > 0)
5770       {
5771       if (   real_sender_address
5772           && !receive_check_set_sender(sender_address))
5773         {
5774         sender_address = raw_sender = real_sender_address;
5775         sender_address_unrewritten = NULL;
5776         }
5777
5778       /* For batched SMTP, we have to run the acl_not_smtp_start ACL, since it
5779       isn't really SMTP, so no other ACL will run until the acl_not_smtp one at
5780       the very end. The result of the ACL is ignored (as for other non-SMTP
5781       messages). It is run for its potential side effects. */
5782
5783       if (smtp_batched_input)
5784         {
5785         GET_OPTION("acl_not_smtp_start");
5786         if (acl_not_smtp_start)
5787           {
5788           uschar * user_msg, * log_msg;
5789           f.enable_dollar_recipients = TRUE;
5790           (void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start,
5791             &user_msg, &log_msg);
5792           f.enable_dollar_recipients = FALSE;
5793           }
5794         }
5795
5796       /* Now get the data for the message */
5797
5798       more = receive_msg(extract_recipients);
5799       if (!message_id[0])
5800         {
5801         cancel_cutthrough_connection(TRUE, US"receive dropped");
5802         if (more) goto MORELOOP;
5803         smtp_log_no_mail();               /* Log no mail if configured */
5804         exim_exit(EXIT_FAILURE);
5805         }
5806       }
5807     else
5808       {
5809       cancel_cutthrough_connection(TRUE, US"message setup dropped");
5810       smtp_log_no_mail();               /* Log no mail if configured */
5811       exim_exit(rc ? EXIT_FAILURE : EXIT_SUCCESS);
5812       }
5813     }
5814
5815   /* In the non-SMTP case, we have all the information from the command
5816   line, but must process it in case it is in the more general RFC822
5817   format, and in any case, to detect syntax errors. Also, it appears that
5818   the use of comma-separated lists as single arguments is common, so we
5819   had better support them. */
5820
5821   else
5822     {
5823     uschar * rme = expand_string(recipients_max);
5824     int rcount = 0, count = argc - recipients_arg;
5825     const uschar ** list = argv + recipients_arg;
5826
5827     recipients_max_expanded = atoi(CCS rme);
5828
5829     /* These options cannot be changed dynamically for non-SMTP messages */
5830
5831     f.active_local_sender_retain = local_sender_retain;
5832     f.active_local_from_check = local_from_check;
5833
5834     /* Save before any rewriting */
5835
5836     raw_sender = string_copy(sender_address);
5837
5838     /* Loop for each argument (supplied by user hence tainted) */
5839
5840     for (int i = 0; i < count; i++)
5841       {
5842       int start, end, domain;
5843       uschar * errmess;
5844       /* There can be multiple addresses, so EXIM_DISPLAYMAIL_MAX (tuned for 1) is too short.
5845       We'll still want to cap it to something, just in case. */
5846       uschar * s = string_copy_taint(
5847         exim_str_fail_toolong(list[i], BIG_BUFFER_SIZE, "address argument"),
5848         GET_TAINTED);
5849
5850       /* Loop for each comma-separated address */
5851
5852       while (*s)
5853         {
5854         BOOL finished = FALSE;
5855         uschar * recipient;
5856         uschar * ss = parse_find_address_end(s, FALSE);
5857
5858         if (*ss == ',') *ss = 0; else finished = TRUE;
5859
5860         /* Check max recipients - if -t was used, these aren't recipients */
5861
5862         if (  recipients_max_expanded > 0 && ++rcount > recipients_max_expanded
5863            && !extract_recipients)
5864           {
5865           DEBUG(D_all) debug_printf("excess reipients (max %d)\n",
5866             recipients_max_expanded);
5867
5868           if (error_handling == ERRORS_STDERR)
5869             {
5870             fprintf(stderr, "exim: too many recipients\n");
5871             exim_exit(EXIT_FAILURE);
5872             }
5873           else
5874             return
5875               moan_to_sender(ERRMESS_TOOMANYRECIP, NULL, NULL, stdin, TRUE)?
5876                 errors_sender_rc : EXIT_FAILURE;
5877           }
5878
5879 #ifdef SUPPORT_I18N
5880         {
5881         BOOL b = allow_utf8_domains;
5882         allow_utf8_domains = TRUE;
5883 #endif
5884         recipient =
5885           parse_extract_address(s, &errmess, &start, &end, &domain, FALSE);
5886
5887 #ifdef SUPPORT_I18N
5888         if (recipient)
5889           if (string_is_utf8(recipient)) message_smtputf8 = TRUE;
5890           else allow_utf8_domains = b;
5891         }
5892 #else
5893         ;
5894 #endif
5895         if (domain == 0 && !f.allow_unqualified_recipient)
5896           {
5897           recipient = NULL;
5898           errmess = US"unqualified recipient address not allowed";
5899           }
5900
5901         if (!recipient)
5902           {
5903           DEBUG(D_all) debug_printf("bad recipient address \"%s\": %s\n",
5904             string_printing(list[i]), errmess);
5905
5906           if (error_handling == ERRORS_STDERR)
5907             {
5908             fprintf(stderr, "exim: bad recipient address \"%s\": %s\n",
5909               string_printing(list[i]), errmess);
5910             exim_exit(EXIT_FAILURE);
5911             }
5912           else
5913             {
5914             error_block eblock;
5915             eblock.next = NULL;
5916             eblock.text1 = string_printing(list[i]);
5917             eblock.text2 = errmess;
5918             return
5919               moan_to_sender(ERRMESS_BADARGADDRESS, &eblock, NULL, stdin, TRUE)?
5920                 errors_sender_rc : EXIT_FAILURE;
5921             }
5922           }
5923
5924         receive_add_recipient(string_copy_taint(recipient, GET_TAINTED), -1);
5925         s = ss;
5926         if (!finished)
5927           while (*++s && (*s == ',' || isspace(*s)));
5928         }
5929       }
5930
5931     /* Show the recipients when debugging */
5932
5933     DEBUG(D_receive)
5934       {
5935       if (sender_address) debug_printf("Sender: %s\n", sender_address);
5936       if (recipients_list)
5937         {
5938         debug_printf("Recipients:\n");
5939         for (int i = 0; i < recipients_count; i++)
5940           debug_printf("  %s\n", recipients_list[i].address);
5941         }
5942       }
5943
5944     /* Run the acl_not_smtp_start ACL if required. The result of the ACL is
5945     ignored; rejecting here would just add complication, and it can just as
5946     well be done later. Allow $recipients to be visible in the ACL. */
5947
5948     GET_OPTION("acl_not_smtp_start");
5949     if (acl_not_smtp_start)
5950       {
5951       uschar * user_msg, * log_msg;
5952       f.enable_dollar_recipients = TRUE;
5953       (void)acl_check(ACL_WHERE_NOTSMTP_START, NULL, acl_not_smtp_start,
5954         &user_msg, &log_msg);
5955       f.enable_dollar_recipients = FALSE;
5956       }
5957
5958     /* Pause for a while waiting for input.  If none received in that time,
5959     close the logfile, if we had one open; then if we wait for a long-running
5960     datasource (months, in one use-case) log rotation will not leave us holding
5961     the file copy. */
5962
5963     if (!receive_timeout)
5964       if (poll_one_fd(0, POLLIN, 30*60*1000) == 0)      /* 30 minutes */
5965         mainlog_close();
5966
5967     /* Read the data for the message. If filter_test is not FTEST_NONE, this
5968     will just read the headers for the message, and not write anything onto the
5969     spool. */
5970
5971     message_ended = END_NOTENDED;
5972     more = receive_msg(extract_recipients);
5973
5974     /* more is always FALSE here (not SMTP message) when reading a message
5975     for real; when reading the headers of a message for filter testing,
5976     it is TRUE if the headers were terminated by '.' and FALSE otherwise. */
5977
5978     if (!message_id[0]) exim_exit(EXIT_FAILURE);
5979     }  /* Non-SMTP message reception */
5980
5981   /* If this is a filter testing run, there are headers in store, but
5982   no message on the spool. Run the filtering code in testing mode, setting
5983   the domain to the qualify domain and the local part to the current user,
5984   unless they have been set by options. The prefix and suffix are left unset
5985   unless specified. The the return path is set to to the sender unless it has
5986   already been set from a return-path header in the message. */
5987
5988   if (filter_test != FTEST_NONE)
5989     {
5990     deliver_domain = ftest_domain ? ftest_domain : qualify_domain_recipient;
5991     deliver_domain_orig = deliver_domain;
5992     deliver_localpart = ftest_localpart ? US ftest_localpart : originator_login;
5993     deliver_localpart_orig = deliver_localpart;
5994     deliver_localpart_prefix = US ftest_prefix;
5995     deliver_localpart_suffix = US ftest_suffix;
5996     deliver_home = originator_home;
5997
5998     if (!return_path)
5999       {
6000       printf("Return-path copied from sender\n");
6001       return_path = string_copy(sender_address);
6002       }
6003     else
6004       printf("Return-path = %s\n", (return_path[0] == 0)? US"<>" : return_path);
6005     printf("Sender      = %s\n", (sender_address[0] == 0)? US"<>" : sender_address);
6006
6007     receive_add_recipient(
6008       string_sprintf("%s%s%s@%s",
6009         ftest_prefix ? ftest_prefix : US"",
6010         deliver_localpart,
6011         ftest_suffix ? ftest_suffix : US"",
6012         deliver_domain), -1);
6013
6014     printf("Recipient   = %s\n", recipients_list[0].address);
6015     if (ftest_prefix) printf("Prefix    = %s\n", ftest_prefix);
6016     if (ftest_suffix) printf("Suffix    = %s\n", ftest_suffix);
6017
6018     if (chdir("/"))   /* Get away from wherever the user is running this from */
6019       {
6020       DEBUG(D_receive) debug_printf("chdir(\"/\") failed\n");
6021       exim_exit(EXIT_FAILURE);
6022       }
6023
6024     /* Now we run either a system filter test, or a user filter test, or both.
6025     In the latter case, headers added by the system filter will persist and be
6026     available to the user filter. We need to copy the filter variables
6027     explicitly. */
6028
6029     if (filter_test & FTEST_SYSTEM)
6030       if (!filter_runtest(filter_sfd, filter_test_sfile, TRUE, more))
6031         exim_exit(EXIT_FAILURE);
6032
6033     memcpy(filter_sn, filter_n, sizeof(filter_sn));
6034
6035     if (filter_test & FTEST_USER)
6036       if (!filter_runtest(filter_ufd, filter_test_ufile, FALSE, more))
6037         exim_exit(EXIT_FAILURE);
6038
6039     exim_exit(EXIT_SUCCESS);
6040     }
6041
6042   /* Else act on the result of message reception. We should not get here unless
6043   message_id[0] is non-zero. If queue_only is set, session_local_queue_only
6044   will be TRUE. If it is not, check on the number of messages received in this
6045   connection. */
6046
6047   if (  !session_local_queue_only
6048      && smtp_accept_queue_per_connection > 0
6049      && receive_messagecount > smtp_accept_queue_per_connection)
6050     {
6051     session_local_queue_only = TRUE;
6052     queue_only_reason = 2;
6053     }
6054
6055   /* Initialize local_queue_only from session_local_queue_only. If it is false,
6056   and queue_only_load is set, check that the load average is below it. If it is
6057   not, set local_queue_only TRUE. If queue_only_load_latch is true (the
6058   default), we put the whole session into queue_only mode. It then remains this
6059   way for any subsequent messages on the same SMTP connection. This is a
6060   deliberate choice; even though the load average may fall, it doesn't seem
6061   right to deliver later messages on the same call when not delivering earlier
6062   ones. However, there are odd cases where this is not wanted, so this can be
6063   changed by setting queue_only_load_latch false. */
6064
6065   if (!(local_queue_only = session_local_queue_only) && queue_only_load >= 0)
6066     if ((local_queue_only = (load_average = OS_GETLOADAVG()) > queue_only_load))
6067       {
6068       queue_only_reason = 3;
6069       if (queue_only_load_latch) session_local_queue_only = TRUE;
6070       }
6071
6072   /* If running as an MUA wrapper, all queueing options and freezing options
6073   are ignored. */
6074
6075   if (mua_wrapper)
6076     local_queue_only = f.queue_only_policy = f.deliver_freeze = FALSE;
6077
6078   /* Log the queueing here, when it will get a message id attached, but
6079   not if queue_only is set (case 0). Case 1 doesn't happen here (too many
6080   connections). */
6081
6082   if (local_queue_only)
6083     {
6084     cancel_cutthrough_connection(TRUE, US"no delivery; queueing");
6085     switch(queue_only_reason)
6086       {
6087       case 2:
6088         log_write(L_delay_delivery,
6089                 LOG_MAIN, "no immediate delivery: more than %d messages "
6090           "received in one connection", smtp_accept_queue_per_connection);
6091         break;
6092
6093       case 3:
6094         log_write(L_delay_delivery,
6095                 LOG_MAIN, "no immediate delivery: load average %.2f",
6096                 (double)load_average/1000.0);
6097       break;
6098       }
6099     }
6100
6101   else if (f.queue_only_policy || f.deliver_freeze)
6102     cancel_cutthrough_connection(TRUE, US"no delivery; queueing");
6103
6104   /* Else do the delivery unless the ACL or local_scan() called for queue only
6105   or froze the message. Always deliver in a separate process. A fork failure is
6106   not a disaster, as the delivery will eventually happen on a subsequent queue
6107   run. The search cache must be tidied before the fork, as the parent will
6108   do it before exiting. The child will trigger a lookup failure and
6109   thereby defer the delivery if it tries to use (for example) a cached ldap
6110   connection that the parent has called unbind on. */
6111
6112   else
6113     {
6114     pid_t pid;
6115     search_tidyup();
6116
6117     if ((pid = exim_fork(US"local-accept-delivery")) == 0)
6118       {
6119       int rc;
6120       close_unwanted();      /* Close unwanted file descriptors and TLS */
6121       exim_nullstd();        /* Ensure std{in,out,err} exist */
6122
6123       /* Re-exec Exim if we need to regain privilege (note: in mua_wrapper
6124       mode, deliver_drop_privilege is forced TRUE). */
6125
6126       if (geteuid() != root_uid && !deliver_drop_privilege && !unprivileged)
6127         {
6128         delivery_re_exec(CEE_EXEC_EXIT);
6129         /* Control does not return here. */
6130         }
6131
6132       /* No need to re-exec */
6133
6134       rc = deliver_message(message_id, FALSE, FALSE);
6135       search_tidyup();
6136       exim_underbar_exit(!mua_wrapper || rc == DELIVER_MUA_SUCCEEDED
6137         ? EXIT_SUCCESS : EXIT_FAILURE);
6138       }
6139
6140     if (pid < 0)
6141       {
6142       cancel_cutthrough_connection(TRUE, US"delivery fork failed");
6143       log_write(0, LOG_MAIN|LOG_PANIC, "failed to fork automatic delivery "
6144         "process: %s", strerror(errno));
6145       }
6146     else
6147       {
6148       release_cutthrough_connection(US"msg passed for delivery");
6149
6150       /* In the parent, wait if synchronous delivery is required. This will
6151       always be the case in MUA wrapper mode. */
6152
6153       if (f.synchronous_delivery)
6154         {
6155         int status;
6156         while (wait(&status) != pid);
6157         if ((status & 0x00ff) != 0)
6158           log_write(0, LOG_MAIN|LOG_PANIC,
6159             "process %d crashed with signal %d while delivering %s",
6160             (int)pid, status & 0x00ff, message_id);
6161         if (mua_wrapper && (status & 0xffff) != 0) exim_exit(EXIT_FAILURE);
6162         }
6163       }
6164     }
6165
6166   /* The loop will repeat if more is TRUE. If we do not know know that the OS
6167   automatically reaps children (see comments above the loop), clear away any
6168   finished subprocesses here, in case there are lots of messages coming in
6169   from the same source. */
6170
6171 #ifndef SIG_IGN_WORKS
6172   while (waitpid(-1, NULL, WNOHANG) > 0);
6173 #endif
6174
6175 MORELOOP:
6176   return_path = sender_address = NULL;
6177   authenticated_sender = NULL;
6178   deliver_localpart_orig = NULL;
6179   deliver_domain_orig = NULL;
6180   deliver_host = deliver_host_address = NULL;
6181   dnslist_domain = dnslist_matched = NULL;
6182 #ifdef WITH_CONTENT_SCAN
6183   malware_name = NULL;
6184   regex_vars_clear();
6185 #endif
6186   callout_address = NULL;
6187   sending_ip_address = NULL;
6188   deliver_localpart_data = deliver_domain_data =
6189   recipient_data = sender_data = NULL;
6190   acl_var_m = NULL;
6191   lookup_value = NULL;                            /* Can be set by ACL */
6192
6193   store_reset(reset_point);
6194   }
6195
6196 exim_exit(EXIT_SUCCESS);   /* Never returns */
6197 return 0;                  /* To stop compiler warning */
6198 }
6199
6200
6201 /* End of exim.c */
6202 /* vi: aw ai sw=2
6203 */