]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
exercise dns_rdata_checknames
authorMark Andrews <marka@isc.org>
Mon, 23 Dec 2019 21:43:45 +0000 (08:43 +1100)
committerOndřej Surý <ondrej@isc.org>
Tue, 14 Jan 2020 08:07:38 +0000 (08:07 +0000)
(cherry picked from commit b3c1b2a869f407a35d0c29162c1005304c5beb40)

lib/dns/tests/rdata_test.c

index eaf5c8d1b0365b5945388c28659973c9521ca204..acdd2a155406daa297a39a0cc6179f104f2027bb 100644 (file)
@@ -198,6 +198,44 @@ rdata_additionadata(dns_rdata_t *rdata) {
        return (dns_rdata_additionaldata(rdata, additionaldata_cb, NULL));
 }
 
+/*
+ * Call dns_rdata_checknames() with various owner names chosen to
+ * match well known forms.
+ *
+ * We are currently only checking that the calls do not trigger
+ * assertion failures.
+ *
+ * XXXMPA A future extention could be to record the expected
+ * result and the expected value of 'bad'.
+ */
+static void
+rdata_checknames(dns_rdata_t *rdata) {
+       dns_fixedname_t fixed, bfixed;
+       dns_name_t *name, *bad;
+       isc_result_t result;
+
+       name = dns_fixedname_initname(&fixed);
+       bad = dns_fixedname_initname(&bfixed);
+
+       (void) dns_rdata_checknames(rdata, dns_rootname, NULL);
+       (void) dns_rdata_checknames(rdata, dns_rootname, bad);
+
+       result = dns_name_fromstring(name, "example.net", 0, NULL);
+       assert_int_equal(result, ISC_R_SUCCESS);
+       (void) dns_rdata_checknames(rdata, name, NULL);
+       (void) dns_rdata_checknames(rdata, name, bad);
+
+       result = dns_name_fromstring(name, "in-addr.arpa", 0, NULL);
+       assert_int_equal(result, ISC_R_SUCCESS);
+       (void) dns_rdata_checknames(rdata, name, NULL);
+       (void) dns_rdata_checknames(rdata, name, bad);
+
+       result = dns_name_fromstring(name, "ip6.arpa", 0, NULL);
+       assert_int_equal(result, ISC_R_SUCCESS);
+       (void) dns_rdata_checknames(rdata, name, NULL);
+       (void) dns_rdata_checknames(rdata, name, bad);
+}
+
 /*
  * Test whether converting rdata to a type-specific struct and then back to
  * rdata results in the same uncompressed wire form.  This checks whether
@@ -330,6 +368,11 @@ check_text_ok_single(const text_ok_t *text_ok, dns_rdataclass_t rdclass,
        result = rdata_additionadata(&rdata);
        assert_int_equal(result, ISC_R_SUCCESS);
 
+       /*
+        * Exercise checknames_*().
+        */
+       rdata_checknames(&rdata);
+
        /*
         * Perform two-way conversion checks between uncompressed wire form and
         * type-specific struct.
@@ -493,6 +536,11 @@ check_wire_ok_single(const wire_ok_t *wire_ok, dns_rdataclass_t rdclass,
         */
        result = rdata_additionadata(&rdata);
        assert_int_equal(result, ISC_R_SUCCESS);
+
+       /*
+        * Exercise checknames_*().
+        */
+       rdata_checknames(&rdata);
 }
 
 /*