summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Kinder <nkinder@redhat.com>2009-02-05 16:20:49 +0000
committerNathan Kinder <nkinder@redhat.com>2009-02-05 16:20:49 +0000
commitd35523fe9eb44d373bf8fc8f792101f1dc7c597b (patch)
treea3a758635230b798c49611bea7a2f613762bbb08
parent897b284c3095bb4e95cb239af4b2cb23de0ebbf9 (diff)
downloadds-d35523fe9eb44d373bf8fc8f792101f1dc7c597b.tar.gz
ds-d35523fe9eb44d373bf8fc8f792101f1dc7c597b.tar.xz
ds-d35523fe9eb44d373bf8fc8f792101f1dc7c597b.zip
Resolves: 463337
Summary: Update member attributes that refer to renamed entries when processing a MODRDN.
-rw-r--r--ldap/servers/plugins/memberof/memberof.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/ldap/servers/plugins/memberof/memberof.c b/ldap/servers/plugins/memberof/memberof.c
index 5a14f048..f1738ccc 100644
--- a/ldap/servers/plugins/memberof/memberof.c
+++ b/ldap/servers/plugins/memberof/memberof.c
@@ -486,7 +486,6 @@ int memberof_postop_modrdn(Slapi_PBlock *pb)
struct slapi_entry *post_e = NULL;
char *pre_dn = 0;
char *post_dn = 0;
- int interested = 0;
slapi_pblock_get( pb, SLAPI_ENTRY_PRE_OP, &pre_e );
slapi_pblock_get( pb, SLAPI_ENTRY_POST_OP, &post_e );
@@ -497,40 +496,35 @@ int memberof_postop_modrdn(Slapi_PBlock *pb)
post_dn = slapi_entry_get_ndn(post_e);
}
- /* is the entry of interest? */
+ /* copy config so it doesn't change out from under us */
memberof_rlock_config();
mainConfig = memberof_get_config();
- if(pre_dn && post_dn &&
- !slapi_filter_test_simple(post_e, mainConfig->group_filter))
- {
- interested = 1;
- /* copy config so it doesn't change out from under us */
- memberof_copy_config(&configCopy, mainConfig);
- }
+ memberof_copy_config(&configCopy, mainConfig);
memberof_unlock_config();
- if(interested)
+ memberof_lock();
+
+ /* update any downstream members */
+ if(pre_dn && post_dn &&
+ !slapi_filter_test_simple(post_e, configCopy.group_filter))
{
Slapi_Attr *attr = 0;
- memberof_lock();
-
/* get a list of member attributes present in the group
* entry that is being renamed. */
if(0 == slapi_entry_attr_find(post_e, configCopy.groupattr, &attr))
{
memberof_moddn_attr_list(pb, &configCopy, pre_dn, post_dn, attr);
}
+ }
- /* modrdn must change the dns in groups that have
- * this group as a member.
- */
- memberof_replace_dn_from_groups(pb, &configCopy, pre_dn, post_dn);
+ /* It's possible that this is an entry who is a member
+ * of other group entries. We need to update any member
+ * attributes to refer to the new name. */
+ memberof_replace_dn_from_groups(pb, &configCopy, pre_dn, post_dn);
- memberof_unlock();
-
- memberof_free_config(&configCopy);
- }
+ memberof_unlock();
+ memberof_free_config(&configCopy);
}