commit:     d4f23796f967afde488c80117818668369ecbf4b
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Sun May 22 09:05:10 2016 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Sun May 22 09:05:36 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d4f23796

app-pda/libimobiledevice: Apply upstream patch for newer gnutls (#582758)

Package-Manager: portage-2.3.0_rc1

 app-pda/libimobiledevice/files/gnutls-3.4.patch    | 51 ++++++++++++++++++++++
 .../libimobiledevice/libimobiledevice-1.2.0.ebuild |  4 ++
 2 files changed, 55 insertions(+)

diff --git a/app-pda/libimobiledevice/files/gnutls-3.4.patch 
b/app-pda/libimobiledevice/files/gnutls-3.4.patch
new file mode 100644
index 0000000..9b4b833
--- /dev/null
+++ b/app-pda/libimobiledevice/files/gnutls-3.4.patch
@@ -0,0 +1,51 @@
+From 2a5868411c57e25802d2f16fd6b77601f10d0b72 Mon Sep 17 00:00:00 2001
+From: Nikos Mavrogiannopoulos <[email protected]>
+Date: Fri, 29 Apr 2016 22:58:34 +0200
+Subject: [PATCH] Updated gnutls certificate callback to new API (backwards
+ compatible)
+
+---
+ src/idevice.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/src/idevice.c b/src/idevice.c
+index 5912aeb..f2de6a3 100644
+--- a/src/idevice.c
++++ b/src/idevice.c
+@@ -642,7 +642,11 @@ static const char *ssl_error_to_string(int e)
+ /**
+  * Internally used gnutls callback function that gets called during handshake.
+  */
++#if GNUTLS_VERSION_NUMBER >= 0x020b07
++static int internal_cert_callback(gnutls_session_t session, const 
gnutls_datum_t * req_ca_rdn, int nreqs, const gnutls_pk_algorithm_t * 
sign_algos, int sign_algos_length, gnutls_retr2_st * st)
++#else
+ static int internal_cert_callback(gnutls_session_t session, const 
gnutls_datum_t * req_ca_rdn, int nreqs, const gnutls_pk_algorithm_t * 
sign_algos, int sign_algos_length, gnutls_retr_st * st)
++#endif
+ {
+       int res = -1;
+       gnutls_certificate_type_t type = gnutls_certificate_type_get(session);
+@@ -650,7 +654,12 @@ static int internal_cert_callback(gnutls_session_t 
session, const gnutls_datum_t
+               ssl_data_t ssl_data = 
(ssl_data_t)gnutls_session_get_ptr(session);
+               if (ssl_data && ssl_data->host_privkey && ssl_data->host_cert) {
+                       debug_info("Passing certificate");
++#if GNUTLS_VERSION_NUMBER >= 0x020b07
++                      st->cert_type = type;
++                      st->key_type = GNUTLS_PRIVKEY_X509;
++#else
+                       st->type = type;
++#endif
+                       st->ncerts = 1;
+                       st->cert.x509 = &ssl_data->host_cert;
+                       st->key.x509 = ssl_data->host_privkey;
+@@ -759,7 +768,11 @@ LIBIMOBILEDEVICE_API idevice_error_t 
idevice_connection_enable_ssl(idevice_conne
+       debug_info("enabling SSL mode");
+       errno = 0;
+       gnutls_certificate_allocate_credentials(&ssl_data_loc->certificate);
++#if GNUTLS_VERSION_NUMBER >= 0x020b07
++      gnutls_certificate_set_retrieve_function(ssl_data_loc->certificate, 
internal_cert_callback);
++#else
+       
gnutls_certificate_client_set_retrieve_function(ssl_data_loc->certificate, 
internal_cert_callback);
++#endif
+       gnutls_init(&ssl_data_loc->session, GNUTLS_CLIENT);
+       gnutls_priority_set_direct(ssl_data_loc->session, 
"NONE:+VERS-SSL3.0:+ANON-DH:+RSA:+AES-128-CBC:+AES-256-CBC:+SHA1:+MD5:+COMP-NULL",
 NULL);
+       gnutls_credentials_set(ssl_data_loc->session, GNUTLS_CRD_CERTIFICATE, 
ssl_data_loc->certificate);

diff --git a/app-pda/libimobiledevice/libimobiledevice-1.2.0.ebuild 
b/app-pda/libimobiledevice/libimobiledevice-1.2.0.ebuild
index 0022327..47d6c54 100644
--- a/app-pda/libimobiledevice/libimobiledevice-1.2.0.ebuild
+++ b/app-pda/libimobiledevice/libimobiledevice-1.2.0.ebuild
@@ -38,6 +38,10 @@ DOCS=( AUTHORS NEWS README )
 
 BUILD_DIR="${S}_build"
 
+src_prepare() {
+       epatch "${FILESDIR}/gnutls-3.4.patch"
+}
+
 src_configure() {
        local ECONF_SOURCE=${S}
 

Reply via email to