X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Fproc.c;h=a5afb5011cb1c468732561d5944fa9f685c1c4e4;hb=43fb18f2f5a506c4d78967e4b6e961b7339c98dc;hp=7addb47ef30c804e889b6a49d390e2505ae8e1b2;hpb=30796698a9fca0037ea48f70ceafac1e783d06fb;p=ngircd-alex.git diff --git a/src/ngircd/proc.c b/src/ngircd/proc.c index 7addb47e..a5afb501 100644 --- a/src/ngircd/proc.c +++ b/src/ngircd/proc.c @@ -50,7 +50,9 @@ GLOBAL pid_t Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout) { pid_t pid; +#ifndef HAVE_ARC4RANDOM unsigned int seed; +#endif assert(proc != NULL); assert(pipefds != NULL); @@ -62,7 +64,9 @@ Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout return -1; } +#ifndef HAVE_ARC4RANDOM seed = (unsigned int)rand(); +#endif pid = fork(); switch (pid) { case -1: @@ -73,7 +77,12 @@ Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout return -1; case 0: /* New child process: */ +#ifdef HAVE_ARC4RANDOM_STIR + arc4random_stir(); +#endif +#ifndef HAVE_ARC4RANDOM srand(seed ^ (unsigned int)time(NULL) ^ getpid()); +#endif Signals_Exit(); signal(SIGTERM, Proc_GenericSignalHandler); signal(SIGALRM, Proc_GenericSignalHandler); @@ -154,7 +163,10 @@ Proc_Read(PROC_STAT *proc, void *buffer, size_t buflen) GLOBAL void Proc_Close(PROC_STAT *proc) { - io_close(proc->pipe_fd); + /* Close socket, if it exists */ + if (proc->pipe_fd >= 0) + io_close(proc->pipe_fd); + Proc_InitStruct(proc); }