diff options
author | Allan Saddi <allan@saddi.com> | 2008-09-26 07:59:47 -0700 |
---|---|---|
committer | Allan Saddi <allan@saddi.com> | 2008-09-26 07:59:47 -0700 |
commit | 19b0128e11df9f08d287ea44eb4fde4cbb4521e1 (patch) | |
tree | c20794301907d5970c4dfc83da2d77a523ee7f4c | |
parent | 10493143c392bbab43bca56bb13942230e298e9d (diff) | |
download | flup-19b0128e11df9f08d287ea44eb4fde4cbb4521e1.tar.gz |
Re-seed random module after each fork.
-rw-r--r-- | flup/server/preforkserver.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/flup/server/preforkserver.py b/flup/server/preforkserver.py index 449284c..128293b 100644 --- a/flup/server/preforkserver.py +++ b/flup/server/preforkserver.py @@ -33,6 +33,8 @@ import socket import select import errno import signal +import random +import time try: import fcntl @@ -310,7 +312,19 @@ class PreforkServer(object): def _child(self, sock, parent): """Main loop for children.""" requestCount = 0 - + + # Re-seed random module + preseed = '' + # urandom only exists in Python >= 2.4 + if hasattr(os, 'urandom'): + try: + preseed = os.urandom(16) + except NotImplementedError: + pass + # Have doubts about this. random.seed will just hash the string + random.seed('%s%s%s' % (preseed, os.getpid(), time.time())) + del preseed + while True: # Wait for any activity on the main socket or parent socket. r, w, e = select.select([sock, parent], [], []) |