paged: fix paged search when the response contains no paged result extended control

This commit is contained in:
Benjamin Dauvergne 2016-03-02 13:20:46 +01:00
parent 28aec8c141
commit 6333c06f92
2 changed files with 17 additions and 19 deletions

View File

@ -24,6 +24,7 @@ class LDAPSource(object):
if not dn:
continue
entry = idict(entry)
print dn, entry
if 'objectclass' in entry:
entry['objectclass'] = [istr(v) for v in entry['objectclass']]
yield dn, entry

View File

@ -33,36 +33,33 @@ class PagedResultsSearchObject:
sizelimit=sizelimit
)
all_results = []
while True:
rtype, rdata, rmsgid, rctrls = self.result3(msgid)
for result in rdata:
yield result
all_results.extend(rdata)
# Extract the simple paged results response control
pctrls = [
c
for c in rctrls
if c.controlType == SimplePagedResultsControl.controlType
]
if pctrls:
if pctrls[0].cookie:
# Copy cookie from response control to request control
req_ctrl.cookie = pctrls[0].cookie
msgid = self.search_ext(
base,
scope,
filterstr=filterstr,
attrlist=attrlist,
attrsonly=attrsonly,
serverctrls=(serverctrls or [])+[req_ctrl],
clientctrls=clientctrls,
timeout=timeout,
sizelimit=sizelimit
)
else:
break # no more pages available
if pctrls and pctrls[0].cookie:
# Copy cookie from response control to request control
req_ctrl.cookie = pctrls[0].cookie
msgid = self.search_ext(
base,
scope,
filterstr=filterstr,
attrlist=attrlist,
attrsonly=attrsonly,
serverctrls=(serverctrls or [])+[req_ctrl],
clientctrls=clientctrls,
timeout=timeout,
sizelimit=sizelimit
)
continue
break # no more pages available
except ldap.SERVER_DOWN:
self.reconnect(self._uri)
else: