]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Generate PTR records for DNS64 mapped ipv4only.arpa reverses.
authorMark Andrews <marka@isc.org>
Tue, 1 Sep 2020 02:03:59 +0000 (12:03 +1000)
committerMark Andrews <marka@isc.org>
Fri, 11 Dec 2020 03:17:52 +0000 (14:17 +1100)
Rather than generating CNAMES records pointing into IN-ADDR.ARPA,
generate PTR records directly as the names are known as per RFC 8880.

bin/named/builtin.c
bin/tests/system/dns64/tests.sh

index bc6e9b2f1e3bc74f861b1315bd1599dda752d318..c2bbc59655049d35f8173d00bcf8dd9d315348c0 100644 (file)
@@ -296,6 +296,16 @@ dns64_cname(const dns_name_t *zone, const dns_name_t *name,
                 */
                return (ISC_R_NOTFOUND);
        }
+
+       /*
+        * Reverse of 192.0.0.170 or 192.0.0.171 maps to ipv4only.arpa.
+        */
+       if ((v[0] == 170 || v[0] == 171) && v[1] == 0 && v[2] == 0 &&
+           v[3] == 192) {
+               return (dns_sdb_putrdata(lookup, dns_rdatatype_ptr, 3600,
+                                        ipv4only, sizeof(ipv4only)));
+       }
+
        return (dns_sdb_putrdata(lookup, dns_rdatatype_cname, 600, rdata,
                                 (unsigned int)len));
 }
@@ -455,7 +465,7 @@ static isc_result_t
 do_ipv4reverse_lookup(dns_sdblookup_t *lookup) {
        isc_result_t result;
 
-       result = dns_sdb_putrdata(lookup, dns_rdatatype_ptr, 0, ipv4only,
+       result = dns_sdb_putrdata(lookup, dns_rdatatype_ptr, 3600, ipv4only,
                                  sizeof(ipv4only));
        return (result);
 }
index f3b60d0ea3dbf41ccb571564daf23a40325f3fdc..bf0ca7a51f423b12e1d3510f242d22aae418126c 100644 (file)
@@ -1438,5 +1438,15 @@ n=`expr $n + 1`
 if [ $ret != 0 ]; then echo_i "failed"; fi
 status=`expr $status + $ret`
 
+echo_i "checking reverse of dns64 mapped ipv4only.arpa addresses returns ipv4only.arpa ($n)"
+ret=0
+$DIG $DIGOPTS ptr -x 2001:96::192.0.0.170 -b 10.53.0.7 @10.53.0.2 > dig.out.170.ns2.test$n || ret=1
+$DIG $DIGOPTS ptr -x 2001:96::192.0.0.171 -b 10.53.0.7 @10.53.0.2 > dig.out.171.ns2.test$n || ret=1
+grep "ip6\.arpa\..*PTR.*ipv4only\.arpa\." dig.out.170.ns2.test$n >/dev/null || ret=1
+grep "ip6\.arpa\..*PTR.*ipv4only\.arpa\." dig.out.171.ns2.test$n >/dev/null || ret=1
+n=`expr $n + 1`
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=`expr $status + $ret`
+
 echo_i "exit status: $status"
 [ $status -eq 0 ] || exit 1