File 0021-ITS-8435-Fix-uninited-slap_callback.sc_writewait.patch of Package openldap2.14904

From 4de3e7f3b6453487bb63247258805679e48dac03 Mon Sep 17 00:00:00 2001
From: Hallvard Furuseth <hallvard@openldap.org>
Date: Sun, 12 Jun 2016 08:30:58 +0200
Subject: [PATCH] ITS#8435 Fix uninited slap_callback.sc_writewait


diff --git a/servers/slapd/backover.c b/servers/slapd/backover.c
index 9355ba4..2e3280a 100644
--- a/servers/slapd/backover.c
+++ b/servers/slapd/backover.c
@@ -1219,6 +1219,7 @@ overlay_remove( BackendDB *be, slap_overinst *on, Operation *op )
 	rm_cb->sc_cleanup = overlay_remove_cb;
 	rm_cb->sc_response = NULL;
 	rm_cb->sc_private = (void*) rm_ctx;
+	rm_cb->sc_writewait = NULL;
 
 	/* Append callback to the end of the list */
 	if ( !op->o_callback ) {
diff --git a/servers/slapd/overlays/constraint.c b/servers/slapd/overlays/constraint.c
index 33323e3..5c65b42 100644
--- a/servers/slapd/overlays/constraint.c
+++ b/servers/slapd/overlays/constraint.c
@@ -601,7 +601,7 @@ constraint_violation( constraint *c, struct berval *bv, Operation *op )
 		case CONSTRAINT_URI: {
 			Operation nop = *op;
 			slap_overinst *on = (slap_overinst *) op->o_bd->bd_info;
-			slap_callback cb;
+			slap_callback cb = { 0 };
 			int i;
 			int found = 0;
 			int rc;
@@ -609,9 +609,7 @@ constraint_violation( constraint *c, struct berval *bv, Operation *op )
 			struct berval filterstr;
 			char *ptr;
 
-			cb.sc_next = NULL;
 			cb.sc_response = constraint_uri_cb;
-			cb.sc_cleanup = NULL;
 			cb.sc_private = &found;
 
 			nop.o_protocol = LDAP_VERSION3;
diff --git a/servers/slapd/overlays/dds.c b/servers/slapd/overlays/dds.c
index 5625331..ab0a40e 100644
--- a/servers/slapd/overlays/dds.c
+++ b/servers/slapd/overlays/dds.c
@@ -442,6 +442,7 @@ dds_op_add( Operation *op, SlapReply *rs )
 			sc->sc_response = dds_counter_cb;
 			sc->sc_private = di;
 			sc->sc_next = op->o_callback;
+			sc->sc_writewait = 0;
 
 			op->o_callback = sc;
 		}
@@ -476,6 +477,7 @@ dds_op_delete( Operation *op, SlapReply *rs )
 			sc->sc_cleanup = dds_freeit_cb;
 			sc->sc_response = dds_counter_cb;
 			sc->sc_private = di;
+			sc->sc_writewait = 0;
 			sc->sc_next = op->o_callback;
 	
 			op->o_callback = sc;
diff --git a/servers/slapd/overlays/dynlist.c b/servers/slapd/overlays/dynlist.c
index 968fbb0..f6cd6bc 100644
--- a/servers/slapd/overlays/dynlist.c
+++ b/servers/slapd/overlays/dynlist.c
@@ -346,7 +346,7 @@ static int
 dynlist_prepare_entry( Operation *op, SlapReply *rs, dynlist_info_t *dli )
 {
 	Attribute	*a, *id = NULL;
-	slap_callback	cb;
+	slap_callback	cb = { 0 };
 	Operation	o = *op;
 	struct berval	*url;
 	Entry		*e;
@@ -404,8 +404,6 @@ dynlist_prepare_entry( Operation *op, SlapReply *rs, dynlist_info_t *dli )
 	dlc.dlc_dli = dli;
 	cb.sc_private = &dlc;
 	cb.sc_response = dynlist_sc_update;
-	cb.sc_cleanup = NULL;
-	cb.sc_next = NULL;
 
 	o.o_callback = &cb;
 	o.ors_deref = LDAP_DEREF_NEVER;
diff --git a/servers/slapd/overlays/memberof.c b/servers/slapd/overlays/memberof.c
index f0f366c..40ad6e2 100644
--- a/servers/slapd/overlays/memberof.c
+++ b/servers/slapd/overlays/memberof.c
@@ -737,6 +737,7 @@ memberof_op_add( Operation *op, SlapReply *rs )
 	sc->sc_private = sc+1;
 	sc->sc_response = memberof_res_add;
 	sc->sc_cleanup = memberof_cleanup;
+	sc->sc_writewait = 0;
 	mci = sc->sc_private;
 	mci->on = on;
 	mci->member = NULL;
@@ -771,6 +772,7 @@ memberof_op_delete( Operation *op, SlapReply *rs )
 	sc->sc_private = sc+1;
 	sc->sc_response = memberof_res_delete;
 	sc->sc_cleanup = memberof_cleanup;
+	sc->sc_writewait = 0;
 	mci = sc->sc_private;
 	mci->on = on;
 	mci->member = NULL;
@@ -1189,6 +1191,7 @@ done2:;
 	sc->sc_private = sc+1;
 	sc->sc_response = memberof_res_modify;
 	sc->sc_cleanup = memberof_cleanup;
+	sc->sc_writewait = 0;
 	mci = sc->sc_private;
 	mci->on = on;
 	mci->member = NULL;
@@ -1234,6 +1237,7 @@ memberof_op_modrdn( Operation *op, SlapReply *rs )
 	sc->sc_private = sc+1;
 	sc->sc_response = memberof_res_modrdn;
 	sc->sc_cleanup = memberof_cleanup;
+	sc->sc_writewait = 0;
 	mci = sc->sc_private;
 	mci->on = on;
 	mci->member = NULL;
diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c
index 6032662..de8c2b4 100644
--- a/servers/slapd/overlays/pcache.c
+++ b/servers/slapd/overlays/pcache.c
@@ -2841,7 +2841,7 @@ pcache_op_bind(
 	QueryTemplate *temp;
 	Entry *e;
 	slap_callback	cb = { 0 }, *sc;
-	bindinfo bi;
+	bindinfo bi = { 0 };
 	bindcacheinfo *bci;
 	Operation op2;
 	int rc;
@@ -2871,7 +2871,6 @@ pcache_op_bind(
 	op2 = *op;
 	op2.o_dn = op->o_bd->be_rootdn;
 	op2.o_ndn = op->o_bd->be_rootndn;
-	bi.bi_flags = 0;
 
 	op2.o_bd = &cm->db;
 	e = NULL;
@@ -2900,11 +2899,8 @@ pcache_op_bind(
 	 */
 	bi.bi_cm = cm;
 	bi.bi_templ = temp;
-	bi.bi_cq = NULL;
-	bi.bi_si = NULL;
 
 	bi.bi_cb.sc_response = pc_bind_search;
-	bi.bi_cb.sc_cleanup = NULL;
 	bi.bi_cb.sc_private = &bi;
 	cb.sc_private = &bi;
 	cb.sc_response = pc_bind_resp;
@@ -2940,6 +2936,7 @@ pcache_op_bind(
 		sc->sc_response = pc_bind_save;
 		sc->sc_cleanup = NULL;
 		sc->sc_private = sc+1;
+		sc->sc_writewait = NULL;
 		bci = sc->sc_private;
 		sc->sc_next = op->o_callback;
 		op->o_callback = sc;
@@ -3132,6 +3129,7 @@ pcache_op_search(
 		cb->sc_response = pcache_response;
 		cb->sc_cleanup = pcache_op_cleanup;
 		cb->sc_private = (cb+1);
+		cb->sc_writewait = 0;
 		si = cb->sc_private;
 		si->on = on;
 		si->query = query;
diff --git a/servers/slapd/overlays/sssvlv.c b/servers/slapd/overlays/sssvlv.c
index 2f9638c..88c18ca 100644
--- a/servers/slapd/overlays/sssvlv.c
+++ b/servers/slapd/overlays/sssvlv.c
@@ -923,6 +923,7 @@ static int sssvlv_op_search(
 			cb->sc_response		= sssvlv_op_response;
 			cb->sc_next			= op->o_callback;
 			cb->sc_private		= so;
+			cb->sc_writewait	= NULL;
 
 			so->so_tree = NULL;
 			so->so_ctrl = sc;
diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c
index 5fc6f84..35377bf 100644
--- a/servers/slapd/overlays/syncprov.c
+++ b/servers/slapd/overlays/syncprov.c
@@ -2498,7 +2498,7 @@ syncprov_op_search( Operation *op, SlapReply *rs )
 		syncops so = {0};
 		fbase_cookie fc;
 		opcookie opc;
-		slap_callback sc;
+		slap_callback sc = {0};
 
 		fc.fss = &so;
 		fc.fbase = 0;
diff --git a/servers/slapd/slapi/slapi_overlay.c b/servers/slapd/slapi/slapi_overlay.c
index 0efcd92..b971b68 100644
--- a/servers/slapd/slapi/slapi_overlay.c
+++ b/servers/slapd/slapi/slapi_overlay.c
@@ -82,6 +82,7 @@ slapi_op_internal_p( Operation *op, SlapReply *rs, slap_callback *cb )
 		cb->sc_response = slapi_over_response;
 		cb->sc_cleanup = slapi_over_cleanup;
 		cb->sc_private = pb;
+		cb->sc_writewait = 0;
 		cb->sc_next = op->o_callback;
 		op->o_callback = cb;
 	}
@@ -734,6 +735,7 @@ slapi_over_access_allowed(
 
 	cb.sc_response = NULL;
 	cb.sc_cleanup = NULL;
+	cb.sc_writewait = NULL;
 
 	pb = SLAPI_OPERATION_PBLOCK( op );
 
@@ -798,6 +800,7 @@ slapi_over_acl_group(
 
 		cb.sc_response = NULL;
 		cb.sc_cleanup = NULL;
+		cb.sc_writewait = NULL;
 
 		pb = SLAPI_OPERATION_PBLOCK( op );
 
diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c
index 2a48325..c8ed0d7 100644
--- a/servers/slapd/syncrepl.c
+++ b/servers/slapd/syncrepl.c
@@ -2170,6 +2170,7 @@ syncrepl_op_modify( Operation *op, SlapReply *rs )
 		sc->sc_private = mx;
 		sc->sc_next = op->o_callback;
 		sc->sc_cleanup = NULL;
+		sc->sc_writewait = NULL;
 		op->o_callback = sc;
 		op->orm_no_opattrs = 1;
 		mx->mx_orig = op->orm_modlist;
-- 
2.15.0
openSUSE Build Service is sponsored by