]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Cleanup the extra dns_rdataset_disassociate() code
authorOndřej Surý <ondrej@isc.org>
Wed, 17 Dec 2025 07:38:34 +0000 (08:38 +0100)
committerOndřej Surý <ondrej@isc.org>
Wed, 17 Dec 2025 14:19:55 +0000 (15:19 +0100)
Manually go through the code using dns_rdataset_isassociated() and
use dns_rdataset_cleanup() where appropriate in places that a simple
semantic patch is not able to find automatically.

bin/dnssec/dnssec-signzone.c
bin/named/builtin.c
lib/dns/resolver.c
lib/dns/sdlz.c
lib/dns/validator.c
lib/dns/view.c
lib/dns/zone.c
lib/dns/zoneverify.c
lib/ns/query.c

index 99965f93886a57f5d792f33cf660f2510bb0a236..b28171bf701ce74df8e86f28a4c9f74336bc1140 100644 (file)
@@ -2724,15 +2724,15 @@ findkeys:
        /* Get the CDS rdataset */
        result = dns_db_findrdataset(gdb, node, ver, dns_rdatatype_cds,
                                     dns_rdatatype_none, 0, &cdsset, NULL);
-       if (result != ISC_R_SUCCESS && dns_rdataset_isassociated(&cdsset)) {
-               dns_rdataset_disassociate(&cdsset);
+       if (result != ISC_R_SUCCESS) {
+               dns_rdataset_cleanup(&cdsset);
        }
 
        /* Get the CDNSKEY rdataset */
        result = dns_db_findrdataset(gdb, node, ver, dns_rdatatype_cdnskey,
                                     dns_rdatatype_none, 0, &cdnskeyset, NULL);
-       if (result != ISC_R_SUCCESS && dns_rdataset_isassociated(&cdnskeyset)) {
-               dns_rdataset_disassociate(&cdnskeyset);
+       if (result != ISC_R_SUCCESS) {
+               dns_rdataset_cleanup(&cdnskeyset);
        }
 
        dns_diff_init(isc_g_mctx, &diff);
index 9ab76d506361045695d0c21c174d24b00ba767d8..b7f07ae523f8e0b3b3cc96b806b6d773a3e1444b 100644 (file)
@@ -942,14 +942,8 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
                        if (result == ISC_R_SUCCESS) {
                                if (i == nlabels && type == dns_rdatatype_any) {
                                        result = DNS_R_ZONECUT;
-                                       dns_rdataset_disassociate(rdataset);
-                                       if (sigrdataset != NULL &&
-                                           dns_rdataset_isassociated(
-                                                   sigrdataset))
-                                       {
-                                               dns_rdataset_disassociate(
-                                                       sigrdataset);
-                                       }
+                                       dns_rdataset_cleanup(rdataset);
+                                       dns_rdataset_cleanup(sigrdataset);
                                } else {
                                        result = DNS_R_DELEGATION;
                                }
@@ -1002,8 +996,8 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
                break;
        }
 
-       if (rdataset == &xrdataset && dns_rdataset_isassociated(rdataset)) {
-               dns_rdataset_disassociate(rdataset);
+       if (rdataset == &xrdataset) {
+               dns_rdataset_cleanup(rdataset);
        }
 
        if (foundname != NULL) {
index 09854aa750ed032168c8361c6008b961dc46c842..c93f4951cac9e5e33e427eba3ca717bc1f95dd82 100644 (file)
@@ -6365,8 +6365,8 @@ negcache(dns_message_t *message, fetchctx_t *fctx, const dns_name_t *name,
        result = dns_ncache_add(message, cache, node, covers, now, minttl,
                                maxttl, optout, secure, added);
 
-       if (added == &rdataset && dns_rdataset_isassociated(added)) {
-               dns_rdataset_disassociate(added);
+       if (added == &rdataset) {
+               dns_rdataset_cleanup(added);
        }
 
        *nodep = node;
index 218e45272c6ba85b373111e99de2d695b02f3513..52f4e34005e860fd93aa7c0d62349811ea8278cb 100644 (file)
@@ -897,8 +897,8 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
                break;
        }
 
-       if (rdataset == &xrdataset && dns_rdataset_isassociated(rdataset)) {
-               dns_rdataset_disassociate(rdataset);
+       if (rdataset == &xrdataset) {
+               dns_rdataset_cleanup(rdataset);
        }
 
        if (foundname != NULL) {
index 6b9ce6e07107260150ae3c5894d92fdea08d34b0..201f81f069a050f1b7e4f0fe3e9b80375b785006 100644 (file)
@@ -1230,10 +1230,8 @@ seek_dnskey(dns_validator_t *val) {
                break;
        }
 
-       if (dns_rdataset_isassociated(&val->frdataset) &&
-           val->keyset != &val->frdataset)
-       {
-               dns_rdataset_disassociate(&val->frdataset);
+       if (val->keyset != &val->frdataset) {
+               dns_rdataset_cleanup(&val->frdataset);
        }
        dns_rdataset_cleanup(&val->fsigrdataset);
 
index 2c5cf4ade1c146033afaf48a7bbbbca78f57214d..9f707b3171bc980348e81f8d2ebc3c1d6e4ad347 100644 (file)
@@ -915,10 +915,8 @@ db_find:
        }
 
 cleanup:
-       if (dns_rdataset_isassociated(&zrdataset)) {
-               dns_rdataset_disassociate(&zrdataset);
-               dns_rdataset_cleanup(&zsigrdataset);
-       }
+       dns_rdataset_cleanup(&zrdataset);
+       dns_rdataset_cleanup(&zsigrdataset);
 
        if (zdb != NULL) {
                if (znode != NULL) {
@@ -1137,10 +1135,9 @@ db_find:
 
 finish:
        if (use_zone) {
-               if (dns_rdataset_isassociated(rdataset)) {
-                       dns_rdataset_disassociate(rdataset);
-                       dns_rdataset_cleanup(sigrdataset);
-               }
+               dns_rdataset_cleanup(rdataset);
+               dns_rdataset_cleanup(sigrdataset);
+
                dns_name_copy(zfname, fname);
                if (dcname != NULL) {
                        dns_name_copy(zfname, dcname);
@@ -1171,10 +1168,9 @@ finish:
        }
 
 cleanup:
-       if (dns_rdataset_isassociated(&zrdataset)) {
-               dns_rdataset_disassociate(&zrdataset);
-               dns_rdataset_cleanup(&zsigrdataset);
-       }
+       dns_rdataset_cleanup(&zrdataset);
+       dns_rdataset_cleanup(&zsigrdataset);
+
        if (db != NULL) {
                dns_db_detach(&db);
        }
index 50b29b3d0f8088c0d8bcde4bcf5131e1fdd53412..64658232af4638f862ea8fae43d1c6c8eeab59cd 100644 (file)
@@ -21347,11 +21347,9 @@ zone_rekey(dns_zone_t *zone) {
        /* Get the current CDS rdataset */
        result = dns_db_findrdataset(db, node, ver, dns_rdatatype_cds,
                                     dns_rdatatype_none, 0, &cdsset, NULL);
-       if (result != ISC_R_SUCCESS && dns_rdataset_isassociated(&cdsset)) {
-               dns_rdataset_disassociate(&cdsset);
-       } else if (result == ISC_R_SUCCESS && kasp != NULL &&
-                  ttl != cdsset.ttl && !offlineksk)
-       {
+       if (result != ISC_R_SUCCESS) {
+               dns_rdataset_cleanup(&cdsset);
+       } else if (kasp != NULL && ttl != cdsset.ttl && !offlineksk) {
                update_ttl(&cdsset, &zone->origin, ttl, &diff);
                dnssec_log(zone, ISC_LOG_INFO, "Updating CDS TTL from %u to %u",
                           cdsset.ttl, ttl);
@@ -21361,11 +21359,9 @@ zone_rekey(dns_zone_t *zone) {
        /* Get the current CDNSKEY rdataset */
        result = dns_db_findrdataset(db, node, ver, dns_rdatatype_cdnskey,
                                     dns_rdatatype_none, 0, &cdnskeyset, NULL);
-       if (result != ISC_R_SUCCESS && dns_rdataset_isassociated(&cdnskeyset)) {
-               dns_rdataset_disassociate(&cdnskeyset);
-       } else if (result == ISC_R_SUCCESS && kasp != NULL &&
-                  ttl != cdnskeyset.ttl && !offlineksk)
-       {
+       if (result != ISC_R_SUCCESS) {
+               dns_rdataset_cleanup(&cdnskeyset);
+       } else if (kasp != NULL && ttl != cdnskeyset.ttl && !offlineksk) {
                update_ttl(&cdnskeyset, &zone->origin, ttl, &diff);
                dnssec_log(zone, ISC_LOG_INFO,
                           "Updating CDNSKEY TTL from %u to %u", cdnskeyset.ttl,
index e0090f17f755a9fd1fec305a61cf1d42dd9b1527..b48752ceb0d3b0814938e35e17935e55aa00ed99 100644 (file)
@@ -299,11 +299,9 @@ check_no_rrsig(const vctx_t *vctx, const dns_rdataset_t *rdataset,
               const dns_name_t *name, dns_dbnode_t *node) {
        char namebuf[DNS_NAME_FORMATSIZE];
        char typebuf[DNS_RDATATYPE_FORMATSIZE];
-       dns_rdataset_t sigrdataset = DNS_RDATASET_INIT;
        dns_rdatasetiter_t *rdsiter = NULL;
        isc_result_t result;
 
-       dns_rdataset_init(&sigrdataset);
        result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, 0, &rdsiter);
        if (result != ISC_R_SUCCESS) {
                zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s",
@@ -311,10 +309,12 @@ check_no_rrsig(const vctx_t *vctx, const dns_rdataset_t *rdataset,
                return result;
        }
        DNS_RDATASETITER_FOREACH(rdsiter) {
+               dns_rdataset_t sigrdataset = DNS_RDATASET_INIT;
                dns_rdatasetiter_current(rdsiter, &sigrdataset);
                if (sigrdataset.type == dns_rdatatype_rrsig &&
                    sigrdataset.covers == rdataset->type)
                {
+                       dns_rdataset_disassociate(&sigrdataset);
                        dns_name_format(name, namebuf, sizeof(namebuf));
                        dns_rdatatype_format(rdataset->type, typebuf,
                                             sizeof(typebuf));
@@ -327,7 +327,6 @@ check_no_rrsig(const vctx_t *vctx, const dns_rdataset_t *rdataset,
                }
                dns_rdataset_disassociate(&sigrdataset);
        }
-       dns_rdataset_cleanup(&sigrdataset);
        dns_rdatasetiter_destroy(&rdsiter);
 
        return ISC_R_SUCCESS;
index 99c515990870d9b48808310f15c8873160bc7c49..e704db3f30e3dbd9585f3d9b401bb48bc499e568 100644 (file)
@@ -1693,10 +1693,8 @@ query_additionalauthfind(dns_db_t *db, dns_dbversion_t *version,
        /*
         * Do not return signatures if the zone is not fully signed.
         */
-       if (sigrdataset != NULL && !dns_db_issecure(db) &&
-           dns_rdataset_isassociated(sigrdataset))
-       {
-               dns_rdataset_disassociate(sigrdataset);
+       if (!dns_db_issecure(db)) {
+               dns_rdataset_cleanup(sigrdataset);
        }
 
        *nodep = node;
@@ -2029,7 +2027,7 @@ found:
                if (result == DNS_R_NCACHENXDOMAIN) {
                        goto addname;
                } else if (result == DNS_R_NCACHENXRRSET) {
-                       dns_rdataset_disassociate(rdataset);
+                       dns_rdataset_cleanup(rdataset);
                        dns_rdataset_cleanup(sigrdataset);
                } else if (result == ISC_R_SUCCESS) {
                        bool invalid = false;
@@ -2044,7 +2042,7 @@ found:
                                                    sigrdataset);
                        }
                        if (invalid && DNS_TRUST_PENDING(rdataset->trust)) {
-                               dns_rdataset_disassociate(rdataset);
+                               dns_rdataset_cleanup(rdataset);
                                dns_rdataset_cleanup(sigrdataset);
                        } else if (!query_isduplicate(client, fname,
                                                      dns_rdatatype_a, &mname))
@@ -2070,7 +2068,7 @@ found:
                                }
                                rdataset = ns_client_newrdataset(client);
                        } else {
-                               dns_rdataset_disassociate(rdataset);
+                               dns_rdataset_cleanup(rdataset);
                                dns_rdataset_cleanup(sigrdataset);
                        }
                }
@@ -2085,7 +2083,7 @@ found:
                if (result == DNS_R_NCACHENXDOMAIN) {
                        goto addname;
                } else if (result == DNS_R_NCACHENXRRSET) {
-                       dns_rdataset_disassociate(rdataset);
+                       dns_rdataset_cleanup(rdataset);
                        dns_rdataset_cleanup(sigrdataset);
                } else if (result == ISC_R_SUCCESS) {
                        bool invalid = false;
@@ -2102,7 +2100,7 @@ found:
                        }
 
                        if (invalid && DNS_TRUST_PENDING(rdataset->trust)) {
-                               dns_rdataset_disassociate(rdataset);
+                               dns_rdataset_cleanup(rdataset);
                                dns_rdataset_cleanup(sigrdataset);
                        } else if (!query_isduplicate(client, fname,
                                                      dns_rdatatype_aaaa,
@@ -2933,10 +2931,8 @@ rpz_clean(dns_zone_t **zonep, dns_db_t **dbp, dns_dbnode_t **nodep,
        if (zonep != NULL && *zonep != NULL) {
                dns_zone_detach(zonep);
        }
-       if (rdatasetp != NULL && *rdatasetp != NULL &&
-           dns_rdataset_isassociated(*rdatasetp))
-       {
-               dns_rdataset_disassociate(*rdatasetp);
+       if (rdatasetp != NULL) {
+               dns_rdataset_cleanup(*rdatasetp);
        }
 }
 
@@ -4588,7 +4584,7 @@ again:
                if (found != NULL && optout &&
                    dns_name_issubdomain(&name, dns_db_origin(db)))
                {
-                       dns_rdataset_disassociate(rdataset);
+                       dns_rdataset_cleanup(rdataset);
                        dns_rdataset_cleanup(sigrdataset);
                        skip++;
                        dns_name_getlabelsequence(qname, skip, labels - skip,