diff options
author | Moshe Zadka <moshez@math.huji.ac.il> | 2001-03-18 17:11:56 (GMT) |
---|---|---|
committer | Moshe Zadka <moshez@math.huji.ac.il> | 2001-03-18 17:11:56 (GMT) |
commit | 8f4eab23456d1b038d8d0d2a3b56f9524c2030ad (patch) | |
tree | 6758bbfdded8c844760dad7d8fb67964b9aca56c | |
parent | 261d91a3f914ee5bb42534428acbc3479f3ca6d1 (diff) | |
download | cpython-8f4eab23456d1b038d8d0d2a3b56f9524c2030ad.zip cpython-8f4eab23456d1b038d8d0d2a3b56f9524c2030ad.tar.gz cpython-8f4eab23456d1b038d8d0d2a3b56f9524c2030ad.tar.bz2 |
Committing patch 405101
-rw-r--r-- | Modules/socketmodule.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index ce572ff..c92dc95 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -194,6 +194,7 @@ Socket methods: #include "openssl/pem.h" #include "openssl/ssl.h" #include "openssl/err.h" +#include "openssl/rand.h" #endif /* USE_SSL */ #if defined(MS_WINDOWS) || defined(__BEOS__) @@ -2544,6 +2545,32 @@ init_socket(void) if (PyDict_SetItemString(d, "SSLType", (PyObject *)&SSL_Type) != 0) return; + if (RAND_status() == 0) { +#ifdef USE_EGD + char random_device[MAXPATHLEN+1]; + if (!RAND_file_name (random_device, MAXPATHLEN + 1)) { + PyErr_SetObject(SSLErrorObject, + PyString_FromString("RAND_file_name error")); + return; + } + if (RAND_egd (random_device) == -1) { + PyErr_SetObject(SSLErrorObject, + PyString_FromString("RAND_egd error")); + return; + } +#else /* USE_EGD not defined */ + char random_string[32]; + int i; + + PyErr_Warn(PyExc_RuntimeWarning, + "using insecure method to generate random numbers"); + srand(time(NULL)); + for(i=0; i<sizeof(random_string); i++) { + random_string[i] = rand(); + } + RAND_seed(random_string, sizeof(random_string)); +#endif /* USE_EGD */ + } #endif /* USE_SSL */ PyDict_SetItemString(d, "error", PySocket_Error); PySocketSock_Type.ob_type = &PyType_Type; |