SHA256
3
0
forked from pool/bash
Dr. Werner Fink 2009-12-04 09:41:03 +00:00 committed by Git OBS Bridge
parent e6303d58de
commit b7da73b716
3 changed files with 47 additions and 73 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:64b45587a32f84769d300c251406047bf8ecf8e54eec72281da82913b4ad4b5b
size 17535
oid sha256:b64645f66d1d3121f0fc26215a902d5ca5ec6b4d59a14981617fdf69554ce259
size 18292

View File

@ -1,85 +1,43 @@
Index: variables.c
===================================================================
--- variables.c.orig
+++ variables.c
@@ -1203,6 +1203,7 @@ init_seconds_var ()
return v;
}
+#if !defined(linux)
/* The random number seed. You can change this by setting RANDOM. */
static unsigned long rseed = 1;
--- variables.c
+++ variables.c 2009-12-04 09:31:06.579929599 +0000
@@ -1216,6 +1216,7 @@ static unsigned long rseed = 1;
static int last_random_value;
@@ -1256,6 +1257,24 @@ seedrand ()
static int seeded_subshell = 0;
+#if !defined(linux)
/* A linear congruential random number generator based on the example
one in the ANSI C standard. This one isn't very good, but a more
complicated one is overkill. */
@@ -1264,6 +1265,32 @@ seedrand ()
sbrand (tv.tv_sec ^ tv.tv_usec ^ getpid ());
}
+#else
+
+static int last_sbrand_pid;
+
+static int brand ()
+/* Use ISO C Random Number Functions of the glibc */
+static int
+brand (void)
+{
+ return random() & 32767;
+}
+
+static void sbrand (unsigned long seed)
+{
+ srandom(seed);
+ if (rseed == 0)
+ seedrand ();
+ return rand() & 32767;
+}
+
+static void
+seedrand () {}
+sbrand (unsigned long seed)
+{
+ rseed = seed;
+ srand(seed);
+}
+
+static void
+seedrand (void)
+{
+ struct timeval tv;
+ gettimeofday (&tv, NULL);
+ srand (tv.tv_sec ^ tv.tv_usec ^ getpid ());
+}
+#endif
+
static SHELL_VAR *
assign_random (self, value, unused, key)
SHELL_VAR *self;
@@ -1264,8 +1283,10 @@ assign_random (self, value, unused, key)
char *key;
{
sbrand (strtoul (value, (char **)NULL, 10));
+#if !defined(linux)
if (subshell_environment)
seeded_subshell = getpid ();
+#endif
return (self);
}
@@ -1274,6 +1295,7 @@ get_random_number ()
{
int rv, pid;
+#if !defined(linux)
/* Reset for command and process substitution. */
pid = getpid ();
if (subshell_environment && seeded_subshell != pid)
@@ -1285,6 +1307,18 @@ get_random_number ()
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;
}
@@ -1296,7 +1330,9 @@ get_random (var)
char *p;
rv = get_random_number ();
+#if !defined(linux)
last_random_value = rv;
+#endif
p = itos (rv);
FREE (value_cell (var));

View File

@ -1,3 +1,19 @@
-------------------------------------------------------------------
Fri Dec 4 10:40:02 CET 2009 - werner@suse.de
- Fix bug in bash-4.0-security.patch (bnc#559877)
-------------------------------------------------------------------
Thu Oct 29 15:23:20 CET 2009 - werner@suse.de
- Update to newest patch level 35
* bash incorrectly interprets wildcarded path components between
a **/ and the last /
* bash incorrectly treated single and double quotes as
delimiters rather than introducing quoted strings when
splitting the line into words for programmable completion
functions
-------------------------------------------------------------------
Wed Sep 30 13:24:57 CEST 2009 - werner@suse.de