From d71b12ee5b6b0283ce41ff2d9c8864c6aadc6bbe Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Mon, 22 Nov 1999 15:24:34 +1100 Subject: - Fix EGD problems (Thanks to Ben Taylor ) - Retry /dev/urandom reads interrupted by signal (report from Robert Hardy ) --- ChangeLog | 3 +++ README | 1 + helper.c | 12 +++++++----- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index eb79657af..d7ea7b761 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 ) + - Retry /dev/urandom reads interrupted by signal (report from + Robert Hardy ) 19991121 - OpenBSD CVS Changes: diff --git a/README b/README index abeec979f..f0cf0d8b0 100644 --- a/README +++ b/README @@ -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 - Solaris debugging and fixes Chip Salzenberg - Assorted patches Dan Brosemer - Autoconf and build fixes & Debian scripts Jim Knoble - RPM spec file fixes diff --git a/helper.c b/helper.c index 28fe04219..47e797b6c 100644 --- a/helper.c +++ b/helper.c @@ -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); -- cgit v1.2.3