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