File bash-2.05a-security.patch of Package bash

--- variables.c
+++ variables.c	Wed Aug 21 12:14:18 2002
@@ -1035,6 +1035,7 @@
   return v;      
 }
      
+#if !defined(linux)
 /* The random number seed.  You can change this by setting RANDOM. */
 static unsigned long rseed = 1;
 static int last_random_value;
@@ -1060,6 +1061,21 @@
   last_random_value = 0;
 }
 
+#else
+
+static int last_sbrand_pid;
+
+static int brand ()
+{
+  return random() & 32767;
+}
+
+static void sbrand (unsigned long seed)
+{
+  srandom(seed);
+}
+#endif
+
 static SHELL_VAR *
 assign_random (self, value, unused)
      SHELL_VAR *self;
@@ -1075,6 +1091,7 @@
 {
   int rv;
 
+#if !defined(linux)
   /* Reset for command and process substitution. */
   if (subshell_environment)
     sbrand (rseed + getpid() + NOW);
@@ -1082,6 +1099,18 @@
   do
     rv = brand ();
   while (rv == last_random_value);
+#else
+  if (subshell_environment)
+    {
+      int mypid = getpid();
+      if (mypid != last_sbrand_pid)
+	{
+	  last_sbrand_pid = mypid;
+	  sbrand (mypid + NOW);
+	}
+    }
+  rv = brand();
+#endif
   return rv;
 }
 
@@ -1093,7 +1122,9 @@
   char *p;
 
   rv = get_random_number ();
+#if !defined(linux)
   last_random_value = rv;
+#endif
   p = itos (rv);
 
   FREE (value_cell (var));
openSUSE Build Service is sponsored by