]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
rename from_text() to from_address(); add to_address()
authorBob Halley <halley@dnspython.org>
Tue, 27 Dec 2005 01:29:54 +0000 (01:29 +0000)
committerBob Halley <halley@dnspython.org>
Tue, 27 Dec 2005 01:29:54 +0000 (01:29 +0000)
dns/reversename.py

index 2a4998f32fecfd513b7f19e76ecdfdb614eaf512..e5fd0a14223775844557d2705b1f7c125f06f70f 100644 (file)
 # 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'