# HG changeset patch # User Tero Marttila # Date 1387234602 -7200 # Node ID 8c6d4565576fd63587896827650ef9cecd70f938 # Parent 29720bbc5379c991fafeb3be82f8beb308e980c6 pvl.dns.zone: fix fqdn(); implement ipv6 reverse_label diff -r 29720bbc5379 -r 8c6d4565576f pvl/dns/zone.py --- a/pvl/dns/zone.py Tue Dec 17 00:42:31 2013 +0200 +++ b/pvl/dns/zone.py Tue Dec 17 00:56:42 2013 +0200 @@ -588,7 +588,7 @@ Return an FQND from parts, ending in . """ - fqdn = join(parts) + fqdn = join(*parts) # we may be given an fqdn in parts if not fqdn.endswith('.') : @@ -608,10 +608,26 @@ hostbits = prefix.max_prefixlen - prefix.prefixlen if prefix.version == 4 : - labelbytes = int(math.ceil(hostbits / 8.0)) - labelraw = address.packed[-labelbytes:] + # pack into octets + octets = [ord(x) for x in address.packed] - return '.'.join(reversed([str(ord(x)) for x in labelraw])) + # take the suffix + octets = octets[-int(math.ceil(hostbits / 8.0)):] + + # reverse in decimal + return '.'.join(reversed(["{0:d}".format() for x in octets])) + + elif prefix.version == 6 : + # pack into nibbles + nibbles = [((ord(x) >> 4) & 0xf, ord(x) & 0xf) for x in address.packed] + nibbles = [nibble for nibblepair in nibbles for nibble in nibblepair] + + # take the suffix + nibbles = nibbles[:-(hostbits / 4)] + + # reverse in hex + return '.'.join(reversed(["{0:x}".format(x) for x in nibbles])) + else : raise ValueError("unsupported address version: %s" % (prefix, ))