X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/059ec3d9952740285fb1ebf47961b8aca2eb1b4a..35edf2ff67ad9fa5fc0e83bde865d807c297864f:/src/src/exim.c diff --git a/src/src/exim.c b/src/src/exim.c index 6d227c33e..bfdcbc6e0 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/exim.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */ +/* $Cambridge: exim/src/src/exim.c,v 1.3 2004/10/18 09:16:57 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -196,7 +196,10 @@ os_non_restarting_signal(SIGALRM, sigalrm_handler); /* This function is called by millisleep() and exim_wait_tick() to wait for a period of time that may include a fraction of a second. The coding is somewhat -tedious... +tedious. We do not expect setitimer() ever to fail, but if it does, the process +will wait for ever, so we panic in this instance. (There was a case of this +when a bug in a function that calls milliwait() caused it to pass invalid data. +That's when I added the check. :-) Argument: an itimerval structure containing the interval Returns: nothing @@ -210,7 +213,9 @@ sigset_t old_sigmask; (void)sigemptyset(&sigmask); /* Empty mask */ (void)sigaddset(&sigmask, SIGALRM); /* Add SIGALRM */ (void)sigprocmask(SIG_BLOCK, &sigmask, &old_sigmask); /* Block SIGALRM */ -(void)setitimer(ITIMER_REAL, itval, NULL); /* Start timer */ +if (setitimer(ITIMER_REAL, itval, NULL) < 0) /* Start timer */ + log_write(0, LOG_MAIN|LOG_PANIC_DIE, + "setitimer() failed: %s", strerror(errno)); (void)sigfillset(&sigmask); /* All signals */ (void)sigdelset(&sigmask, SIGALRM); /* Remove SIGALRM */ (void)sigsuspend(&sigmask); /* Until SIGALRM */ @@ -1229,7 +1234,7 @@ because some OS define it in /usr/include/unistd.h. */ extern char **environ; -/* If the Exim user and/or group and/or the configuration file owner were +/* If the Exim user and/or group and/or the configuration file owner/group were defined by ref:name at build time, we must now find the actual uid/gid values. This is a feature to make the lives of binary distributors easier. */ @@ -1264,6 +1269,15 @@ if (!route_finduser(US CONFIGURE_OWNERNAME, NULL, &config_uid)) } #endif +#ifdef CONFIGURE_GROUPNAME +if (!route_findgroup(US CONFIGURE_GROUPNAME, &config_gid)) + { + fprintf(stderr, "exim: failed to find gid for group name \"%s\"\n", + CONFIGURE_GROUPNAME); + exit(EXIT_FAILURE); + } +#endif + /* In the Cygwin environment, some initialization needs doing. It is fudged in by means of this macro. */