Skip to content
Snippets Groups Projects
Commit f767a2b6 authored by Julian Rother's avatar Julian Rother
Browse files

Improve filter_present pre-evaluation to reduces API calls

parent df9a4966
Branches
Tags
No related merge requests found
...@@ -38,6 +38,7 @@ class UserDirectory(SimpleFilterMixin, BaseDirectory): ...@@ -38,6 +38,7 @@ class UserDirectory(SimpleFilterMixin, BaseDirectory):
self.group_dn_base = DN('ou=groups') + DN(dn_base) self.group_dn_base = DN('ou=groups') + DN(dn_base)
self.structuralobjectclass = b'inetorgperson' self.structuralobjectclass = b'inetorgperson'
self.objectclasses = [b'top', b'inetorgperson', b'organizationalperson', b'person', b'posixaccount'] self.objectclasses = [b'top', b'inetorgperson', b'organizationalperson', b'person', b'posixaccount']
self.attributes = ['structuralobjectclass', 'objectclass', 'cn', 'displayname', 'givenname', 'homedirectory', 'mail', 'sn', 'uid', 'uidnumber', 'memberof']
def generate_result(self, user): def generate_result(self, user):
attributes = CaseInsensitiveDict( attributes = CaseInsensitiveDict(
...@@ -91,6 +92,11 @@ class UserDirectory(SimpleFilterMixin, BaseDirectory): ...@@ -91,6 +92,11 @@ class UserDirectory(SimpleFilterMixin, BaseDirectory):
value = str(DN.from_str(value.decode())).encode() value = str(DN.from_str(value.decode())).encode()
return super().filter_equal(attribute, value) return super().filter_equal(attribute, value)
def filter_present(self, attribute):
if attribute not in self.attributes:
return False
return super().filter_present(attribute)
class GroupDirectory(SimpleFilterMixin, BaseDirectory): class GroupDirectory(SimpleFilterMixin, BaseDirectory):
def __init__(self, api, dn_base): def __init__(self, api, dn_base):
self.api = api self.api = api
...@@ -99,6 +105,7 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory): ...@@ -99,6 +105,7 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory):
self.user_dn_base = DN('ou=users') + DN(dn_base) self.user_dn_base = DN('ou=users') + DN(dn_base)
self.structuralobjectclass = b'groupOfUniqueNames' self.structuralobjectclass = b'groupOfUniqueNames'
self.objectclasses = [b'top', b'groupOfUniqueNames', b'posixGroup'] self.objectclasses = [b'top', b'groupOfUniqueNames', b'posixGroup']
self.attributes = ['structuralobjectclass', 'objectclass', 'cn', 'description', 'gidnumber', 'uniquemember']
def generate_result(self, group): def generate_result(self, group):
attributes = CaseInsensitiveDict( attributes = CaseInsensitiveDict(
...@@ -145,6 +152,11 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory): ...@@ -145,6 +152,11 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory):
value = str(DN.from_str(value.decode())).encode() value = str(DN.from_str(value.decode())).encode()
return super().filter_equal(attribute, value) return super().filter_equal(attribute, value)
def filter_present(self, attribute):
if attribute not in self.attributes:
return False
return super().filter_present(attribute)
class MailDirectory(SimpleFilterMixin, BaseDirectory): class MailDirectory(SimpleFilterMixin, BaseDirectory):
def __init__(self, api, dn_base): def __init__(self, api, dn_base):
self.api = api self.api = api
...@@ -152,6 +164,7 @@ class MailDirectory(SimpleFilterMixin, BaseDirectory): ...@@ -152,6 +164,7 @@ class MailDirectory(SimpleFilterMixin, BaseDirectory):
self.dn_base = DN('ou=postfix') + DN(dn_base) self.dn_base = DN('ou=postfix') + DN(dn_base)
self.structuralobjectclass = b'postfixVirtual' self.structuralobjectclass = b'postfixVirtual'
self.objectclasses = [b'top', b'postfixVirtual'] self.objectclasses = [b'top', b'postfixVirtual']
self.attributes = ['structuralobjectclass', 'objectclass', 'uid', 'mailacceptinggeneralid', 'maildrop']
def generate_result(self, mail): def generate_result(self, mail):
attributes = CaseInsensitiveDict( attributes = CaseInsensitiveDict(
...@@ -190,6 +203,11 @@ class MailDirectory(SimpleFilterMixin, BaseDirectory): ...@@ -190,6 +203,11 @@ class MailDirectory(SimpleFilterMixin, BaseDirectory):
if eval_ldap_filter(obj, expr): if eval_ldap_filter(obj, expr):
yield dn, obj yield dn, obj
def filter_present(self, attribute):
if attribute not in self.attributes:
return False
return super().filter_present(attribute)
class RequestHandler(SimpleLDAPRequestHandler): class RequestHandler(SimpleLDAPRequestHandler):
subschema = RFC2307BIS_SUBSCHEMA subschema = RFC2307BIS_SUBSCHEMA
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment