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