]> git.sur5r.net Git - openldap/commitdiff
ITS#8648 init SASL library in global init
authorRyan Tandy <ryan@nardis.ca>
Fri, 5 May 2017 03:08:07 +0000 (03:08 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 10 May 2017 16:50:59 +0000 (09:50 -0700)
libraries/libldap/cyrus.c
libraries/libldap/init.c

index c6334988f26db3919ed738119d94d727001e9499..cc12502357b920fefb150f13124b94c63df16cbc 100644 (file)
@@ -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;
        }
index 413121df3e80ae82c30dfb408cae4b97092030e5..39ad7ce7c4be4043753dfbd218ccbb28e73f07c6 100644 (file)
@@ -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 ) {