- Fix EGD problems (Thanks to Ben Taylor <bent@clark.net>)
 - Retry /dev/urandom reads interrupted by signal (report from
   Robert Hardy <rhardy@webcon.net>)
diff --git a/ChangeLog b/ChangeLog
index eb79657..d7ea7b7 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 <bent@clark.net>)
+ - Retry /dev/urandom reads interrupted by signal (report from 
+   Robert Hardy <rhardy@webcon.net>)
 
 19991121
  - OpenBSD CVS Changes:
diff --git a/README b/README
index abeec97..f0cf0d8 100644
--- a/README
+++ b/README
@@ -52,6 +52,7 @@
 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
diff --git a/helper.c b/helper.c
index 28fe042..47e797b 100644
--- a/helper.c
+++ b/helper.c
@@ -100,8 +100,7 @@
 	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 @@
 
 #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);