[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