from ldap3 import ALL_ATTRIBUTES, ALL_OPERATIONAL_ATTRIBUTES from phi.logging import get_logger log = get_logger(__name__) def get_entry_by_uid(client, uid): log.info("Searching entry with identifier: {}".format(uid)) filter_ = "({}={})".format('uid', uid) log.debug("Search filter: {}".format(filter_)) response_id = client.connection.search( client.base_dn, filter_, search_scope='SUBTREE', attributes=[ALL_ATTRIBUTES] ) response, result, request = client.connection.get_response( response_id, get_request=True ) log.debug("Request: {}".format(request)) log.debug("Response: {}".format(response)) log.debug("Result: {}".format(result)) if not response: return None if response[1:]: log.error("Looking for exactly one result but server gave {}. " "Taking the first and ignoring the rest." .format(len(response))) return response[0] def get_entries_by_ou(client, ou): log.info("Searching entries with organizational unit: {}".format(ou)) dn = 'ou={},{}'.format(ou, client.base_dn) log.debug("Search dn: {}".format(dn)) response_id = client.connection.search( dn, '(objectclass=person)', search_scope='SUBTREE', attributes=[ALL_ATTRIBUTES] ) response, result, request = client.connection.get_response( response_id, get_request=True ) return response