diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-06-09 19:20:59 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-06-09 19:20:59 +0000 |
commit | 755c00a3604b3de3dc02daf880e79142c00bc9ca (patch) | |
tree | b118ded322a1dfcb3fd2b230297cb6224d8e6b57 /src/backend/utils/adt/misc.c | |
parent | 19a95d9742853e09333436a8a23b4c2beb1be797 (diff) | |
download | postgresql-755c00a3604b3de3dc02daf880e79142c00bc9ca.tar.gz postgresql-755c00a3604b3de3dc02daf880e79142c00bc9ca.zip |
Auto-seed random so user's can't request random values based on
our postmaster random seed used from cancel.
Diffstat (limited to 'src/backend/utils/adt/misc.c')
-rw-r--r-- | src/backend/utils/adt/misc.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index 6913d8975e4..d91ea44e951 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -7,12 +7,13 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/misc.c,v 1.12 1998/02/24 03:47:26 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/misc.c,v 1.13 1998/06/09 19:20:59 momjian Exp $ * *------------------------------------------------------------------------- */ #include <sys/types.h> #include <sys/file.h> +#include <time.h> #include "postgres.h" #include "utils/datum.h" #include "catalog/pg_type.h" @@ -60,6 +61,9 @@ nonnullvalue(Datum value, bool *isNull) * will return about 1/10 of the tuples in TEMP * */ + +static bool random_initialized = false; + bool oidrand(Oid o, int32 X) { @@ -68,6 +72,17 @@ oidrand(Oid o, int32 X) if (X == 0) return true; + /* + * We do this because the cancel key is actually a random, so we don't + * want them to be able to request random numbers using our postmaster + * seeded value. + */ + if (!random_initialized) + { + srandom((unsigned int)time(NULL)); + random_initialized = true; + } + result = (random() % X == 0); return result; } @@ -81,6 +96,7 @@ bool oidsrand(int32 X) { srand(X); + random_initialized = true; return true; } |