rpms/bash/devel bash-3.2-rng.patch,NONE,1.1 bash.spec,1.143,1.144

Pete Graner (pgraner) fedora-extras-commits at redhat.com
Wed Aug 15 16:47:55 UTC 2007


Author: pgraner

Update of /cvs/pkgs/rpms/bash/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv11686

Modified Files:
	bash.spec 
Added Files:
	bash-3.2-rng.patch 
Log Message:
* Wed Aug 15 2007 Pete Graner <pgraner at redhat.com> - 3.2-13
- Improve bash $RANDOM pseudo RNG (bug #234906)


bash-3.2-rng.patch:

--- NEW FILE bash-3.2-rng.patch ---
--- bash-3.2/configure.in.rng	2007-04-05 11:07:40.000000000 +0200
+++ bash-3.2/configure.in	2007-04-05 11:07:41.000000000 +0200
@@ -111,6 +111,7 @@
 AC_ARG_WITH(installed-readline, AC_HELP_STRING([--with-installed-readline], [use a version of the readline library that is already installed]), opt_with_installed_readline=$withval)
 AC_ARG_WITH(purecov, AC_HELP_STRING([--with-purecov], [configure to postprocess with pure coverage]), opt_purecov=$withval)
 AC_ARG_WITH(purify, AC_HELP_STRING([--with-purify], [configure to postprocess with purify]), opt_purify=$withval)
+AC_ARG_WITH(random, AC_HELP_STRING([--with-randomdev=path], [use specified random device instead of /dev/urandom]), opt_randomdev=$withval)
 
 if test "$opt_bash_malloc" = yes; then
 	MALLOC_TARGET=malloc
@@ -152,6 +153,15 @@
 	DEBUGGER_START_FILE=${ac_default_prefix}/share/bashdb/bashdb-main.inc
 fi
 
+if test "$opt_randomdev" = yes -o -z "$opt_randomdev"; then
+	opt_randomdev="/dev/urandom"
+elif test "$opt_randomdev" = no; then
+	opt_randomdev=
+fi
+if test -n "$opt_randomdev"; then
+	AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$opt_randomdev", [Random device path.])
+fi
+
 dnl optional shell features in config.h.in
 opt_minimal_config=no
 
@@ -708,6 +718,8 @@
 		setenv setlinebuf setlocale setvbuf siginterrupt strchr \
 		sysconf tcgetattr times ttyname tzset unsetenv)
 
+AC_CHECK_FUNCS(random srandom)
+
 AC_CHECK_FUNCS(vsnprintf snprintf vasprintf asprintf)
 AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit)
 AC_CHECK_FUNCS(getpwent getpwnam getpwuid)
--- bash-3.2/config.h.in.rng	2007-04-05 11:07:40.000000000 +0200
+++ bash-3.2/config.h.in	2007-04-05 11:07:41.000000000 +0200
@@ -203,6 +203,8 @@
 
 #define DEFAULT_MAIL_DIRECTORY "/var/spool/mail"
 
+#undef PATH_RANDOMDEV
+
 /* Characteristics of the system's header files and libraries that affect
    the compilation environment. */
 
@@ -815,6 +817,10 @@
 /* Define if you have the wcwidth function.  */
 #undef HAVE_WCWIDTH
 
+#undef HAVE_RANDOM
+
+#undef HAVE_SRANDOM
+
 /* Presence of certain system include files. */
 
 /* Define if you have the <arpa/inet.h> header file. */
--- bash-3.2/variables.c.rng	2006-09-08 19:33:32.000000000 +0200
+++ bash-3.2/variables.c	2007-04-05 11:53:03.000000000 +0200
@@ -42,6 +42,11 @@
 #include "bashansi.h"
 #include "bashintl.h"
 
+#if defined (PATH_RANDOMDEV)
+#  include <errno.h>
+#  include "filecntl.h"
+#endif
+
 #include "shell.h"
 #include "flags.h"
 #include "execute_cmd.h"
@@ -182,7 +187,8 @@
 static SHELL_VAR *init_seconds_var __P((void));
 
 static int brand __P((void));
-static void sbrand __P((unsigned long));		/* set bash random number generator. */
+static void sbrand __P((unsigned int));		/* set bash random number generator. */
+static void seed_random __P((void));                    /* seed the generator randomly */
 static SHELL_VAR *assign_random __P((SHELL_VAR *, char *, arrayind_t));
 static SHELL_VAR *get_random __P((SHELL_VAR *));
 
@@ -495,7 +501,7 @@
 #endif /* HISTORY */
 
   /* Seed the random number generator. */
-  sbrand (dollar_dollar_pid + shell_start_time);
+  seed_random();
 
   /* Handle some "special" variables that we may have inherited from a
      parent shell. */
@@ -1143,7 +1149,9 @@
 }
      
 /* The random number seed.  You can change this by setting RANDOM. */
+#if !defined (HAVE_RANDOM)
 static unsigned long rseed = 1;
+#endif
 static int last_random_value;
 static int seeded_subshell = 0;
 
@@ -1155,26 +1163,56 @@
 static int
 brand ()
 {
+#if defined (HAVE_RANDOM)
+  unsigned int rseed;
+  rseed = random();
+#else
   rseed = rseed * 1103515245 + 12345;
+#endif
   return ((unsigned int)((rseed >> 16) & 32767));	/* was % 32768 */
 }
-
 /* Set the random number generator seed to SEED. */
 static void
 sbrand (seed)
-     unsigned long seed;
+     unsigned int seed;
 {
+#if defined (HAVE_RANDOM)
+  srandom((unsigned int)seed);
+#else
   rseed = seed;
+#endif
   last_random_value = 0;
 }
 
+static void
+seed_random ()
+{
+  unsigned int seed;
+#if defined (PATH_RANDOMDEV)
+  int fd;
+  int rv;
+  if ((rv = fd = open (PATH_RANDOMDEV, O_RDONLY)) != -1) { 
+    while ((rv = read(fd, &seed, sizeof(seed))) != sizeof(seed) && errno == EINTR);
+    close (fd);
+  }
+  if (rv != sizeof(seed)) {
+#endif
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    seed = (unsigned int)tv.tv_sec + (unsigned int)tv.tv_usec + getpid();
+#if defined (PATH_RANDOMDEV)
+  }
+#endif
+  sbrand (seed);
+}
+
 static SHELL_VAR *
 assign_random (self, value, unused)
      SHELL_VAR *self;
      char *value;
      arrayind_t unused;
 {
-  sbrand (strtoul (value, (char **)NULL, 10));
+  sbrand ((unsigned int)strtoul (value, (char **)NULL, 10));
   if (subshell_environment)
     seeded_subshell = 1;
   return (self);
@@ -1188,7 +1226,7 @@
   /* Reset for command and process substitution. */
   if (subshell_environment && seeded_subshell == 0)
     {
-      sbrand (rseed + getpid() + NOW);
+      seed_random ();
       seeded_subshell = 1;
     }
 


Index: bash.spec
===================================================================
RCS file: /cvs/pkgs/rpms/bash/devel/bash.spec,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -r1.143 -r1.144
--- bash.spec	20 Jul 2007 13:12:02 -0000	1.143
+++ bash.spec	15 Aug 2007 16:47:18 -0000	1.144
@@ -1,7 +1,7 @@
 Version: 3.2
 Name: bash
 Summary: The GNU Bourne Again shell (bash) version %{version}
-Release: 12%{?dist}
+Release: 13%{?dist}
 Group: System Environment/Shells
 License: GPL
 Url: http://www.gnu.org/software/bash
@@ -44,6 +44,7 @@
 Patch130: bash-infotags.patch
 Patch131: bash-cond-rmatch.patch
 Patch132: bash-ulimit-m.patch
+Patch131: bash-3.2-rng.patch
 Requires: mktemp
 Requires(post): ncurses
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -97,6 +98,7 @@
 %patch130 -p1 -b .infotags
 %patch131 -p1 -b .cond-rmatch
 %patch132 -p1 -b .ulimit-m
+%patch131 -p1 -b .rng.patch
 
 echo %{version} > _distribution
 echo %{release} > _patchlevel
@@ -238,6 +240,9 @@
 %doc doc/*.ps doc/*.0 doc/*.html doc/article.txt
 
 %changelog
+* Wed Aug 15 2007 Pete Graner <pgraner at redhat.com> - 3.2-13
+- Improve bash $RANDOM pseudo RNG (bug #234906)
+
 * Fri Jul 20 2007 Tim Waugh <twaugh at redhat.com> 3.2-12
 - Quote environment variables in the post scriptlet to prevent upgrade
   failures (bug #249005).




More information about the fedora-extras-commits mailing list