diff options
-rw-r--r-- | libre/kdenetwork-kopete/PKGBUILD | 27 | ||||
-rw-r--r-- | libre/kdenetwork-kopete/kopete-openssl-1.1.patch | 300 |
2 files changed, 316 insertions, 11 deletions
diff --git a/libre/kdenetwork-kopete/PKGBUILD b/libre/kdenetwork-kopete/PKGBUILD index e037cd155..5e7910bf0 100644 --- a/libre/kdenetwork-kopete/PKGBUILD +++ b/libre/kdenetwork-kopete/PKGBUILD @@ -5,8 +5,8 @@ # Maintainer: André Silva <emulatorman@parabola.nu> pkgname=kdenetwork-kopete -pkgver=17.04.0 -pkgrel=3.parabola1 +pkgver=17.04.3 +pkgrel=1.parabola1 pkgdesc='Instant Messenger, without nonfree Skype support' url='https://kde.org/applications/internet/kopete/' arch=('i686' 'x86_64' 'armv7h') @@ -16,14 +16,19 @@ replaces=(${pkgname}-libre) conflicts=(${pkgname}-libre) depends=('kdebase-runtime' 'libotr' 'qimageblitz' 'kdepimlibs4' 'qca-qt4') makedepends=('cmake' 'automoc4' 'boost' 'mediastreamer' 'libgadu' 'jsoncpp') -optdepends=('mediastreamer: jingle support' 'libgadu: Gadu-Gadu protocol') +optdepends=('mediastreamer: jingle support' + 'libgadu: Gadu-Gadu protocol') source=("https://download.kde.org/stable/applications/${pkgver}/src/kopete-${pkgver}.tar.xz"{,.sig} - kopete-mediastreamer2.14.patch kopete-pthread-link.patch) -sha256sums=('50dab3e927a992bb30a801edb1dab50526ab0f04744b558be15a17b94f2cb3f1' + kopete-mediastreamer2.14.patch + kopete-pthread-link.patch + kopete-openssl-1.1.patch) +sha512sums=('d9c2ccec7f72e68090cd72632884b86f6b5a9cdd7fd3d23c1dedf3fe0331296d0b750c48050b80f36a58b92815e240983ab2c96eebb18997235c2a22bc4d2b26' 'SKIP' - 'c34a268aaa058e563174581dbe37c15fed91e82326ec704d2a872463139865e0' - 'a7ebdd8dd4336b7ec085ef254bf18040f473b73379a8cd84569b28441a6c71df') -validpgpkeys=(CA262C6C83DE4D2FB28A332A3A6A4DB839EAA6D7) # Albert Astals Cid <aacid@kde.org> + '6aac8084becfc619a6746828573242ddd0d901cc4c8fa4feb3477a395605330242e2d8a8636b319b1a5afb91074e07e1dd4dd1a8d7a8cfe332b9783526571e6a' + '7200c6f580425ef41b27d885ea73301772f75e0a26c829c1741eeb22c084a0f703baea85863522ebf78d55865fe84d725624da6443c6e3174e8a16644a5bf2db' + '4aaec507b162c5ec94762704222f37cd8c72a6ce9d2853f8f7d1d8ff6ba777b53acf6dcb660f5647bdcf291633a0e8272948cfb4c0698640a5f2927e7a276885') +validpgpkeys=(CA262C6C83DE4D2FB28A332A3A6A4DB839EAA6D7 # Albert Astals Cid <aacid@kde.org> + F23275E4BF10AFC1DF6914A6DBD2CE893E2D1C87) # Christoph Feck <cfeck@kde.org> prepare() { cd kopete-$pkgver @@ -38,6 +43,9 @@ prepare() { patch -p1 -i ../kopete-mediastreamer2.14.patch # Fix linking to pthread in libjingle-call patch -p1 -i ../kopete-pthread-link.patch +# Fix build with OpenSSL 1.1 (based on Fedora patch for libjingle) + cd protocols/jabber/libjingle + patch -p1 -i "$srcdir"/kopete-openssl-1.1.patch } build() { @@ -48,9 +56,6 @@ build() { -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_SKIP_RPATH=ON \ -DWITH_Libmsn=OFF \ - -DOPENSSL_INCLUDE_DIR=/usr/include/openssl-1.0 \ - -DOPENSSL_SSL_LIBRARY=/usr/lib/openssl-1.0/libssl.so \ - -DOPENSSL_CRYPTO_LIBRARY=/usr/lib/openssl-1.0/libcrypto.so \ -DWITH_skype=OFF make } diff --git a/libre/kdenetwork-kopete/kopete-openssl-1.1.patch b/libre/kdenetwork-kopete/kopete-openssl-1.1.patch new file mode 100644 index 000000000..ed09a6a1e --- /dev/null +++ b/libre/kdenetwork-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_; + }; + |