mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-18 18:18:06 -05:00
From HEAD
+ Fixed slapd-bdb pre/post-read unavailable issue (ITS#4538) + Fixed slapo-refinit delete prohibit issue (ITS#4442) + Fixed slapo-syncprov/syncrepl sessionlog issue (ITS#4534) + Fixed test020-proxycache disabled debug issue (ITS#4491)
This commit is contained in:
parent
eaaf2d95e8
commit
c859cdab51
5 changed files with 66 additions and 27 deletions
9
CHANGES
9
CHANGES
|
|
@ -14,8 +14,9 @@ OpenLDAP 2.3.22 Engineering
|
|||
Fixed slapd runqueue use of freed memory (ITS#4517)
|
||||
Fixed slapd slap_send_ldap_result bug (ITS#4499)
|
||||
Fixed slapd thread pool init issue (ITS#4513)
|
||||
Fixed slapd-bdb pre/post-read freeing (ITS#4532)
|
||||
Added slapd syncrepl mandatory searchbase check
|
||||
Fixed slapd-bdb pre/post-read freeing (ITS#4532)
|
||||
Fixed slapd-bdb pre/post-read unavailable issue (ITS#4538)
|
||||
Fixed slapadd cn=config issue (ITS#4194)
|
||||
Fixed slapd-ldap proxyAuthz of bound identity/override (ITS#4497)
|
||||
Fixed slapd-ldap/meta protocol version propagation (ITS#4488)
|
||||
|
|
@ -24,10 +25,14 @@ OpenLDAP 2.3.22 Engineering
|
|||
Fixed slapo-accesslog log purging issue (ITS#4505)
|
||||
Added slapo-accesslog reqOld feature
|
||||
Fixed slapo-auditlog missing return codes
|
||||
Fixed slapo-ppolicy BER tags (ITS#4528)
|
||||
Fixed slapo-ppolicy BER tags issue (ITS#4528)
|
||||
Fixed slapo-refinit delete prohibit issue (ITS#4442)
|
||||
Fixed slapo-syncprov MODs cause DELs (ITS#4423)
|
||||
Fixed slapo-syncprov/syncrepl sessionlog issue (ITS#4534)
|
||||
Fixed slapo-translucent modifications (ITS#4527)
|
||||
Fixed slurpd potential overflow issue
|
||||
Build Environment
|
||||
Fixed test020-proxycache disabled debug issue (ITS#4491)
|
||||
|
||||
OpenLDAP 2.3.21 Release
|
||||
Fixed libldap referral chasing issue (ITS#4448)
|
||||
|
|
|
|||
|
|
@ -468,8 +468,8 @@ refint_response(
|
|||
|
||||
for(ip = id->attrs, ac = 0; ip; ip = ip->next, ac++);
|
||||
if(!ac) {
|
||||
rs->sr_err = LDAP_OTHER;
|
||||
rs->sr_text = "refint_response called without any attributes";
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"refint_response called without any attributes\n", 0, 0, 0 );
|
||||
return SLAP_CB_CONTINUE;
|
||||
}
|
||||
|
||||
|
|
@ -483,13 +483,15 @@ refint_response(
|
|||
|
||||
if(nop.o_bd) {
|
||||
if (!nop.o_bd->be_search || !nop.o_bd->be_modify) {
|
||||
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
|
||||
rs->sr_text = "backend missing search and/or modify";
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"refint_response: backend missing search and/or modify\n",
|
||||
0, 0, 0 );
|
||||
return SLAP_CB_CONTINUE;
|
||||
}
|
||||
} else {
|
||||
rs->sr_err = LDAP_OTHER;
|
||||
rs->sr_text = "no known backend? this shouldn't be happening!";
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"refint_response: no backend for our baseDN %s??\n",
|
||||
id->dn.bv_val, 0, 0 );
|
||||
return SLAP_CB_CONTINUE;
|
||||
}
|
||||
|
||||
|
|
@ -580,15 +582,17 @@ refint_response(
|
|||
dd.nnewdn.bv_val = NULL;
|
||||
|
||||
if(rc != LDAP_SUCCESS) {
|
||||
rs->sr_err = nrs.sr_err;
|
||||
rs->sr_text = "refint_response search failed";
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"refint_response: search failed: %d\n",
|
||||
rc, 0, 0 );
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* safety? paranoid just in case */
|
||||
if(!cb.sc_private) {
|
||||
rs->sr_err = LDAP_OTHER;
|
||||
rs->sr_text = "whoa! refint_response callback wiped out sc_private?!";
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"refint_response: callback wiped out sc_private?!\n",
|
||||
0, 0, 0 );
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -625,8 +629,9 @@ refint_response(
|
|||
nop.o_req_ndn = dp->dn;
|
||||
nop.o_bd = select_backend(&dp->dn, 0, 1);
|
||||
if(!nop.o_bd) {
|
||||
rs->sr_err = LDAP_OTHER;
|
||||
rs->sr_text = "this should never happen either!";
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"refint_response: no backend for DN %s!\n",
|
||||
dp->dn.bv_val, 0, 0 );
|
||||
goto done;
|
||||
}
|
||||
nrs.sr_type = REP_RESULT;
|
||||
|
|
@ -637,8 +642,9 @@ refint_response(
|
|||
nop.o_ndn = nop.o_bd->be_rootndn;
|
||||
if(rs->sr_err != LDAP_SUCCESS) goto done;
|
||||
if((rc = nop.o_bd->be_modify(&nop, &nrs)) != LDAP_SUCCESS) {
|
||||
rs->sr_err = nrs.sr_err;
|
||||
rs->sr_text = "dependent modify failed";
|
||||
Debug( LDAP_DEBUG_TRACE,
|
||||
"refint_response: dependent modify failed: %d\n",
|
||||
nrs.sr_err, 0, 0 );
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1320,12 +1320,14 @@ playlog_cb( Operation *op, SlapReply *rs )
|
|||
/* enter with sl->sl_mutex locked, release before returning */
|
||||
static void
|
||||
syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
|
||||
struct berval *oldcsn, struct berval *ctxcsn )
|
||||
sync_control *srs, struct berval *ctxcsn )
|
||||
{
|
||||
slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
|
||||
slog_entry *se;
|
||||
int i, j, ndel, num, nmods, mmods;
|
||||
char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
|
||||
BerVarray uuids;
|
||||
struct berval delcsn;
|
||||
|
||||
if ( !sl->sl_num ) {
|
||||
ldap_pvt_thread_mutex_unlock( &sl->sl_mutex );
|
||||
|
|
@ -1338,19 +1340,23 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
|
|||
|
||||
uuids = op->o_tmpalloc( (num+1) * sizeof( struct berval ) +
|
||||
num * UUID_LEN, op->o_tmpmemctx );
|
||||
|
||||
uuids[0].bv_val = (char *)(uuids + num + 1);
|
||||
|
||||
delcsn.bv_len = 0;
|
||||
delcsn.bv_val = cbuf;
|
||||
|
||||
/* Make a copy of the relevant UUIDs. Put the Deletes up front
|
||||
* and everything else at the end. Do this first so we can
|
||||
* unlock the list mutex.
|
||||
*/
|
||||
for ( se=sl->sl_head; se; se=se->se_next ) {
|
||||
if ( ber_bvcmp( &se->se_csn, oldcsn ) <= 0 ) continue;
|
||||
if ( ber_bvcmp( &se->se_csn, &srs->sr_state.ctxcsn ) <= 0 ) continue;
|
||||
if ( ber_bvcmp( &se->se_csn, ctxcsn ) > 0 ) break;
|
||||
if ( se->se_tag == LDAP_REQ_DELETE ) {
|
||||
j = i;
|
||||
i++;
|
||||
AC_MEMCPY( cbuf, se->se_csn.bv_val, se->se_csn.bv_len );
|
||||
delcsn.bv_len = se->se_csn.bv_len;
|
||||
} else {
|
||||
nmods++;
|
||||
j = num - nmods;
|
||||
|
|
@ -1442,9 +1448,14 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
|
|||
fop.o_bd->bd_info = (BackendInfo *)on;
|
||||
}
|
||||
if ( ndel ) {
|
||||
struct berval cookie;
|
||||
|
||||
slap_compose_sync_cookie( op, &cookie, &delcsn, srs->sr_state.rid );
|
||||
uuids[ndel].bv_val = NULL;
|
||||
syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, NULL, 0, uuids, 1 );
|
||||
syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, &cookie, 0, uuids, 1 );
|
||||
op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
|
||||
}
|
||||
op->o_tmpfree( uuids, op->o_tmpmemctx );
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
@ -1963,7 +1974,7 @@ syncprov_op_search( Operation *op, SlapReply *rs )
|
|||
if ( ber_bvcmp( &srs->sr_state.ctxcsn, &sl->sl_mincsn ) >= 0 ) {
|
||||
do_present = 0;
|
||||
/* mutex is unlocked in playlog */
|
||||
syncprov_playlog( op, rs, sl, &srs->sr_state.ctxcsn, &ctxcsn );
|
||||
syncprov_playlog( op, rs, sl, srs, &ctxcsn );
|
||||
} else {
|
||||
ldap_pvt_thread_mutex_unlock( &sl->sl_mutex );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ typedef struct syncinfo_s {
|
|||
|
||||
static int syncuuid_cmp( const void *, const void * );
|
||||
static void avl_ber_bvfree( void * );
|
||||
static void syncrepl_del_nonpresent( Operation *, syncinfo_t *, BerVarray );
|
||||
static void syncrepl_del_nonpresent( Operation *, syncinfo_t *, BerVarray, struct berval * );
|
||||
static int syncrepl_message_to_op(
|
||||
syncinfo_t *, Operation *, LDAPMessage * );
|
||||
static int syncrepl_message_to_entry(
|
||||
|
|
@ -813,7 +813,7 @@ do_syncrep2(
|
|||
if ( refreshDeletes == 0 && match < 0 &&
|
||||
err == LDAP_SUCCESS )
|
||||
{
|
||||
syncrepl_del_nonpresent( op, si, NULL );
|
||||
syncrepl_del_nonpresent( op, si, NULL, NULL );
|
||||
} else {
|
||||
avl_free( si->si_presentlist, avl_ber_bvfree );
|
||||
si->si_presentlist = NULL;
|
||||
|
|
@ -905,7 +905,8 @@ do_syncrep2(
|
|||
ber_scanf( ber, "[W]", &syncUUIDs );
|
||||
ber_scanf( ber, /*"{"*/ "}" );
|
||||
if ( refreshDeletes ) {
|
||||
syncrepl_del_nonpresent( op, si, syncUUIDs );
|
||||
syncrepl_del_nonpresent( op, si, syncUUIDs,
|
||||
&syncCookie.ctxcsn );
|
||||
ber_bvarray_free_x( syncUUIDs, op->o_tmpmemctx );
|
||||
} else {
|
||||
for ( i = 0; !BER_BVISNULL( &syncUUIDs[i] ); i++ ) {
|
||||
|
|
@ -948,7 +949,7 @@ do_syncrep2(
|
|||
|
||||
if ( si->si_refreshPresent == 1 ) {
|
||||
if ( match < 0 ) {
|
||||
syncrepl_del_nonpresent( op, si, NULL );
|
||||
syncrepl_del_nonpresent( op, si, NULL, NULL );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1993,7 +1994,8 @@ static void
|
|||
syncrepl_del_nonpresent(
|
||||
Operation *op,
|
||||
syncinfo_t *si,
|
||||
BerVarray uuids )
|
||||
BerVarray uuids,
|
||||
struct berval *cookiecsn )
|
||||
{
|
||||
Backend* be = op->o_bd;
|
||||
slap_callback cb = { NULL };
|
||||
|
|
@ -2005,6 +2007,7 @@ syncrepl_del_nonpresent(
|
|||
AttributeName an[2];
|
||||
|
||||
struct berval pdn = BER_BVNULL;
|
||||
struct berval csn;
|
||||
|
||||
op->o_req_dn = si->si_base;
|
||||
op->o_req_ndn = si->si_base;
|
||||
|
|
@ -2071,7 +2074,12 @@ syncrepl_del_nonpresent(
|
|||
|
||||
if ( !LDAP_LIST_EMPTY( &si->si_nonpresentlist ) ) {
|
||||
|
||||
slap_queue_csn( op, &si->si_syncCookie.ctxcsn );
|
||||
if ( cookiecsn && !BER_BVISNULL( cookiecsn ))
|
||||
csn = *cookiecsn;
|
||||
else
|
||||
csn = si->si_syncCookie.ctxcsn;
|
||||
|
||||
slap_queue_csn( op, &csn );
|
||||
|
||||
np_list = LDAP_LIST_FIRST( &si->si_nonpresentlist );
|
||||
while ( np_list != NULL ) {
|
||||
|
|
|
|||
|
|
@ -123,6 +123,15 @@ if test $RC != 0 ; then
|
|||
exit $RC
|
||||
fi
|
||||
|
||||
# ITS#4491, if debug messages are unavailable, we can't verify the tests.
|
||||
grep "query template" $LOG2 > /dev/null
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "Debug messages unavailable, test aborted..."
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS && wait
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Query 2: filter:(|(cn=*Jon*)(sn=Jon*)) attrs:cn sn title uid"
|
||||
echo "# Query 2: filter:(|(cn=*Jon*)(sn=Jon*)) attrs:cn sn title uid" >> $SLAVEOUT
|
||||
$LDAPSEARCH -x -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
|
||||
|
|
|
|||
Loading…
Reference in a new issue