--- devel/ptlib/Makefile +++ devel/ptlib/Makefile @@ -46,6 +46,12 @@ DEBUG_DESC= Install debug library .include +.if ${OSVERSION} > 1200085 +EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src_ptclib_pssl.cxx-openssl111 +.else +EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src_ptclib_pssl.cxx +.endif + PLIST_SUB+= PORTVERSION=${PORTVERSION} \ PVERSION_MAJOR=${PVERSION_MAJOR} \ PVERSION_MINOR=${PVERSION_MINOR} --- /dev/null +++ devel/ptlib/files/extra-patch-src_ptclib_pssl.cxx-openssl111 @@ -0,0 +1,143 @@ +--- src/ptclib/pssl.cxx.orig 2013-08-14 18:20:27.000000000 -0500 ++++ src/ptclib/pssl.cxx 2018-11-06 11:53:45.651466000 -0600 +@@ -140,7 +140,7 @@ + class PSSL_BIO + { + public: +- PSSL_BIO(BIO_METHOD *method = BIO_s_file_internal()) ++ PSSL_BIO(const BIO_METHOD *method = BIO_s_file()) + { bio = BIO_new(method); } + + ~PSSL_BIO() +@@ -627,9 +627,10 @@ + if (dh == NULL) + return; + +- dh->p = BN_bin2bn(pData, pSize, NULL); +- dh->g = BN_bin2bn(gData, gSize, NULL); +- if (dh->p != NULL && dh->g != NULL) ++ BIGNUM *p = BN_bin2bn(pData, pSize, NULL); ++ BIGNUM *g = BN_bin2bn(gData, gSize, NULL); ++ DH_set0_pqg(dh, p, NULL, g); ++ if (p != NULL && p != NULL) + return; + + DH_free(dh); +@@ -805,13 +806,11 @@ + SSL_METHOD * meth; + + switch (method) { +- case SSLv3: +- meth = SSLv3_method(); +- break; + case TLSv1: + meth = TLSv1_method(); + break; + case SSLv23: ++ case SSLv3: + default: + meth = SSLv23_method(); + break; +@@ -1117,7 +1116,7 @@ + // + + +-#define PSSLCHANNEL(bio) ((PSSLChannel *)(bio->ptr)) ++#define PSSLCHANNEL(bio) ((PSSLChannel *)BIO_get_data(bio)) + + extern "C" { + +@@ -1130,10 +1129,9 @@ + + static int Psock_new(BIO * bio) + { +- bio->init = 0; +- bio->num = 0; +- bio->ptr = NULL; // this is really (PSSLChannel *) +- bio->flags = 0; ++ BIO_set_init(bio, 0); ++ BIO_set_data(bio, NULL); ++ BIO_clear_flags(bio, ~0); + + return(1); + } +@@ -1144,13 +1142,13 @@ + if (bio == NULL) + return 0; + +- if (bio->shutdown) { +- if (bio->init) { ++ if (BIO_get_shutdown(bio)) { ++ if (BIO_get_init(bio)) { + PSSLCHANNEL(bio)->Shutdown(PSocket::ShutdownReadAndWrite); + PSSLCHANNEL(bio)->Close(); + } +- bio->init = 0; +- bio->flags = 0; ++ BIO_set_init(bio, 0); ++ BIO_clear_flags(bio, ~0); + } + return 1; + } +@@ -1160,11 +1158,11 @@ + { + switch (cmd) { + case BIO_CTRL_SET_CLOSE: +- bio->shutdown = (int)num; ++ BIO_set_shutdown(bio, (int)num); + return 1; + + case BIO_CTRL_GET_CLOSE: +- return bio->shutdown; ++ return BIO_get_shutdown(bio); + + case BIO_CTRL_FLUSH: + return 1; +@@ -1239,7 +1237,8 @@ + }; + + +-static BIO_METHOD methods_Psock = ++static BIO_METHOD *methods_Psock = NULL; ++/* + { + BIO_TYPE_SOCKET, + "PTLib-PSSLChannel", +@@ -1261,19 +1260,33 @@ + Psock_free + #endif + }; ++*/ + +- + PBoolean PSSLChannel::OnOpen() + { +- BIO * bio = BIO_new(&methods_Psock); ++ if (methods_Psock == NULL) { ++ methods_Psock = BIO_meth_new(BIO_TYPE_SOCKET | BIO_get_new_index(), "PTLib-PSSLChannel"); ++ if (methods_Psock == NULL || ++ 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_gets(methods_Psock, NULL) || ++ BIO_meth_set_ctrl(methods_Psock, Psock_ctrl) || ++ BIO_meth_set_create(methods_Psock, Psock_new) || ++ BIO_meth_set_destroy(methods_Psock, Psock_free)) { ++ SSLerr(SSL_F_SSL_SET_FD,ERR_R_BUF_LIB); ++ return PFalse; ++ } ++ } ++ BIO * bio = BIO_new(methods_Psock); + if (bio == NULL) { + SSLerr(SSL_F_SSL_SET_FD,ERR_R_BUF_LIB); + return PFalse; + } + + // "Open" then bio +- bio->ptr = this; +- bio->init = 1; ++ BIO_set_data(bio, this); ++ BIO_set_init(bio, 1); + + SSL_set_bio(ssl, bio, bio); + return PTrue;