You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
8.0 KiB
223 lines
8.0 KiB
From fa56170c7adf5f124a48cf1074390adfc697272c Mon Sep 17 00:00:00 2001
|
|
From: Stefan Strogin <stefan.strogin@gmail.com>
|
|
Date: Wed, 9 Jan 2019 10:15:08 +0200
|
|
Subject: [PATCH] Fix compilation with LibreSSL
|
|
|
|
---
|
|
SWIG/_bio.i | 8 +++++---
|
|
SWIG/_evp.i | 2 +-
|
|
SWIG/_lib.i | 2 +-
|
|
SWIG/_lib11_compat.i | 5 ++++-
|
|
SWIG/_m2crypto_wrap.c | 11 ++++++++---
|
|
SWIG/_ssl.i | 4 ++--
|
|
SWIG/_threads.i | 10 +++++-----
|
|
7 files changed, 26 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/SWIG/_bio.i b/SWIG/_bio.i
|
|
index e85a275..8eada82 100644
|
|
--- a/SWIG/_bio.i
|
|
+++ b/SWIG/_bio.i
|
|
@@ -293,7 +293,7 @@ int bio_should_write(BIO* a) {
|
|
}
|
|
|
|
/* Macros for things not defined before 1.1.0 */
|
|
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
|
static BIO_METHOD *
|
|
BIO_meth_new( int type, const char *name )
|
|
{
|
|
@@ -325,11 +325,13 @@ BIO_meth_free( BIO_METHOD *meth )
|
|
#define BIO_set_shutdown(b, x) (b)->shutdown = x
|
|
#define BIO_get_shutdown(b) (b)->shutdown
|
|
#define BIO_set_init(b, x) b->init = x
|
|
-#define BIO_get_init(b) (b)->init
|
|
#define BIO_set_data(b, x) b->ptr = x
|
|
#define BIO_clear_flags(b, x) b->flags &= ~(x)
|
|
#define BIO_get_data(b) b->ptr
|
|
#endif
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
|
+#define BIO_get_init(b) (b)->init
|
|
+#endif
|
|
|
|
/* implment custom BIO_s_pyfd */
|
|
|
|
@@ -515,7 +517,7 @@ static long pyfd_ctrl(BIO *b, int cmd, long num, void *ptr) {
|
|
}
|
|
|
|
void pyfd_init(void) {
|
|
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
|
+#if (!defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L) || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL)
|
|
methods_fdp = BIO_meth_new(
|
|
BIO_get_new_index()|BIO_TYPE_DESCRIPTOR|BIO_TYPE_SOURCE_SINK,
|
|
"python file descriptor");
|
|
diff --git a/SWIG/_evp.i b/SWIG/_evp.i
|
|
index d04e806..6fa9b38 100644
|
|
--- a/SWIG/_evp.i
|
|
+++ b/SWIG/_evp.i
|
|
@@ -19,7 +19,7 @@ Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved.
|
|
#include <openssl/rsa.h>
|
|
#include <openssl/opensslv.h>
|
|
|
|
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
|
|
|
HMAC_CTX *HMAC_CTX_new(void) {
|
|
HMAC_CTX *ret = PyMem_Malloc(sizeof(HMAC_CTX));
|
|
diff --git a/SWIG/_lib.i b/SWIG/_lib.i
|
|
index c84b800..807d5f6 100644
|
|
--- a/SWIG/_lib.i
|
|
+++ b/SWIG/_lib.i
|
|
@@ -512,7 +512,7 @@ int passphrase_callback(char *buf, int num, int v, void *arg) {
|
|
%inline %{
|
|
|
|
void lib_init() {
|
|
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
|
SSLeay_add_all_algorithms();
|
|
ERR_load_ERR_strings();
|
|
#endif
|
|
diff --git a/SWIG/_lib11_compat.i b/SWIG/_lib11_compat.i
|
|
index 1ec42dd..4234004 100644
|
|
--- a/SWIG/_lib11_compat.i
|
|
+++ b/SWIG/_lib11_compat.i
|
|
@@ -8,7 +8,7 @@
|
|
*/
|
|
|
|
%{
|
|
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
|
|
|
#include <string.h>
|
|
#include <openssl/engine.h>
|
|
@@ -24,6 +24,9 @@ static void *CRYPTO_zalloc(size_t num, const char *file, int line)
|
|
return ret;
|
|
}
|
|
|
|
+#endif
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
|
+
|
|
#include <openssl/bn.h>
|
|
|
|
#ifndef BN_F_BN_GENCB_NEW
|
|
diff --git a/SWIG/_m2crypto_wrap.c b/SWIG/_m2crypto_wrap.c
|
|
index 0f07702..f168822 100644
|
|
--- a/SWIG/_m2crypto_wrap.c
|
|
+++ b/SWIG/_m2crypto_wrap.c
|
|
@@ -3838,7 +3838,7 @@ void threading_cleanup(void) {
|
|
#include <ceval.h>
|
|
|
|
|
|
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
|
|
|
#include <string.h>
|
|
#include <openssl/engine.h>
|
|
@@ -3854,6 +3854,9 @@ static void *CRYPTO_zalloc(size_t num, const char *file, int line)
|
|
return ret;
|
|
}
|
|
|
|
+#endif
|
|
+#ifdef OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
|
+
|
|
#include <openssl/bn.h>
|
|
|
|
#ifndef BN_F_BN_GENCB_NEW
|
|
@@ -5315,7 +5318,7 @@ int bio_should_write(BIO* a) {
|
|
}
|
|
|
|
/* Macros for things not defined before 1.1.0 */
|
|
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
|
static BIO_METHOD *
|
|
BIO_meth_new( int type, const char *name )
|
|
{
|
|
@@ -5347,11 +5350,13 @@ BIO_meth_free( BIO_METHOD *meth )
|
|
#define BIO_set_shutdown(b, x) (b)->shutdown = x
|
|
#define BIO_get_shutdown(b) (b)->shutdown
|
|
#define BIO_set_init(b, x) b->init = x
|
|
-#define BIO_get_init(b) (b)->init
|
|
#define BIO_set_data(b, x) b->ptr = x
|
|
#define BIO_clear_flags(b, x) b->flags &= ~(x)
|
|
#define BIO_get_data(b) b->ptr
|
|
#endif
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
|
+#define BIO_get_init(b) (b)->init
|
|
+#endif
|
|
|
|
/* implment custom BIO_s_pyfd */
|
|
|
|
diff --git a/SWIG/_ssl.i b/SWIG/_ssl.i
|
|
index 7257656..40b0582 100644
|
|
--- a/SWIG/_ssl.i
|
|
+++ b/SWIG/_ssl.i
|
|
@@ -27,7 +27,7 @@ typedef unsigned __int64 uint64_t;
|
|
#endif
|
|
%}
|
|
|
|
-#if OPENSSL_VERSION_NUMBER >= 0x10100005L
|
|
+#if (!defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100005L) || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL)
|
|
%include <openssl/safestack.h>
|
|
#endif
|
|
|
|
@@ -261,7 +261,7 @@ void ssl_init(PyObject *ssl_err, PyObject *ssl_timeout_err) {
|
|
}
|
|
|
|
const SSL_METHOD *tlsv1_method(void) {
|
|
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
|
+#if (!defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L) || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL)
|
|
PyErr_WarnEx(PyExc_DeprecationWarning,
|
|
"Function TLSv1_method has been deprecated.", 1);
|
|
#endif
|
|
diff --git a/SWIG/_threads.i b/SWIG/_threads.i
|
|
index 69adb9f..fd2285a 100644
|
|
--- a/SWIG/_threads.i
|
|
+++ b/SWIG/_threads.i
|
|
@@ -5,7 +5,7 @@
|
|
#include <pythread.h>
|
|
#include <openssl/crypto.h>
|
|
|
|
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if defined(THREADING) && (OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL))
|
|
#define CRYPTO_num_locks() (CRYPTO_NUM_LOCKS)
|
|
static PyThread_type_lock lock_cs[CRYPTO_num_locks()];
|
|
static long lock_count[CRYPTO_num_locks()];
|
|
@@ -13,7 +13,7 @@ static int thread_mode = 0;
|
|
#endif
|
|
|
|
void threading_locking_callback(int mode, int type, const char *file, int line) {
|
|
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if defined(THREADING) && (OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL))
|
|
if (mode & CRYPTO_LOCK) {
|
|
PyThread_acquire_lock(lock_cs[type], WAIT_LOCK);
|
|
lock_count[type]++;
|
|
@@ -25,7 +25,7 @@ void threading_locking_callback(int mode, int type, const char *file, int line)
|
|
}
|
|
|
|
unsigned long threading_id_callback(void) {
|
|
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if defined(THREADING) && (OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL))
|
|
return (unsigned long)PyThread_get_thread_ident();
|
|
#else
|
|
return (unsigned long)0;
|
|
@@ -35,7 +35,7 @@ unsigned long threading_id_callback(void) {
|
|
|
|
%inline %{
|
|
void threading_init(void) {
|
|
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if defined(THREADING) && (OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL))
|
|
int i;
|
|
if (!thread_mode) {
|
|
for (i=0; i<CRYPTO_num_locks(); i++) {
|
|
@@ -50,7 +50,7 @@ void threading_init(void) {
|
|
}
|
|
|
|
void threading_cleanup(void) {
|
|
-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+#if defined(THREADING) && (OPENSSL_VERSION_NUMBER < 0x10100000L || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL))
|
|
int i;
|
|
if (thread_mode) {
|
|
CRYPTO_set_locking_callback(NULL);
|
|
--
|
|
2.20.1
|
|
|