Mercurial > dropbear
diff random.c @ 189:06e326daf16a
merge of 6b56bdff53b47ae7366d93b496ce353d9e3753dc
and b68c53583ba80ad14fd0ba70ff26ea3dbd8e8823
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Thu, 05 May 2005 04:00:10 +0000 |
parents | c9483550701b 5ccad7634388 |
children | 65585699d980 |
line wrap: on
line diff
--- a/random.c Thu May 05 03:58:21 2005 +0000 +++ b/random.c Thu May 05 04:00:10 2005 +0000 @@ -51,6 +51,7 @@ static void readrand(unsigned char* buf, unsigned int buflen) { + static int already_blocked = 0; int readfd; unsigned int readpos; int readlen; @@ -93,6 +94,24 @@ /* read the actual random data */ readpos = 0; do { + if (!already_blocked) + { + int ret; + struct timeval timeout; + fd_set read_fds; + + timeout.tv_sec = 2; /* two seconds should be enough */ + timeout.tv_usec = 0; + + FD_ZERO(&read_fds); + FD_SET(readfd, &read_fds); + ret = select(readfd + 1, &read_fds, NULL, NULL, &timeout); + if (ret == 0) + { + dropbear_log(LOG_INFO, "Warning: Reading the random source seems to have blocked.\nIf you experience problems, you probably need to find a better entropy source."); + already_blocked = 1; + } + } readlen = read(readfd, &buf[readpos], buflen - readpos); if (readlen <= 0) { if (readlen < 0 && errno == EINTR) {