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()), {})