From a2b4c2a6b334a1338bf0827cb314ecd547e8dd4c Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Fri, 14 Sep 2007 21:10:37 +0000
Subject: [PATCH] Add support for the groupOfEntries group type as defined in draft-findlay-ldap-groupofentries. Entries with the groupOfEntries object class should be treated in a manner that is virtually identical to entries with the groupOfNames object class (technically, groupOfNames does not allow zero-member groups, but the OpenDS implementation does allow this).
---
opends/src/server/org/opends/server/extensions/StaticGroup.java | 40 +++++++++++++++++++++++++++++++++++++---
1 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/opends/src/server/org/opends/server/extensions/StaticGroup.java b/opends/src/server/org/opends/server/extensions/StaticGroup.java
index 1008313..2e46e86 100644
--- a/opends/src/server/org/opends/server/extensions/StaticGroup.java
+++ b/opends/src/server/org/opends/server/extensions/StaticGroup.java
@@ -171,11 +171,32 @@
// Determine whether it is a groupOfNames or groupOfUniqueNames entry. If
// neither, then that's a problem.
AttributeType memberAttributeType;
+ ObjectClass groupOfEntriesClass =
+ DirectoryConfig.getObjectClass(OC_GROUP_OF_ENTRIES_LC, true);
ObjectClass groupOfNamesClass =
DirectoryConfig.getObjectClass(OC_GROUP_OF_NAMES_LC, true);
ObjectClass groupOfUniqueNamesClass =
DirectoryConfig.getObjectClass(OC_GROUP_OF_UNIQUE_NAMES_LC, true);
- if (groupEntry.hasObjectClass(groupOfNamesClass))
+ if (groupEntry.hasObjectClass(groupOfEntriesClass))
+ {
+ if (groupEntry.hasObjectClass(groupOfNamesClass))
+ {
+ Message message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
+ get(String.valueOf(groupEntry.getDN()), OC_GROUP_OF_ENTRIES,
+ OC_GROUP_OF_NAMES);
+ throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
+ }
+ else if (groupEntry.hasObjectClass(groupOfUniqueNamesClass))
+ {
+ Message message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
+ get(String.valueOf(groupEntry.getDN()), OC_GROUP_OF_ENTRIES,
+ OC_GROUP_OF_UNIQUE_NAMES);
+ throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
+ }
+
+ memberAttributeType = DirectoryConfig.getAttributeType(ATTR_MEMBER, true);
+ }
+ else if (groupEntry.hasObjectClass(groupOfNamesClass))
{
if (groupEntry.hasObjectClass(groupOfUniqueNamesClass))
{
@@ -247,7 +268,8 @@
// FIXME -- This needs to exclude enhanced groups once we have support for
// them.
String filterString =
- "(&(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames))" +
+ "(&(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)" +
+ "(objectClass=groupOfEntries))" +
"(!(objectClass=ds-virtual-static-group)))";
return SearchFilter.createFilterFromString(filterString);
}
@@ -271,11 +293,23 @@
return false;
}
+ ObjectClass groupOfEntriesClass =
+ DirectoryConfig.getObjectClass(OC_GROUP_OF_ENTRIES_LC, true);
ObjectClass groupOfNamesClass =
DirectoryConfig.getObjectClass(OC_GROUP_OF_NAMES_LC, true);
ObjectClass groupOfUniqueNamesClass =
DirectoryConfig.getObjectClass(OC_GROUP_OF_UNIQUE_NAMES_LC, true);
- if (entry.hasObjectClass(groupOfNamesClass))
+ if (entry.hasObjectClass(groupOfEntriesClass))
+ {
+ if (entry.hasObjectClass(groupOfNamesClass) ||
+ entry.hasObjectClass(groupOfUniqueNamesClass))
+ {
+ return false;
+ }
+
+ return true;
+ }
+ else if (entry.hasObjectClass(groupOfNamesClass))
{
if (entry.hasObjectClass(groupOfUniqueNamesClass))
{
--
Gitblit v1.10.0