diff --git a/CHANGES b/CHANGES index efa5da3ddcbbc3be9aa86e09a32f41ba5b0b6986..49c39d79a63cd16e99f3a4bf3cb8628eb69c749d 100644 --- a/CHANGES +++ b/CHANGES @@ -51,6 +51,7 @@ OpenLDAP 2.4.24 Engineering Fixed slapo-syncprov filter race condition (ITS#6708) Fixed slapo-syncprov active mod race (ITS#6709) Fixed slapo-syncprov to refresh if context is dirty (ITS#6710) + Fixed slapo-syncprov CSN updates to all replicas (ITS#6718) Fixed contrib/autogroup LDAP URI with attribute filter (ITS#6536) Fixed contrib/nssov to only close socket on shutdown (ITS#6676) Fixed contrib/nssov multi platform support (ITS#6604) diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index 7fd374f016aa7b9eecf25400710dd39479c92611..c9b5e5bd25a11664a9ac2a27ef3402a9c4093aa8 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -1819,17 +1819,20 @@ syncprov_op_response( Operation *op, SlapReply *rs ) ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock ); if ( csn_changed ) { + syncops *ss; ldap_pvt_thread_mutex_lock( &si->si_ops_mutex ); - have_psearches = ( si->si_ops != NULL ); - ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex ); - - if ( have_psearches ) { - for ( sm = opc->smatches; sm; sm=sm->sm_next ) { - if ( sm->sm_op->s_op->o_abandon ) - continue; - syncprov_qresp( opc, sm->sm_op, LDAP_SYNC_NEW_COOKIE ); - } + for ( ss = si->si_ops; ss; ss = ss->s_next ) { + if ( ss->s_op->o_abandon ) + continue; + /* Send the updated csn to all syncrepl consumers, + * including the server from which it originated. + * The syncrepl consumer and syncprov provider on + * the originating server may be configured to store + * their csn values in different entries. + */ + syncprov_qresp( opc, ss, LDAP_SYNC_NEW_COOKIE ); } + ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex ); } } else { ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );