summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libre/kdenetwork-kopete/PKGBUILD27
-rw-r--r--libre/kdenetwork-kopete/kopete-openssl-1.1.patch300
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_;
+ };
+