Simon Josefsson <[EMAIL PROTECTED]> writes: > Ralf Wildenhues <[EMAIL PROTECTED]> writes: > >> It would be great if the gc.m4 module could be taught not to fail when >> no random devices exist (as seen on hppa2.0-hp-hpux10.20). Passing >> >> --disable-random-device --disable-pseudo-random-device \ >> --disable-nonce-device >> >> did not help. libgcrypt was not installed either. >> >> This would help automated testing of gnulib mega test; faking a cross >> compile helps but is so different as to be an actually different test. >> >> >> More generally, I think it would be good if all Gnulib modules allowed >> at least some way of invocation that allowed configure to continue even >> if the tested resources are not present; an extra RUN-IF-FAIL argument >> (possibly defaulting to AC_MSG_ERROR or so) could serve well, for >> example. > > I agree. The functions using those random devices can return an > error, so I suggest turning the errors into warnings, and make the > code properly return an error if the device is unavailable. I think > the code already does this though.
I have installed the patch below. It separate the random stuff into a new module, gc-random. It also turn the errors into warnings. What do you think? 2006-03-07 Simon Josefsson <[EMAIL PROTECTED]> * gc-random.m4: New file, mostly from gc.m4. Warn instead of error on missing devices (the functions will return an error). * gc.m4: Move random stuff to gc-random.m4 2006-03-07 Simon Josefsson <[EMAIL PROTECTED]> * modules/gc-random: New file. 2006-03-07 Simon Josefsson <[EMAIL PROTECTED]> * gc-libgcrypt.c, gc-gnulib.c: Use GC_USE_RANDOM. Index: m4/gc.m4 =================================================================== RCS file: /sources/gnulib/gnulib/m4/gc.m4,v retrieving revision 1.4 diff -u -p -r1.4 gc.m4 --- m4/gc.m4 22 Oct 2005 15:37:28 -0000 1.4 +++ m4/gc.m4 7 Mar 2006 13:15:33 -0000 @@ -1,5 +1,5 @@ -# gc.m4 serial 1 -dnl Copyright (C) 2005 Free Software Foundation, Inc. +# gc.m4 serial 2 +dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -17,77 +17,6 @@ AC_DEFUN([gl_GC], AC_LIBOBJ([gc-libgcrypt]) else AC_LIBOBJ([gc-gnulib]) - - # Devices with randomness. - # FIXME: Are these the best defaults? - - case "${target}" in - *-openbsd*) - NAME_OF_RANDOM_DEVICE="/dev/srandom" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/prandom" - NAME_OF_NONCE_DEVICE="/dev/urandom" - ;; - - *-netbsd*) - NAME_OF_RANDOM_DEVICE="/dev/srandom" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" - NAME_OF_NONCE_DEVICE="/dev/urandom" - ;; - - *-solaris* | *-irix* | *-dec-osf* ) - NAME_OF_RANDOM_DEVICE="/dev/random" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/random" - NAME_OF_NONCE_DEVICE="/dev/random" - ;; - - *) - NAME_OF_RANDOM_DEVICE="/dev/random" - NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" - NAME_OF_NONCE_DEVICE="/dev/urandom" - ;; - esac - - AC_MSG_CHECKING([device with (strong) random data...]) - AC_ARG_ENABLE(random-device, - AC_HELP_STRING([--enable-random-device], - [device with (strong) randomness (for Nettle)]), - test "$enableval" != "no" && NAME_OF_RANDOM_DEVICE=$enableval) - AC_MSG_RESULT($NAME_OF_RANDOM_DEVICE) - - AC_MSG_CHECKING([device with pseudo random data...]) - AC_ARG_ENABLE(pseudo-random-device, - AC_HELP_STRING([--enable-pseudo-random-device], - [device with pseudo randomness (for Nettle)]), - test "$enableval" != "no" && NAME_OF_PSEUDO_RANDOM_DEVICE=$enableval) - AC_MSG_RESULT($NAME_OF_PSEUDO_RANDOM_DEVICE) - - AC_MSG_CHECKING([device with unpredictable data for nonces...]) - AC_ARG_ENABLE(nonce-device, - AC_HELP_STRING([--enable-nonce-device], - [device with unpredictable nonces (for Nettle)]), - test "$enableval" != "no" && NAME_OF_NONCE_DEVICE=$enableval) - AC_MSG_RESULT($NAME_OF_NONCE_DEVICE) - - if test "$cross_compiling" != yes; then - AC_CHECK_FILE($NAME_OF_RANDOM_DEVICE,, - AC_MSG_ERROR([[device for (strong) random data `$NAME_OF_RANDOM_DEVICE' does not exist]])) - AC_CHECK_FILE($NAME_OF_PSEUDO_RANDOM_DEVICE,, - AC_MSG_ERROR([[device for pseudo-random data `$NAME_OF_PSEUDO_RANDOM_DEVICE' does not exist]])) - AC_CHECK_FILE($NAME_OF_NONCE_DEVICE,, - AC_MSG_ERROR([[device for unpredictable nonces `$NAME_OF_NONCE_DEVICE' does not exist]])) - else - AC_MSG_NOTICE([[Cross compiling, assuming random devices exists...]]) - fi - - # FIXME: Open+read 42 bytes+close twice and compare data. Should differ. - - AC_DEFINE_UNQUOTED(NAME_OF_RANDOM_DEVICE, "$NAME_OF_RANDOM_DEVICE", - [defined to the name of the (strong) random device]) - AC_DEFINE_UNQUOTED(NAME_OF_PSEUDO_RANDOM_DEVICE, - "$NAME_OF_PSEUDO_RANDOM_DEVICE", - [defined to the name of the pseudo random device]) - AC_DEFINE_UNQUOTED(NAME_OF_NONCE_DEVICE, "$NAME_OF_NONCE_DEVICE", - [defined to the name of the unpredictable nonce device]) fi ]) Index: m4/gc-random.m4 =================================================================== RCS file: m4/gc-random.m4 diff -N m4/gc-random.m4 --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ m4/gc-random.m4 7 Mar 2006 13:15:33 -0000 @@ -0,0 +1,81 @@ +# gc-random.m4 serial 1 +dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_GC_RANDOM], +[ + # Devices with randomness. + # FIXME: Are these the best defaults? + + case "${target}" in + *-openbsd*) + NAME_OF_RANDOM_DEVICE="/dev/srandom" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/prandom" + NAME_OF_NONCE_DEVICE="/dev/urandom" + ;; + + *-netbsd*) + NAME_OF_RANDOM_DEVICE="/dev/srandom" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" + NAME_OF_NONCE_DEVICE="/dev/urandom" + ;; + + *-solaris* | *-irix* | *-dec-osf* ) + NAME_OF_RANDOM_DEVICE="/dev/random" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/random" + NAME_OF_NONCE_DEVICE="/dev/random" + ;; + + *) + NAME_OF_RANDOM_DEVICE="/dev/random" + NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" + NAME_OF_NONCE_DEVICE="/dev/urandom" + ;; + esac + + AC_MSG_CHECKING([device with (strong) random data...]) + AC_ARG_ENABLE(random-device, + AC_HELP_STRING([--enable-random-device], + [device with (strong) randomness (for Nettle)]), + test "$enableval" != "no" && NAME_OF_RANDOM_DEVICE=$enableval) + AC_MSG_RESULT($NAME_OF_RANDOM_DEVICE) + + AC_MSG_CHECKING([device with pseudo random data...]) + AC_ARG_ENABLE(pseudo-random-device, + AC_HELP_STRING([--enable-pseudo-random-device], + [device with pseudo randomness (for Nettle)]), + test "$enableval" != "no" && NAME_OF_PSEUDO_RANDOM_DEVICE=$enableval) + AC_MSG_RESULT($NAME_OF_PSEUDO_RANDOM_DEVICE) + + AC_MSG_CHECKING([device with unpredictable data for nonces...]) + AC_ARG_ENABLE(nonce-device, + AC_HELP_STRING([--enable-nonce-device], + [device with unpredictable nonces (for Nettle)]), + test "$enableval" != "no" && NAME_OF_NONCE_DEVICE=$enableval) + AC_MSG_RESULT($NAME_OF_NONCE_DEVICE) + + if test "$cross_compiling" != yes; then + AC_CHECK_FILE($NAME_OF_RANDOM_DEVICE,, + AC_MSG_WARN([[device for (strong) random data `$NAME_OF_RANDOM_DEVICE' does not exist]])) + AC_CHECK_FILE($NAME_OF_PSEUDO_RANDOM_DEVICE,, + AC_MSG_WARN([[device for pseudo-random data `$NAME_OF_PSEUDO_RANDOM_DEVICE' does not exist]])) + AC_CHECK_FILE($NAME_OF_NONCE_DEVICE,, + AC_MSG_WARN([[device for unpredictable nonces `$NAME_OF_NONCE_DEVICE' does not exist]])) + else + AC_MSG_NOTICE([[Cross compiling, assuming random devices exists on the target host...]]) + fi + + # FIXME?: Open+read 42 bytes+close twice and compare data. Should differ. + + AC_DEFINE_UNQUOTED(NAME_OF_RANDOM_DEVICE, "$NAME_OF_RANDOM_DEVICE", + [defined to the name of the (strong) random device]) + AC_DEFINE_UNQUOTED(NAME_OF_PSEUDO_RANDOM_DEVICE, + "$NAME_OF_PSEUDO_RANDOM_DEVICE", + [defined to the name of the pseudo random device]) + AC_DEFINE_UNQUOTED(NAME_OF_NONCE_DEVICE, "$NAME_OF_NONCE_DEVICE", + [defined to the name of the unpredictable nonce device]) + + AC_DEFINE(GC_USE_RANDOM, 1, [Define if you want to support RNG through GC.]) +]) Index: modules/gc-random =================================================================== RCS file: modules/gc-random diff -N modules/gc-random --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ modules/gc-random 7 Mar 2006 13:15:33 -0000 @@ -0,0 +1,22 @@ +Description: +Generic crypto random number functions. + +Files: +m4/gc-random.m4 + +Depends-on: +gc + +configure.ac: +gl_GC_RANDOM + +Makefile.am: + +Include: +"gc.h" + +License: +LGPL + +Maintainer: +Simon Josefsson Index: lib/gc-gnulib.c =================================================================== RCS file: /sources/gnulib/gnulib/lib/gc-gnulib.c,v retrieving revision 1.16 diff -u -p -r1.16 gc-gnulib.c --- lib/gc-gnulib.c 28 Oct 2005 12:13:27 -0000 1.16 +++ lib/gc-gnulib.c 7 Mar 2006 13:15:33 -0000 @@ -1,5 +1,5 @@ -/* gc-gl-common.c --- Common gnulib internal crypto interface functions - * Copyright (C) 2002, 2003, 2004, 2005 Simon Josefsson +/* gc-gnulib.c --- Common gnulib internal crypto interface functions + * Copyright (C) 2002, 2003, 2004, 2005, 2006 Simon Josefsson * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published @@ -31,11 +31,13 @@ #include <string.h> /* For randomize. */ -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <errno.h> +#ifdef GC_USE_RANDOM +# include <unistd.h> +# include <sys/types.h> +# include <sys/stat.h> +# include <fcntl.h> +# include <errno.h> +#endif /* Hashes. */ #ifdef GC_USE_MD2 @@ -80,6 +82,8 @@ gc_done (void) return; } +#ifdef GC_USE_RANDOM + /* Randomness. */ static Gc_rc @@ -152,6 +156,8 @@ gc_random (char *data, size_t datalen) return randomize (2, data, datalen); } +#endif + /* Memory allocation. */ void Index: lib/gc-libgcrypt.c =================================================================== RCS file: /sources/gnulib/gnulib/lib/gc-libgcrypt.c,v retrieving revision 1.14 diff -u -p -r1.14 gc-libgcrypt.c --- lib/gc-libgcrypt.c 28 Oct 2005 12:13:27 -0000 1.14 +++ lib/gc-libgcrypt.c 7 Mar 2006 13:15:33 -0000 @@ -1,5 +1,5 @@ /* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC. - * Copyright (C) 2002, 2003, 2004, 2005 Simon Josefsson + * Copyright (C) 2002, 2003, 2004, 2005, 2006 Simon Josefsson * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published @@ -65,6 +65,8 @@ gc_done (void) return; } +#ifdef GC_USE_RANDOM + /* Randomness. */ Gc_rc @@ -88,6 +90,8 @@ gc_random (char *data, size_t datalen) return GC_OK; } +#endif + /* Memory allocation. */ void _______________________________________________ bug-gnulib mailing list bug-gnulib@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gnulib