]> git.sur5r.net Git - openldap/commitdiff
ITS#7249 partial fix for memberof on frontendDB
authorHoward Chu <hyc@openldap.org>
Mon, 21 Jul 2014 15:20:26 +0000 (08:20 -0700)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 22 Jul 2014 22:17:49 +0000 (17:17 -0500)
servers/slapd/overlays/memberof.c

index 187e4104174cba320530953a87d739f9d7e82d7e..9370152204ff95d03e30d1ed4de5cfbfc09dab92 100644 (file)
@@ -190,7 +190,16 @@ typedef struct memberof_cbinfo_t {
        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 @@ memberof_isGroupOrMember( Operation *op, memberof_cbinfo_t *mci )
                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 @@ memberof_isGroupOrMember( Operation *op, memberof_cbinfo_t *mci )
                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 @@ memberof_value_modify(
 
                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 @@ memberof_value_modify(
 
                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);