From: Timo Sirainen Date: Mon, 4 May 2009 02:04:39 +0000 (-0400) Subject: If /dev/arandom exists (OpenBSD), use it instead of /dev/urandom. X-Git-Tag: 2.0.alpha1~848 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=56a057475a12ef304f111f56fdc32466c6dc6e0e;p=thirdparty%2Fdovecot%2Fcore.git If /dev/arandom exists (OpenBSD), use it instead of /dev/urandom. --HG-- branch : HEAD --- diff --git a/configure.in b/configure.in index 61ef0ef817..04fdf34882 100644 --- a/configure.in +++ b/configure.in @@ -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" diff --git a/src/lib/randgen.c b/src/lib/randgen.c index 29936c9204..8d2ca36553 100644 --- a/src/lib/randgen.c +++ b/src/lib/randgen.c @@ -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 @@ 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"); } }