Only use /dev/urandom if --enable-urandom configure arg is used, since current impl falls over on HP-UX & Solaris 10 SPARC & possibly elsewhere

This commit is contained in:
Brian Cox 2017-09-05 19:14:27 -07:00
parent 1566771be0
commit a56bae5397
6 changed files with 28 additions and 3 deletions

View File

@ -6,6 +6,9 @@
/* Compile with debug code */ /* Compile with debug code */
#undef DEBUG #undef DEBUG
/* Enable use of /dev/urandom */
#undef ENABLE_DEV_URANDOM
/* this is the prefix for STL exception functions */ /* this is the prefix for STL exception functions */
#undef EXCEPTION_NAMESPACE #undef EXCEPTION_NAMESPACE

14
configure vendored
View File

@ -752,6 +752,7 @@ enable_static
enable_debug enable_debug
enable_coverage enable_coverage
enable_profiling enable_profiling
enable_urandom
enable_dependency_tracking enable_dependency_tracking
enable_commoncrypto enable_commoncrypto
enable_iconv enable_iconv
@ -1399,6 +1400,7 @@ Optional Features:
--enable-debug compile with debuging enabled --enable-debug compile with debuging enabled
--enable-coverage enable code coverage --enable-coverage enable code coverage
--enable-profiling enable profiling --enable-profiling enable profiling
--enable-urandom use /dev/urandom
--enable-dependency-tracking --enable-dependency-tracking
do not reject slow dependency extractors do not reject slow dependency extractors
--disable-dependency-tracking --disable-dependency-tracking
@ -3525,6 +3527,18 @@ then
LDFLAGS="${LDFLAGS} -pg" LDFLAGS="${LDFLAGS} -pg"
fi fi
# Check whether --enable-urandom was given.
if test "${enable_urandom+set}" = set; then :
enableval=$enable_urandom;
fi
if test "x$enable_urandom" = xyes
then
$as_echo "#define ENABLE_DEV_URANDOM 1" >>confdefs.h
fi
ac_ext=c ac_ext=c
ac_cpp='$CPP $CPPFLAGS' ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'

View File

@ -60,6 +60,12 @@ then
LDFLAGS="${LDFLAGS} -pg" LDFLAGS="${LDFLAGS} -pg"
fi fi
AC_ARG_ENABLE(urandom, [ --enable-urandom use /dev/urandom])
if test "x$enable_urandom" = xyes
then
AC_DEFINE(ENABLE_DEV_URANDOM, 1, [Enable use of /dev/urandom])
fi
dnl ################### dnl ###################
dnl Checks for programs dnl Checks for programs
dnl ################### dnl ###################

View File

@ -320,6 +320,8 @@
// which uses this syntax for UNC paths. So we'll allow leading double slashes there, but // which uses this syntax for UNC paths. So we'll allow leading double slashes there, but
// continue removing them on all other platforms // continue removing them on all other platforms
#define USE_DEV_URANDOM (HAVE_DEV_URANDOM && ENABLE_DEV_URANDOM)
//============================================================================= //=============================================================================
// Miscellaneous // Miscellaneous
// //

View File

@ -1241,7 +1241,7 @@ cHashedKey192::~cHashedKey192()
///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////
#if HAVE_DEV_URANDOM #if USE_DEV_URANDOM
static bool randomize_by_device(const char* device_name, int8* destbuf, int len) static bool randomize_by_device(const char* device_name, int8* destbuf, int len)
{ {
static int rng_device = -1; static int rng_device = -1;
@ -1267,7 +1267,7 @@ static bool gRandomizeBytesSeeded = false;
void RandomizeBytes(int8* destbuf, int len) void RandomizeBytes(int8* destbuf, int len)
{ {
#if HAVE_DEV_URANDOM #if USE_DEV_URANDOM
if (randomize_by_device("/dev/urandom", destbuf, len)) if (randomize_by_device("/dev/urandom", destbuf, len))
return; return;

View File

@ -91,7 +91,7 @@ AlignMe<ALIGN_SIZE>::AlignMe()
// to have any need for that behavior, which begs the question of why // to have any need for that behavior, which begs the question of why
// this test exists in the first place. // this test exists in the first place.
// -bcox // -bcox
#if (!IS_HPUX) #if (!IS_HPUX && !IS_SOLARIS) //Turns out Solaris SPARC is unhappy with this test too, btw
TCOUT << _T("Testing alignment of size ") << ALIGN_SIZE << std::endl; TCOUT << _T("Testing alignment of size ") << ALIGN_SIZE << std::endl;
// access a double in the byte array to see if it is aligned. if it isn't and the CPU // access a double in the byte array to see if it is aligned. if it isn't and the CPU