]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Remember and clear bind status correctly
authorOndřej Kuzník <ondra@mistotebe.net>
Fri, 23 Jun 2017 09:10:03 +0000 (10:10 +0100)
committerOndřej Kuzník <okuznik@symas.com>
Tue, 17 Nov 2020 17:55:46 +0000 (17:55 +0000)
servers/lloadd/bind.c

index 4757024cc5eccf90a3fdce2c164d054a749a556c..6a2de443c187beae6ca7a981b88472c2b6d2bc24 100644 (file)
@@ -315,6 +315,9 @@ client_bind( Connection *client, Operation *op )
     client->c_type = SLAP_C_OPEN;
 
     client_reset( client );
+
+    rc = tavl_insert( &client->c_ops, op, operation_client_cmp, avl_dup_error );
+    assert( rc == LDAP_SUCCESS );
     CONNECTION_UNLOCK_INCREF(client);
 
     upstream = backend_select( op );
@@ -355,10 +358,18 @@ client_bind( Connection *client, Operation *op )
 
     if ( !--op->o_client_refcnt ) {
         operation_destroy_from_client( op );
-    } else {
-        rc = tavl_insert(
-                &client->c_ops, op, operation_client_cmp, avl_dup_error );
-        assert( rc == LDAP_SUCCESS );
+        if ( client->c_state == SLAP_C_BINDING ) {
+            client->c_state = SLAP_C_READY;
+            client->c_type = SLAP_C_OPEN;
+            if ( !BER_BVISNULL( &client->c_auth ) ) {
+                ber_memfree( client->c_auth.bv_val );
+                BER_BVZERO( &client->c_auth );
+            }
+            if ( !BER_BVISNULL( &client->c_sasl_bind_mech ) ) {
+                ber_memfree( client->c_sasl_bind_mech.bv_val );
+                BER_BVZERO( &client->c_sasl_bind_mech );
+            }
+        }
     }
 
     return rc;