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