]> git.sur5r.net Git - openldap/commitdiff
ITS#6103
authorQuanah Gibson-Mount <quanah@openldap.org>
Wed, 13 May 2009 22:19:13 +0000 (22:19 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 13 May 2009 22:19:13 +0000 (22:19 +0000)
CHANGES
servers/slapd/back-bdb/search.c
servers/slapd/backglue.c
servers/slapd/result.c

diff --git a/CHANGES b/CHANGES
index 349f44ee99fbf2c48608ad8d6f4f5120d2f62159..817aa36e5a00267dc0e9424d877179c9e672b8a3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,7 @@ OpenLDAP 2.4.17 Engineering
        Fixed slapd moduleload with static backends and modules (ITS#6016)
        Fixed slapd normalization of updated schema attributes (ITS#5540)
        Fixed slapd pagedresults stacked control with overlays (ITS#6056)
+       Fixed slapd sending cancelled operations results (ITS#6103)
        Fixed slapd sockets usage on windows (ITS#6039)
        Fixed slapd-hdb freeing of already freed entries (ITS#6074)
        Fixed slapd-hdb entryinfo cleanup (ITS#6088)
index 09faf8ebe970d9d6796c9ea12dc98863ae7fb491..9308731e329504401afcca09a47883819f296a2b 100644 (file)
@@ -668,6 +668,7 @@ loop_begin:
                /* check for abandon */
                if ( op->o_abandon ) {
                        rs->sr_err = SLAPD_ABANDON;
+                       send_ldap_result( op, rs );
                        goto done;
                }
 
index b3ca5d48322e997f3a384d0736eb455339b88b80..b7bff32748e4029029f57192a522b27dd96e548b 100644 (file)
@@ -535,17 +535,18 @@ end_of_loop:;
 
                break;
        }
+
+       op->o_callback = cb.sc_next;
        if ( op->o_abandon ) {
                rs->sr_err = SLAPD_ABANDON;
        } else {
-               op->o_callback = cb.sc_next;
                rs->sr_err = gs.err;
                rs->sr_matched = gs.matched;
                rs->sr_ref = gs.refs;
-               rs->sr_ctrls = gs.ctrls;
-
-               send_ldap_result( op, rs );
        }
+       rs->sr_ctrls = gs.ctrls;
+
+       send_ldap_result( op, rs );
 
        op->o_bd = b0;
        op->o_bd->bd_info = bi0;
index e63ed1a94071b16dd38f2a618be76e6f17d3c54f..4f2a7f17b12e5ea3f58ace77df8ef316ea7cf269 100644 (file)
@@ -145,7 +145,7 @@ static long send_ldap_ber(
 
        /* write only one pdu at a time - wait til it's our turn */
        ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex );
-       if ( op->o_abandon || connection_state_closing( conn )) {
+       if (( op->o_abandon && !op->o_cancel ) || connection_state_closing( conn )) {
                ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
                return 0;
        }
@@ -415,7 +415,7 @@ send_ldap_response(
        int             rc = LDAP_SUCCESS;
        long    bytes;
 
-       if ( rs->sr_err == SLAPD_ABANDON || op->o_abandon ) {
+       if (( rs->sr_err == SLAPD_ABANDON || op->o_abandon ) && !op->o_cancel ) {
                rc = SLAPD_ABANDON;
                goto clean2;
        }
@@ -437,9 +437,13 @@ send_ldap_response(
                ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );
        }
 
+       rc = rs->sr_err;
+       if ( rc == SLAPD_ABANDON && op->o_cancel )
+               rc = LDAP_CANCELLED;
+
        Debug( LDAP_DEBUG_TRACE,
                "send_ldap_response: msgid=%d tag=%lu err=%d\n",
-               rs->sr_msgid, rs->sr_tag, rs->sr_err );
+               rs->sr_msgid, rs->sr_tag, rc );
 
        if( rs->sr_ref ) {
                Debug( LDAP_DEBUG_ARGS, "send_ldap_response: ref=\"%s\"\n",
@@ -463,7 +467,7 @@ send_ldap_response(
 
        } else {
            rc = ber_printf( ber, "{it{ess" /*"}}"*/,
-               rs->sr_msgid, rs->sr_tag, rs->sr_err,
+               rs->sr_msgid, rs->sr_tag, rc,
                rs->sr_matched == NULL ? "" : rs->sr_matched,
                rs->sr_text == NULL ? "" : rs->sr_text );
        }