diff options
Diffstat (limited to 'src/server.c')
-rw-r--r-- | src/server.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/server.c b/src/server.c index 0d3146fb..95b62e51 100644 --- a/src/server.c +++ b/src/server.c @@ -184,6 +184,7 @@ static void daemonize(void) { static server *server_init(void) { int i; + FILE *frandom = NULL; server *srv = calloc(1, sizeof(*srv)); assert(srv); @@ -224,6 +225,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; |