[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