]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
unconditionally create view and resolver nametrees
authorEvan Hunt <each@isc.org>
Thu, 24 Aug 2023 20:47:19 +0000 (13:47 -0700)
committerOndřej Surý <ondrej@isc.org>
Mon, 4 Sep 2023 08:19:48 +0000 (10:19 +0200)
instead of allowing a NULL nametree in dns_nametree_covered(),
require nametree to exist, and ensure that the nametrees defined
for view and resolver objects are always created.

bin/named/server.c
lib/dns/include/dns/nametree.h
lib/dns/include/dns/resolver.h
lib/dns/nametree.c
lib/dns/resolver.c
lib/dns/view.c
tests/dns/nametree_test.c

index 03483fd2b8b1e5da337177715aa72002c12a4a40..f751b840eb5ba30cc1d010a28170e4b769e2ff36 100644 (file)
@@ -618,6 +618,8 @@ configure_view_nametable(const cfg_obj_t *vconfig, const cfg_obj_t *config,
        if (*ntp != NULL) {
                dns_nametree_detach(ntp);
        }
+       dns_nametree_create(mctx, DNS_NAMETREE_BOOL, confname, ntp);
+
        if (vconfig != NULL) {
                maps[i++] = cfg_tuple_get(vconfig, "options");
        }
@@ -645,8 +647,6 @@ configure_view_nametable(const cfg_obj_t *vconfig, const cfg_obj_t *config,
                }
        }
 
-       dns_nametree_create(mctx, DNS_NAMETREE_BOOL, confname, ntp);
-
        name = dns_fixedname_initname(&fixed);
        for (element = cfg_list_first(obj); element != NULL;
             element = cfg_list_next(element))
@@ -4906,7 +4906,6 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
        /*
         * Set supported DNSSEC algorithms.
         */
-       dns_resolver_reset_algorithms(view->resolver);
        disabled = NULL;
        (void)named_config_get(maps, "disable-algorithms", &disabled);
        if (disabled != NULL) {
@@ -4921,7 +4920,6 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
        /*
         * Set supported DS digest types.
         */
-       dns_resolver_reset_ds_digests(view->resolver);
        disabled = NULL;
        (void)named_config_get(maps, "disable-ds-digests", &disabled);
        if (disabled != NULL) {
@@ -5521,7 +5519,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
         */
        CHECK(configure_view_dnsseckeys(view, vconfig, config, bindkeys,
                                        auto_root));
-       dns_resolver_resetmustbesecure(view->resolver);
+
        obj = NULL;
        result = named_config_get(maps, "dnssec-must-be-secure", &obj);
        if (result == ISC_R_SUCCESS) {
index 3c5ac518935fda331d91dbf33a84c3194a7014a2..228a62b9c5acfe6c1228c8d5ba58049fdfad6720 100644 (file)
@@ -159,8 +159,7 @@ dns_nametree_covered(dns_nametree_t *nametree, const dns_name_t *name,
  * In DNS_NAMETREE_BITS trees, this returns true if 'name' has a match or
  * a closest ancestor in 'nametree' with the 'bit' set in its bitfield.
  *
- * If a name is not found, or if 'nametree' is NULL, the default return
- * value is false.
+ * If a name is not found, the default return value is false.
  *
  * If 'found' is not NULL, the name or ancestor name that was found in
  * the tree is copied into it.
index aeee2fa620d31d6752087d7687a3163f70d8e9c1..0c6af9c816b427a07aeb1496690e54bca0f661b4 100644 (file)
@@ -423,18 +423,6 @@ dns_resolver_addalternate(dns_resolver_t *resolver, const isc_sockaddr_t *alt,
  * \li only one of 'name' or 'alt' to be valid.
  */
 
-void
-dns_resolver_reset_algorithms(dns_resolver_t *resolver);
-/*%<
- * Clear the disabled DNSSEC algorithms.
- */
-
-void
-dns_resolver_reset_ds_digests(dns_resolver_t *resolver);
-/*%<
- * Clear the disabled DS digest types.
- */
-
 isc_result_t
 dns_resolver_disable_algorithm(dns_resolver_t *resolver, const dns_name_t *name,
                               unsigned int alg);
@@ -482,9 +470,6 @@ dns_resolver_ds_digest_supported(dns_resolver_t       *resolver,
  * crypto libraries if it was not specifically disabled.
  */
 
-void
-dns_resolver_resetmustbesecure(dns_resolver_t *resolver);
-
 isc_result_t
 dns_resolver_setmustbesecure(dns_resolver_t *resolver, const dns_name_t *name,
                             bool value);
index af7cfbddf7ab677341381b8e56e2c4a03202039a..ec297ca6f26704a7e05a71a4d6bd3e026f9e8b0e 100644 (file)
@@ -288,11 +288,7 @@ dns_nametree_covered(dns_nametree_t *nametree, const dns_name_t *name,
        dns_ntnode_t *node = NULL;
        bool ret = false;
 
-       REQUIRE(nametree == NULL || VALID_NAMETREE(nametree));
-
-       if (nametree == NULL) {
-               return (false);
-       }
+       REQUIRE(VALID_NAMETREE(nametree));
 
        dns_qpmulti_query(nametree->table, &qpr);
        result = dns_qp_findname_ancestor(&qpr, name, 0, (void **)&node, NULL);
index 02a578c261df80ec75e0728a6fd11b899c39b50d..fb1e401e7804623acb7eea88d070f964209896fd 100644 (file)
@@ -9809,13 +9809,12 @@ dns_resolver__destroy(dns_resolver_t *res) {
 
        REQUIRE(atomic_load_acquire(&res->nfctx) == 0);
 
-       /* These must be run before zeroing the magic number */
-       dns_resolver_reset_algorithms(res);
-       dns_resolver_reset_ds_digests(res);
-       dns_resolver_resetmustbesecure(res);
-
        res->magic = 0;
 
+       dns_nametree_detach(&res->algorithms);
+       dns_nametree_detach(&res->digests);
+       dns_nametree_detach(&res->mustbesecure);
+
        if (res->querystats != NULL) {
                dns_stats_detach(&res->querystats);
        }
@@ -9955,6 +9954,13 @@ dns_resolver_create(dns_view_t *view, isc_loopmgr_t *loopmgr,
        isc_mutex_init(&res->lock);
        isc_mutex_init(&res->primelock);
 
+       dns_nametree_create(res->mctx, DNS_NAMETREE_BITS, "algorithms",
+                           &res->algorithms);
+       dns_nametree_create(res->mctx, DNS_NAMETREE_BITS, "ds-digests",
+                           &res->digests);
+       dns_nametree_create(res->mctx, DNS_NAMETREE_BOOL,
+                           "dnssec-must-be-secure", &res->mustbesecure);
+
        res->magic = RES_MAGIC;
 
        *resp = res;
@@ -10717,24 +10723,6 @@ dns_resolver_printbadcache(dns_resolver_t *resolver, FILE *fp) {
        (void)dns_badcache_print(resolver->badcache, "Bad cache", fp);
 }
 
-void
-dns_resolver_reset_algorithms(dns_resolver_t *resolver) {
-       REQUIRE(VALID_RESOLVER(resolver));
-
-       if (resolver->algorithms != NULL) {
-               dns_nametree_detach(&resolver->algorithms);
-       }
-}
-
-void
-dns_resolver_reset_ds_digests(dns_resolver_t *resolver) {
-       REQUIRE(VALID_RESOLVER(resolver));
-
-       if (resolver->digests != NULL) {
-               dns_nametree_detach(&resolver->digests);
-       }
-}
-
 isc_result_t
 dns_resolver_disable_algorithm(dns_resolver_t *resolver, const dns_name_t *name,
                               unsigned int alg) {
@@ -10744,11 +10732,6 @@ dns_resolver_disable_algorithm(dns_resolver_t *resolver, const dns_name_t *name,
                return (ISC_R_RANGE);
        }
 
-       if (resolver->algorithms == NULL) {
-               dns_nametree_create(resolver->mctx, DNS_NAMETREE_BITS,
-                                   "algorithms", &resolver->algorithms);
-       }
-
        return (dns_nametree_add(resolver->algorithms, name, alg));
 }
 
@@ -10761,11 +10744,6 @@ dns_resolver_disable_ds_digest(dns_resolver_t *resolver, const dns_name_t *name,
                return (ISC_R_RANGE);
        }
 
-       if (resolver->digests == NULL) {
-               dns_nametree_create(resolver->mctx, DNS_NAMETREE_BITS,
-                                   "ds-digests", &resolver->digests);
-       }
-
        return (dns_nametree_add(resolver->digests, name, digest_type));
 }
 
@@ -10798,15 +10776,6 @@ dns_resolver_ds_digest_supported(dns_resolver_t *resolver,
        return (dst_ds_digest_supported(digest_type));
 }
 
-void
-dns_resolver_resetmustbesecure(dns_resolver_t *resolver) {
-       REQUIRE(VALID_RESOLVER(resolver));
-
-       if (resolver->mustbesecure != NULL) {
-               dns_nametree_detach(&resolver->mustbesecure);
-       }
-}
-
 isc_result_t
 dns_resolver_setmustbesecure(dns_resolver_t *resolver, const dns_name_t *name,
                             bool value) {
@@ -10814,12 +10783,6 @@ dns_resolver_setmustbesecure(dns_resolver_t *resolver, const dns_name_t *name,
 
        REQUIRE(VALID_RESOLVER(resolver));
 
-       if (resolver->mustbesecure == NULL) {
-               dns_nametree_create(resolver->mctx, DNS_NAMETREE_BOOL,
-                                   "dnssec-must-be-secure",
-                                   &resolver->mustbesecure);
-       }
-
        result = dns_nametree_add(resolver->mustbesecure, name, value);
        return (result);
 }
index 7c486acebbe3085d5cbc6fa9c0dd8af7bddacc57..6855d02eda777f2be0d45beaa4623d05516f2102 100644 (file)
@@ -162,6 +162,8 @@ dns_view_create(isc_mem_t *mctx, dns_dispatchmgr_t *dispatchmgr,
                goto cleanup_peerlist;
        }
 
+       dns_nametree_create(view->mctx, DNS_NAMETREE_COUNT, "sfd", &view->sfd);
+
        view->magic = DNS_VIEW_MAGIC;
        *viewp = view;
 
@@ -2320,11 +2322,6 @@ dns_view_sfd_add(dns_view_t *view, const dns_name_t *name) {
 
        REQUIRE(DNS_VIEW_VALID(view));
 
-       if (view->sfd == NULL) {
-               dns_nametree_create(view->mctx, DNS_NAMETREE_COUNT, "sfd",
-                                   &view->sfd);
-       }
-
        result = dns_nametree_add(view->sfd, name, 0);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);
 }
@@ -2341,10 +2338,8 @@ dns_view_sfd_find(dns_view_t *view, const dns_name_t *name,
                  dns_name_t *foundname) {
        REQUIRE(DNS_VIEW_VALID(view));
 
-       if (view->sfd != NULL) {
-               if (!dns_nametree_covered(view->sfd, name, foundname, 0)) {
-                       dns_name_copy(dns_rootname, foundname);
-               }
+       if (!dns_nametree_covered(view->sfd, name, foundname, 0)) {
+               dns_name_copy(dns_rootname, foundname);
        }
 }
 
index 39ac4467c12071d591c830d7d01b589a2692a03c..147f37382b9f7ded32a41b612dcfefa9b71bf112 100644 (file)
@@ -206,10 +206,6 @@ ISC_RUN_TEST_IMPL(covered_bool) {
                assert_false(dns_nametree_covered(booltree, name, NULL, 0));
        }
 
-       /* If the nametree is NULL, dns_nametree_covered() returns false. */
-       dns_test_namefromstring("anyname.example.", &fn);
-       assert_false(dns_nametree_covered(NULL, name, NULL, 0));
-
        /* Check that the found name is as expected */
        dns_test_namefromstring("other.example.com.", &fn);
        assert_true(dns_nametree_covered(booltree, name, found, 0));