diff --git a/ldapserver/entries.py b/ldapserver/entries.py index 9bd34b7ee00eead7be101b43ebc58bb28f169d91..06b0727361363165b6f8c4d0cceaa14ce70dc016 100644 --- a/ldapserver/entries.py +++ b/ldapserver/entries.py @@ -493,6 +493,8 @@ class EntryTemplate(AttributeDict): for name, values in self.__extract_filter_constraints(subfilter).items(): result[name] += values return result + if isinstance(filter_obj, ldap.FilterOr) and len(filter_obj.filters) == 1: + return self.__extract_filter_constraints(filter_obj.filters[0]) return AttributeDict(self.schema) def match_search(self, base_obj, scope, filter_obj): diff --git a/tests/test_entries.py b/tests/test_entries.py index 1947dc64f82de3f1e302e21cba1467e57669bfff..ff44c3186c12cfe4615f15d7aaab58bf31e3cc4c 100644 --- a/tests/test_entries.py +++ b/tests/test_entries.py @@ -743,6 +743,7 @@ class TestEntryTemplate(unittest.TestCase): template = EntryTemplate(schema, 'dc=example,dc=com', 'cn', objectclass=['top'], cn=WILDCARD, uid=['foobar']) self.assertEqual(dict(template.extract_search_constraints('dc=exapmle,dc=com', ldap.SearchScope.wholeSubtree, ldap.FilterEqual('cn', b'foo')).items()), {'cn': ['foo']}) self.assertEqual(dict(template.extract_search_constraints('dc=exapmle,dc=com', ldap.SearchScope.wholeSubtree, ldap.FilterAnd([ldap.FilterEqual('objectclass', b'top'), ldap.FilterEqual('cn', b'foo')])).items()), {'cn': ['foo'], 'objectClass': ['top']}) + self.assertEqual(dict(template.extract_search_constraints('dc=exapmle,dc=com', ldap.SearchScope.wholeSubtree, ldap.FilterOr([ldap.FilterEqual('cn', b'foo')])).items()), {'cn': ['foo']}) self.assertEqual(dict(template.extract_search_constraints('cn=foo,dc=example,dc=com', ldap.SearchScope.baseObject, ldap.FilterPresent('objectClass')).items()), {'cn': ['foo']}) self.assertEqual(dict(template.extract_search_constraints('dc=example,dc=com', ldap.SearchScope.baseObject, ldap.FilterPresent('objectClass')).items()), {})