[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#7234) syncprov entry not freed in result.c

Full_Name: Hallvard B Furuseth
Version: RE24, 0e03b1369f4da5db9d0bdd2445b3a7ccc0c5638f
OS: Linux x86_64
Submission from: (NULL) (
Submitted by: hallvard

syncprov_db_open() does not set op->o_tag before submitting
syncprov_db_otask.  This prevents rs_flush_entry() before
slap_send_search_entry()'s error return.

Seen in test018 and test048 with back-ldif.

Two possible fixes:

--- a/servers/slapd/overlays/syncprov.c
+++ b/servers/slapd/overlays/syncprov.c
@@ -3088,2 +3088,3 @@ syncprov_db_open(
 		if ( si->si_ctxcsn && !SLAP_DBCLEAN( be )) {
+			op->o_tag = LDAP_REQ_SEARCH;
 			op->o_req_dn = be->be_suffix[0];

Hopefully the lack of o_tag is not a feature, deliberately
preventing some things from assuming it's a search request.
E.g. maybe more fields in the fake op must be filled in.

Or this test could be less paranoid: 

--- a/servers/slapd/result.c
+++ b/servers/slapd/result.c
@@ -1466,3 +1466,3 @@ error_return:;
-	if ( op->o_tag == LDAP_REQ_SEARCH && rs->sr_type == REP_SEARCH ) {
+	if ( rs->sr_type == REP_SEARCH ) {
 		rs_flush_entry( op, rs, NULL );

It was a bad idea to trust sr_type when the test was written.  The
SlapReply cleanup (ITS#6758) mostly fixed that, but is not complete.

OpenLDAP passes make alltests with both patches and USE_RS_ASSERT,
except an unrelated error which also fails in unpatched RE24.