+#ifdef HAVE_CYRUS_SASL
+ } else {
+ assert( conn->c_sasl_bind_context == NULL );
+#endif
+#endif
+ }
+
+ ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+
+ edn = NULL;
+ rc = sasl_bind( conn, op, dn, ndn, mech, &cred, &edn );
+
+ if( rc == LDAP_SUCCESS ) {
+ ldap_pvt_thread_mutex_lock( &conn->c_mutex );
+#ifdef HAVE_CYRUS_SASL
+ assert( conn->c_sasl_bind_context == NULL );
+#endif
+ conn->c_dn = edn;
+ ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+
+ } else if ( rc == LDAP_SASL_BIND_IN_PROGRESS ) {
+#ifdef HAVE_CYRUS_SASL
+ assert( conn->c_sasl_bind_context != NULL );
+#endif
+ conn->c_sasl_bind_mech = mech;
+ mech = NULL;
+
+#ifdef HAVE_CYRUS_SASL