summaryrefslogtreecommitdiffstats
path: root/libraries/ptlib/ptlib-2.10.11-openssl11.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ptlib/ptlib-2.10.11-openssl11.patch')
-rw-r--r--libraries/ptlib/ptlib-2.10.11-openssl11.patch212
1 files changed, 212 insertions, 0 deletions
diff --git a/libraries/ptlib/ptlib-2.10.11-openssl11.patch b/libraries/ptlib/ptlib-2.10.11-openssl11.patch
new file mode 100644
index 0000000000..38d296eb2d
--- /dev/null
+++ b/libraries/ptlib/ptlib-2.10.11-openssl11.patch
@@ -0,0 +1,212 @@
+https://build.opensuse.org/package/view_file/network:telephony/libpt2/libpt2-openssl11.patch
+by mgorse@suse.com, see also:
+
+ - https://build.opensuse.org/request/show/518821
+ - https://bugzilla.opensuse.org/show_bug.cgi?id=1055477
+
+--- ptlib-2.10.11/src/ptclib/pssl.cxx 2013-08-14 18:20:27.000000000 -0500
++++ ptlib-2.10.11/src/ptclib/pssl.cxx.openssl11 2017-08-25 17:25:44.824287596 -0500
+@@ -140,7 +140,11 @@ PFACTORY_CREATE_SINGLETON(PProcessStartu
+ class PSSL_BIO
+ {
+ public:
++#if OPENSSL_VERSION_NUMBER >= 0x10100000
++ PSSL_BIO(const BIO_METHOD *method = BIO_s_file())
++#else
+ PSSL_BIO(BIO_METHOD *method = BIO_s_file_internal())
++#endif
+ { bio = BIO_new(method); }
+
+ ~PSSL_BIO()
+@@ -627,10 +631,18 @@ PSSLDiffieHellman::PSSLDiffieHellman(con
+ if (dh == NULL)
+ return;
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ DH_set0_pqg (dh, BN_bin2bn(pData, pSize, NULL), NULL, BN_bin2bn(gData, gSize, NULL));
++ const BIGNUM *p, *g;
++ DH_get0_pqg(dh, &p, NULL, &g);
++ if (p != NULL && g != NULL)
++ return;
++#else
+ dh->p = BN_bin2bn(pData, pSize, NULL);
+ dh->g = BN_bin2bn(gData, gSize, NULL);
+ if (dh->p != NULL && dh->g != NULL)
+ return;
++#endif
+
+ DH_free(dh);
+ dh = NULL;
+@@ -805,9 +817,11 @@ void PSSLContext::Construct(Method metho
+ SSL_METHOD * meth;
+
+ switch (method) {
++#ifndef OPENSSL_NO_SSL3
+ case SSLv3:
+ meth = SSLv3_method();
+ break;
++#endif
+ case TLSv1:
+ meth = TLSv1_method();
+ break;
+@@ -1117,7 +1131,11 @@ PBoolean PSSLChannel::RawSSLRead(void *
+ //
+
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++#define PSSLCHANNEL(bio) ((PSSLChannel *)(BIO_get_data (bio)))
++#else
+ #define PSSLCHANNEL(bio) ((PSSLChannel *)(bio->ptr))
++#endif
+
+ extern "C" {
+
+@@ -1130,10 +1148,16 @@ typedef long (*lfptr)();
+
+ static int Psock_new(BIO * bio)
+ {
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ BIO_set_init (bio, 0);
++ BIO_set_data (bio, NULL);; // this is really (PSSLChannel *)
++ BIO_set_flags (bio, 0);
++#else
+ bio->init = 0;
+ bio->num = 0;
+ bio->ptr = NULL; // this is really (PSSLChannel *)
+ bio->flags = 0;
++#endif
+
+ return(1);
+ }
+@@ -1144,13 +1168,23 @@ static int Psock_free(BIO * bio)
+ if (bio == NULL)
+ return 0;
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ if (BIO_get_shutdown (bio)) {
++ if (BIO_get_init (bio)) {
++#else
+ if (bio->shutdown) {
+ if (bio->init) {
++#endif
+ PSSLCHANNEL(bio)->Shutdown(PSocket::ShutdownReadAndWrite);
+ PSSLCHANNEL(bio)->Close();
+ }
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ BIO_set_init (bio, 0);
++ BIO_set_flags (bio, 0);
++#else
+ bio->init = 0;
+ bio->flags = 0;
++#endif
+ }
+ return 1;
+ }
+@@ -1160,11 +1194,19 @@ static long Psock_ctrl(BIO * bio, int cm
+ {
+ switch (cmd) {
+ case BIO_CTRL_SET_CLOSE:
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ BIO_set_shutdown (bio, (int)num);
++#else
+ bio->shutdown = (int)num;
++#endif
+ return 1;
+
+ case BIO_CTRL_GET_CLOSE:
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ return BIO_get_shutdown (bio);
++#else
+ return bio->shutdown;
++#endif
+
+ case BIO_CTRL_FLUSH:
+ return 1;
+@@ -1239,41 +1281,64 @@ static int Psock_puts(BIO * bio, const c
+ };
+
+
+-static BIO_METHOD methods_Psock =
+-{
+- BIO_TYPE_SOCKET,
+- "PTLib-PSSLChannel",
+-#if (OPENSSL_VERSION_NUMBER < 0x00906000)
+- (ifptr)Psock_write,
+- (ifptr)Psock_read,
+- (ifptr)Psock_puts,
+- NULL,
+- (lfptr)Psock_ctrl,
+- (ifptr)Psock_new,
+- (ifptr)Psock_free
+-#else
+- Psock_write,
+- Psock_read,
+- Psock_puts,
+- NULL,
+- Psock_ctrl,
+- Psock_new,
+- Psock_free
+-#endif
+-};
+-
+
+ PBoolean PSSLChannel::OnOpen()
+ {
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ static BIO_METHOD *methods_pSock = NULL;
++
++ if (methods_pSock == NULL) {
++ methods_pSock = BIO_meth_new (BIO_TYPE_SOCKET, "PTLib-PSSLChannel");
++ if (!methods_pSock)
++ return FALSE;
++ BIO_meth_set_write (methods_pSock, Psock_write);
++ BIO_meth_set_read (methods_pSock, Psock_read);
++ BIO_meth_set_puts (methods_pSock, Psock_puts);
++ BIO_meth_set_ctrl (methods_pSock, Psock_ctrl);
++ BIO_meth_set_create (methods_pSock, Psock_new);
++ BIO_meth_set_destroy (methods_pSock, Psock_free);
++ }
++
++ BIO * bio = BIO_new(methods_pSock);
++#else
++ static BIO_METHOD methods_Psock =
++ {
++ BIO_TYPE_SOCKET,
++ "PTLib-PSSLChannel",
++ #if (OPENSSL_VERSION_NUMBER < 0x00906000)
++ (ifptr)Psock_write,
++ (ifptr)Psock_read,
++ (ifptr)Psock_puts,
++ NULL,
++ (lfptr)Psock_ctrl,
++ (ifptr)Psock_new,
++ (ifptr)Psock_free
++ #else
++ Psock_write,
++ Psock_read,
++ Psock_puts,
++ NULL,
++ Psock_ctrl,
++ Psock_new,
++ Psock_free
++ #endif
++ };
++
+ BIO * bio = BIO_new(&methods_Psock);
++#endif
+ if (bio == NULL) {
+ SSLerr(SSL_F_SSL_SET_FD,ERR_R_BUF_LIB);
+ return PFalse;
+ }
+
+ // "Open" then bio
++#if OPENSSL_VERSION_NUMBER >= 0x10100000l
++ BIO_set_data (bio, this);
++ BIO_set_init (bio, 1);
++#else
+ bio->ptr = this;
+ bio->init = 1;
++#endif
+
+ SSL_set_bio(ssl, bio, bio);
+ return PTrue;