# HG changeset patch # User Timo Sirainen # Date 1241402679 14400 # Node ID e569d73e905601959867e2c94c6583a76bdf8072 # Parent e9e8446ae0ec05b16e4cfa17541c088e5b20457f If /dev/arandom exists (OpenBSD), use it instead of /dev/urandom. 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_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 -#ifdef HAVE_DEV_URANDOM - -#define URANDOM_PATH "/dev/urandom" +#ifdef DEV_URANDOM_PATH #include "fd-close-on-exec.h" #include @@ -28,9 +26,9 @@ 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 @@ 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"); } }