From ab4dfa3f4daab41bc04439c9c9eaf84407100a08 Mon Sep 17 00:00:00 2001 From: Benjamin Graillot <graillot@crans.org> Date: Fri, 1 Jan 2021 11:59:51 +0100 Subject: [PATCH] [ldap.py] Add cn query --- lookup_plugins/ldap.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lookup_plugins/ldap.py b/lookup_plugins/ldap.py index cdca475f..bd04a89a 100644 --- a/lookup_plugins/ldap.py +++ b/lookup_plugins/ldap.py @@ -60,9 +60,28 @@ class LookupModule(LookupBase): result = [res.decode('utf-8') for res in result['ipHostNumber']] return result + def cn(self, host, vlan): + """ + Retrieve aliases of an interface of a device + query('ldap', 'cn', HOST, VLAN) + """ + if isinstance(vlan, int): + network_query_id = self.base.search(f"ou=networks,{self.base_dn}", ldap.SCOPE_ONELEVEL, f"description={vlan}") + network_result = self.base.result(network_query_id) + vlan = network_result[1][0][1]['cn'][0].decode('utf-8') + if vlan == 'srv': + query_id = self.base.search(f"cn={host}.crans.org,cn={host},ou=hosts,{self.base_dn}", ldap.SCOPE_BASE) + else: + query_id = self.base.search(f"cn={host}.{vlan}.crans.org,cn={host},ou=hosts,{self.base_dn}", ldap.SCOPE_BASE) + result = self.base.result(query_id) + result = result[1][0][1] + result = [res.decode('utf-8') for res in result['cn']] + return result + + def subnet_ipv4(self, subnet): """ - Retrive used IP addresses on a subnet + Retrieve used IP addresses on a subnet query('ldap', 'subnet_ipv4', SUBNET) """ network_query_id = self.base.search(f"cn={subnet},ou=networks,{self.base_dn}", ldap.SCOPE_BASE) @@ -80,6 +99,8 @@ class LookupModule(LookupBase): result = self.query(*terms[1:]) elif terms[0] == 'ip': result = self.ip(*terms[1:]) + elif terms[0] == 'cn': + result = self.cn(*terms[1:]) elif terms[0] == 'subnet_ipv4': result = self.subnet_ipv4(*terms[1:]) elif terms[0] == 'group': -- GitLab