[svn-commits] file: trunk r76296 - in /trunk: ./ include/asterisk/ main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Sat Jul 21 09:39:52 CDT 2007


Author: file
Date: Sat Jul 21 09:39:52 2007
New Revision: 76296

URL: http://svn.digium.com/view/asterisk?view=rev&rev=76296
Log:
Add support for using /dev/urandom to get random numbers on systems that support it.

Modified:
    trunk/configure
    trunk/configure.ac
    trunk/include/asterisk/autoconfig.h.in
    trunk/include/asterisk/utils.h
    trunk/main/utils.c

Modified: trunk/configure
URL: http://svn.digium.com/view/asterisk/trunk/configure?view=diff&rev=76296&r1=76295&r2=76296
==============================================================================
--- trunk/configure (original)
+++ trunk/configure Sat Jul 21 09:39:52 2007
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 74575 .
+# From configure.ac Revision: 75259 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61.
 #
@@ -12127,11 +12127,13 @@
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stdio.h>
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
 int
 main ()
 {
-return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
   ;
   return 0;
 }
@@ -12171,11 +12173,13 @@
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #define _LARGEFILE_SOURCE 1
-#include <stdio.h>
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
 int
 main ()
 {
-return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
   ;
   return 0;
 }
@@ -15108,6 +15112,32 @@
 
 fi
 done
+
+
+{ echo "$as_me:$LINENO: checking for /dev/urandom" >&5
+echo $ECHO_N "checking for /dev/urandom... $ECHO_C" >&6; }
+if test "${ac_cv_file__dev_urandom+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  test "$cross_compiling" = yes &&
+  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+if test -r "/dev/urandom"; then
+  ac_cv_file__dev_urandom=yes
+else
+  ac_cv_file__dev_urandom=no
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_file__dev_urandom" >&5
+echo "${ECHO_T}$ac_cv_file__dev_urandom" >&6; }
+if test $ac_cv_file__dev_urandom = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DEV_URANDOM 1
+_ACEOF
+
+fi
 
 
 

Modified: trunk/configure.ac
URL: http://svn.digium.com/view/asterisk/trunk/configure.ac?view=diff&rev=76296&r1=76295&r2=76296
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Sat Jul 21 09:39:52 2007
@@ -285,6 +285,8 @@
 
 # some systems already have gethostbyname_r so we don't need to build ours in main/utils.c
 AC_CHECK_FUNCS([gethostbyname_r])
+
+AC_CHECK_FILE(/dev/urandom, AC_DEFINE([HAVE_DEV_URANDOM], 1, [Define to 1 if your system has /dev/urandom.]))
 
 AST_C_DEFINE_CHECK([PTHREAD_RWLOCK_INITIALIZER], [PTHREAD_RWLOCK_INITIALIZER], [pthread.h])
 AST_C_DEFINE_CHECK([PTHREAD_RWLOCK_PREFER_WRITER_NP], [PTHREAD_RWLOCK_PREFER_WRITER_NP], [pthread.h])

Modified: trunk/include/asterisk/autoconfig.h.in
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/autoconfig.h.in?view=diff&rev=76296&r1=76295&r2=76296
==============================================================================
--- trunk/include/asterisk/autoconfig.h.in (original)
+++ trunk/include/asterisk/autoconfig.h.in Sat Jul 21 09:39:52 2007
@@ -94,6 +94,9 @@
 
 /* Define to indicate the ${CURSES_DESCRIP} library version */
 #undef HAVE_CURSES_VERSION
+
+/* Define to 1 if your system has /dev/urandom. */
+#undef HAVE_DEV_URANDOM
 
 /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
    */

Modified: trunk/include/asterisk/utils.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/utils.h?view=diff&rev=76296&r1=76295&r2=76296
==============================================================================
--- trunk/include/asterisk/utils.h (original)
+++ trunk/include/asterisk/utils.h Sat Jul 21 09:39:52 2007
@@ -393,11 +393,7 @@
 */
 char *ast_process_quotes_and_slashes(char *start, char find, char replace_with);
 
-#ifdef linux
-#define ast_random random
-#else
 long int ast_random(void);
-#endif
 
 /*! 
  * \brief free() wrapper

Modified: trunk/main/utils.c
URL: http://svn.digium.com/view/asterisk/trunk/main/utils.c?view=diff&rev=76296&r1=76295&r2=76296
==============================================================================
--- trunk/main/utils.c (original)
+++ trunk/main/utils.c Sat Jul 21 09:39:52 2007
@@ -39,6 +39,10 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+
+#ifdef HAVE_DEV_URANDOM
+#include <fcntl.h>
+#endif
 
 #define AST_API_MODULE		/* ensure that inlinable API functions will be built in lock.h if required */
 #include "asterisk/lock.h"
@@ -501,8 +505,15 @@
 	return inet_ntop(AF_INET, &ia, buf, INET_ADDRSTRLEN);
 }
 
+#ifdef HAVE_DEV_URANDOM
+static int dev_urandom_fd;
+#endif
+
 int ast_utils_init(void)
 {
+#ifdef HAVE_DEV_URANDOM
+	dev_urandom_fd = open("/dev/urandom", O_RDONLY);
+#endif
 	base64_init();
 	return 0;
 }
@@ -807,19 +818,30 @@
 
 /*! \brief glibc puts a lock inside random(3), so that the results are thread-safe.
  * BSD libc (and others) do not. */
+
 #ifndef linux
-
 AST_MUTEX_DEFINE_STATIC(randomlock);
+#endif
 
 long int ast_random(void)
 {
 	long int res;
+#ifdef HAVE_DEV_URANDOM
+	if (dev_urandom_fd >= 0) {
+		int read_res = read(dev_urandom_fd, &res, sizeof(res));
+		if (read_res > 0)
+			return res;
+	}
+#endif
+#ifdef linux
+	res = random();
+#else
 	ast_mutex_lock(&randomlock);
 	res = random();
 	ast_mutex_unlock(&randomlock);
+#endif
 	return res;
 }
-#endif
 
 char *ast_process_quotes_and_slashes(char *start, char find, char replace_with)
 {




More information about the svn-commits mailing list