summaryrefslogtreecommitdiff
path: root/libre/kopete/kopete-openssl-1.1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/kopete/kopete-openssl-1.1.patch')
-rw-r--r--libre/kopete/kopete-openssl-1.1.patch300
1 files changed, 300 insertions, 0 deletions
diff --git a/libre/kopete/kopete-openssl-1.1.patch b/libre/kopete/kopete-openssl-1.1.patch
new file mode 100644
index 000000000..ed09a6a1e
--- /dev/null
+++ b/libre/kopete/kopete-openssl-1.1.patch
@@ -0,0 +1,300 @@
+diff -up libjingle-0.6.14/talk/base/openssladapter.cc.openssl11 libjingle-0.6.14/talk/base/openssladapter.cc
+--- libjingle-0.6.14/talk/base/openssladapter.cc.openssl11 2017-02-20 15:00:27.678103635 -0500
++++ libjingle-0.6.14/talk/base/openssladapter.cc 2017-02-20 15:57:36.884341533 -0500
+@@ -84,6 +84,7 @@ static long socket_ctrl(BIO* h, int cmd,
+ static int socket_new(BIO* h);
+ static int socket_free(BIO* data);
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static BIO_METHOD methods_socket = {
+ BIO_TYPE_BIO,
+ "socket",
+@@ -98,16 +99,36 @@ static BIO_METHOD methods_socket = {
+ };
+
+ BIO_METHOD* BIO_s_socket2() { return(&methods_socket); }
++#else
++static BIO_METHOD *methods_socket = NULL;
++
++static const BIO_METHOD * BIO_s_socket2(void) {
++ if (methods_socket == NULL) {
++ methods_socket = BIO_meth_new (BIO_TYPE_BIO | BIO_get_new_index (), "socket");
++ if (methods_socket == NULL ||
++ BIO_meth_set_write (methods_socket, socket_write) ||
++ BIO_meth_set_read (methods_socket, socket_read) ||
++ BIO_meth_set_puts (methods_socket, socket_puts) ||
++ BIO_meth_set_gets (methods_socket, 0) ||
++ BIO_meth_set_ctrl (methods_socket, socket_ctrl) ||
++ BIO_meth_set_create (methods_socket, socket_new) ||
++ BIO_meth_set_destroy (methods_socket, socket_free))
++ return NULL;
++ }
++ return methods_socket;
++}
++#endif
+
+ BIO* BIO_new_socket(talk_base::AsyncSocket* socket) {
+ BIO* ret = BIO_new(BIO_s_socket2());
+ if (ret == NULL) {
+ return NULL;
+ }
+- ret->ptr = socket;
++ BIO_set_data(ret, socket);
+ return ret;
+ }
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static int socket_new(BIO* b) {
+ b->shutdown = 0;
+ b->init = 1;
+@@ -115,6 +136,14 @@ static int socket_new(BIO* b) {
+ b->ptr = 0;
+ return 1;
+ }
++#else
++static int socket_new(BIO* b) {
++ BIO_set_shutdown(b, 0);
++ BIO_set_init(b, 1);
++ BIO_set_data(b, 0);
++ return 1;
++}
++#endif
+
+ static int socket_free(BIO* b) {
+ if (b == NULL)
+@@ -125,13 +154,11 @@ static int socket_free(BIO* b) {
+ static int socket_read(BIO* b, char* out, int outl) {
+ if (!out)
+ return -1;
+- talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(b->ptr);
++ talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(BIO_get_data(b));
+ BIO_clear_retry_flags(b);
+ int result = socket->Recv(out, outl);
+ if (result > 0) {
+ return result;
+- } else if (result == 0) {
+- b->num = 1;
+ } else if (socket->IsBlocking()) {
+ BIO_set_retry_read(b);
+ }
+@@ -141,7 +168,7 @@ static int socket_read(BIO* b, char* out
+ static int socket_write(BIO* b, const char* in, int inl) {
+ if (!in)
+ return -1;
+- talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(b->ptr);
++ talk_base::AsyncSocket* socket = static_cast<talk_base::AsyncSocket*>(BIO_get_data(b));
+ BIO_clear_retry_flags(b);
+ int result = socket->Send(in, inl);
+ if (result > 0) {
+@@ -164,7 +191,6 @@ static long socket_ctrl(BIO* b, int cmd,
+ case BIO_CTRL_RESET:
+ return 0;
+ case BIO_CTRL_EOF:
+- return b->num;
+ case BIO_CTRL_WPENDING:
+ case BIO_CTRL_PENDING:
+ return 0;
+@@ -696,7 +722,9 @@ bool OpenSSLAdapter::VerifyServerName(SS
+ // We assign this to a local variable, instead of passing the address
+ // directly to ASN1_item_d2i.
+ // See http://readlist.com/lists/openssl.org/openssl-users/0/4761.html.
+- unsigned char* ext_value_data = extension->value->data;
++ ASN1_OCTET_STRING *extension_data = X509_EXTENSION_get_data(extension);
++ unsigned char* ext_value_data = extension_data->data;
++ long length = extension_data->length;
+
+ #if OPENSSL_VERSION_NUMBER >= 0x0090800fL
+ const unsigned char **ext_value_data_ptr =
+@@ -707,10 +735,10 @@ bool OpenSSLAdapter::VerifyServerName(SS
+
+ if (meth->it) {
+ ext_str = ASN1_item_d2i(NULL, ext_value_data_ptr,
+- extension->value->length,
++ length,
+ ASN1_ITEM_ptr(meth->it));
+ } else {
+- ext_str = meth->d2i(NULL, ext_value_data_ptr, extension->value->length);
++ ext_str = meth->d2i(NULL, ext_value_data_ptr, length);
+ }
+
+ STACK_OF(CONF_VALUE)* value = meth->i2v(meth, ext_str, NULL);
+diff -up libjingle-0.6.14/talk/base/opensslidentity.cc.openssl11 libjingle-0.6.14/talk/base/opensslidentity.cc
+--- libjingle-0.6.14/talk/base/opensslidentity.cc.openssl11 2017-02-20 15:58:26.642105790 -0500
++++ libjingle-0.6.14/talk/base/opensslidentity.cc 2017-02-20 16:04:05.130707597 -0500
+@@ -168,7 +168,12 @@ OpenSSLKeyPair::~OpenSSLKeyPair() {
+ }
+
+ void OpenSSLKeyPair::AddReference() {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ CRYPTO_add(&pkey_->references, 1, CRYPTO_LOCK_EVP_PKEY);
++#else
++ EVP_PKEY_up_ref(pkey_);
++#endif
++
+ }
+
+ #ifdef _DEBUG
+@@ -314,7 +319,11 @@ std::string OpenSSLCertificate::ToPEMStr
+ }
+
+ void OpenSSLCertificate::AddReference() {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ CRYPTO_add(&x509_->references, 1, CRYPTO_LOCK_X509);
++#else
++ X509_up_ref(x509_);
++#endif
+ }
+
+ OpenSSLIdentity* OpenSSLIdentity::Generate(const std::string& common_name) {
+diff -up libjingle-0.6.14/talk/base/opensslstreamadapter.cc.openssl11 libjingle-0.6.14/talk/base/opensslstreamadapter.cc
+--- libjingle-0.6.14/talk/base/opensslstreamadapter.cc.openssl11 2017-02-20 16:05:03.402259071 -0500
++++ libjingle-0.6.14/talk/base/opensslstreamadapter.cc 2017-02-20 16:12:45.682795913 -0500
+@@ -86,6 +86,7 @@ static long stream_ctrl(BIO* h, int cmd,
+ static int stream_new(BIO* h);
+ static int stream_free(BIO* data);
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static BIO_METHOD methods_stream = {
+ BIO_TYPE_BIO,
+ "stream",
+@@ -100,17 +101,37 @@ static BIO_METHOD methods_stream = {
+ };
+
+ static BIO_METHOD* BIO_s_stream() { return(&methods_stream); }
++#else
++static BIO_METHOD *methods_stream = NULL;
++
++static const BIO_METHOD * BIO_s_stream(void) {
++ if (methods_stream == NULL) {
++ methods_stream = BIO_meth_new (BIO_TYPE_BIO | BIO_get_new_index (), "stream");
++ if (methods_stream == NULL ||
++ BIO_meth_set_write (methods_stream, stream_write) ||
++ BIO_meth_set_read (methods_stream, stream_read) ||
++ BIO_meth_set_puts (methods_stream, stream_puts) ||
++ BIO_meth_set_gets (methods_stream, 0) ||
++ BIO_meth_set_ctrl (methods_stream, stream_ctrl) ||
++ BIO_meth_set_create (methods_stream, stream_new) ||
++ BIO_meth_set_destroy (methods_stream, stream_free))
++ return NULL;
++ }
++ return methods_stream;
++}
++#endif
+
+ static BIO* BIO_new_stream(StreamInterface* stream) {
+ BIO* ret = BIO_new(BIO_s_stream());
+ if (ret == NULL)
+ return NULL;
+- ret->ptr = stream;
++ BIO_set_data(ret, stream);
+ return ret;
+ }
+
+ // bio methods return 1 (or at least non-zero) on success and 0 on failure.
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static int stream_new(BIO* b) {
+ b->shutdown = 0;
+ b->init = 1;
+@@ -118,6 +139,14 @@ static int stream_new(BIO* b) {
+ b->ptr = 0;
+ return 1;
+ }
++#else
++static int stream_new(BIO* b) {
++ BIO_set_shutdown(b, 0);
++ BIO_set_init(b, 1);
++ BIO_set_data(b, 0);
++ return 1;
++}
++#endif
+
+ static int stream_free(BIO* b) {
+ if (b == NULL)
+@@ -128,15 +157,13 @@ static int stream_free(BIO* b) {
+ static int stream_read(BIO* b, char* out, int outl) {
+ if (!out)
+ return -1;
+- StreamInterface* stream = static_cast<StreamInterface*>(b->ptr);
++ StreamInterface* stream = static_cast<StreamInterface*>(BIO_get_data(b));
+ BIO_clear_retry_flags(b);
+ size_t read;
+ int error;
+ StreamResult result = stream->Read(out, outl, &read, &error);
+ if (result == SR_SUCCESS) {
+ return read;
+- } else if (result == SR_EOS) {
+- b->num = 1;
+ } else if (result == SR_BLOCK) {
+ BIO_set_retry_read(b);
+ }
+@@ -146,7 +173,7 @@ static int stream_read(BIO* b, char* out
+ static int stream_write(BIO* b, const char* in, int inl) {
+ if (!in)
+ return -1;
+- StreamInterface* stream = static_cast<StreamInterface*>(b->ptr);
++ StreamInterface* stream = static_cast<StreamInterface*>(BIO_get_data(b));
+ BIO_clear_retry_flags(b);
+ size_t written;
+ int error;
+@@ -171,7 +198,6 @@ static long stream_ctrl(BIO* b, int cmd,
+ case BIO_CTRL_RESET:
+ return 0;
+ case BIO_CTRL_EOF:
+- return b->num;
+ case BIO_CTRL_WPENDING:
+ case BIO_CTRL_PENDING:
+ return 0;
+--- libjingle/talk/base/openssldigest.cc.orig 2017-05-11 15:33:00.221086766 +0000
++++ libjingle/talk/base/openssldigest.cc 2017-05-11 15:33:52.414339449 +0000
+@@ -32,16 +32,16 @@
+ namespace talk_base {
+
+ OpenSSLDigest::OpenSSLDigest(const std::string& algorithm) {
+- EVP_MD_CTX_init(&ctx_);
++ EVP_MD_CTX_init(ctx_);
+ if (GetDigestEVP(algorithm, &md_)) {
+- EVP_DigestInit_ex(&ctx_, md_, NULL);
++ EVP_DigestInit_ex(ctx_, md_, NULL);
+ } else {
+ md_ = NULL;
+ }
+ }
+
+ OpenSSLDigest::~OpenSSLDigest() {
+- EVP_MD_CTX_cleanup(&ctx_);
++ EVP_MD_CTX_destroy(ctx_);
+ }
+
+ size_t OpenSSLDigest::Size() const {
+@@ -55,16 +55,16 @@
+ if (!md_) {
+ return;
+ }
+- EVP_DigestUpdate(&ctx_, buf, len);
++ EVP_DigestUpdate(ctx_, buf, len);
+ }
+
+ size_t OpenSSLDigest::Finish(void* buf, size_t len) {
+ if (!md_ || len < Size()) {
+ return 0;
+ }
+ unsigned int md_len;
+- EVP_DigestFinal_ex(&ctx_, static_cast<unsigned char*>(buf), &md_len);
+- EVP_DigestInit_ex(&ctx_, md_, NULL); // prepare for future Update()s
++ EVP_DigestFinal_ex(ctx_, static_cast<unsigned char*>(buf), &md_len);
++ EVP_DigestInit_ex(ctx_, md_, NULL); // prepare for future Update()s
+ ASSERT(md_len == Size());
+ return md_len;
+ }
+--- libjingle/talk/base/openssldigest.h.orig 2017-05-11 15:31:56.341185527 +0000
++++ libjingle/talk/base/openssldigest.h 2017-05-11 15:32:49.631103132 +0000
+@@ -55,7 +55,7 @@
+ size_t* len);
+
+ private:
+- EVP_MD_CTX ctx_;
++ EVP_MD_CTX* ctx_ = EVP_MD_CTX_create();
+ const EVP_MD* md_;
+ };
+