]> granicus.if.org Git - python/commitdiff
Committing patch 405101
authorMoshe Zadka <moshez@math.huji.ac.il>
Sun, 18 Mar 2001 17:11:56 +0000 (17:11 +0000)
committerMoshe Zadka <moshez@math.huji.ac.il>
Sun, 18 Mar 2001 17:11:56 +0000 (17:11 +0000)
Modules/socketmodule.c

index ce572ff4f4e82c1e9b15ff4f326a0a700252d987..c92dc95553a3e1f96e80e29c1edafe3e9fef690f 100644 (file)
@@ -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;