From: Ondřej Surý Date: Wed, 17 Dec 2025 07:38:34 +0000 (+0100) Subject: Cleanup the extra dns_rdataset_disassociate() code X-Git-Tag: v9.21.17~29^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd074ff0eaceb12b2ca62b8b64e23c00d4ef84c6;p=thirdparty%2Fbind9.git Cleanup the extra dns_rdataset_disassociate() code 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. --- diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c index 99965f93886..b28171bf701 100644 --- a/bin/dnssec/dnssec-signzone.c +++ b/bin/dnssec/dnssec-signzone.c @@ -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); diff --git a/bin/named/builtin.c b/bin/named/builtin.c index 9ab76d50636..b7f07ae523f 100644 --- a/bin/named/builtin.c +++ b/bin/named/builtin.c @@ -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) { diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 09854aa750e..c93f4951cac 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -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; diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 218e45272c6..52f4e34005e 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -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) { diff --git a/lib/dns/validator.c b/lib/dns/validator.c index 6b9ce6e0710..201f81f069a 100644 --- a/lib/dns/validator.c +++ b/lib/dns/validator.c @@ -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); diff --git a/lib/dns/view.c b/lib/dns/view.c index 2c5cf4ade1c..9f707b3171b 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -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); } diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 50b29b3d0f8..64658232af4 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -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, diff --git a/lib/dns/zoneverify.c b/lib/dns/zoneverify.c index e0090f17f75..b48752ceb0d 100644 --- a/lib/dns/zoneverify.c +++ b/lib/dns/zoneverify.c @@ -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; diff --git a/lib/ns/query.c b/lib/ns/query.c index 99c51599087..e704db3f30e 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -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,