Try dynamically loading crypto_X509Name_New on Windows
diff --git a/OpenSSL/ssl/connection.c b/OpenSSL/ssl/connection.c
index 0289876..0796352 100755
--- a/OpenSSL/ssl/connection.c
+++ b/OpenSSL/ssl/connection.c
@@ -861,7 +861,7 @@
exception_from_error_queue(ssl_Error);
return NULL;
}
- CA = (PyObject *)crypto_X509Name_New(CAName, 1);
+ CA = (PyObject *)new_x509name(CAName, 1);
if (CA == NULL) {
X509_NAME_free(CAName);
Py_DECREF(CAList);
diff --git a/OpenSSL/ssl/ssl.c b/OpenSSL/ssl/ssl.c
index 8ac4420..b286b88 100644
--- a/OpenSSL/ssl/ssl.c
+++ b/OpenSSL/ssl/ssl.c
@@ -73,6 +73,18 @@
PyObject *ssl_api_object;
import_crypto();
+#else
+# ifdef WINDOWS
+ HMODULE crypto = GetModuleHandle("crypto.pyd");
+ if (crypto == NULL) {
+ PyErr_SetString(PyExc_RuntimeError, "Unable to get crypto module");
+ return;
+ }
+
+ new_x509name = GetProcAddress(crypto, "crypto_X509Name_New");
+# else
+ new_x509name = crypto_X509Name_New;
+# endif
#endif
SSL_library_init();
diff --git a/OpenSSL/ssl/ssl.h b/OpenSSL/ssl/ssl.h
index ba7ba8b..15ae959 100644
--- a/OpenSSL/ssl/ssl.h
+++ b/OpenSSL/ssl/ssl.h
@@ -46,6 +46,8 @@
extern ssl_Context_New_RETURN ssl_Context_New ssl_Context_New_PROTO;
extern ssl_Connection_New_RETURN ssl_Connection_New ssl_Connection_New_PROTO;
+crypto_X509NameObj* (*new_x509name)(X509_NAME*, int);
+
#else /* SSL_MODULE */
extern void **ssl_API;