Note that the mech stored in the void *defaults structure is useless
because we can't look inside the structure, and the mech list is needed
as input to the SASL library, before any callbacks are called. It seems
the mech doesn't belong in the *defaults struct, and/or it should be
visible and not opaque.
void *defaults )
{
int rc;
+ char *smechs = NULL;
#if defined( LDAP_R_COMPILE ) && defined( HAVE_CYRUS_SASL )
ldap_pvt_thread_mutex_lock( &ldap_int_sasl_mutex );
} else
#endif
if( mechs == NULL || *mechs == '\0' ) {
- char *smechs;
-
+ mechs = ld->ld_options.ldo_def_sasl_mech;
+ }
+
+ if( mechs == NULL || *mechs == '\0' ) {
rc = ldap_pvt_sasl_getmechs( ld, &smechs );
if( rc != LDAP_SUCCESS ) {
goto done;
#if defined( LDAP_R_COMPILE ) && defined( HAVE_CYRUS_SASL )
ldap_pvt_thread_mutex_unlock( &ldap_int_sasl_mutex );
#endif
+ if ( smechs ) LDAP_FREE( smechs );
return rc;
}