summaryrefslogtreecommitdiff
path: root/net/openldap24-server/files/patch-ITS7249
blob: bf66d525f8f0c0d6f9f1169747df9f5fa85dc412 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
--- servers/slapd/overlays/memberof.c.orig	2013-11-14 19:31:27.000000000 -0800
+++ servers/slapd/overlays/memberof.c	2013-12-12 16:44:13.000000000 -0800
@@ -190,7 +190,16 @@
 	BerVarray memberof;
 	memberof_is_t what;
 } memberof_cbinfo_t;
-	
+
+static void
+memberof_set_backend(Operation *op_target, Operation *op, slap_overinst *on)
+{
+	BackendInfo *bi = op->o_bd->bd_info;
+
+	if (bi->bi_type == memberof.on_bi.bi_type)
+		op_target->o_bd->bd_info = (BackendInfo *)on->on_info;
+}
+
 static int
 memberof_isGroupOrMember_cb( Operation *op, SlapReply *rs )
 {
@@ -285,7 +294,7 @@
 		op2.ors_filterstr = mo->mo_groupFilterstr;
 		op2.ors_filter = &mo->mo_groupFilter;
 
-		op2.o_bd->bd_info = (BackendInfo *)on->on_info;
+		memberof_set_backend(&op2, op, on);
 		(void)op->o_bd->be_search( &op2, &rs2 );
 		op2.o_bd->bd_info = bi;
 
@@ -307,7 +316,7 @@
 		op2.ors_filterstr = mo->mo_memberFilterstr;
 		op2.ors_filter = &mo->mo_memberFilter;
 
-		op2.o_bd->bd_info = (BackendInfo *)on->on_info;
+		memberof_set_backend(&op2, op, on);
 		(void)op->o_bd->be_search( &op2, &rs2 );
 		op2.o_bd->bd_info = bi;
 
@@ -409,7 +418,7 @@
 
 		oex.oe_key = (void *)&memberof;
 		LDAP_SLIST_INSERT_HEAD(&op2.o_extra, &oex, oe_next);
-		op2.o_bd->bd_info = (BackendInfo *)on->on_info;
+		memberof_set_backend(&op2, op, on);
 		(void)op->o_bd->be_modify( &op2, &rs2 );
 		op2.o_bd->bd_info = bi;
 		LDAP_SLIST_REMOVE(&op2.o_extra, &oex, OpExtra, oe_next);
@@ -451,7 +460,7 @@
 
 		oex.oe_key = (void *)&memberof;
 		LDAP_SLIST_INSERT_HEAD(&op2.o_extra, &oex, oe_next);
-		op2.o_bd->bd_info = (BackendInfo *)on->on_info;
+		memberof_set_backend(&op2, op, on);
 		(void)op->o_bd->be_modify( &op2, &rs2 );
 		op2.o_bd->bd_info = bi;
 		LDAP_SLIST_REMOVE(&op2.o_extra, &oex, OpExtra, oe_next);