From: Douglas Bagnall Date: Thu, 17 Jun 2021 23:30:09 +0000 (+1200) Subject: python dns: dns_record_match() matches IPv6 semantically X-Git-Tag: tevent-0.11.0~262 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d32cdf18490be254e3d2c780af1a234ad86cc39;p=thirdparty%2Fsamba.git python dns: dns_record_match() matches IPv6 semantically Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/dnsserver.py b/python/samba/dnsserver.py index 9bcab7fb023..8453b442b50 100644 --- a/python/samba/dnsserver.py +++ b/python/samba/dnsserver.py @@ -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):