[CalendarServer-changes] [6157] CalendarServer/trunk/twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Fri Aug 20 10:51:19 PDT 2010


Revision: 6157
          http://trac.macosforge.org/projects/calendarserver/changeset/6157
Author:   sagen at apple.com
Date:     2010-08-20 10:51:18 -0700 (Fri, 20 Aug 2010)
Log Message:
-----------
Fix group expansion by breaking an od query into two.

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

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2010-08-20 17:44:15 UTC (rev 6156)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2010-08-20 17:51:18 UTC (rev 6157)
@@ -556,18 +556,6 @@
     def queryDirectory(self, recordTypes, indexType, indexKey,
         lookupMethod=opendirectory.queryRecordsWithAttribute_list):
         
-        attrs = [
-            dsattributes.kDS1AttrGeneratedUID,
-            dsattributes.kDSNAttrRecordName,
-            dsattributes.kDSNAttrAltSecurityIdentities,
-            dsattributes.kDSNAttrRecordType,
-            dsattributes.kDS1AttrDistinguishedName,
-            dsattributes.kDS1AttrFirstName,
-            dsattributes.kDS1AttrLastName,
-            dsattributes.kDSNAttrEMailAddress,
-            dsattributes.kDSNAttrMetaNodeLocation,
-        ]
-
         origIndexKey = indexKey
         if indexType == self.INDEX_TYPE_CUA:
             # The directory doesn't contain CUAs, so we need to convert
@@ -589,51 +577,70 @@
         query = dsquery.match(queryattr, indexKey, dsattributes.eDSExact)
 
 
-        listRecordTypes = []
+        results = []
         for recordType in recordTypes:
+
+            attrs = [
+                dsattributes.kDS1AttrGeneratedUID,
+                dsattributes.kDSNAttrRecordName,
+                dsattributes.kDSNAttrAltSecurityIdentities,
+                dsattributes.kDSNAttrRecordType,
+                dsattributes.kDS1AttrDistinguishedName,
+                dsattributes.kDS1AttrFirstName,
+                dsattributes.kDS1AttrLastName,
+                dsattributes.kDSNAttrEMailAddress,
+                dsattributes.kDSNAttrMetaNodeLocation,
+            ]
+
             if recordType == DirectoryService.recordType_users:
-                listRecordTypes.append(dsattributes.kDSStdRecordTypeUsers)
-    
+                listRecordTypes = [dsattributes.kDSStdRecordTypeUsers]
+
             elif recordType == DirectoryService.recordType_groups:
-                if queryattr != dsattributes.kDSNAttrEMailAddress:
-                    listRecordTypes.append(dsattributes.kDSStdRecordTypeGroups)
-                    attrs.append(dsattributes.kDSNAttrGroupMembers)
-                    attrs.append(dsattributes.kDSNAttrNestedGroups)
-    
+
+                if queryattr == dsattributes.kDSNAttrEMailAddress:
+                    continue
+
+                listRecordTypes = [dsattributes.kDSStdRecordTypeGroups]
+                attrs.append(dsattributes.kDSNAttrGroupMembers)
+                attrs.append(dsattributes.kDSNAttrNestedGroups)
+
             else:
                 raise UnknownRecordTypeError("Unknown OpenDirectory record type: %s" % (recordType))
 
 
-        try:
-            self.log_debug("opendirectory.queryRecordsWithAttribute_list(%r,%r,%r,%r,%r,%r,%r)" % (
-                self.directory,
-                query.attribute,
-                query.value,
-                query.matchType,
-                False,
-                listRecordTypes,
-                attrs,
-            ))
-            results = lookupMethod(
-                self.directory,
-                query.attribute,
-                query.value,
-                query.matchType,
-                False,
-                listRecordTypes,
-                attrs,
-            )
-            self.log_debug("opendirectory.queryRecordsWithAttribute_list matched records: %s" % (len(results),))
+            try:
+                self.log_debug("opendirectory.queryRecordsWithAttribute_list(%r,%r,%r,%r,%r,%r,%r)" % (
+                    self.directory,
+                    query.attribute,
+                    query.value,
+                    query.matchType,
+                    False,
+                    listRecordTypes,
+                    attrs,
+                ))
+                results.extend(
+                    lookupMethod(
+                        self.directory,
+                        query.attribute,
+                        query.value,
+                        query.matchType,
+                        False,
+                        listRecordTypes,
+                        attrs,
+                    )
+                )
 
-        except opendirectory.ODError, ex:
-            if ex.message[1] == -14140 or ex.message[1] == -14200:
-                # Unsupported attribute on record - don't fail
-                return
-            else:
-                self.log_error("OpenDirectory (node=%s) error: %s" % (self.realmName, str(ex)))
-                raise
+            except opendirectory.ODError, ex:
+                if ex.message[1] == -14140 or ex.message[1] == -14200:
+                    # Unsupported attribute on record - don't fail
+                    return
+                else:
+                    self.log_error("OpenDirectory (node=%s) error: %s" % (self.realmName, str(ex)))
+                    raise
 
+        self.log_debug("opendirectory.queryRecordsWithAttribute_list matched records: %s" % (len(results),))
 
+
         enabledRecords = []
         disabledRecords = []
 

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py	2010-08-20 17:44:15 UTC (rev 6156)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py	2010-08-20 17:51:18 UTC (rev 6157)
@@ -144,19 +144,23 @@
         def test_queryDirectorySingleGUID(self):
             """ Test for lookup on existing and non-existing GUIDs """
 
-            def lookupMethod(obj, attr, value, matchType, casei, recordType, attributes, count=0):
+            def lookupMethod(obj, attr, value, matchType, casei, recordTypes, attributes, count=0):
 
-                data = [
-                    {
-                        dsattributes.kDS1AttrGeneratedUID : "1234567890",
-                        dsattributes.kDSNAttrRecordName : ["user1", "User 1"],
-                        dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
-                    },
-                ]
+                data = {
+                    "dsRecTypeStandard:Users" : [
+                        {
+                            dsattributes.kDS1AttrGeneratedUID : "1234567890",
+                            dsattributes.kDSNAttrRecordName : ["user1", "User 1"],
+                            dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
+                        },
+                    ],
+                    "dsRecTypeStandard:Groups" : [],
+                }
                 results = []
-                for entry in data:
-                    if entry[attr] == value:
-                        results.append(("", entry))
+                for recordType in recordTypes:
+                    for entry in data[recordType]:
+                        if entry[attr] == value:
+                            results.append(("", entry))
                 return results
 
             recordTypes = [DirectoryService.recordType_users, DirectoryService.recordType_groups]
@@ -197,26 +201,29 @@
             """ Test for lookup on local users, ensuring they do get
                 faulted in """
 
-            def lookupMethod(obj, attr, value, matchType, casei, recordType, attributes, count=0):
-
-                data = [
-                    {
-                        dsattributes.kDS1AttrGeneratedUID : "1234567890",
-                        dsattributes.kDSNAttrRecordName : ["user1", "User 1"],
-                        dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
-                        dsattributes.kDSNAttrMetaNodeLocation : "/Local/Default",
-                    },
-                    {
-                        dsattributes.kDS1AttrGeneratedUID : "987654321",
-                        dsattributes.kDSNAttrRecordName : ["user2", "User 2"],
-                        dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
-                        dsattributes.kDSNAttrMetaNodeLocation : "/LDAPv3/127.0.0.1",
-                    },
-                ]
+            def lookupMethod(obj, attr, value, matchType, casei, recordTypes, attributes, count=0):
+                data = {
+                    "dsRecTypeStandard:Users" : [
+                        {
+                            dsattributes.kDS1AttrGeneratedUID : "1234567890",
+                            dsattributes.kDSNAttrRecordName : ["user1", "User 1"],
+                            dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
+                            dsattributes.kDSNAttrMetaNodeLocation : "/Local/Default",
+                        },
+                        {
+                            dsattributes.kDS1AttrGeneratedUID : "987654321",
+                            dsattributes.kDSNAttrRecordName : ["user2", "User 2"],
+                            dsattributes.kDSNAttrRecordType : dsattributes.kDSStdRecordTypeUsers,
+                            dsattributes.kDSNAttrMetaNodeLocation : "/LDAPv3/127.0.0.1",
+                        },
+                    ],
+                    "dsRecTypeStandard:Groups" : [],
+                }
                 results = []
-                for entry in data:
-                    if entry[attr] == value:
-                        results.append(("", entry))
+                for recordType in recordTypes:
+                    for entry in data[recordType]:
+                        if entry[attr] == value:
+                            results.append(("", entry))
                 return results
 
             recordTypes = [DirectoryService.recordType_users, DirectoryService.recordType_groups]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100820/fccb1fe8/attachment.html>


More information about the calendarserver-changes mailing list