paged: fix paged search when the response contains no paged result extended control
This commit is contained in:
parent
28aec8c141
commit
6333c06f92
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue