Package ldaptor :: Module dns
[hide private]
[frames] | no frames]

Source Code for Module ldaptor.dns

 1  """DNS-related utilities.""" 
 2   
 3  from socket import inet_aton, inet_ntoa 
 4   
5 -def aton_octets(ip):
6 s=inet_aton(ip) 7 octets=map(None, s) 8 n=0L 9 for o in octets: 10 n=n<<8 11 n+=ord(o) 12 return n
13
14 -def aton_numbits(num):
15 n=0L 16 while num>0: 17 n>>=1 18 n |= 2**31 19 num-=1 20 return n
21
22 -def aton(ip):
23 try: 24 i=int(ip) 25 except ValueError: 26 return aton_octets(ip) 27 else: 28 return aton_numbits(i)
29
30 -def ntoa(n):
31 s=( 32 chr((n>>24)&0xFF) 33 + chr((n>>16)&0xFF) 34 + chr((n>>8)&0xFF) 35 + chr(n&0xFF) 36 ) 37 ip=inet_ntoa(s) 38 return ip
39
40 -def netmaskToNumbits(netmask):
41 bits = aton(netmask) 42 i = 2**31 43 n = 0 44 while bits and i > 0: 45 if (bits & i) == 0: 46 if bits: 47 raise RuntimeError, "Invalid netmask: %s" % netmask 48 n += 1 49 bits -= i 50 i = i >> 1 51 return n
52
53 -def ptrSoaName(ip, netmask):
54 """ 55 Convert an IP address and netmask to a CIDR delegation 56 -style zone name. 57 """ 58 net = aton(ip) & aton(netmask) 59 60 nmBits = netmaskToNumbits(netmask) 61 bytes, bits = divmod(nmBits, 8) 62 octets = ntoa(net).split('.') 63 octets.reverse() 64 if not bits: 65 octets = octets[-bytes:] 66 else: 67 partial = octets[-bytes-1] 68 octets = octets[-bytes:] 69 octets.insert(0, '%s/%d' % (partial, nmBits)) 70 71 return '.'.join(octets)+'.in-addr.arpa.'
72