[CalendarServer-changes] [1860] CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Sep 10 14:10:11 PDT 2007


Revision: 1860
          http://trac.macosforge.org/projects/calendarserver/changeset/1860
Author:   dreid at apple.com
Date:     2007-09-10 14:10:11 -0700 (Mon, 10 Sep 2007)

Log Message:
-----------
Deal with recursive nested groups and avoid duplicate members

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2007-09-10 20:51:55 UTC (rev 1859)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2007-09-10 21:10:11 UTC (rev 1860)
@@ -105,7 +105,11 @@
             for recordType in self.recordTypes():
                 self.recordsForType(recordType)
 
-    def _expandGroupMembership(self, members, nestedGroups):
+    def _expandGroupMembership(self, members, nestedGroups, processedGUIDs=None):
+
+        if processedGUIDs is None:
+            processedGUIDs = set()
+
         if isinstance(members, str):
             members = [members]
 
@@ -113,9 +117,14 @@
             nestedGroups = [nestedGroups]
 
         for memberGUID in members:
-            yield memberGUID
+            if memberGUID not in processedGUIDs:
+                processedGUIDs.add(memberGUID)
+                yield memberGUID
 
         for groupGUID in nestedGroups:
+            if groupGUID in processedGUIDs:
+                continue
+
             result = opendirectory.queryRecordsWithAttribute(
                 self.directory,
                 dsattributes.kDS1AttrGeneratedUID,
@@ -132,9 +141,12 @@
 
             group = result.values()[0]
 
+            processedGUIDs.add(groupGUID)
+
             for GUID in self._expandGroupMembership(
                 group.get(dsattributes.kDSNAttrGroupMembers, []),
-                group.get(dsattributes.kDSNAttrNestedGroups, [])):
+                group.get(dsattributes.kDSNAttrNestedGroups, []),
+                processedGUIDs):
                 yield GUID
 
     def __cmp__(self, other):
@@ -521,6 +533,7 @@
             else:
                 query = dsquery.expression(dsquery.expression.AND, (subquery, query))
 
+
         try:
             if query:
                 if isinstance(query, dsquery.match):

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070910/41ebf718/attachment.html


More information about the calendarserver-changes mailing list