From: Ryan Tandy Date: Fri, 5 May 2017 03:08:07 +0000 (+0000) Subject: ITS#8648 init SASL library in global init X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=431c4af526b18abb4a18c2c4c8655690b753cbe5;p=openldap ITS#8648 init SASL library in global init --- diff --git a/libraries/libldap/cyrus.c b/libraries/libldap/cyrus.c index 53c5e70428..41322ff43e 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 ); @@ -936,8 +927,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 d5e125c216..3e602dff9a 100644 --- a/libraries/libldap/init.c +++ b/libraries/libldap/init.c @@ -662,6 +662,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 ) {