def search(base_dn, search_filter, attributes): """Iterative LDAP search using page control. :param base_dn: str -- The base DN from which to start the search. :param search_filter: str -- Representation of the filter to apply in the search. :param attributes: list -- Attributes to be retrieved for each entry. If ``None``, all attributes will be retrieved. :returns: A generator which yields one search result at a time as a tuple containing a `dn` as ``str`` and `attributes` as ``dict``. """ connection, settings = current_ldap page_ctrl = SimplePagedResultsControl(True, size=settings['page_size'], cookie='') while True: msg_id = connection.search_ext(base_dn, SCOPE_SUBTREE, filterstr=search_filter, attrlist=attributes, serverctrls=[page_ctrl], timeout=settings['timeout']) try: _, r_data, __, server_ctrls = connection.result3(msg_id, timeout=settings['timeout']) except NO_SUCH_OBJECT: break for dn, entry in r_data: if dn: yield dn, entry page_ctrl.cookie = get_page_cookie(server_ctrls) if not page_ctrl.cookie: # End of results break
def search(base_dn, search_filter, attributes): """Iterative LDAP search using page control. :param base_dn: str -- The base DN from which to start the search. :param search_filter: str -- Representation of the filter to apply in the search. :param attributes: list -- Attributes to be retrieved for each entry. If ``None``, all attributes will be retrieved. :returns: A generator which yields one search result at a time as a tuple containing a `dn` as ``str`` and `attributes` as ``dict``. """ connection, settings = current_ldap page_ctrl = SimplePagedResultsControl(True, size=settings['page_size'], cookie='') search_filter = search_filter.encode('utf-8') while True: msg_id = connection.search_ext(base_dn, SCOPE_SUBTREE, filterstr=search_filter, attrlist=attributes, serverctrls=[page_ctrl], timeout=settings['timeout']) try: _, r_data, __, server_ctrls = connection.result3(msg_id, timeout=settings['timeout']) except NO_SUCH_OBJECT: break for dn, entry in r_data: if dn: yield dn, entry page_ctrl.cookie = get_page_cookie(server_ctrls) if not page_ctrl.cookie: # End of results break