From: Jong Hyuk Choi Date: Wed, 10 Nov 2004 03:52:12 +0000 (+0000) Subject: ldapsync fix for recursive deletion (ITS#3385) X-Git-Tag: OPENLDAP_REL_ENG_2_3_0ALPHA~352 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b6f77e2936987fda0bb2b48428a6c61033a95131;p=openldap ldapsync fix for recursive deletion (ITS#3385) --- diff --git a/servers/slapd/back-bdb/delete.c b/servers/slapd/back-bdb/delete.c index 234c5feb3f..6e54172f57 100644 --- a/servers/slapd/back-bdb/delete.c +++ b/servers/slapd/back-bdb/delete.c @@ -56,11 +56,16 @@ bdb_delete( Operation *op, SlapReply *rs ) int parent_is_glue = 0; int parent_is_leaf = 0; + struct berval ctxcsn_ndn = BER_BVNULL; + ctrls[num_ctrls] = 0; Debug( LDAP_DEBUG_ARGS, "==> bdb_delete: %s\n", op->o_req_dn.bv_val, 0, 0 ); + build_new_dn( &ctxcsn_ndn, &op->o_bd->be_nsuffix[0], + (struct berval *)&slap_ldapsync_cn_bv, op->o_tmpmemctx ); + if( 0 ) { retry: /* transaction retry */ if( e != NULL ) { @@ -469,7 +474,9 @@ retry: /* transaction retry */ ldap_pvt_thread_mutex_unlock( &bdb->bi_lastid_mutex ); #endif - if ( LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) { + if ( !dn_match( &ctxcsn_ndn, &op->o_req_ndn ) && + !be_issuffix( op->o_bd, &op->o_req_ndn ) && + LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) { rc = bdb_csn_commit( op, rs, ltid, ei, &suffix_ei, &ctxcsn_e, &ctxcsn_added, locker ); switch ( rc ) { @@ -585,6 +592,8 @@ done: op->o_private = NULL; } + slap_sl_free( ctxcsn_ndn.bv_val, op->o_tmpmemctx ); + if( preread_ctrl != NULL ) { slap_sl_free( (*preread_ctrl)->ldctl_value.bv_val, &op->o_tmpmemctx ); slap_sl_free( *preread_ctrl, &op->o_tmpmemctx );