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

source_changes at macosforge.org source_changes at macosforge.org
Wed Aug 14 11:44:04 PDT 2013


Revision: 11604
          http://trac.calendarserver.org//changeset/11604
Author:   sagen at apple.com
Date:     2013-08-14 11:44:04 -0700 (Wed, 14 Aug 2013)
Log Message:
-----------
Allow extra LDAP filters in the plist to be applied to calendarserver-principal-search

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	2013-08-13 23:37:38 UTC (rev 11603)
+++ CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py	2013-08-14 18:44:04 UTC (rev 11604)
@@ -1106,8 +1106,9 @@
             typeCounts[recordType] = 0
             base = self.typeDNs[recordType]
             scope = ldap.SCOPE_SUBTREE
+            extraFilter = self.rdnSchema[recordType]["filter"]
             filterstr = buildFilterFromTokens(recordType, self.rdnSchema[recordType]["mapping"],
-                tokens)
+                tokens, extra=extraFilter)
 
             if filterstr is not None:
                 # Query the LDAP server
@@ -1428,7 +1429,7 @@
     return filterstr
 
 
-def buildFilterFromTokens(recordType, mapping, tokens):
+def buildFilterFromTokens(recordType, mapping, tokens, extra=None):
     """
     Create an LDAP filter string from a list of query tokens.  Each token is
     searched for in each LDAP attribute corresponding to "fullName" and
@@ -1439,6 +1440,8 @@
     @type mapping: C{dict}
     @param tokens: The list of tokens to search for
     @type tokens: C{list}
+    @param extra: Extra filter to "and" into the final filter
+    @type extra: C{str} or None
     @return: An LDAP filterstr
     @rtype: C{str}
     """
@@ -1467,6 +1470,8 @@
         return None
 
     tokenFragments = []
+    if extra:
+        tokenFragments.append(extra)
 
     for token in tokens:
         fragments = []

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py	2013-08-13 23:37:38 UTC (rev 11603)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py	2013-08-14 18:44:04 UTC (rev 11604)
@@ -207,7 +207,8 @@
                         "fullName" : "cn",
                         "emailAddresses" : "mail",
                     },
-                    "expected" : "(|(cn=*foo*)(mail=foo*))",
+                    "expected" : "(&(a=b)(|(cn=*foo*)(mail=foo*)))",
+                    "extra" : "(a=b)",
                 },
                 {
                     "tokens" : ["foo"],
@@ -215,7 +216,8 @@
                         "fullName" : "cn",
                         "emailAddresses" : ["mail", "mailAliases"],
                     },
-                    "expected" : "(|(cn=*foo*)(mail=foo*)(mailAliases=foo*))",
+                    "expected" : "(&(a=b)(|(cn=*foo*)(mail=foo*)(mailAliases=foo*)))",
+                    "extra" : "(a=b)",
                 },
                 {
                     "tokens" : [],
@@ -224,11 +226,13 @@
                         "emailAddresses" : "mail",
                     },
                     "expected" : None,
+                    "extra" : None,
                 },
                 {
                     "tokens" : ["foo", "bar"],
                     "mapping" : { },
                     "expected" : None,
+                    "extra" : None,
                 },
                 {
                     "tokens" : ["foo", "bar"],
@@ -236,6 +240,7 @@
                         "emailAddresses" : "mail",
                     },
                     "expected" : "(&(mail=foo*)(mail=bar*))",
+                    "extra" : None,
                 },
                 {
                     "tokens" : ["foo", "bar"],
@@ -244,6 +249,7 @@
                         "emailAddresses" : "mail",
                     },
                     "expected" : "(&(|(cn=*foo*)(mail=foo*))(|(cn=*bar*)(mail=bar*)))",
+                    "extra" : None,
                 },
                 {
                     "tokens" : ["foo", "bar"],
@@ -252,6 +258,7 @@
                         "emailAddresses" : ["mail", "mailAliases"],
                     },
                     "expected" : "(&(|(cn=*foo*)(mail=foo*)(mailAliases=foo*))(|(cn=*bar*)(mail=bar*)(mailAliases=bar*)))",
+                    "extra" : None,
                 },
                 {
                     "tokens" : ["foo", "bar", "baz("],
@@ -260,11 +267,12 @@
                         "emailAddresses" : "mail",
                     },
                     "expected" : "(&(|(cn=*foo*)(mail=foo*))(|(cn=*bar*)(mail=bar*))(|(cn=*baz\\28*)(mail=baz\\28*)))",
+                    "extra" : None,
                 },
             ]
             for entry in entries:
                 self.assertEquals(
-                    buildFilterFromTokens(None, entry["mapping"], entry["tokens"]),
+                    buildFilterFromTokens(None, entry["mapping"], entry["tokens"], extra=entry["extra"]),
                     entry["expected"]
                 )
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130814/054c3f7d/attachment-0001.html>


More information about the calendarserver-changes mailing list