File 0224-ITS-8648-init-SASL-library-in-global-init.patch of Package openldap2-client
From e1968bd5428526cf0daac6cc5128b7b247c5f69c Mon Sep 17 00:00:00 2001
From: Ryan Tandy <ryan@nardis.ca>
Date: Fri, 5 May 2017 03:08:07 +0000
Subject: [PATCH] ITS#8648 init SASL library in global init
---
libraries/libldap/cyrus.c | 17 +++--------------
libraries/libldap/init.c | 6 ++++++
2 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/libraries/libldap/cyrus.c b/libraries/libldap/cyrus.c
index 5860182e18..9581def675 100644
--- a/libraries/libldap/cyrus.c
+++ b/libraries/libldap/cyrus.c
@@ -69,11 +69,11 @@ static const sasl_callback_t client_callbacks[] = {
{ SASL_CB_LIST_END, NULL, NULL }
};
+/*
+ * ldap_int_initialize is responsible for calling this only once.
+ */
int ldap_int_sasl_init( void )
{
- /* XXX not threadsafe */
- static int sasl_initialized = 0;
-
#ifdef HAVE_SASL_VERSION
/* stringify the version number, sasl.h doesn't do it for us */
#define VSTR0(maj, min, pat) #maj "." #min "." #pat
@@ -96,9 +96,6 @@ int ldap_int_sasl_init( void )
}
}
#endif
- if ( sasl_initialized ) {
- return 0;
- }
/* SASL 2 takes care of its own memory completely internally */
#if SASL_VERSION_MAJOR < 2 && !defined(CSRIMALLOC)
@@ -118,7 +115,6 @@ int ldap_int_sasl_init( void )
#endif
if ( sasl_client_init( NULL ) == SASL_OK ) {
- sasl_initialized = 1;
return 0;
}
@@ -329,11 +325,6 @@ ldap_int_sasl_open(
return ld->ld_errno;
}
- if ( ldap_int_sasl_init() ) {
- ld->ld_errno = LDAP_LOCAL_ERROR;
- return ld->ld_errno;
- }
-
#if SASL_VERSION_MAJOR >= 2
rc = sasl_client_new( "ldap", host, NULL, NULL,
client_callbacks, 0, &ctx );
@@ -913,8 +904,6 @@ int
ldap_int_sasl_get_option( LDAP *ld, int option, void *arg )
{
if ( option == LDAP_OPT_X_SASL_MECHLIST ) {
- if ( ldap_int_sasl_init() )
- return -1;
*(char ***)arg = (char **)sasl_global_listmech();
return 0;
}
diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c
index f9901d1fce..bbdc1e7da1 100644
--- a/libraries/libldap/init.c
+++ b/libraries/libldap/init.c
@@ -658,6 +658,12 @@ void ldap_int_initialize( struct ldapoptions *gopts, int *dbglvl )
if ( ldap_int_tblsize == 0 ) ldap_int_ip_init();
#endif
+#ifdef HAVE_CYRUS_SASL
+ if ( ldap_int_sasl_init() != 0 ) {
+ return;
+ }
+#endif
+
ldap_int_initialize_global_options(gopts, dbglvl);
if( getenv("LDAPNOINIT") != NULL ) {
--
2.35.3