[CalendarServer-changes] [8234] CalendarServer/trunk/twistedcaldav/directory
source_changes at macosforge.org
source_changes at macosforge.org
Thu Oct 27 15:32:39 PDT 2011
Revision: 8234
http://trac.macosforge.org/projects/calendarserver/changeset/8234
Author: sagen at apple.com
Date: 2011-10-27 15:32:39 -0700 (Thu, 27 Oct 2011)
Log Message:
-----------
LDAP DNs should be considered case insensitive, so lowercase them when comparing.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py
CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py
Modified: CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py 2011-10-27 21:37:35 UTC (rev 8233)
+++ CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py 2011-10-27 22:32:39 UTC (rev 8234)
@@ -257,7 +257,7 @@
self.typeDNs = {}
for recordType in self.recordTypes():
self.typeDNs[recordType] = ldap.dn.str2dn(
- self.rdnSchema[recordType]["rdn"]
+ self.rdnSchema[recordType]["rdn"].lower()
) + self.base
# Create LDAP connection
@@ -1034,12 +1034,16 @@
returnValue(recordsByAlias.values())
- def recordTypeForDN(self, dn):
+ def recordTypeForDN(self, dnStr):
"""
- Examine a dn to determine which recordType it belongs to
+ Examine a DN to determine which recordType it belongs to
+ @param dn: DN to compare
+ @type dn: string
+ @return: recordType string, or None if no match
"""
+ dn = ldap.dn.str2dn(dnStr.lower())
for recordType in self.recordTypes():
- base = self.typeDNs[recordType]
+ base = self.typeDNs[recordType] # already lowercase
if dnContainedIn(dn, base):
return recordType
return None
@@ -1191,7 +1195,7 @@
dn, attrs = result.pop()
self.log_debug("Retrieved: %s %s" % (dn,attrs))
- recordType = self.service.recordTypeForDN(ldap.dn.str2dn(dn))
+ recordType = self.service.recordTypeForDN(dn)
if recordType is None:
self.log_error("Unable to map %s to a record type" % (dn,))
continue
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py 2011-10-27 21:37:35 UTC (rev 8233)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py 2011-10-27 22:32:39 UTC (rev 8234)
@@ -24,6 +24,7 @@
from twistedcaldav.directory import calendaruserproxy
from twistedcaldav.directory.directory import GroupMembershipCache, GroupMembershipCacheUpdater
from twisted.internet.defer import inlineCallbacks
+ import ldap
except ImportError:
print "Skipping because ldap module not installed"
else:
@@ -152,7 +153,7 @@
"base": "dc=example,dc=com",
"guidAttr": "apple-generateduid",
"users": {
- "rdn": "cn=users",
+ "rdn": "cn=Users",
"attr": "uid", # used only to synthesize email address
"emailSuffix": None, # used only to synthesize email address
"filter": "(objectClass=apple-user)", # additional filter for this type
@@ -169,7 +170,7 @@
},
},
"groups": {
- "rdn": "cn=groups",
+ "rdn": "cn=Groups",
"attr": "cn", # used only to synthesize email address
"emailSuffix": None, # used only to synthesize email address
"filter": "(objectClass=apple-group)", # additional filter for this type
@@ -182,7 +183,7 @@
},
},
"locations": {
- "rdn": "cn=places",
+ "rdn": "cn=Places",
"attr": "cn", # used only to synthesize email address
"emailSuffix": None, # used only to synthesize email address
"filter": "(objectClass=apple-resource)", # additional filter for this type
@@ -197,7 +198,7 @@
},
},
"resources": {
- "rdn": "cn=resources",
+ "rdn": "cn=Resources",
"attr": "cn", # used only to synthesize email address
"emailSuffix": None, # used only to synthesize email address
"filter": "(objectClass=apple-resource)", # additional filter for this type
@@ -634,3 +635,26 @@
# Empty
results = list(splitIntoBatches(set([]), 5)) # empty data
self.assertEquals(results, [set([])])
+
+ def test_recordTypeForDN(self):
+ # Ensure dn comparison is case insensitive and ignores extra
+ # whitespace
+
+ # Base DNs for each recordtype should already be lowercase
+ for dn in self.service.typeDNs.itervalues():
+ dnStr = ldap.dn.dn2str(dn)
+ self.assertEquals(dnStr, dnStr.lower())
+
+ # Match
+ dnStr = "uid=foo,cn=USers ,dc=EXAMple,dc=com"
+ self.assertEquals(self.service.recordTypeForDN(dnStr), "users")
+ dnStr = "uid=foo,cn=PLaces,dc=EXAMple,dc=com"
+ self.assertEquals(self.service.recordTypeForDN(dnStr), "locations")
+ dnStr = "uid=foo,cn=Groups ,dc=EXAMple,dc=com"
+ self.assertEquals(self.service.recordTypeForDN(dnStr), "groups")
+ dnStr = "uid=foo,cn=Resources ,dc=EXAMple,dc=com"
+ self.assertEquals(self.service.recordTypeForDN(dnStr), "resources")
+
+ # No Match
+ dnStr = "uid=foo,cn=US ers ,dc=EXAMple,dc=com"
+ self.assertEquals(self.service.recordTypeForDN(dnStr), None)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111027/cdd2ceaa/attachment-0001.html>
More information about the calendarserver-changes
mailing list