diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | README | 1 | ||||
-rw-r--r-- | helper.c | 12 |
3 files changed, 11 insertions, 5 deletions
@@ -10,6 +10,9 @@ - Tidy RCSIDs of bsd-*.c - Added autoconf test and macro to deal with old PAM libraries pam_strerror definition (one arg vs two). + - Fix EGD problems (Thanks to Ben Taylor <bent@clark.net>) + - Retry /dev/urandom reads interrupted by signal (report from + Robert Hardy <rhardy@webcon.net>) 19991121 - OpenBSD CVS Changes: @@ -52,6 +52,7 @@ Credits - Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt, and Dug Song - Creators of OpenSSH 'jonchen' - the original author of PAM support of SSH +Ben Taylor <bent@clark.net> - Solaris debugging and fixes Chip Salzenberg <chip@valinux.com> - Assorted patches Dan Brosemer <odin@linuxfreak.com> - Autoconf and build fixes & Debian scripts Jim Knoble <jmknoble@pobox.com> - RPM spec file fixes @@ -100,8 +100,7 @@ void get_random_bytes(unsigned char *buf, int len) if (sizeof(RANDOM_POOL) > sizeof(addr.sun_path)) fatal("Random pool path is too long"); - strncpy(addr.sun_path, RANDOM_POOL, sizeof(addr.sun_path - 1)); - addr.sun_path[sizeof(addr.sun_path - 1)] = '\0'; + strcpy(addr.sun_path, RANDOM_POOL); addr_len = offsetof(struct sockaddr_un, sun_path) + sizeof(RANDOM_POOL); @@ -130,9 +129,12 @@ void get_random_bytes(unsigned char *buf, int len) #endif /* HAVE_EGD */ - c = read(random_pool, buf, len); - if (c == -1) - fatal("Couldn't read from random pool \"%s\": %s", RANDOM_POOL, strerror(errno)); + do { + c = read(random_pool, buf, len); + + if ((c == -1) && (errno != EINTR)) + fatal("Couldn't read from random pool \"%s\": %s", RANDOM_POOL, strerror(errno)); + } while (c == -1); if (c != len) fatal("Short read from random pool \"%s\"", RANDOM_POOL); |