summaryrefslogtreecommitdiff
path: root/dns
diff options
context:
space:
mode:
Diffstat (limited to 'dns')
-rw-r--r--dns/ipv4.py31
-rw-r--r--dns/ipv6.py13
2 files changed, 26 insertions, 18 deletions
diff --git a/dns/ipv4.py b/dns/ipv4.py
index 8e5305a..1860ddc 100644
--- a/dns/ipv4.py
+++ b/dns/ipv4.py
@@ -15,20 +15,21 @@
"""IPv4 helper functions."""
-import socket
-import sys
+import struct
-if sys.platform == 'win32':
- #
- # XXX Does the Win32 python 3 inet_aton still reject 255.255.255.255?
- # Until we know it doesn't, we'll keep our workaround in place.
- #
- def inet_aton(text):
- if text == '255.255.255.255':
- return b'\xff' * 4
- else:
- return socket.inet_aton(text)
-else:
- inet_aton = socket.inet_aton
+import dns.exception
-inet_ntoa = socket.inet_ntoa
+def inet_ntoa(address):
+ if len(address) != 4:
+ raise dns.exception.SyntaxError
+ return '%u.%u.%u.%u' % (address[0], address[1], address[2], address[3])
+
+def inet_aton(text):
+ parts = text.split('.')
+ if len(parts) != 4:
+ raise dns.exception.SyntaxError
+ try:
+ bytes = [int(part) for part in parts]
+ return struct.pack('BBBB', *bytes)
+ except:
+ raise dns.exception.SyntaxError
diff --git a/dns/ipv6.py b/dns/ipv6.py
index fc53ec4..4b9312b 100644
--- a/dns/ipv6.py
+++ b/dns/ipv6.py
@@ -108,9 +108,16 @@ def inet_aton(text):
#
m = _v4_ending.match(text)
if not m is None:
- text = "%s:%04x:%04x" % (m.group(1),
- int(m.group(2)) * 256 + int(m.group(3)),
- int(m.group(4)) * 256 + int(m.group(5)))
+ try:
+ b1 = int(m.group(2))
+ b2 = int(m.group(3))
+ b3 = int(m.group(4))
+ b4 = int(m.group(5))
+ except:
+ raise dns.exception.SyntaxError
+ if b1 > 255 or b2 > 255 or b3 > 255 or b4 > 255:
+ raise dns.exception.SyntaxError
+ text = "%s:%04x:%04x" % (m.group(1), b1 * 256 + b2, b3 * 256 + b4)
#
# Try to turn '::<whatever>' into ':<whatever>'; if no match try to
# turn '<whatever>::' into '<whatever>:'