]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
If /dev/arandom exists (OpenBSD), use it instead of /dev/urandom.
authorTimo Sirainen <tss@iki.fi>
Mon, 4 May 2009 02:04:39 +0000 (22:04 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 4 May 2009 02:04:39 +0000 (22:04 -0400)
--HG--
branch : HEAD

configure.in
src/lib/randgen.c

index 61ef0ef817e926b81acbf3db2e5816c189ad666c..04fdf348825d8e2197f783242a1840059eaea700 100644 (file)
@@ -853,14 +853,24 @@ fi
 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"
index 29936c9204cb4432080422c355a31c4fed72d848..8d2ca36553f5f80bbac4f736cfdbb55436fd3f86 100644 (file)
@@ -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");
                }
        }