Fix search scope on loading servers ContextCSN
This commit is contained in:
parent
d9ac73473d
commit
3c39ff7488
1 changed files with 20 additions and 8 deletions
|
@ -291,7 +291,7 @@ class LdapServer(object):
|
||||||
def getContextCSN(self, basedn=False, serverid=False):
|
def getContextCSN(self, basedn=False, serverid=False):
|
||||||
if not basedn:
|
if not basedn:
|
||||||
basedn = self.dn
|
basedn = self.dn
|
||||||
data = self.search(basedn, '(objectclass=*)', ['contextCSN'])
|
data = self.search(basedn, '(objectclass=*)', attrs=['contextCSN'], scope='base')
|
||||||
if data:
|
if data:
|
||||||
contextCSNs = data[0][0][1]['contextCSN']
|
contextCSNs = data[0][0][1]['contextCSN']
|
||||||
logging.debug('Found contextCSNs %s', contextCSNs)
|
logging.debug('Found contextCSNs %s', contextCSNs)
|
||||||
|
@ -309,10 +309,23 @@ class LdapServer(object):
|
||||||
return CSN[0]
|
return CSN[0]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def search(self, basedn, filterstr, attrs):
|
@staticmethod
|
||||||
|
def get_scope(scope):
|
||||||
|
if scope == 'base':
|
||||||
|
return ldap.SCOPE_BASE # pylint: disable=no-member
|
||||||
|
elif scope == 'one':
|
||||||
|
return ldap.SCOPE_ONELEVEL # pylint: disable=no-member
|
||||||
|
elif scope == 'sub':
|
||||||
|
return ldap.SCOPE_SUBTREE # pylint: disable=no-member
|
||||||
|
raise Exception("Unknown LDAP scope '%s'" % scope)
|
||||||
|
|
||||||
|
def search(self, basedn, filterstr, attrs=None, scope=None):
|
||||||
if self.page_size:
|
if self.page_size:
|
||||||
return self.paged_search(basedn, filterstr, attrs)
|
return self.paged_search(basedn, filterstr, attrs=attrs, scope=scope)
|
||||||
res_id = self.con.search(basedn, ldap.SCOPE_SUBTREE, filterstr, attrs) # pylint: disable=no-member
|
res_id = self.con.search(
|
||||||
|
basedn, self.get_scope(scope if scope else 'sub'),
|
||||||
|
filterstr, attrs if attrs else []
|
||||||
|
)
|
||||||
ret = []
|
ret = []
|
||||||
while 1:
|
while 1:
|
||||||
res_type, res_data = self.con.result(res_id, 0)
|
res_type, res_data = self.con.result(res_id, 0)
|
||||||
|
@ -323,7 +336,7 @@ class LdapServer(object):
|
||||||
ret.append(res_data)
|
ret.append(res_data)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def paged_search(self, basedn, filterstr, attrs):
|
def paged_search(self, basedn, filterstr, attrs=None, scope=None):
|
||||||
ret = []
|
ret = []
|
||||||
page = 0
|
page = 0
|
||||||
pg_ctrl = SimplePagedResultsControl(True, self.page_size, '')
|
pg_ctrl = SimplePagedResultsControl(True, self.page_size, '')
|
||||||
|
@ -331,9 +344,8 @@ class LdapServer(object):
|
||||||
page += 1
|
page += 1
|
||||||
logging.debug('Page search: loading page %d', page)
|
logging.debug('Page search: loading page %d', page)
|
||||||
res_id = self.con.search_ext(
|
res_id = self.con.search_ext(
|
||||||
basedn, ldap.SCOPE_SUBTREE, # pylint: disable=no-member
|
basedn, self.get_scope(scope if scope else 'sub'),
|
||||||
filterstr, attrs,
|
filterstr, attrs if attrs else [], serverctrls=[pg_ctrl]
|
||||||
serverctrls=[pg_ctrl]
|
|
||||||
)
|
)
|
||||||
res_type, res_data, res_id, serverctrls = self.con.result3(res_id) # pylint: disable=unused-variable
|
res_type, res_data, res_id, serverctrls = self.con.result3(res_id) # pylint: disable=unused-variable
|
||||||
for serverctrl in serverctrls:
|
for serverctrl in serverctrls:
|
||||||
|
|
Loading…
Reference in a new issue