From c38773407cb4d8b06ad2e20ef15e7e0e6391420b Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Tue, 25 Nov 2014 11:37:21 +0200 Subject: [PATCH] Switched to /dev/random instead of time(NULL) in secrets.c --- server/core/secrets.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/server/core/secrets.c b/server/core/secrets.c index 4f98e81f7..57325a5ff 100644 --- a/server/core/secrets.c +++ b/server/core/secrets.c @@ -227,8 +227,9 @@ static int reported = 0; */ int secrets_writeKeys(char *secret_file) { -int fd; -MAXKEYS key; +int fd,randfd; +unsigned int randval; +MAXKEYS key; /* Open for writing | Create | Truncate the file for writing */ if ((fd = open(secret_file, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR)) < 0) @@ -243,7 +244,28 @@ MAXKEYS key; return 1; } - srand(time(NULL)); + /* Open for writing | Create | Truncate the file for writing */ + if ((randfd = open("/dev/random", O_RDONLY)) < 0) + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Error : failed opening /dev/random. Error %d, %s.", + errno, + strerror(errno)))); + return 1; + } + + if(read(randfd,(void*)&randval,sizeof(unsigned int)) < 1) + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Error : failed to read /dev/random."))); + close(randfd); + return 1; + } + + close(randfd); + srand(randval); secrets_random_str(key.enckey, MAXSCALE_KEYLEN); secrets_random_str(key.initvector, MAXSCALE_IV_LEN);