dovecot-1.2: If /dev/arandom exists (OpenBSD), use it instead of...

dovecot at dovecot.org dovecot at dovecot.org
Mon May 4 05:04:45 EEST 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/e569d73e9056
changeset: 9014:e569d73e9056
user:      Timo Sirainen <tss at iki.fi>
date:      Sun May 03 22:04:39 2009 -0400
description:
If /dev/arandom exists (OpenBSD), use it instead of /dev/urandom.

diffstat:

2 files changed, 20 insertions(+), 12 deletions(-)
configure.in      |   18 ++++++++++++++----
src/lib/randgen.c |   14 ++++++--------

diffs (75 lines):

diff -r e9e8446ae0ec -r e569d73e9056 configure.in
--- a/configure.in	Sun May 03 21:35:28 2009 -0400
+++ b/configure.in	Sun May 03 22:04:39 2009 -0400
@@ -886,14 +886,24 @@ AC_DEFINE_UNQUOTED(MEM_ALIGN_SIZE, $mem_
 AC_DEFINE_UNQUOTED(MEM_ALIGN_SIZE, $mem_align, Required memory alignment)
 
 dnl * find random source
-AC_MSG_CHECKING([for /dev/urandom])
-if test -c /dev/urandom || test -s /dev/urandom; then
+AC_MSG_CHECKING([for OpenBSD /dev/arandom])
+if test -c /dev/arandom; then
   AC_MSG_RESULT(yes)
-  AC_DEFINE(HAVE_DEV_URANDOM,, Define if you have /dev/urandom)
+  AC_DEFINE(DEV_URANDOM_PATH, "/dev/arandom", Path to /dev/urandom)
   have_random_source=yes
 else
   AC_MSG_RESULT(no)
-
+  AC_MSG_CHECKING([for /dev/urandom])
+  if test -c /dev/urandom || test -s /dev/urandom; then
+    AC_MSG_RESULT(yes)
+    AC_DEFINE(DEV_URANDOM_PATH, "/dev/urandom", Path to /dev/urandom)
+    have_random_source=yes
+  else
+    AC_MSG_RESULT(no)
+  fi
+fi
+
+if test "$have_random_source" != "yes"; then
   AC_CHECK_HEADER(openssl/rand.h, [
     AC_DEFINE(HAVE_OPENSSL_RAND_H,, Define if you have openssl/rand.h)
     LIBS="$LIBS -lcrypto"
diff -r e9e8446ae0ec -r e569d73e9056 src/lib/randgen.c
--- a/src/lib/randgen.c	Sun May 03 21:35:28 2009 -0400
+++ b/src/lib/randgen.c	Sun May 03 22:04:39 2009 -0400
@@ -5,9 +5,7 @@
 
 #include <stdlib.h>
 
-#ifdef HAVE_DEV_URANDOM
-
-#define URANDOM_PATH "/dev/urandom"
+#ifdef DEV_URANDOM_PATH
 
 #include "fd-close-on-exec.h"
 #include <unistd.h>
@@ -28,9 +26,9 @@ void random_fill(void *buf, size_t size)
 		ret = read(urandom_fd, (char *) buf + pos, size - pos);
 		if (unlikely(ret <= 0)) {
 			if (ret == 0)
-				i_fatal("EOF when reading from "URANDOM_PATH);
+				i_fatal("EOF when reading from "DEV_URANDOM_PATH);
 			else if (errno != EINTR)
-				i_fatal("read("URANDOM_PATH") failed: %m");
+				i_fatal("read("DEV_URANDOM_PATH") failed: %m");
 		} else {
 			pos += ret;
 		}
@@ -44,13 +42,13 @@ void random_init(void)
 	if (init_refcount++ > 0)
 		return;
 
-	urandom_fd = open(URANDOM_PATH, O_RDONLY);
+	urandom_fd = open(DEV_URANDOM_PATH, O_RDONLY);
 	if (urandom_fd == -1) {
 		if (errno == ENOENT) {
-			i_fatal(URANDOM_PATH" doesn't exist, "
+			i_fatal(DEV_URANDOM_PATH" doesn't exist, "
 				"currently we require it");
 		} else {
-			i_fatal("Can't open "URANDOM_PATH": %m");
+			i_fatal("Can't open "DEV_URANDOM_PATH": %m");
 		}
 	}
 


More information about the dovecot-cvs mailing list