diff options
Diffstat (limited to 'src/server.c')
-rw-r--r-- | src/server.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/server.c b/src/server.c index ee56b66..d5066ea 100644 --- a/src/server.c +++ b/src/server.c @@ -29,6 +29,7 @@ #include "plugin.h" #include "joblist.h" #include "network_backends.h" +#include "version.h" #ifdef HAVE_GETOPT_H #include <getopt.h> @@ -64,6 +65,17 @@ /* #define USE_ALARM */ #endif +#ifdef HAVE_GETUID +# ifndef HAVE_ISSETUGID + +static int l_issetugid() { + return (geteuid() != getuid() || getegid() != getgid()); +} + +# define issetugid l_issetugid +# endif +#endif + static volatile sig_atomic_t srv_shutdown = 0; static volatile sig_atomic_t graceful_shutdown = 0; static volatile sig_atomic_t handle_sig_alarm = 1; @@ -157,6 +169,7 @@ static void daemonize(void) { static server *server_init(void) { int i; + FILE *frandom = NULL; server *srv = calloc(1, sizeof(*srv)); assert(srv); @@ -197,6 +210,19 @@ static server *server_init(void) { srv->mtime_cache[i].str = buffer_init(); } + if ((NULL != (frandom = fopen("/dev/urandom", "rb")) || NULL != (frandom = fopen("/dev/random", "rb"))) + && 1 == fread(srv->entropy, sizeof(srv->entropy), 1, frandom)) { + srand(*(unsigned int*)srv->entropy); + srv->is_real_entropy = 1; + } else { + unsigned int j; + srand(time(NULL) ^ getpid()); + srv->is_real_entropy = 0; + for (j = 0; j < sizeof(srv->entropy); j++) + srv->entropy[j] = rand(); + } + if (frandom) fclose(frandom); + srv->cur_ts = time(NULL); srv->startup_ts = srv->cur_ts; @@ -325,7 +351,7 @@ static void show_version (void) { #else # define TEXT_SSL #endif - char *b = PACKAGE_NAME "-" PACKAGE_VERSION TEXT_SSL \ + char *b = PACKAGE_DESC TEXT_SSL \ " - a light and fast webserver\n" \ "Build-Date: " __DATE__ " " __TIME__ "\n"; ; @@ -462,7 +488,7 @@ static void show_help (void) { #else # define TEXT_SSL #endif - char *b = PACKAGE_NAME "-" PACKAGE_VERSION TEXT_SSL " ("__DATE__ " " __TIME__ ")" \ + char *b = PACKAGE_DESC TEXT_SSL " ("__DATE__ " " __TIME__ ")" \ " - a light and fast webserver\n" \ "usage:\n" \ " -f <name> filename of the config-file\n" \ @@ -589,7 +615,7 @@ int main (int argc, char **argv) { /* UID handling */ #ifdef HAVE_GETUID - if (!i_am_root && (geteuid() == 0 || getegid() == 0)) { + if (!i_am_root && issetugid()) { /* we are setuid-root */ log_error_write(srv, __FILE__, __LINE__, "s", |