mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
Fix unprotected checks for psearches
This commit is contained in:
parent
d2f75ebaa5
commit
8bb39495c7
@ -1564,7 +1564,7 @@ syncprov_op_response( Operation *op, SlapReply *rs )
|
||||
{
|
||||
struct berval maxcsn = BER_BVNULL;
|
||||
char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
|
||||
int do_check = 0;
|
||||
int do_check = 0, have_psearches;
|
||||
|
||||
/* Update our context CSN */
|
||||
cbuf[0] = '\0';
|
||||
@ -1623,7 +1623,10 @@ syncprov_op_response( Operation *op, SlapReply *rs )
|
||||
opc->sctxcsn.bv_val = cbuf;
|
||||
|
||||
/* Handle any persistent searches */
|
||||
if ( si->si_ops ) {
|
||||
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 ) {
|
||||
switch(op->o_tag) {
|
||||
case LDAP_REQ_ADD:
|
||||
case LDAP_REQ_MODIFY:
|
||||
@ -1726,12 +1729,19 @@ syncprov_op_mod( Operation *op, SlapReply *rs )
|
||||
{
|
||||
slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
|
||||
syncprov_info_t *si = on->on_bi.bi_private;
|
||||
slap_callback *cb;
|
||||
opcookie *opc;
|
||||
int have_psearches, cbsize;
|
||||
|
||||
slap_callback *cb = op->o_tmpcalloc(1, sizeof(slap_callback)+
|
||||
sizeof(opcookie) +
|
||||
(si->si_ops ? sizeof(modinst) : 0 ),
|
||||
op->o_tmpmemctx);
|
||||
opcookie *opc = (opcookie *)(cb+1);
|
||||
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
|
||||
have_psearches = ( si->si_ops != NULL );
|
||||
ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
|
||||
|
||||
cbsize = sizeof(slap_callback) + sizeof(opcookie) +
|
||||
(have_psearches ? sizeof(modinst) : 0 );
|
||||
|
||||
cb = op->o_tmpcalloc(1, cbsize, op->o_tmpmemctx);
|
||||
opc = (opcookie *)(cb+1);
|
||||
opc->son = on;
|
||||
cb->sc_response = syncprov_op_response;
|
||||
cb->sc_cleanup = syncprov_op_cleanup;
|
||||
@ -1742,7 +1752,7 @@ syncprov_op_mod( Operation *op, SlapReply *rs )
|
||||
/* If there are active persistent searches, lock this operation.
|
||||
* See seqmod.c for the locking logic on its own.
|
||||
*/
|
||||
if ( si->si_ops ) {
|
||||
if ( have_psearches ) {
|
||||
modtarget *mt, mtdummy;
|
||||
modinst *mi;
|
||||
|
||||
@ -1789,7 +1799,7 @@ syncprov_op_mod( Operation *op, SlapReply *rs )
|
||||
}
|
||||
}
|
||||
|
||||
if (( si->si_ops || si->si_logs ) && op->o_tag != LDAP_REQ_ADD )
|
||||
if (( have_psearches || si->si_logs ) && op->o_tag != LDAP_REQ_ADD )
|
||||
syncprov_matchops( op, opc, 1 );
|
||||
|
||||
return SLAP_CB_CONTINUE;
|
||||
|
Loading…
Reference in New Issue
Block a user