]> git.sur5r.net Git - openldap/commitdiff
ITS#6189
authorQuanah Gibson-Mount <quanah@openldap.org>
Sun, 28 Jun 2009 16:51:59 +0000 (16:51 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Sun, 28 Jun 2009 16:51:59 +0000 (16:51 +0000)
CHANGES
servers/slapd/connection.c

diff --git a/CHANGES b/CHANGES
index 0c6b474ec5f8ef4791a9a0aa0f89d97a63774416..961d69eab88e6b6e14061144c2b8eee6f845a27e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,7 @@ OpenLDAP 2.4.17 Engineering
        Fixed slapd abandon/cancel handling for some ops (ITS#6157)
        Fixed slapd access setstyle to expand (ITS#6179)
        Fixed slapd assert with closing connections (ITS#6111)
+       Fixed slapd bind race condition (ITS#6189)
        Fixed slapd cancel behavior (ITS#6137)
        Fixed slapd cert validation (ITS#6098)
        Fixed slapd errno handling (ITS#6037)
index cb818a4a9edb6029fe7827928de8c8433098047e..81ba89f6815feed7c2b7a7ec9216a7c4897dc135 100644 (file)
@@ -1127,6 +1127,9 @@ operations_error:
 
        ldap_pvt_thread_mutex_lock( &conn->c_mutex );
 
+       if ( opidx == SLAP_OP_BIND && conn->c_conn_state == SLAP_C_BINDING )
+               conn->c_conn_state = SLAP_C_ACTIVE;
+
        cancel = op->o_cancel;
        if ( cancel != SLAP_CANCEL_NONE && cancel != SLAP_CANCEL_DONE ) {
                if ( cancel == SLAP_CANCEL_REQ ) {
@@ -1534,6 +1537,8 @@ connection_input( Connection *conn , conn_readinfo *cri )
        ctx = cri->ctx;
        op = slap_op_alloc( ber, msgid, tag, conn->c_n_ops_received++, ctx );
 
+       Debug( LDAP_DEBUG_TRACE, "op tag %d, time %d\n", tag, op->o_time, 0);
+
        op->o_conn = conn;
        /* clear state if the connection is being reused from inactive */
        if ( conn->c_conn_state == SLAP_C_INACTIVE ) {
@@ -1719,8 +1724,6 @@ static int connection_bind_cleanup_cb( Operation *op, SlapReply *rs )
 static int connection_bind_cb( Operation *op, SlapReply *rs )
 {
        ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );
-       if ( op->o_conn->c_conn_state == SLAP_C_BINDING )
-               op->o_conn->c_conn_state = SLAP_C_ACTIVE;
        op->o_conn->c_sasl_bind_in_progress =
                ( rs->sr_err == LDAP_SASL_BIND_IN_PROGRESS );