X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsyncrepl.c;h=7a9272759be7496aa58e8f9576a4ac5f2d61a14a;hb=d168b49464df8a034e244c6610721155aa6b42ba;hp=21d827b9f3d301915a9ac860a559ce42b6602ff1;hpb=3e682cdac4ae23681296ee4ccf45f35f90f09696;p=openldap diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index 21d827b9f3..7a9272759b 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -102,7 +102,7 @@ static int syncrepl_entry( Modifications**,int, struct berval*, struct sync_cookie *, struct berval * ); -static void syncrepl_updateCookie( +static int syncrepl_updateCookie( syncinfo_t *, Operation *, struct berval *, struct sync_cookie * ); static struct berval * slap_uuidstr_from_normalized( @@ -718,7 +718,7 @@ do_syncrep2( modlist = NULL; if (( rc = syncrepl_message_to_op( si, op, msg )) == LDAP_SUCCESS && !BER_BVISNULL( &syncCookie.ctxcsn ) ) { - syncrepl_updateCookie( si, op, psub, &syncCookie ); + rc = syncrepl_updateCookie( si, op, psub, &syncCookie ); } } else if (( rc = syncrepl_message_to_entry( si, op, msg, &modlist, &entry, syncstate )) == LDAP_SUCCESS ) { @@ -726,7 +726,7 @@ do_syncrep2( syncstate, &syncUUID, &syncCookie_req, &syncCookie.ctxcsn )) == LDAP_SUCCESS && !BER_BVISNULL( &syncCookie.ctxcsn ) ) { - syncrepl_updateCookie( si, op, psub, &syncCookie ); + rc = syncrepl_updateCookie( si, op, psub, &syncCookie ); } } ldap_controls_free( rctrls ); @@ -796,7 +796,7 @@ do_syncrep2( if ( !BER_BVISNULL( &syncCookie.ctxcsn ) && match < 0 && err == LDAP_SUCCESS ) { - syncrepl_updateCookie( si, op, psub, &syncCookie ); + rc = syncrepl_updateCookie( si, op, psub, &syncCookie ); } if ( rctrls ) { ldap_controls_free( rctrls ); @@ -939,7 +939,7 @@ do_syncrep2( if ( !BER_BVISNULL( &syncCookie.ctxcsn ) && match < 0 ) { - syncrepl_updateCookie( si, op, psub, &syncCookie); + rc = syncrepl_updateCookie( si, op, psub, &syncCookie); } if ( si->si_refreshPresent == 1 ) { @@ -1839,7 +1839,7 @@ retry_add:; dnParent( &dni.ndn, &noldp ); dnParent( &entry->e_nname, &nnewp ); - if ( !dn_match( &noldp, &newp )) { + if ( !dn_match( &noldp, &nnewp )) { dnParent( &entry->e_name, &newp ); op->orr_newSup = &newp; op->orr_nnewSup = &nnewp; @@ -2283,7 +2283,7 @@ syncrepl_add_glue( return rc; } -static void +static int syncrepl_updateCookie( syncinfo_t *si, Operation *op, @@ -2299,17 +2299,14 @@ syncrepl_updateCookie( slap_callback cb = { NULL }; SlapReply rs_modify = {REP_RESULT}; - slap_sync_cookie_free( &si->si_syncCookie, 0 ); - slap_dup_sync_cookie( &si->si_syncCookie, syncCookie ); - mod.sml_op = LDAP_MOD_REPLACE; mod.sml_desc = slap_schema.si_ad_contextCSN; mod.sml_type = mod.sml_desc->ad_cname; mod.sml_values = vals; - vals[0] = si->si_syncCookie.ctxcsn; + vals[0] = syncCookie->ctxcsn; BER_BVZERO( &vals[1] ); - slap_queue_csn( op, &si->si_syncCookie.ctxcsn ); + slap_queue_csn( op, &syncCookie->ctxcsn ); op->o_tag = LDAP_REQ_MODIFY; @@ -2328,7 +2325,10 @@ syncrepl_updateCookie( rc = be->be_modify( op, &rs_modify ); op->o_msgid = 0; - if ( rs_modify.sr_err != LDAP_SUCCESS ) { + if ( rs_modify.sr_err == LDAP_SUCCESS ) { + slap_sync_cookie_free( &si->si_syncCookie, 0 ); + slap_dup_sync_cookie( &si->si_syncCookie, syncCookie ); + } else { Debug( LDAP_DEBUG_ANY, "be_modify failed (%d)\n", rs_modify.sr_err, 0, 0 ); } @@ -2338,7 +2338,7 @@ syncrepl_updateCookie( op->o_tmpfree( op->o_csn.bv_val, op->o_tmpmemctx ); BER_BVZERO( &op->o_csn ); - return; + return rc; } static int