]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-meta/bind.c
Drop unnecessary memset()s
[openldap] / servers / slapd / back-meta / bind.c
index 84bd5ec45b18dc3aa4bf3a3ae92091a54362b38c..0f450bef669f91bfcba697769825ada9b2aae134 100644 (file)
@@ -168,9 +168,7 @@ meta_back_bind( Operation *op, SlapReply *rs )
                                        BER_BVZERO( &msc->msc_bound_ndn );
                                }
 
-                               if ( LDAP_BACK_SAVECRED( mi ) &&
-                                       !BER_BVISNULL( &msc->msc_cred ) )
-                               {
+                               if ( !BER_BVISNULL( &msc->msc_cred ) ) {
                                        /* destroy sensitive data */
                                        memset( msc->msc_cred.bv_val, 0,
                                                msc->msc_cred.bv_len );
@@ -222,7 +220,7 @@ retry_lock:;
 
                        assert( mc->mc_refcnt == 1 );
 #if META_BACK_PRINT_CONNTREE > 0
-                       meta_back_print_conntree( mi->mi_conninfo.lai_tree, ">>> meta_back_bind" );
+                       meta_back_print_conntree( mi, ">>> meta_back_bind" );
 #endif /* META_BACK_PRINT_CONNTREE */
                        tmpmc = avl_delete( &mi->mi_conninfo.lai_tree, (caddr_t)mc,
                                meta_back_conndn_cmp );
@@ -254,12 +252,12 @@ retry_lock:;
                        ber_bvreplace( &mc->mc_local_ndn, &op->o_req_ndn );
                        if ( isroot ) {
                                LDAP_BACK_CONN_ISPRIV_SET( mc );
-                               mc->mc_conn = LDAP_BACK_PCONN_SET( op );
+                               LDAP_BACK_PCONN_SET( mc, op );
                        }
                        lerr = avl_insert( &mi->mi_conninfo.lai_tree, (caddr_t)mc,
                                meta_back_conndn_cmp, meta_back_conndn_dup );
 #if META_BACK_PRINT_CONNTREE > 0
-                       meta_back_print_conntree( mi->mi_conninfo.lai_tree, "<<< meta_back_bind" );
+                       meta_back_print_conntree( mi, "<<< meta_back_bind" );
 #endif /* META_BACK_PRINT_CONNTREE */
                        ldap_pvt_thread_mutex_unlock( &mi->mi_conninfo.lai_mutex );
                        if ( lerr == -1 ) {
@@ -401,9 +399,7 @@ retry:;
                                op->o_log_prefix, candidate, (void *)msc->msc_ld );
 #endif /* DEBUG_205 */
 
-                       ldap_unbind_ext( msc->msc_ld, NULL, NULL );
-                       msc->msc_ld = NULL;
-                       LDAP_BACK_CONN_BINDING_CLEAR( msc );
+                       meta_clear_one_candidate( op, mc, candidate );
                        ldap_pvt_thread_mutex_unlock( &mi->mi_conninfo.lai_mutex );
 
                        rs->sr_err = timeout_err;
@@ -471,7 +467,7 @@ meta_back_single_bind(
                BER_BVZERO( &msc->msc_bound_ndn );
        }
 
-       if ( LDAP_BACK_SAVECRED( mi ) && !BER_BVISNULL( &msc->msc_cred ) ) {
+       if ( !BER_BVISNULL( &msc->msc_cred ) ) {
                /* destroy sensitive data */
                memset( msc->msc_cred.bv_val, 0, msc->msc_cred.bv_len );
                ch_free( msc->msc_cred.bv_val );
@@ -523,6 +519,10 @@ meta_back_single_bind(
        mc->mc_authz_target = candidate;
 
        if ( LDAP_BACK_SAVECRED( mi ) ) {
+               if ( !BER_BVISNULL( &msc->msc_cred ) ) {
+                       memset( msc->msc_cred.bv_val, 0,
+                               msc->msc_cred.bv_len );
+               }
                ber_bvreplace( &msc->msc_cred, &op->orb_cred );
                ldap_set_rebind_proc( msc->msc_ld, mt->mt_rebind_f, msc );
        }
@@ -681,7 +681,8 @@ retry_binding:;
                        ++bound;
                        continue;
 
-               } else if ( LDAP_BACK_CONN_BINDING( msc ) ) {
+               } else if ( META_BACK_CONN_CREATING( msc ) || LDAP_BACK_CONN_BINDING( msc ) )
+               {
                        ldap_pvt_thread_mutex_unlock( &mi->mi_conninfo.lai_mutex );
                        ldap_pvt_thread_yield();
                        goto retry_binding;
@@ -708,7 +709,7 @@ retry_binding:;
 
 
                        if ( rc == LDAP_UNAVAILABLE ) {
-                               /* FIXME: meta_back_retry() already calls
+                               /* FIXME: meta_back_retry() already re-calls
                                 * meta_back_single_dobind() */
                                if ( meta_back_retry( op, rs, &mc, i, sendok ) ) {
                                        goto retry_ok;
@@ -718,6 +719,7 @@ retry_binding:;
                                        ldap_pvt_thread_mutex_lock( &mi->mi_conninfo.lai_mutex );
                                        LDAP_BACK_CONN_BINDING_CLEAR( msc );
                                        ldap_pvt_thread_mutex_unlock( &mi->mi_conninfo.lai_mutex );
+                                       meta_back_release_conn( op, mc );
                                }
 
                                return 0;