}
if ( rc_efree && entry ) {
entry_free( entry );
+ entry = NULL;
}
break;
return rc;
}
+static struct berval uuidbva[] = {
+ BER_BVNULL,
+ BER_BVNULL
+};
+
int
syncrepl_entry(
syncinfo_t* si,
syncUUID->bv_val, syncUUID->bv_len );
op->ors_filterstr.bv_val[op->ors_filterstr.bv_len] = '\0';
+ op->o_tag = LDAP_REQ_SEARCH;
op->ors_scope = LDAP_SCOPE_SUBTREE;
/* get syncrepl cookie of shadow replica from subentry */
si->si_syncUUID_ndn.bv_val = NULL;
- rc = be->be_search( op, &rs );
+ if ( limits_check( op, &rs ) == 0 ) {
+ rc = be->be_search( op, &rs );
+ }
if ( op->ors_filterstr.bv_val ) {
sl_free( op->ors_filterstr.bv_val, op->o_tmpmemctx );
if ( rc != LDAP_SUCCESS ) {
if ( rc == LDAP_ALREADY_EXISTS ) {
+ Modifications *mod;
+ Modifications *modtail;
+
+ for ( mod = modlist; mod != NULL; mod = mod->sml_next ) {
+ modtail = mod;
+ }
+
+ mod = (Modifications *)ch_calloc(1, sizeof(Modifications));
+ ber_dupbv( &uuidbva[0], syncUUID );
+ mod->sml_op = LDAP_MOD_REPLACE;
+ mod->sml_desc = slap_schema.si_ad_entryUUID;
+ mod->sml_type = mod->sml_desc->ad_cname;
+ mod->sml_bvalues = uuidbva;
+ modtail->sml_next = mod;
+
op->o_tag = LDAP_REQ_MODIFY;
op->orm_modlist = modlist;
op->o_req_dn = e->e_name;
op->o_req_ndn = e->e_nname;
+
rc = be->be_modify( op, &rs );
if ( rc != LDAP_SUCCESS ) {
#ifdef NEW_LOGGING
case LDAP_SYNC_DELETE :
/* Already deleted */
- ret = 1;
+ ret = 0;
goto done;
default :
op->o_nocaching = 1;
op->o_managedsait = 0;
- be->be_search( op, &rs );
+
+ if ( limits_check( op, &rs ) == 0 ) {
+ be->be_search( op, &rs );
+ }
+
op->o_managedsait = 1;
op->o_nocaching = 0;
if ( rs->sr_err != LDAP_SUCCESS &&
rs->sr_err != LDAP_REFERRAL &&
rs->sr_err != LDAP_ALREADY_EXISTS &&
- rs->sr_err != LDAP_NO_SUCH_OBJECT )
+ rs->sr_err != LDAP_NO_SUCH_OBJECT &&
+ rs->sr_err != LDAP_NOT_ALLOWED_ON_NONLEAF )
{
#ifdef NEW_LOGGING
LDAP_LOG( OPERATION, ERR,