return rc;
}
-static const Listener dummy_list = { {0, ""}, {0, ""} };
-
static int
do_syncrep1(
Operation *op,
}
if ( rc_efree && entry ) {
entry_free( entry );
+ entry = NULL;
}
break;
return NULL;
}
- conn.c_connid = -1;
- conn.c_send_ldap_result = slap_send_ldap_result;
- conn.c_send_search_entry = slap_send_search_entry;
- conn.c_send_search_reference = slap_send_search_reference;
- conn.c_listener = (Listener *)&dummy_list;
- conn.c_peer_name = slap_empty_bv;
-
- /* set memory context */
- op.o_tmpmemctx = sl_mem_create( SLMALLOC_SLAB_SIZE, ctx );
- op.o_tmpmfuncs = &sl_mfuncs;
+ connection_fake_init( &conn, &op, ctx );
op.o_dn = si->si_updatedn;
op.o_ndn = si->si_updatedn;
- op.o_time = slap_get_time();
- op.o_threadctx = ctx;
op.o_managedsait = 1;
op.o_bd = si->si_be;
- op.o_conn = &conn;
- op.o_connid = op.o_conn->c_connid;
op.o_sync_state.ctxcsn = NULL;
op.o_sync_state.sid = -1;
*/
if ( rc == LDAP_SUCCESS ) {
if ( first ) {
- rc = connection_client_setup( s, (Listener *)&dummy_list, do_syncrepl,
+ rc = connection_client_setup( s, do_syncrepl,
arg );
} else {
connection_client_enable( s );
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,