diff options
author | Werner Koch <[email protected]> | 1999-02-26 16:59:48 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 1999-02-26 16:59:48 +0000 |
commit | 694099b9af96d53ad4a4f9bc70e08c2f393f9f4e (patch) | |
tree | ff5ddc557b85093cbf4076374bd43b2e958ce804 /cipher/rndegd.c | |
parent | See ChangeLog: Thu Feb 25 18:47:39 CET 1999 Werner Koch (diff) | |
download | gnupg-694099b9af96d53ad4a4f9bc70e08c2f393f9f4e.tar.gz gnupg-694099b9af96d53ad4a4f9bc70e08c2f393f9f4e.zip |
See ChangeLog: Fri Feb 26 17:55:41 CET 1999 Werner Koch
Diffstat (limited to '')
-rw-r--r-- | cipher/rndegd.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/cipher/rndegd.c b/cipher/rndegd.c index 15aa38d8d..6cdc4dda7 100644 --- a/cipher/rndegd.c +++ b/cipher/rndegd.c @@ -125,7 +125,7 @@ gather_random( void (*add)(const void*, size_t, int), int requester, "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n"), length ); - warn = 0; /* <--- set to 1 to display the message only once */ + warn = 1; continue; } else if( rc == -1 ) { @@ -140,17 +140,23 @@ gather_random( void (*add)(const void*, size_t, int), int requester, /* process reply */ if( n == -1 ) g10_log_error("read error on EGD: %s\n", strerror(errno)); - else if( n < 2 ) + else if( cmd == 2 && n != nbytes ) { + g10_log_error("bad EGD reply: too short %d/%d\n", nbytes, n ); + } + else if( cmd == 2 ) { + (*add)( buffer, n, requester ); + length -= n; + } + else if( !n ) g10_log_error("bad EGD reply: too short\n"); - else if( buffer[0] != cmd ) - g10_log_error("bad EGD reply: cmd mismatch %d/%d\n", - cmd, *buffer ); - else if( buffer[1] != nbytes ) + else if( buffer[0] != n-1 ) g10_log_error("bad EGD reply: count mismatch %d/%d\n", - nbytes, buffer[1] ); + n-1, buffer[0] ); + else if( n==1 ) + g10_log_info("no data from EGD\n"); else { - n -= 2; - (*add)( buffer+2, n, requester ); + n -= 1; + (*add)( buffer+1, n, requester ); length -= n; } } |