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