[CalendarServer-changes] [8995] CalendarServer/branches/users/gaya/ldapdirectorybacker
source_changes at macosforge.org
source_changes at macosforge.org
Fri Apr 6 16:07:07 PDT 2012
Revision: 8995
http://trac.macosforge.org/projects/calendarserver/changeset/8995
Author: gaya at apple.com
Date: 2012-04-06 16:07:06 -0700 (Fri, 06 Apr 2012)
Log Message:
-----------
add searchAttributes to limit od search query
Modified Paths:
--------------
CalendarServer/branches/users/gaya/ldapdirectorybacker/conf/carddav-odtest.plist
CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py
CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py
CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/stdconfig.py
Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/conf/carddav-odtest.plist
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/conf/carddav-odtest.plist 2012-04-06 19:47:21 UTC (rev 8994)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/conf/carddav-odtest.plist 2012-04-06 23:07:06 UTC (rev 8995)
@@ -1057,7 +1057,7 @@
</array>
-->
<!-- add this key to limit directory service attributes used to make vCard properties
- When using directory service templates, list should include only mapped attributes.
+ When using directory service templates, list should include only mapped attributes.
<key>allowedAttributes</key>
<array>
<string>dsAttrTypeStandard:AddressLine1</string>
@@ -1103,7 +1103,26 @@
<string>dsAttrTypeStandard:UserPKCS12Data</string>
<string>dsAttrTypeStandard:UserSMIMECertificate</string>
<string>dsAttrTypeStandard:WeblogURI</string>
- </array>
+ </array>
+ -->
+ <!-- add this key to change directory service query attributes.
+ Missing defaults to od indexed attributes
+ Use an empty array not to restrict the query.
+ <key>searchAttributes</key>
+ <array>
+ <string>dsAttrTypeStandard:GeneratedUID</string>
+ <string>dsAttrTypeStandard:RealName</string>
+ <string>dsAttrTypeStandard:FirstName</string>
+ <string>dsAttrTypeStandard:LastName</string>
+ <string>dsAttrTypeStandard:PhoneNumber</string>
+ <string>dsAttrTypeStandard:MobileNumber</string>
+ <string>dsAttrTypeStandard:Department</string>
+ <string>dsAttrTypeStandard:Company</string>
+ <string>dsAttrTypeStandard:Street</string>
+ <string>dsAttrTypeStandard:State</string>
+ <string>dsAttrTypeStandard:City</string>
+ <string>dsAttrTypeStandard:Country</string>
+ </array>
-->
</dict>
<!-- twistedcaldav.directory.opendirectorybacker.OpenDirectoryBackingService ->
Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py 2012-04-06 19:47:21 UTC (rev 8994)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py 2012-04-06 23:07:06 UTC (rev 8995)
@@ -266,7 +266,7 @@
for dsAttributeName in dsAttributeNames:
# base64 encode binary attributes
- if dsAttributeName in ABDirectoryQueryResult.binaryDSAttributeStrs:
+ if dsAttributeName in ABDirectoryQueryResult.binaryDSAttrNames:
ldapAttributeValues = [attr.encode('base64') for attr in ldapAttributeValues]
# add to dsRecordAttributes
Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py 2012-04-06 19:47:21 UTC (rev 8994)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py 2012-04-06 23:07:06 UTC (rev 8995)
@@ -90,8 +90,9 @@
generateSimpleUIDs = False, # use simple synthetic UIDs --- good for testing
appleInternalServer=False,
- additionalAttributes=[],
- allowedAttributes=[],
+ additionalAttributes=None,
+ allowedAttributes=None,
+ searchAttributes=None,
directoryBackedAddressBook=None
):
"""
@@ -156,29 +157,69 @@
self.generateSimpleUIDs = generateSimpleUIDs
self.appleInternalServer = appleInternalServer
- if ignoreSystemRecords:
- # needed for sytem record test, but not has no part in generating in vCard properties
- additionalAttributes += [dsattributes.kDS1AttrUniqueID,]
- self.additionalAttributes = additionalAttributes
- # filter allows attributes, but make sure there are a minimum of attributes for functionality
+ if searchAttributes is None:
+ # this is the intersection of ds default indexed attributes and ABDirectoryQueryResult.vcardPropToDSAttrMap.values()
+ # so, not all indexed attributes are below
+ searchAttributes = [
+ dsattributes.kDS1AttrGeneratedUID,
+ dsattributes.kDS1AttrDistinguishedName,
+ dsattributes.kDS1AttrFirstName,
+ dsattributes.kDS1AttrLastName,
+ dsattributes.kDSNAttrPhoneNumber,
+ dsattributes.kDSNAttrMobileNumber,
+ dsattributes.kDSNAttrDepartment,
+ dsattributes.kDSNAttrCompany,
+ dsattributes.kDSNAttrStreet,
+ dsattributes.kDSNAttrState,
+ dsattributes.kDSNAttrCity,
+ dsattributes.kDSNAttrCountry,
+ ]
+ elif not searchAttributes:
+ # if search Attributes is [], don't restrict searching (but no binary)
+ searchAttributes = stringDSAttrNames
+ self.log_debug("self.searchAttributes=%s" % (searchAttributes, ))
+
+ # calculate search map
+ vCardPropToSearchableDSAttrMap = {}
+ for prop, dsAttributeList in ABDirectoryQueryResult.vcardPropToDSAttrMap.iteritems():
+ dsIndexedAttributeList = [attr for attr in dsAttributeList if attr in searchAttributes]
+ if len(dsIndexedAttributeList):
+ vCardPropToSearchableDSAttrMap[prop] = dsIndexedAttributeList
+
+ self.vCardPropToSearchableDSAttrMap = vCardPropToSearchableDSAttrMap
+ self.log_debug("self.vCardPropToSearchableDSAttrMap=%s" % (self.vCardPropToSearchableDSAttrMap, ))
+
+
+ #get attributes required for needed for valid vCard
+ requiredAttributes = [attr for prop in ("UID", "FN", "N") for attr in ABDirectoryQueryResult.vcardPropToDSAttrMap[prop]]
+ requiredAttributes += [dsattributes.kDS1AttrModificationTimestamp, dsattributes.kDS1AttrCreationTimestamp,] # for VCardResult property mix in
+ self.requiredAttributes = list(set(requiredAttributes))
+ self.log_debug("self.requiredAttributes=%s" % (self.requiredAttributes, ))
+
+ # get returned attributes
+ #allowedAttributes = [dsattributes.kDS1AttrUniqueID,]
if allowedAttributes:
- self.allowedDSQueryAttributes = sorted(list(set(
- [attr for attr in ABDirectoryQueryResult.allDSQueryAttributes
+
+ returnedAttributes = [attr for attr in ABDirectoryQueryResult.allDSQueryAttributes
if (isinstance(attr, str) and attr in allowedAttributes) or
- (isinstance(attr, tuple) and attr[0] in allowedAttributes)] +
- ABDirectoryQueryResult.dsqueryAttributesForProperty.get("X-INTERNAL-REQUIRED")
- )))
- if (self.allowedDSQueryAttributes != ABDirectoryQueryResult.allDSQueryAttributes):
- self.log_info("Allowed DS query attributes = %r" % (self.allowedDSQueryAttributes, ))
+ (isinstance(attr, tuple) and attr[0] in allowedAttributes)]
+ self.log_debug("allowedAttributes%s" % (allowedAttributes, ))
else:
- self.allowedDSQueryAttributes = ABDirectoryQueryResult.allDSQueryAttributes
+ returnedAttributes = ABDirectoryQueryResult.allDSQueryAttributes
+
+ # add required
+ returnedAttributes += self.requiredAttributes
- #self.returnedAttributes = ABDirectoryQueryResult.allDSQueryAttributes
- self.returnedAttributes = self.allowedDSQueryAttributes
+ if additionalAttributes:
+ returnedAttributes += addtionalAttributes
-
+ if ignoreSystemRecords:
+ returnedAttributes += [dsattributes.kDS1AttrUniqueID,]
+ self.returnedAttributes = list(set(returnedAttributes))
+ self.log_debug("self.returnedAttributes=%s" % (self.returnedAttributes, ))
+
self._dsLocalResults = {}
self._nextDSLocalQueryTime = 0
@@ -226,16 +267,15 @@
recordTypes = [dsattributes.kDSStdRecordTypePeople, dsattributes.kDSStdRecordTypeUsers, ]
try:
localNodeDirectory = self.odModule.odInit("/Local/Default")
- returnedAttributes = list(set(self.returnedAttributes + self.additionalAttributes))
self.log_debug("opendirectory.listAllRecordsWithAttributes_list(%r,%r,%r)" % (
"/DSLocal",
recordTypes,
- returnedAttributes,
+ self.returnedAttributes,
))
records = list(self.odModule.listAllRecordsWithAttributes_list(
localNodeDirectory,
recordTypes,
- returnedAttributes,
+ self.returnedAttributes,
))
except self.odModule.ODError, ex:
self.log_error("Open Directory (node=%s) error: %s" % ("/Local/Default", str(ex)))
@@ -338,9 +378,7 @@
if not attributes:
attributes = self.returnedAttributes
-
- attributes = list(set(attributes + self.additionalAttributes)) # remove duplicates
-
+
directoryAndRecordTypes = []
if self.peopleDirectory == self.userDirectory:
# use single ds query if possible for best performance
@@ -437,15 +475,14 @@
return self.returnedAttributes
else:
- propertyNames.append("X-INTERNAL-MINIMUM-VCARD-PROPERTIES") # these properties are required to make a vCard
- queryAttributes = []
+ queryAttributes = self.requiredAttributes
for prop in propertyNames:
- if prop in ABDirectoryQueryResult.dsqueryAttributesForProperty:
- #print("adding attributes %r" % ABDirectoryQueryResult.dsqueryAttributesForProperty.get(prop))
- queryAttributes += ABDirectoryQueryResult.dsqueryAttributesForProperty.get(prop)
+ attributes = self.vCardPropToSearchableDSAttrMap.get(prop)
+ if attributes:
+ queryAttributes += attributes
+
+ return list(set(queryAttributes))
- return list(set(queryAttributes).intersection(set(self.returnedAttributes)))
-
@inlineCallbacks
@@ -454,7 +491,7 @@
Get vCards for a given addressBookFilter and addressBookQuery
"""
- allRecords, filterAttributes, dsFilter = dsFilterFromAddressBookFilter( addressBookFilter, vcardPropToDSAttrMap=ABDirectoryQueryResult.vcardPropToDSAttrMap, allowedAttributes=self.allowedDSQueryAttributes );
+ allRecords, filterAttributes, dsFilter = dsFilterFromAddressBookFilter( addressBookFilter, vcardPropToDSAttrMap=self.vCardPropToSearchableDSAttrMap );
#print("allRecords = %s, query = %s" % (allRecords, "None" if dsFilter is None else dsFilter.generate(),))
# testing:
@@ -519,7 +556,7 @@
return (etagRequested, propertyNames if len(propertyNames) else None)
-def dsFilterFromAddressBookFilter(addressBookFilter, vcardPropToDSAttrMap, allowedAttributes=None):
+def dsFilterFromAddressBookFilter(addressBookFilter, vcardPropToDSAttrMap):
"""
Convert the supplied addressbook-query into a ds expression tree.
@@ -734,8 +771,6 @@
queryAttributes = vcardPropToDSAttrMap.get(propFilter.filter_name, [])
if isinstance(queryAttributes, str):
queryAttributes = [queryAttributes,]
- if allowedAttributes:
- queryAttributes = list(set(queryAttributes).intersection(set(allowedAttributes)))
binaryAttrNames = []
stringAttrNames = []
@@ -954,29 +989,7 @@
],
"X-ABRELATEDNAMES" : [
dsattributes.kDSNAttrRelationships,
- ],
- "X-INTERNAL-MINIMUM-VCARD-PROPERTIES" : [
- dsattributes.kDS1AttrGeneratedUID,
- dsattributes.kDS1AttrFirstName,
- dsattributes.kDS1AttrLastName,
- dsattributes.kDS1AttrMiddleName,
- dsattributes.kDSNAttrNamePrefix,
- dsattributes.kDSNAttrNameSuffix,
- dsattributes.kDS1AttrDistinguishedName,
- dsattributes.kDSNAttrRecordName,
- dsattributes.kDSNAttrRecordType,
- dsattributes.kDS1AttrModificationTimestamp,
- dsattributes.kDS1AttrCreationTimestamp,
- ],
- "X-INTERNAL-REQUIRED" : [
- dsattributes.kDS1AttrGeneratedUID,
- dsattributes.kDS1AttrDistinguishedName,
- dsattributes.kDSNAttrRecordName,
- dsattributes.kDS1AttrFirstName,
- dsattributes.kDS1AttrLastName,
- dsattributes.kDSNAttrRecordType,
- ],
-
+ ],
}
allDSQueryAttributes = list(set([attr for lookupAttributes in vcardPropToDSAttrMap.values()
Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/stdconfig.py 2012-04-06 19:47:21 UTC (rev 8994)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/stdconfig.py 2012-04-06 23:07:06 UTC (rev 8995)
@@ -225,8 +225,9 @@
"generateSimpleUIDs": False,
"addDSAttrXProperties": False,
"appleInternalServer": False,
- "additionalAttributes" : [],
- "allowedAttributes" : [],
+ "additionalAttributes" : None,
+ "allowedAttributes" : None,
+ "searchAttributes" : None,
},
"twistedcaldav.directory.ldapdirectorybacker.LdapDirectoryBackingService": {
"appleInternalServer": False,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120406/2c070390/attachment-0001.html>
More information about the calendarserver-changes
mailing list