From 3a31cc637e9ea8a46ba70fe6809ef37182071797 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount <quanah@openldap.org> Date: Tue, 24 Nov 2009 01:53:26 +0000 Subject: [PATCH] ITS#6397 --- CHANGES | 1 + servers/slapd/overlays/syncprov.c | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index aef0d0f427..e6207e5c81 100644 --- a/CHANGES +++ b/CHANGES @@ -38,6 +38,7 @@ OpenLDAP 2.4.20 Engineering Fixed slapo-syncprov deadlock (ITS#6335) Fixed slapo-syncprov memory leak (ITS#6376) Fixed slapo-syncprov out of order changes (ITS#6346) + Fixed slapo-syncprov psearch with stale cookie (ITS#6397) Build Environment Added additional operations for ITS#6332 Fixed memrchr define (ITS#6351) diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index 7fb91455af..675568e7f2 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -2473,6 +2473,8 @@ syncprov_op_search( Operation *op, SlapReply *rs ) changed = SS_CHANGED; else if ( newer > 0 ) { /* our state is older, tell consumer nothing */ + rs->sr_err = LDAP_SUCCESS; +bailout: if ( sop ) { syncops **sp = &si->si_ops; @@ -2483,7 +2485,6 @@ syncprov_op_search( Operation *op, SlapReply *rs ) ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex ); ch_free( sop ); } - rs->sr_err = LDAP_SUCCESS; rs->sr_ctrls = NULL; send_ldap_result( op, rs ); return rs->sr_err; @@ -2538,8 +2539,9 @@ no_change: if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) { ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx ); if ( sids ) op->o_tmpfree( sids, op->o_tmpmemctx ); - send_ldap_error( op, rs, LDAP_SYNC_REFRESH_REQUIRED, "sync cookie is stale" ); - return rs->sr_err; + rs->sr_err = LDAP_SYNC_REFRESH_REQUIRED; + rs->sr_text = "sync cookie is stale"; + goto bailout; } if ( srs->sr_state.ctxcsn ) { ber_bvarray_free_x( srs->sr_state.ctxcsn, op->o_tmpmemctx ); @@ -2559,8 +2561,7 @@ no_change: if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) { ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx ); if ( sids ) op->o_tmpfree( sids, op->o_tmpmemctx ); - send_ldap_result( op, rs ); - return rs->sr_err; + goto bailout; } } } else { -- GitLab