ldap.LdapServer: make parameters accepted by search and paged_search methods identical

This commit is contained in:
Benjamin Renard 2022-07-20 10:50:58 +02:00
parent 6adcc1eeed
commit 86eae5dae5
1 changed files with 17 additions and 2 deletions

View File

@ -116,7 +116,7 @@ class LdapServer:
return ldap.SCOPE_SUBTREE # pylint: disable=no-member
raise Exception(f'Unknown LDAP scope "{scope}"')
def search(self, basedn, filterstr=None, attrs=None, sizelimit=0, scope=None):
def search(self, basedn, filterstr=None, attrs=None, sizelimit=None, scope=None):
""" Run a search on LDAP server """
assert self.con or self.connect()
res_id = self.con.search(
@ -141,10 +141,18 @@ class LdapServer:
result = self.search(dn, filterstr=filterstr, scope='base', attrs=attrs)
return result[dn] if dn in result else None
def paged_search(self, basedn, filterstr, attrs, scope='sub', pagesize=500):
def paged_search(self, basedn, filterstr=None, attrs=None, scope=None, pagesize=None,
sizelimit=None):
""" Run a paged search on LDAP server """
assert not self.v2, "Paged search is not available on LDAP version 2"
assert self.con or self.connect()
# Set parameters default values (if not defined)
filterstr = filterstr if filterstr else '(objectClass=*)'
attrs = attrs if attrs else []
scope = scope if scope else 'sub'
pagesize = pagesize if pagesize else 500
# Initialize SimplePagedResultsControl object
page_control = SimplePagedResultsControl(
True,
@ -208,6 +216,13 @@ class LdapServer:
# Store results of this page
for obj_dn, obj_attrs in rdata:
ret[obj_dn] = obj_attrs
# If sizelimit reached, stop
if sizelimit and len(ret) >= sizelimit:
break
# If sizelimit reached, stop
if sizelimit and len(ret) >= sizelimit:
break
# If no cookie returned, we are done
if not result_page_control.cookie: