]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapi/slapi_pblock.c
Fix compare op
[openldap] / servers / slapd / slapi / slapi_pblock.c
index 30fd74292cf17cb28cc1c644c91d2e3376064b00..bdff8eba3f49b2e4b006dc507cf55e9295eebe91 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2002-2006 The OpenLDAP Foundation.
+ * Copyright 2002-2009 The OpenLDAP Foundation.
  * Portions Copyright 1997,2002-2003 IBM Corporation.
  * All rights reserved.
  *
@@ -396,7 +396,7 @@ static int
 pblock_set_default( Slapi_PBlock *pb, int param, void *value ) 
 {
        slapi_pblock_class_t pbClass;
-       size_t i;
+       int i;
 
        pbClass = pblock_get_param_class( param );
        if ( pbClass == PBLOCK_CLASS_INVALID ) {
@@ -447,7 +447,7 @@ pblock_be_call( Slapi_PBlock *pb, int (*bep)(Operation *) )
        op = pb->pb_op;
 
        be_orig = op->o_bd;
-       op->o_bd = select_backend( &op->o_req_ndn, 0, 0 );
+       op->o_bd = select_backend( &op->o_req_ndn, 0 );
        rc = (*bep)( op );
        op->o_bd = be_orig;
 
@@ -526,7 +526,7 @@ pblock_get( Slapi_PBlock *pb, int param, void **value )
                break;
        case SLAPI_BACKEND:
                PBLOCK_ASSERT_OP( pb, 0 );
-               *((BackendDB **)value) = select_backend( &pb->pb_op->o_req_ndn, 0, 0 );
+               *((BackendDB **)value) = select_backend( &pb->pb_op->o_req_ndn, 0 );
                break;
        case SLAPI_BE_TYPE:
                PBLOCK_ASSERT_OP( pb, 0 );
@@ -1005,7 +1005,7 @@ pblock_set( Slapi_PBlock *pb, int param, void *value )
                        break;
                }
 
-               newmods = slapi_int_ldapmods2modifications( (LDAPMod **)value );
+               newmods = slapi_int_ldapmods2modifications( pb->pb_op, (LDAPMod **)value );
                if ( newmods != NULL ) {
                        slap_mods_free( *mlp, 1 );
                        *mlp = newmods;
@@ -1176,7 +1176,14 @@ pblock_set( Slapi_PBlock *pb, int param, void *value )
                break;
        case SLAPI_SEARCH_RESULT_ENTRY:
                PBLOCK_ASSERT_OP( pb, 0 );
+               if ( pb->pb_rs->sr_flags & REP_ENTRY_MUSTBEFREED ) {
+                       entry_free( pb->pb_rs->sr_entry );
+               } else if ( pb->pb_rs->sr_flags & REP_ENTRY_MUSTRELEASE ) {
+                       be_entry_release_r( pb->pb_op, pb->pb_rs->sr_entry );
+                       pb->pb_rs->sr_flags ^= REP_ENTRY_MUSTRELEASE;
+               }
                pb->pb_rs->sr_entry = (Slapi_Entry *)value;
+               pb->pb_rs->sr_flags |= REP_ENTRY_MUSTBEFREED;
                break;
        case SLAPI_BIND_RET_SASLCREDS:
                PBLOCK_ASSERT_OP( pb, 0 );