]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
python dns: dns_record_match() matches IPv6 semantically
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 17 Jun 2021 23:30:09 +0000 (11:30 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 22 Jun 2021 01:14:37 +0000 (01:14 +0000)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/dnsserver.py

index 9bcab7fb0239970f5beb5aba4e5bb623998b1882..8453b442b50895b28f79536cbc918f8385404a2e 100644 (file)
@@ -17,6 +17,7 @@
 #
 
 import shlex
+import socket
 from samba.dcerpc import dnsserver, dnsp
 
 # Note: these are not quite the same as similar looking classes in
@@ -309,6 +310,12 @@ def dns_name_equal(n1, n2):
     return n1.str.rstrip('.').lower() == n2.str.rstrip('.').lower()
 
 
+def ipv6_normalise(addr):
+    """Convert an AAAA adresss into a canonical form."""
+    packed = socket.inet_pton(socket.AF_INET6, addr)
+    return socket.inet_ntop(socket.AF_INET6, packed)
+
+
 def dns_record_match(dns_conn, server, zone, name, record_type, data):
     """Find a dns record that matches the specified data"""
 
@@ -350,7 +357,7 @@ def dns_record_match(dns_conn, server, zone, name, record_type, data):
             if rec.data == urec.data:
                 found = True
         elif record_type == dnsp.DNS_TYPE_AAAA:
-            if rec.data == urec.data:
+            if ipv6_normalise(rec.data) == ipv6_normalise(urec.data):
                 found = True
         elif record_type == dnsp.DNS_TYPE_PTR:
             if dns_name_equal(rec.data, urec.data):