From: Bob Halley Date: Tue, 27 Dec 2005 01:29:54 +0000 (+0000) Subject: rename from_text() to from_address(); add to_address() X-Git-Tag: v1.4.0~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=915afea88e94aca50c1d6b41b93f084fda7c5795;p=thirdparty%2Fdnspython.git rename from_text() to from_address(); add to_address() --- diff --git a/dns/reversename.py b/dns/reversename.py index 2a4998f3..e5fd0a14 100644 --- a/dns/reversename.py +++ b/dns/reversename.py @@ -13,13 +13,22 @@ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -"""DNS Reverse Map Names.""" +"""DNS Reverse Map Names. + +@var ipv4_reverse_domain: The DNS IPv4 reverse-map domain, in-addr.arpa. +@type ipv4_reverse_domain: dns.name.Name object +@var ipv6_reverse_domain: The DNS IPv6 reverse-map domain, ip6.arpa. +@type ipv6_reverse_domain: dns.name.Name object +""" import dns.name import dns.ipv6 import dns.ipv4 -def from_text(text): +ipv4_reverse_domain = dns.name.from_text('in-addr.arpa.') +ipv6_reverse_domain = dns.name.from_text('ip6.arpa.') + +def from_address(text): """Convert an IPv4 or IPv6 address in textual form into a Name object whose value is the reverse-map domain name of the address. @param text: an IPv4 or IPv6 address in textual form (e.g. '127.0.0.1', @@ -27,13 +36,40 @@ def from_text(text): @type text: str @rtype: dns.name.Name object """ - try: parts = list(dns.ipv6.inet_aton(text).encode('hex_codec')) - suffix = 'ip6.arpa.' + origin = ipv6_reverse_domain except: parts = ['%d' % ord(byte) for byte in dns.ipv4.inet_aton(text)] - suffix = 'in-addr.arpa.' + origin = ipv4_reverse_domain parts.reverse() - parts.append(suffix) - return dns.name.from_text('.'.join(parts)) + return dns.name.from_text('.'.join(parts), origin=origin) + +def to_address(name): + """Convert a reverse map domain name into textual address form. + @param name: an IPv4 or IPv6 address in reverse-map form. + @type name: dns.name.Name object + @rtype: str + """ + if name.is_subdomain(ipv4_reverse_domain): + name = name.relativize(ipv4_reverse_domain) + labels = list(name.labels) + labels.reverse() + text = '.'.join(labels) + # run through inet_aton() to check syntax and make pretty. + return dns.ipv4.inet_ntoa(dns.ipv4.inet_aton(text)) + elif name.is_subdomain(ipv6_reverse_domain): + name = name.relativize(ipv6_reverse_domain) + labels = list(name.labels) + labels.reverse() + parts = [] + i = 0 + l = len(labels) + while i < l: + parts.append(''.join(labels[i:i+4])) + i += 4 + text = ':'.join(parts) + # run through inet_aton() to check syntax and make pretty. + return dns.ipv6.inet_ntoa(dns.ipv6.inet_aton(text)) + else: + raise dns.exception.SyntaxError, 'unknown reverse-map address family'