This is a multi-part message in MIME format.
--------------010505020103090906040401
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

This might be a better patch, if the build system change is acceptable.

--------------010505020103090906040401
Content-Type: text/x-patch;
 name="0001-ITS-7877-detect-whether-gnutls-uses-gcrypt.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="0001-ITS-7877-detect-whether-gnutls-uses-gcrypt.patch"

>From e904900beb419576abc098e96deda04e53119603 Mon Sep 17 00:00:00 2001
From: Ryan Tandy <[email protected]>
Date: Fri, 20 Jun 2014 14:44:23 -0700
Subject: [PATCH] ITS#7877 detect whether gnutls uses gcrypt

---
 configure.in              | 14 ++++++++++++++
 libraries/libldap/tls_g.c | 20 ++++++++++++++++++--
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/configure.in b/configure.in
index 84bfc8a..27fe13a 100644
--- a/configure.in
+++ b/configure.in
@@ -1223,6 +1223,20 @@ if test $ol_link_tls = no ; then
        fi
 fi
 
+if test $ol_with_tls = gnutls ; then
+       AC_CHECK_HEADERS(gcrypt.h)
+
+       if test $ac_cv_header_gcrypt_h = yes ; then
+               AC_CHECK_LIB(gnutls, gcry_cipher_open,
+                       [have_gnutls_gcrypt=yes], [have_gnutls_gcrypt=no])
+
+               if test $have_gnutls_gcrypt = yes ; then
+                       AC_DEFINE(HAVE_GNUTLS_GCRYPT, 1,
+                               [define if GnuTLS is using GCrypt])
+               fi
+       fi
+fi
+
 dnl NOTE: caller must specify -I/path/to/nspr4 and -I/path/to/nss3
 dnl and -L/path/to/nspr4 libs and -L/path/to/nss3 libs if those libs
 dnl are not in the default system location
diff --git a/libraries/libldap/tls_g.c b/libraries/libldap/tls_g.c
index ee83b5c..417c768 100644
--- a/libraries/libldap/tls_g.c
+++ b/libraries/libldap/tls_g.c
@@ -43,10 +43,16 @@
 
 #include <gnutls/gnutls.h>
 #include <gnutls/x509.h>
-#include <gcrypt.h>
 
 #if LIBGNUTLS_VERSION_NUMBER >= 0x020200
 #define        HAVE_CIPHERSUITES       1
+#else
+#undef HAVE_CIPHERSUITES
+#endif
+
+#ifdef HAVE_GNUTLS_GCRYPT
+#include <gcrypt.h>
+#if LIBGNUTLS_VERSION_NUMBER >= 0x020200
 /* This is a kludge. gcrypt 1.4.x has support. Recent GnuTLS requires gcrypt 
1.4.x
  * but that dependency isn't reflected in their configure script, resulting in
  * build errors on older gcrypt. So, if they have a working build environment,
@@ -54,9 +60,9 @@
  */
 #define HAVE_GCRYPT_RAND       1
 #else
-#undef HAVE_CIPHERSUITES
 #undef HAVE_GCRYPT_RAND
 #endif
+#endif
 
 #ifndef HAVE_CIPHERSUITES
 /* Versions prior to 2.2.0 didn't handle cipher suites, so we had to
@@ -143,6 +149,15 @@ tlsg_mutex_unlock( void **lock )
        return ldap_pvt_thread_mutex_unlock( *lock );
 }
 
+#if GNUTLS_VERSION_NUMBER >= 0x020b00
+tlsg_thr_init( void )
+{
+       gnutls_global_set_mutex (tlsg_mutex_init,
+               tlsg_mutex_destroy,
+               tlsg_mutex_lock,
+               tlsg_mutex_unlock);
+}
+#else
 static struct gcry_thread_cbs tlsg_thread_cbs = {
        GCRY_THREAD_OPTION_USER,
        NULL,
@@ -158,6 +173,7 @@ tlsg_thr_init( void )
 {
        gcry_control (GCRYCTL_SET_THREAD_CBS, &tlsg_thread_cbs);
 }
+#endif
 #endif /* LDAP_R_COMPILE */
 
 /*
-- 
1.9.1


--------------010505020103090906040401--


Reply via email to