[ldap] Add function to list used ipv4 on a subnet
							parent
							
								
									884076186f
								
							
						
					
					
						commit
						c2ffc73c8a
					
				| 
						 | 
					@ -52,11 +52,28 @@ class LookupModule(LookupBase):
 | 
				
			||||||
        result = [res.decode('utf-8') for res in result['ipHostNumber']]
 | 
					        result = [res.decode('utf-8') for res in result['ipHostNumber']]
 | 
				
			||||||
        return result
 | 
					        return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def subnet_ipv4(self, subnet):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Retrive 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)
 | 
				
			||||||
 | 
					        network_result = self.base.result(network_query_id)
 | 
				
			||||||
 | 
					        network = network_result[1][0][1]
 | 
				
			||||||
 | 
					        network, hostmask = network['ipNetworkNumber'][0].decode('utf-8'), network['ipNetmaskNumber'][0].decode('utf-8')
 | 
				
			||||||
 | 
					        subnet = ipaddress.IPv4Network(f"{network}/{hostmask}")
 | 
				
			||||||
 | 
					        query_id = self.base.search(f"ou=hosts,{self.base_dn}", ldap.SCOPE_SUBTREE, "objectClass=ipHost")
 | 
				
			||||||
 | 
					        result = self.base.result(query_id)
 | 
				
			||||||
 | 
					        result = [ip.decode('utf-8') for dn, entry in result[1] for ip in entry['ipHostNumber'] if ipaddress.ip_address(ip.decode('utf-8')) in subnet]
 | 
				
			||||||
 | 
					        return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run(self, terms, variables=None, **kwargs):
 | 
					    def run(self, terms, variables=None, **kwargs):
 | 
				
			||||||
        if terms[0] == 'query':
 | 
					        if terms[0] == 'query':
 | 
				
			||||||
            result = self.query(*terms[1:])
 | 
					            result = self.query(*terms[1:])
 | 
				
			||||||
        elif terms[0] == 'ip':
 | 
					        elif terms[0] == 'ip':
 | 
				
			||||||
            result = self.ip(*terms[1:])
 | 
					            result = self.ip(*terms[1:])
 | 
				
			||||||
 | 
					        elif terms[0] == 'subnet_ipv4':
 | 
				
			||||||
 | 
					            result = self.subnet_ipv4(*terms[1:])
 | 
				
			||||||
        elif terms[0] == 'group':
 | 
					        elif terms[0] == 'group':
 | 
				
			||||||
            query_id = self.base.search(f"ou=group,{self.base_dn}", ldap.SCOPE_SUBTREE, "objectClass=posixGroup")
 | 
					            query_id = self.base.search(f"ou=group,{self.base_dn}", ldap.SCOPE_SUBTREE, "objectClass=posixGroup")
 | 
				
			||||||
            result = self.base.result(query_id)
 | 
					            result = self.base.result(query_id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue