Commit 2a9339e9 authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#6710

parent 7cfceb21
...@@ -50,6 +50,7 @@ OpenLDAP 2.4.24 Engineering ...@@ -50,6 +50,7 @@ OpenLDAP 2.4.24 Engineering
Fixed slapo-syncprov to send error if consumer is newer (ITS#6606) Fixed slapo-syncprov to send error if consumer is newer (ITS#6606)
Fixed slapo-syncprov filter race condition (ITS#6708) Fixed slapo-syncprov filter race condition (ITS#6708)
Fixed slapo-syncprov active mod race (ITS#6709) Fixed slapo-syncprov active mod race (ITS#6709)
Fixed slapo-syncprov to refresh if context is dirty (ITS#6710)
Fixed contrib/autogroup LDAP URI with attribute filter (ITS#6536) Fixed contrib/autogroup LDAP URI with attribute filter (ITS#6536)
Fixed contrib/nssov to only close socket on shutdown (ITS#6676) Fixed contrib/nssov to only close socket on shutdown (ITS#6676)
Fixed contrib/nssov multi platform support (ITS#6604) Fixed contrib/nssov multi platform support (ITS#6604)
......
...@@ -134,6 +134,8 @@ typedef struct syncprov_info_t { ...@@ -134,6 +134,8 @@ typedef struct syncprov_info_t {
int si_nopres; /* Skip present phase */ int si_nopres; /* Skip present phase */
int si_usehint; /* use reload hint */ int si_usehint; /* use reload hint */
int si_active; /* True if there are active mods */ int si_active; /* True if there are active mods */
int si_dirty; /* True if the context is dirty, i.e changes
* have been made without updating the csn. */
time_t si_chklast; /* time of last checkpoint */ time_t si_chklast; /* time of last checkpoint */
Avlnode *si_mods; /* entries being modified */ Avlnode *si_mods; /* entries being modified */
sessionlog *si_logs; sessionlog *si_logs;
...@@ -1812,6 +1814,8 @@ syncprov_op_response( Operation *op, SlapReply *rs ) ...@@ -1812,6 +1814,8 @@ syncprov_op_response( Operation *op, SlapReply *rs )
csn_changed = 1; csn_changed = 1;
} }
} }
if ( csn_changed )
si->si_dirty = 0;
ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock ); ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );
if ( csn_changed ) { if ( csn_changed ) {
...@@ -1855,6 +1859,7 @@ syncprov_op_response( Operation *op, SlapReply *rs ) ...@@ -1855,6 +1859,7 @@ syncprov_op_response( Operation *op, SlapReply *rs )
} }
} }
} }
si->si_dirty = !csn_changed;
ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock ); ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );
if ( do_check ) { if ( do_check ) {
...@@ -2373,6 +2378,7 @@ syncprov_op_search( Operation *op, SlapReply *rs ) ...@@ -2373,6 +2378,7 @@ syncprov_op_search( Operation *op, SlapReply *rs )
BerVarray ctxcsn; BerVarray ctxcsn;
int i, *sids, numcsns; int i, *sids, numcsns;
struct berval mincsn; struct berval mincsn;
int dirty = 0;
if ( !(op->o_sync_mode & SLAP_SYNC_REFRESH) ) return SLAP_CB_CONTINUE; if ( !(op->o_sync_mode & SLAP_SYNC_REFRESH) ) return SLAP_CB_CONTINUE;
...@@ -2448,6 +2454,7 @@ syncprov_op_search( Operation *op, SlapReply *rs ) ...@@ -2448,6 +2454,7 @@ syncprov_op_search( Operation *op, SlapReply *rs )
ctxcsn = NULL; ctxcsn = NULL;
sids = NULL; sids = NULL;
} }
dirty = si->si_dirty;
ldap_pvt_thread_rdwr_runlock( &si->si_csn_rwlock ); ldap_pvt_thread_rdwr_runlock( &si->si_csn_rwlock );
/* If we have a cookie, handle the PRESENT lookups */ /* If we have a cookie, handle the PRESENT lookups */
...@@ -2527,7 +2534,7 @@ bailout: ...@@ -2527,7 +2534,7 @@ bailout:
if ( changed ) if ( changed )
break; break;
} }
if ( !changed ) { if ( !changed && !dirty ) {
do_present = 0; do_present = 0;
no_change: if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) { no_change: if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) {
LDAPControl *ctrls[2]; LDAPControl *ctrls[2];
...@@ -2611,7 +2618,7 @@ shortcut: ...@@ -2611,7 +2618,7 @@ shortcut:
} }
/* If something changed, find the changes */ /* If something changed, find the changes */
if ( gotstate && changed ) { if ( gotstate && ( changed || dirty ) ) {
Filter *fand, *fava; Filter *fand, *fava;
fand = op->o_tmpalloc( sizeof(Filter), op->o_tmpmemctx ); fand = op->o_tmpalloc( sizeof(Filter), op->o_tmpmemctx );
...@@ -2656,7 +2663,7 @@ shortcut: ...@@ -2656,7 +2663,7 @@ shortcut:
* the refresh phase, just invoke the response callback to transition * the refresh phase, just invoke the response callback to transition
* us into persist phase * us into persist phase
*/ */
if ( !changed ) { if ( !changed && !dirty ) {
rs->sr_err = LDAP_SUCCESS; rs->sr_err = LDAP_SUCCESS;
rs->sr_nentries = 0; rs->sr_nentries = 0;
send_ldap_result( op, rs ); send_ldap_result( op, rs );
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment