From: Alessio Podda Date: Wed, 22 Jul 2026 13:58:24 +0000 (+0200) Subject: Remove node output from the public lookup API X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bda5f0a3077e016a4284d4596e9700bbd6e4ffcc;p=thirdparty%2Fbind9.git Remove node output from the public lookup API Remove nodep from dns_db_find() and dns_db_findext(), then update callers and tests to consume names and rdatasets directly. --- diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c index 75f85f31cae..59c24eec3e7 100644 --- a/bin/dnssec/dnssec-signzone.c +++ b/bin/dnssec/dnssec-signzone.c @@ -430,7 +430,7 @@ expecttofindkey(dns_name_t *name) { dns_fixedname_init(&fname); result = dns_db_find(gdb, name, gversion, dns_rdatatype_dnskey, options, - 0, NULL, dns_fixedname_name(&fname), NULL, NULL); + 0, dns_fixedname_name(&fname), NULL, NULL); switch (result) { case ISC_R_SUCCESS: case DNS_R_NXDOMAIN: @@ -1413,7 +1413,7 @@ get_soa_ttls(void) { name = dns_fixedname_initname(&fname); dns_rdataset_init(&soaset); result = dns_db_find(gdb, gorigin, gversion, dns_rdatatype_soa, 0, 0, - NULL, name, &soaset, NULL); + name, &soaset, NULL); if (result != ISC_R_SUCCESS) { fatal("failed to find an SOA at the zone apex: %s", isc_result_totext(result)); diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c index 57c2e5de728..562fe36df2d 100644 --- a/bin/tests/system/dyndb/driver/db.c +++ b/bin/tests/system/dyndb/driver/db.c @@ -326,9 +326,14 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, REQUIRE(VALID_SAMPLEDB(sampledb)); - return dns__db_find(sampledb->db, name, version, type, options, now, - nodep, foundname, methods, clientinfo, rdataset, - sigrdataset DNS__DB_FLARG_PASS); + if (sampledb->db->methods->find == NULL) { + return ISC_R_NOTIMPLEMENTED; + } + + return (sampledb->db->methods->find)(sampledb->db, name, version, type, + options, now, nodep, foundname, + methods, clientinfo, rdataset, + sigrdataset DNS__DB_FLARG_PASS); } static isc_result_t diff --git a/lib/dns/adb.c b/lib/dns/adb.c index 758f0d8187f..9c2144278f2 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -2587,7 +2587,7 @@ dbfind_name(dns_adbname_t *adbname, isc_stdtime_t now, dns_rdatatype_t rdtype) { result = dns_view_find(adb->view, adbname->name, rdtype, now, options, true, (adbname->type & DNS_ADBFIND_STARTATZONE) != 0, - NULL, NULL, fname, &rdataset, NULL); + NULL, fname, &rdataset, NULL); switch (result) { case DNS_R_GLUE: diff --git a/lib/dns/client.c b/lib/dns/client.c index fa9fdfcb128..0f54cb1b8d9 100644 --- a/lib/dns/client.c +++ b/lib/dns/client.c @@ -461,7 +461,7 @@ view_find(resctx_t *rctx, dns_db_t **dbp, dns_name_t *foundname) { } result = dns_view_find(rctx->view, name, type, 0, 0, false, false, dbp, - NULL, foundname, rctx->rdataset, rctx->sigrdataset); + foundname, rctx->rdataset, rctx->sigrdataset); return result; } @@ -662,9 +662,15 @@ client_resfind(resctx_t *rctx, dns_fetchresponse_t *resp) { if (node == NULL) { INSIST(db != NULL); - tresult = dns_db_findnode(db, fname, false, &node); + tresult = dns_db_findnode(db, fname, false, + &node); if (tresult != ISC_R_SUCCESS) { result = tresult; + putrdataset(mctx, &rctx->rdataset); + if (rctx->sigrdataset != NULL) { + putrdataset(mctx, + &rctx->sigrdataset); + } goto done; } } diff --git a/lib/dns/db.c b/lib/dns/db.c index cb97364d6ae..4fc87e25250 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -498,9 +498,8 @@ dns__db_findnsec3node(dns_db_t *db, const dns_name_t *name, bool create, isc_result_t dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_rdataset_t *rdataset, + dns_name_t *foundname, dns_clientinfomethods_t *methods, + dns_clientinfo_t *clientinfo, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { /* * Find the best match for 'name' and 'type' in version 'version' @@ -509,7 +508,6 @@ dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, REQUIRE(DNS_DB_VALID(db)); REQUIRE(type != dns_rdatatype_rrsig); - REQUIRE(nodep == NULL || *nodep == NULL); REQUIRE(dns_name_hasbuffer(foundname)); REQUIRE(rdataset == NULL || (DNS_RDATASET_VALID(rdataset) && !dns_rdataset_isassociated(rdataset))); @@ -519,7 +517,7 @@ dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, if (db->methods->find != NULL) { return (db->methods->find)(db, name, version, type, options, - now, nodep, foundname, methods, + now, NULL, foundname, methods, clientinfo, rdataset, sigrdataset DNS__DB_FLARG_PASS); } diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index 66c501d3323..4569f210c9e 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -810,21 +810,20 @@ dns__db_findnode(dns_db_t *db, const dns_name_t *name, bool create, * implementation used. */ -#define dns_db_find(db, name, version, type, options, now, nodep, foundname, \ - rdataset, sigrdataset) \ - dns__db_find(db, name, version, type, options, now, nodep, foundname, \ - NULL, NULL, rdataset, sigrdataset DNS__DB_FILELINE) -#define dns_db_findext(db, name, version, type, options, now, nodep, \ - foundname, methods, clientinfo, rdataset, sigrdataset) \ - dns__db_find(db, name, version, type, options, now, nodep, foundname, \ - methods, clientinfo, rdataset, \ +#define dns_db_find(db, name, version, type, options, now, foundname, \ + rdataset, sigrdataset) \ + dns__db_find(db, name, version, type, options, now, foundname, NULL, \ + NULL, rdataset, sigrdataset DNS__DB_FILELINE) +#define dns_db_findext(db, name, version, type, options, now, foundname, \ + methods, clientinfo, rdataset, sigrdataset) \ + dns__db_find(db, name, version, type, options, now, foundname, \ + methods, clientinfo, rdataset, \ sigrdataset DNS__DB_FILELINE) isc_result_t dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_rdataset_t *rdataset, + dns_name_t *foundname, dns_clientinfomethods_t *methods, + dns_clientinfo_t *clientinfo, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG); /*%< * Find the best match for 'name' and 'type' in version 'version' of 'db'. @@ -892,8 +891,6 @@ dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, * * \li 'type' is not SIG, or a meta-RR type other than 'ANY' (e.g. 'OPT'). * - * \li 'nodep' is NULL, or nodep is a valid pointer and *nodep == NULL. - * * \li 'foundname' is a valid name with a dedicated buffer. * * \li 'rdataset' is NULL, or is a valid unassociated rdataset. @@ -901,8 +898,6 @@ dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, * Ensures, * on a non-error completion: * - * \li If nodep != NULL, then it is bound to the found node. - * * \li If foundname != NULL, then it contains the full name of the * found node. * @@ -1138,9 +1133,9 @@ dns__db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, * \li If 'version' is NULL, then the current version will be used. * * \li Care must be used when using this routine to build a DNS response: - * 'node' should have been found with dns_db_find(), not - * dns_db_findnode(). No glue checking is done. No checking for - * pending data is done. + * 'node' should correspond to an owner name already found with + * dns_db_find(). No glue checking is done. No checking for pending + * data is done. * * \li The 'now' field is ignored if 'db' is a zone database. If 'db' is a * cache database, an rdataset will not be found unless it expires after diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h index 2eadc268987..453ac9d1b06 100644 --- a/lib/dns/include/dns/view.h +++ b/lib/dns/include/dns/view.h @@ -548,9 +548,8 @@ dns_view_thaw(dns_view_t *view); isc_result_t dns_view_find(dns_view_t *view, const dns_name_t *name, dns_rdatatype_t type, isc_stdtime_t now, unsigned int options, bool use_hints, - bool use_static_stub, dns_db_t **dbp, dns_dbnode_t **nodep, - dns_name_t *foundname, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset); + bool use_static_stub, dns_db_t **dbp, dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset); /*%< * Find an rdataset whose owner name is 'name', and whose type is * 'type'. @@ -611,8 +610,6 @@ dns_view_find(dns_view_t *view, const dns_name_t *name, dns_rdatatype_t type, * *\li dbp == NULL || *dbp == NULL * - *\li nodep == NULL || *nodep == NULL. If nodep != NULL, dbp != NULL. - * *\li 'foundname' is a valid name with a dedicated buffer or NULL. * *\li 'rdataset' is a valid, disassociated rdataset. @@ -626,8 +623,6 @@ dns_view_find(dns_view_t *view, const dns_name_t *name, dns_rdatatype_t type, * *\li If dbp != NULL, it points to the database containing the data. * - *\li If nodep != NULL, it points to the database node containing the data. - * *\li If foundname != NULL, it contains the full name of the found data. * * Returns: diff --git a/lib/dns/nsec3.c b/lib/dns/nsec3.c index 3de9466826f..5d1fe87f073 100644 --- a/lib/dns/nsec3.c +++ b/lib/dns/nsec3.c @@ -1295,8 +1295,8 @@ deleteit(dns_db_t *db, dns_dbversion_t *ver, const dns_name_t *name, result = dns_db_find(db, name, ver, dns_rdatatype_any, DNS_DBFIND_GLUEOK | DNS_DBFIND_NOWILD, - (isc_stdtime_t)0, NULL, - dns_fixedname_name(&foundname), NULL, NULL); + (isc_stdtime_t)0, dns_fixedname_name(&foundname), + NULL, NULL); if (result == DNS_R_EMPTYNAME || result == ISC_R_SUCCESS || result == DNS_R_ZONECUT) { diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 592cbac84b8..61b130e312d 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -10678,8 +10678,8 @@ fctx_minimize_qname(fetchctx_t *fctx) { * try with an additional label prepended. */ result = dns_db_find(fctx->cache, &name, NULL, - dns_rdatatype_ns, 0, 0, NULL, - fname, &rdataset, NULL); + dns_rdatatype_ns, 0, 0, fname, + &rdataset, NULL); dns_rdataset_cleanup(&rdataset); switch (result) { case ISC_R_SUCCESS: diff --git a/lib/dns/rootns.c b/lib/dns/rootns.c index c809f3bf4b8..10004af2484 100644 --- a/lib/dns/rootns.c +++ b/lib/dns/rootns.c @@ -190,7 +190,7 @@ check_hints(dns_db_t *db) { dns_rdataset_init(&rootns); (void)dns_db_find(db, dns_rootname, NULL, dns_rdatatype_ns, 0, now, - NULL, name, &rootns, NULL); + name, &rootns, NULL); CHECK(dns_db_createiterator(db, 0, &dbiter)); DNS_DBITERATOR_FOREACH(dbiter) { CHECK(dns_dbiterator_current(dbiter, &node, name)); diff --git a/lib/dns/update.c b/lib/dns/update.c index 446415ea225..421b7ab4f7d 100644 --- a/lib/dns/update.c +++ b/lib/dns/update.c @@ -418,8 +418,8 @@ rrset_visible(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, dns_fixedname_init(&fixed); result = dns_db_find(db, name, ver, type, DNS_DBFIND_NOWILD, - (isc_stdtime_t)0, NULL, dns_fixedname_name(&fixed), - NULL, NULL); + (isc_stdtime_t)0, dns_fixedname_name(&fixed), NULL, + NULL); switch (result) { case ISC_R_SUCCESS: *visible = true; @@ -702,8 +702,8 @@ is_active(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, bool *flag, dns_fixedname_init(&foundname); result = dns_db_find(db, name, ver, dns_rdatatype_any, DNS_DBFIND_GLUEOK | DNS_DBFIND_NOWILD, - (isc_stdtime_t)0, NULL, - dns_fixedname_name(&foundname), NULL, NULL); + (isc_stdtime_t)0, dns_fixedname_name(&foundname), + NULL, NULL); if (result == ISC_R_SUCCESS || result == DNS_R_EMPTYNAME) { *flag = true; *cut = false; @@ -718,7 +718,7 @@ is_active(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, bool *flag, * is a DS RRset. */ if (dns_db_find(db, name, ver, dns_rdatatype_ds, 0, - (isc_stdtime_t)0, NULL, + (isc_stdtime_t)0, dns_fixedname_name(&foundname), NULL, NULL) == DNS_R_NXRRSET) { @@ -808,7 +808,7 @@ next_active(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db, found = dns_fixedname_initname(&ffound); result = dns_db_find( db, newname, ver, dns_rdatatype_soa, - DNS_DBFIND_NOWILD, 0, NULL, found, NULL, NULL); + DNS_DBFIND_NOWILD, 0, found, NULL, NULL); if (result == ISC_R_SUCCESS || result == DNS_R_EMPTYNAME || result == DNS_R_NXRRSET || result == DNS_R_CNAME || diff --git a/lib/dns/validator.c b/lib/dns/validator.c index 213a681af24..e6ee370a175 100644 --- a/lib/dns/validator.c +++ b/lib/dns/validator.c @@ -1155,7 +1155,7 @@ view_find(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type) { options = DNS_DBFIND_PENDINGOK; foundname = dns_fixedname_initname(&fixedname); result = dns_view_find(val->view, name, type, 0, options, false, false, - NULL, NULL, foundname, &val->frdataset, + NULL, foundname, &val->frdataset, &val->fsigrdataset); if (result == DNS_R_NXDOMAIN) { diff --git a/lib/dns/view.c b/lib/dns/view.c index 0e544151d6c..dab6d375009 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -787,12 +787,10 @@ dns_view_findzone(dns_view_t *view, const dns_name_t *name, isc_result_t dns_view_find(dns_view_t *view, const dns_name_t *name, dns_rdatatype_t type, isc_stdtime_t now, unsigned int options, bool use_hints, - bool use_static_stub, dns_db_t **dbp, dns_dbnode_t **nodep, - dns_name_t *foundname, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset) { + bool use_static_stub, dns_db_t **dbp, dns_name_t *foundname, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { isc_result_t result; dns_db_t *db = NULL, *zdb = NULL; - dns_dbnode_t *node = NULL, *znode = NULL; bool is_cache, is_staticstub_zone; dns_rdataset_t zrdataset, zsigrdataset; dns_zone_t *zone = NULL; @@ -807,7 +805,6 @@ dns_view_find(dns_view_t *view, const dns_name_t *name, dns_rdatatype_t type, REQUIRE(view->frozen); REQUIRE(type != dns_rdatatype_rrsig); REQUIRE(rdataset != NULL); /* XXXBEW - remove this */ - REQUIRE(nodep == NULL || *nodep == NULL); /* * Initialize. @@ -856,15 +853,12 @@ db_find: /* * Now look for an answer in the database. */ - result = dns_db_find(db, name, NULL, type, options, now, &node, - foundname, rdataset, sigrdataset); + result = dns_db_find(db, name, NULL, type, options, now, foundname, + rdataset, sigrdataset); if (result == DNS_R_DELEGATION || result == ISC_R_NOTFOUND) { dns_rdataset_cleanup(rdataset); dns_rdataset_cleanup(sigrdataset); - if (node != NULL) { - dns_db_detachnode(&node); - } if (!is_cache) { dns_db_detach(&db); if (view->cachedb != NULL && !is_staticstub_zone) { @@ -897,7 +891,6 @@ db_find: dns_db_detach(&db); } dns_db_attach(zdb, &db); - dns_db_attachnode(znode, &node); goto cleanup; } } @@ -918,14 +911,10 @@ db_find: dns_rdataset_cleanup(rdataset); dns_rdataset_cleanup(sigrdataset); if (db != NULL) { - if (node != NULL) { - dns_db_detachnode(&node); - } dns_db_detach(&db); } result = dns_db_find(view->rootdb, name, NULL, type, options, - now, &node, foundname, rdataset, - sigrdataset); + now, foundname, rdataset, sigrdataset); if (result == ISC_R_SUCCESS || result == DNS_R_GLUE) { /* * Lazily rearm priming if the rootdb's @@ -943,13 +932,6 @@ db_find: } else if (result == DNS_R_NXDOMAIN) { result = ISC_R_NOTFOUND; } - - /* - * Cleanup if the rootdb lookup failed. - */ - if (db == NULL && node != NULL) { - dns_db_detachnode(&node); - } } cleanup: @@ -957,27 +939,15 @@ cleanup: dns_rdataset_cleanup(&zsigrdataset); if (zdb != NULL) { - if (znode != NULL) { - dns_db_detachnode(&znode); - } dns_db_detach(&zdb); } if (db != NULL) { - if (node != NULL) { - if (nodep != NULL) { - *nodep = node; - } else { - dns_db_detachnode(&node); - } - } if (dbp != NULL) { *dbp = db; } else { dns_db_detach(&db); } - } else { - INSIST(node == NULL); } if (zone != NULL) { @@ -997,8 +967,8 @@ dns_view_simplefind(dns_view_t *view, const dns_name_t *name, dns_fixedname_init(&foundname); result = dns_view_find(view, name, type, now, options, use_hints, false, - NULL, NULL, dns_fixedname_name(&foundname), - rdataset, sigrdataset); + NULL, dns_fixedname_name(&foundname), rdataset, + sigrdataset); if (result == DNS_R_NXDOMAIN) { /* * The rdataset and sigrdataset of the relevant NSEC record @@ -1054,7 +1024,7 @@ bestzonecut_zone(dns_view_t *view, const dns_name_t *name, dns_name_t *fname, } result = dns_db_find(db, name, NULL, dns_rdatatype_ns, options, now, - NULL, fname, rdataset, NULL); + fname, rdataset, NULL); if (result != DNS_R_DELEGATION && result != ISC_R_SUCCESS) { /* * The zone exists, but there is no delegation. Here again @@ -1156,7 +1126,7 @@ bestzonecut_rootdb(dns_view_t *view, dns_name_t *fname, dns_name_t *dcname, } isc_result_t result = dns_db_find(view->rootdb, dns_rootname, NULL, - dns_rdatatype_ns, 0, now, NULL, fname, + dns_rdatatype_ns, 0, now, fname, rdataset, NULL); if (result != ISC_R_SUCCESS) { dns_rdataset_cleanup(rdataset); diff --git a/lib/dns/zone.c b/lib/dns/zone.c index e6ee06e21be..104199c2255 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -1817,15 +1817,15 @@ zone_check_mx(dns_zone_t *zone, dns_db_t *db, dns_name_t *name, foundname = dns_fixedname_initname(&fixed); - result = dns_db_find(db, name, NULL, dns_rdatatype_a, 0, 0, NULL, - foundname, NULL, NULL); + result = dns_db_find(db, name, NULL, dns_rdatatype_a, 0, 0, foundname, + NULL, NULL); if (result == ISC_R_SUCCESS) { return true; } if (result == DNS_R_NXRRSET) { result = dns_db_find(db, name, NULL, dns_rdatatype_aaaa, 0, 0, - NULL, foundname, NULL, NULL); + foundname, NULL, NULL); if (result == ISC_R_SUCCESS) { return true; } @@ -1918,15 +1918,15 @@ zone_check_srv(dns_zone_t *zone, dns_db_t *db, dns_name_t *name, foundname = dns_fixedname_initname(&fixed); - result = dns_db_find(db, name, NULL, dns_rdatatype_a, 0, 0, NULL, - foundname, NULL, NULL); + result = dns_db_find(db, name, NULL, dns_rdatatype_a, 0, 0, foundname, + NULL, NULL); if (result == ISC_R_SUCCESS) { return true; } if (result == DNS_R_NXRRSET) { result = dns_db_find(db, name, NULL, dns_rdatatype_aaaa, 0, 0, - NULL, foundname, NULL, NULL); + foundname, NULL, NULL); if (result == ISC_R_SUCCESS) { return true; } @@ -2019,8 +2019,8 @@ zone_check_glue(dns_zone_t *zone, dns_db_t *db, bool *has_a, bool *has_aaaa, * Perform a regular lookup to catch DNAME records then look * for glue. */ - result = dns_db_find(db, name, NULL, dns_rdatatype_a, 0, 0, NULL, - foundname, &a, NULL); + result = dns_db_find(db, name, NULL, dns_rdatatype_a, 0, 0, foundname, + &a, NULL); switch (result) { case ISC_R_SUCCESS: case DNS_R_DNAME: @@ -2029,16 +2029,15 @@ zone_check_glue(dns_zone_t *zone, dns_db_t *db, bool *has_a, bool *has_aaaa, default: dns_rdataset_cleanup(&a); result = dns_db_find(db, name, NULL, dns_rdatatype_a, - DNS_DBFIND_GLUEOK, 0, NULL, foundname, &a, - NULL); + DNS_DBFIND_GLUEOK, 0, foundname, &a, NULL); } if (result == ISC_R_SUCCESS) { SET_IF_NOT_NULL(has_a, true); dns_rdataset_disassociate(&a); if (has_aaaa != NULL && !*has_aaaa) { result = dns_db_find(db, name, NULL, dns_rdatatype_aaaa, - DNS_DBFIND_GLUEOK, 0, NULL, - foundname, &aaaa, NULL); + DNS_DBFIND_GLUEOK, 0, foundname, + &aaaa, NULL); if (result == ISC_R_SUCCESS) { *has_aaaa = true; } @@ -2055,8 +2054,8 @@ zone_check_glue(dns_zone_t *zone, dns_db_t *db, bool *has_a, bool *has_aaaa, result == DNS_R_GLUE) { tresult = dns_db_find(db, name, NULL, dns_rdatatype_aaaa, - DNS_DBFIND_GLUEOK, 0, NULL, foundname, - &aaaa, NULL); + DNS_DBFIND_GLUEOK, 0, foundname, &aaaa, + NULL); if (tresult == ISC_R_SUCCESS) { dns_rdataset_cleanup(&a); SET_IF_NOT_NULL(has_aaaa, true); @@ -2289,8 +2288,8 @@ zone_is_served_by(dns_zone_t *zone, dns_db_t *db, dns_rdatatype_t type, } dns_rdataset_init(&rdataset); - result = dns_db_find(db, name, NULL, type, 0, 0, NULL, foundname, - &rdataset, NULL); + result = dns_db_find(db, name, NULL, type, 0, 0, foundname, &rdataset, + NULL); dns_rdataset_cleanup(&rdataset); switch (result) { case DNS_R_DELEGATION: @@ -2638,7 +2637,7 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) { if (has_a) { has_a = false; result = dns_db_find(db, &zone->origin, NULL, dns_rdatatype_ns, - 0, 0, NULL, name, &rdataset, NULL); + 0, 0, name, &rdataset, NULL); if (result != ISC_R_SUCCESS) { dns_rdataset_cleanup(&rdataset); goto cleanup; @@ -2668,7 +2667,7 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) { if (has_aaaa) { has_aaaa = false; result = dns_db_find(db, &zone->origin, NULL, dns_rdatatype_ns, - 0, 0, NULL, name, &rdataset, NULL); + 0, 0, name, &rdataset, NULL); if (result != ISC_R_SUCCESS) { dns_rdataset_cleanup(&rdataset); goto cleanup; @@ -3793,8 +3792,8 @@ addifmissing(dns_keytable_t *keytable, dns_keynode_t *keynode, */ dns_fixedname_init(&fname); result = dns_db_find(db, keyname, ver, dns_rdatatype_keydata, - DNS_DBFIND_NOWILD, 0, NULL, - dns_fixedname_name(&fname), NULL, NULL); + DNS_DBFIND_NOWILD, 0, dns_fixedname_name(&fname), + NULL, NULL); if (result == ISC_R_SUCCESS) { return; } @@ -4666,7 +4665,7 @@ zone_check_ns(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version, foundname = dns_fixedname_initname(&fixed); - result = dns_db_find(db, name, version, dns_rdatatype_a, 0, 0, NULL, + result = dns_db_find(db, name, version, dns_rdatatype_a, 0, 0, foundname, NULL, NULL); if (result == ISC_R_SUCCESS) { return true; @@ -4674,7 +4673,7 @@ zone_check_ns(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *version, if (result == DNS_R_NXRRSET) { result = dns_db_find(db, name, version, dns_rdatatype_aaaa, 0, - 0, NULL, foundname, NULL, NULL); + 0, foundname, NULL, NULL); if (result == ISC_R_SUCCESS) { return true; } @@ -7322,7 +7321,7 @@ zone_nsec3chain(dns_zone_t *zone) { found = dns_fixedname_initname(&ffound); result = dns_db_find( db, name, version, dns_rdatatype_soa, - DNS_DBFIND_NOWILD, 0, NULL, found, NULL, NULL); + DNS_DBFIND_NOWILD, 0, found, NULL, NULL); if ((result == DNS_R_DELEGATION || result == DNS_R_DNAME) && !dns_name_equal(name, found)) @@ -7567,7 +7566,7 @@ zone_nsec3chain(dns_zone_t *zone) { found = dns_fixedname_initname(&ffound); result = dns_db_find( db, name, version, dns_rdatatype_soa, - DNS_DBFIND_NOWILD, 0, NULL, found, NULL, NULL); + DNS_DBFIND_NOWILD, 0, found, NULL, NULL); if ((result == DNS_R_DELEGATION || result == DNS_R_DNAME) && !dns_name_equal(name, found)) @@ -8335,7 +8334,7 @@ zone_sign(dns_zone_t *zone) { found = dns_fixedname_initname(&ffound); result = dns_db_find( db, name, version, dns_rdatatype_soa, - DNS_DBFIND_NOWILD, 0, NULL, found, NULL, NULL); + DNS_DBFIND_NOWILD, 0, found, NULL, NULL); if ((result == DNS_R_DELEGATION || result == DNS_R_DNAME) && !dns_name_equal(name, found)) diff --git a/lib/ns/query.c b/lib/ns/query.c index b78e7f72033..0207466c842 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -328,8 +328,8 @@ ns__query_callhook_noreturn(uint8_t id, query_ctx_t *qctx, * query_addwildcardproof()), then go to 15 to return NXDOMAIN to client. * * 11. Empty answer (query_nodata()). Add authority section records - * (query_addsoa(), query_addwildcardproof()) and signatures if authoritative - * (query_sign_nodata()) then go to 15 and return + * (query_addsoa(), query_addwildcardproof()) and signatures if + * authoritative (query_sign_nodata()) then go to 15 and return * NOERROR/ANCOUNT=0 to client. * * 12. No such domain or empty answer returned from cache (query_ncache()). @@ -1611,7 +1611,7 @@ query_additionalauthfind(dns_db_t *db, dns_dbversion_t *version, */ result = dns_db_findext(db, name, version, type, client->query.dboptions, client->inner.now, - NULL, fname, &cm, &ci, rdataset, sigrdataset); + fname, &cm, &ci, rdataset, sigrdataset); if (result != ISC_R_SUCCESS) { dns_rdataset_cleanup(rdataset); @@ -1652,8 +1652,7 @@ query_additionalauthfind(dns_db_t *db, dns_dbversion_t *version, static isc_result_t query_additionalauth(query_ctx_t *qctx, const dns_name_t *name, dns_rdatatype_t type, dns_db_t **dbp, dns_name_t *fname, - dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset) { + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) { ns_client_t *client = qctx->client; ns_dbversion_t *dbversion = NULL; dns_dbversion_t *version = NULL; @@ -1673,8 +1672,8 @@ query_additionalauth(query_ctx_t *qctx, const dns_name_t *name, CTRACE(ISC_LOG_DEBUG(3), "query_additionalauth: same zone"); - result = query_additionalauthfind(db, version, name, type, client, fname, - rdataset, sigrdataset); + result = query_additionalauthfind(db, version, name, type, client, + fname, rdataset, sigrdataset); if (result != ISC_R_SUCCESS && qctx->view->minimalresponses == dns_minimal_no && client->query.recursionok) @@ -1692,8 +1691,9 @@ query_additionalauth(query_ctx_t *qctx, const dns_name_t *name, CTRACE(ISC_LOG_DEBUG(3), "query_additionalauth: other zone"); - result = query_additionalauthfind(db, version, name, type, client, - fname, rdataset, sigrdataset); + result = query_additionalauthfind(db, version, name, type, + client, fname, rdataset, + sigrdataset); } if (result != ISC_R_SUCCESS) { @@ -1807,8 +1807,8 @@ query_additional_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype, result = dns_db_findext(db, name, version, type, client->query.dboptions | DNS_DBFIND_GLUEOK | DNS_DBFIND_ADDITIONALOK, - client->inner.now, NULL, fname, &cm, &ci, - rdataset, sigrdataset); + client->inner.now, fname, &cm, &ci, rdataset, + sigrdataset); dns_cache_updatestats(qctx->view->cache, result); if (!client->inner.wantdnssec) { @@ -1861,8 +1861,8 @@ try_glue: version = dbversion->version; result = dns_db_findext(db, name, version, type, client->query.dboptions | DNS_DBFIND_GLUEOK, - client->inner.now, NULL, fname, &cm, &ci, - rdataset, sigrdataset); + client->inner.now, fname, &cm, &ci, rdataset, + sigrdataset); if (result != ISC_R_SUCCESS && result != DNS_R_ZONECUT && result != DNS_R_GLUE) { @@ -1919,10 +1919,8 @@ found: } if (qtype == dns_rdatatype_a) { - result = dns_db_findnodeext(db, foundname, false, &cm, &ci, &node); - if (result != ISC_R_SUCCESS) { - goto cleanup; - } + CHECK(dns_db_findnodeext(db, foundname, false, &cm, &ci, + &node)); /* * We now go looking for A and AAAA records, along with @@ -2423,12 +2421,8 @@ stale_refresh_aftermath(ns_client_t *client, isc_result_t result) { dns_db_attach(qctx.client->inner.view->cachedb, &db); (void)dns_db_findext(db, qctx.client->query.qname, NULL, qctx.client->query.qtype, dboptions, - qctx.client->inner.now, &qctx.node, - qctx.fname, &cm, &ci, qctx.rdataset, - qctx.sigrdataset); - if (qctx.node != NULL) { - dns_db_detachnode(&qctx.node); - } + qctx.client->inner.now, qctx.fname, &cm, + &ci, qctx.rdataset, qctx.sigrdataset); dns_db_detach(&db); cleanup: @@ -2789,7 +2783,6 @@ rpz_rrset_find(ns_client_t *client, dns_name_t *name, dns_rdatatype_t type, bool resuming) { isc_result_t result; dns_rpz_st_t *st = NULL; - dns_dbnode_t *node = NULL; dns_fixedname_t fixed; dns_name_t *found = dns_fixedname_initname(&fixed); dns_clientinfomethods_t cm; @@ -2849,8 +2842,8 @@ rpz_rrset_find(ns_client_t *client, dns_name_t *name, dns_rdatatype_t type, dns_clientinfomethods_init(&cm, ns_client_sourceip); dns_clientinfo_init(&ci, client, NULL); result = dns_db_findext(*dbp, name, version, type, options, - client->inner.now, &node, found, &cm, &ci, - *rdatasetp, NULL); + client->inner.now, found, &cm, &ci, *rdatasetp, + NULL); if (result == DNS_R_DELEGATION && is_zone && client->query.cacheok) { /* * Try the cache if we're authoritative for an @@ -2859,18 +2852,18 @@ rpz_rrset_find(ns_client_t *client, dns_name_t *name, dns_rdatatype_t type, * nsip-wait-recurse or nsdname-wait-recurse are * enabled. */ - rpz_clean(NULL, dbp, &node, rdatasetp); + rpz_clean(NULL, dbp, NULL, rdatasetp); dns_db_attach(client->inner.view->cachedb, dbp); result = dns_db_findext(*dbp, name, NULL, type, 0, - client->inner.now, &node, found, &cm, - &ci, *rdatasetp, NULL); + client->inner.now, found, &cm, &ci, + *rdatasetp, NULL); if (result == ISC_R_NOTFOUND) { result = DNS_R_DELEGATION; } } else if (result == ISC_R_NOTFOUND && !is_zone) { result = DNS_R_DELEGATION; } - rpz_clean(NULL, dbp, &node, NULL); + rpz_clean(NULL, dbp, NULL, NULL); if (result == DNS_R_DELEGATION) { rpz_clean(NULL, NULL, NULL, rdatasetp); /* @@ -3042,8 +3035,8 @@ rpz_find_p(ns_client_t *client, dns_name_t *self_name, dns_rdatatype_t qtype, found = dns_fixedname_initname(&foundf); result = dns_db_findext(*dbp, p_name, *versionp, dns_rdatatype_any, 0, - client->inner.now, NULL, found, &cm, &ci, - *rdatasetp, NULL); + client->inner.now, found, &cm, &ci, *rdatasetp, + NULL); /* * Choose the best rdataset if we found something. */ @@ -3101,22 +3094,22 @@ rpz_find_p(ns_client_t *client, dns_name_t *self_name, dns_rdatatype_t qtype, } else { result = dns_db_findext( *dbp, p_name, *versionp, qtype, 0, - client->inner.now, NULL, found, &cm, - &ci, *rdatasetp, NULL); + client->inner.now, found, &cm, &ci, + *rdatasetp, NULL); /* - * This fallback used to repopulate nodep via - * dns_db_findext(). Preserve that contract so - * rpz_save_p() can keep the node for later - * pickup in query_checkrpz(). + * Preserve the old contract by resolving the + * found owner to nodep here, so rpz_save_p() + * can keep the node for later pickup in + * query_checkrpz(). */ if (result == ISC_R_SUCCESS || result == DNS_R_NXRRSET) { isc_result_t nresult; - nresult = rpz_findnode( - client, *dbp, found, rpz_type, - &cm, &ci, nodep); + nresult = rpz_findnode(client, *dbp, + found, rpz_type, + &cm, &ci, nodep); if (nresult != ISC_R_SUCCESS) { return nresult; } @@ -4246,8 +4239,8 @@ again: dboptions = client->query.dboptions | DNS_DBFIND_FORCENSEC3; result = dns_db_findext(db, dns_fixedname_name(&fixed), version, dns_rdatatype_nsec3, dboptions, - client->inner.now, NULL, fname, &cm, &ci, - rdataset, sigrdataset); + client->inner.now, fname, &cm, &ci, rdataset, + sigrdataset); if (result == DNS_R_NXDOMAIN) { if (!dns_rdataset_isassociated(rdataset)) { @@ -4397,7 +4390,6 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, dns_name_t *foundname, dns_db_t **dbp, dns_dbversion_t **versionp, dns_rdatatype_t qtype) { dns_db_t *db = NULL; - dns_dbnode_t *node = NULL; dns_fixedname_t fixed; dns_name_t *found = NULL; dns_rdataset_t trdataset = DNS_RDATASET_INIT; @@ -4471,7 +4463,7 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, */ result = dns_db_findext(db, client->query.qname, dbversion->version, qtype, DNS_DBFIND_NOZONECUT, client->inner.now, - &node, found, &cm, &ci, &trdataset, NULL); + found, &cm, &ci, &trdataset, NULL); if (result == ISC_R_SUCCESS || result == DNS_R_NXRRSET || result == DNS_R_NCACHENXRRSET) { @@ -4484,9 +4476,6 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, goto nxrrset; } else if (result != ISC_R_SUCCESS) { dns_rdataset_cleanup(&trdataset); - if (node != NULL) { - dns_db_detachnode(&node); - } dns_db_detach(&db); return ISC_R_NOTFOUND; } @@ -4501,7 +4490,6 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, nxrrset: dns_db_detach(dbp); dns_db_attach(db, dbp); - dns_db_detachnode(&node); dns_db_detach(&db); *versionp = dbversion->version; @@ -4516,7 +4504,6 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, dns_name_t *foundname, dns_db_t **dbp, dns_dbversion_t **versionp, dns_rdatatype_t qtype, bool *is_zonep) { dns_db_t *db = NULL; - dns_dbnode_t *node = NULL; dns_fixedname_t fixed; dns_fixedname_t fixedredirect; dns_name_t *found = NULL, *redirectname = NULL; @@ -4610,8 +4597,8 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, * Lookup the requested data in the redirect zone. */ result = dns_db_findext(db, redirectname, version, qtype, 0, - client->inner.now, &node, found, &cm, &ci, - &trdataset, NULL); + client->inner.now, found, &cm, &ci, &trdataset, + NULL); if (result == ISC_R_SUCCESS || result == DNS_R_NXRRSET || result == DNS_R_NCACHENXRRSET) { @@ -4627,9 +4614,6 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, * Cleanup. */ dns_rdataset_cleanup(&trdataset); - if (node != NULL) { - dns_db_detachnode(&node); - } dns_db_detach(&db); /* @@ -4647,9 +4631,6 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, return ISC_R_NOTFOUND; } else if (result != ISC_R_SUCCESS) { dns_rdataset_cleanup(&trdataset); - if (node != NULL) { - dns_db_detachnode(&node); - } dns_db_detach(&db); return ISC_R_NOTFOUND; } @@ -4676,7 +4657,6 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, nxrrset: dns_db_detach(dbp); dns_db_attach(db, dbp); - dns_db_detachnode(&node); dns_db_detach(&db); *is_zonep = is_zone; *versionp = version; @@ -5515,7 +5495,6 @@ query_lookup(query_ctx_t *qctx) { unsigned int dboptions; dns_ttl_t stale_refresh = 0; bool dbfind_stale = false; - bool find_node = qctx->type != dns_rdatatype_any; bool found_via_wildcard = false; bool stale_timeout = false; bool answer_found = false; @@ -5581,10 +5560,8 @@ query_lookup(query_ctx_t *qctx) { foundname = dns_fixedname_initname(&qctx->foundname); result = dns_db_findext(qctx->db, rpzqname, qctx->version, qctx->type, - dboptions, qctx->client->inner.now, - find_node ? &qctx->node : NULL, - foundname, &cm, &ci, qctx->rdataset, - qctx->sigrdataset); + dboptions, qctx->client->inner.now, foundname, + &cm, &ci, qctx->rdataset, qctx->sigrdataset); found_via_wildcard = qctx_has_foundname(qctx) && foundname->attributes.wildcard; @@ -6777,9 +6754,9 @@ query_checkrpz(query_ctx_t *qctx, isc_result_t result) { qctx->rpz_st->q.result = result; dns_fixedname_init(&qctx->rpz_st->q.foundname); if (qctx_has_foundname(qctx)) { - dns_name_copy(qctx_foundname(qctx), - dns_fixedname_name( - &qctx->rpz_st->q.foundname)); + dns_name_copy( + qctx_foundname(qctx), + dns_fixedname_name(&qctx->rpz_st->q.foundname)); } qctx->client->query.recursing = true; return ISC_R_COMPLETE; @@ -7792,7 +7769,9 @@ query_respond(query_ctx_t *qctx) { qctx->client->query.dns64_sigaaaa = MOVE_OWNERSHIP(qctx->sigrdataset); ns_client_releasename(qctx->client, &qctx->fname); - dns_db_detachnode(&qctx->node); + if (qctx->node != NULL) { + dns_db_detachnode(&qctx->node); + } qctx->type = qctx->qtype = dns_rdatatype_a; qctx->dns64_exclude = qctx->dns64 = true; @@ -8121,8 +8100,8 @@ query_notfound(query_ctx_t *qctx) { dns_db_attach(qctx->view->rootdb, &qctx->db); result = dns_db_findext( qctx->db, dns_rootname, NULL, dns_rdatatype_ns, 0, - qctx->client->inner.now, &qctx->node, qctx->fname, &cm, - &ci, qctx->rdataset, qctx->sigrdataset); + qctx->client->inner.now, qctx->fname, &cm, &ci, + qctx->rdataset, qctx->sigrdataset); } if (result != ISC_R_SUCCESS) { /* @@ -8399,7 +8378,9 @@ query_delegation(query_ctx_t *qctx) { } qctx->version = NULL; - dns_db_detachnode(&qctx->node); + if (qctx->node != NULL) { + dns_db_detachnode(&qctx->node); + } dns_db_detach(&qctx->db); qctx->db = MOVE_OWNERSHIP(qctx->zdb); qctx->node = MOVE_OWNERSHIP(qctx->znode); @@ -8569,8 +8550,8 @@ query_addds(query_ctx_t *qctx) { */ if (result == ISC_R_NOTFOUND) { result = dns_db_findrdataset( - qctx->db, node, qctx->version, dns_rdatatype_nsec, - 0, client->inner.now, rdataset, sigrdataset); + qctx->db, node, qctx->version, dns_rdatatype_nsec, 0, + client->inner.now, rdataset, sigrdataset); } if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND) { goto addnsec3; @@ -8745,7 +8726,9 @@ query_nodata(query_ctx_t *qctx, isc_result_t res) { qctx->client->query.dns64_sigaaaa = MOVE_OWNERSHIP(qctx->sigrdataset); ns_client_releasename(qctx->client, &qctx->fname); - dns_db_detachnode(&qctx->node); + if (qctx->node != NULL) { + dns_db_detachnode(&qctx->node); + } qctx->type = qctx->qtype = dns_rdatatype_a; qctx->dns64 = true; return query_lookup(qctx); @@ -9075,8 +9058,8 @@ query_redirect(query_ctx_t *qctx, isc_result_t saved_result) { CCTRACE(ISC_LOG_DEBUG(3), "query_redirect"); foundname = dns_fixedname_initname(&fixed); - result = redirect(qctx->client, qctx->fname, qctx->rdataset, - foundname, &qctx->db, &qctx->version, qctx->type); + result = redirect(qctx->client, qctx->fname, qctx->rdataset, foundname, + &qctx->db, &qctx->version, qctx->type); switch (result) { case ISC_R_SUCCESS: return query_redirect_resolved(qctx, foundname); @@ -9089,8 +9072,8 @@ query_redirect(query_ctx_t *qctx, isc_result_t saved_result) { } foundname = dns_fixedname_initname(&fixed); - result = redirect2(qctx->client, qctx->fname, qctx->rdataset, - foundname, &qctx->db, &qctx->version, qctx->type, + result = redirect2(qctx->client, qctx->fname, qctx->rdataset, foundname, + &qctx->db, &qctx->version, qctx->type, &qctx->is_zone); switch (result) { case ISC_R_SUCCESS: @@ -9561,7 +9544,6 @@ query_coveringnsec(query_ctx_t *qctx) { dns_db_t *db = NULL; dns_clientinfo_t ci; dns_clientinfomethods_t cm; - dns_dbnode_t *node = NULL; dns_fixedname_t fixed; dns_fixedname_t fnamespace; dns_fixedname_t fnowild; @@ -9679,8 +9661,8 @@ query_coveringnsec(query_ctx_t *qctx) { dns_db_attach(qctx->db, &db); CHECK(dns_db_findext(db, signer, qctx->version, dns_rdatatype_soa, dboptions, - qctx->client->inner.now, &node, fname, &cm, - &ci, soardataset, sigsoardataset)); + qctx->client->inner.now, fname, &cm, &ci, + soardataset, sigsoardataset)); if (soardataset->trust != dns_trust_secure || sigsoardataset->trust != dns_trust_secure) @@ -9700,8 +9682,8 @@ query_coveringnsec(query_ctx_t *qctx) { dns_db_attach(qctx->db, &db); result = dns_db_findext(db, wild, qctx->version, qctx->type, dboptions | DNS_DBFIND_COVERINGNSEC, - qctx->client->inner.now, &node, nowild, &cm, - &ci, &rdataset, &sigrdataset); + qctx->client->inner.now, nowild, &cm, &ci, + &rdataset, &sigrdataset); if (rdataset.trust != dns_trust_secure || sigrdataset.trust != dns_trust_secure) @@ -9798,10 +9780,6 @@ query_coveringnsec(query_ctx_t *qctx) { goto cleanup; } - if (node != NULL) { - dns_db_detachnode(&node); - } - soardataset = ns_client_newrdataset(qctx->client); sigsoardataset = ns_client_newrdataset(qctx->client); @@ -9809,8 +9787,8 @@ query_coveringnsec(query_ctx_t *qctx) { * Look for SOA record to construct NXDOMAIN response. */ CHECK(dns_db_findext(db, signer, qctx->version, dns_rdatatype_soa, - dboptions, qctx->client->inner.now, &node, fname, - &cm, &ci, soardataset, sigsoardataset)); + dboptions, qctx->client->inner.now, fname, &cm, + &ci, soardataset, sigsoardataset)); if (soardataset->trust != dns_trust_secure || sigsoardataset->trust != dns_trust_secure) @@ -9833,9 +9811,6 @@ cleanup: ns_client_putrdataset(qctx->client, &sigsoardataset); } if (db != NULL) { - if (node != NULL) { - dns_db_detachnode(&node); - } dns_db_detach(&db); } @@ -10372,8 +10347,8 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl, result = dns_db_findext(qctx->db, name, qctx->version, dns_rdatatype_soa, - client->query.dboptions, 0, &node, - fname, &cm, &ci, rdataset, sigrdataset); + client->query.dboptions, 0, fname, &cm, + &ci, rdataset, sigrdataset); } if (result != ISC_R_SUCCESS) { /* @@ -10488,8 +10463,8 @@ query_addns(query_ctx_t *qctx) { } else { CTRACE(ISC_LOG_DEBUG(3), "query_addns: calling dns_db_find"); result = dns_db_findext(qctx->db, name, NULL, dns_rdatatype_ns, - client->query.dboptions, 0, &node, - fname, &cm, &ci, rdataset, sigrdataset); + client->query.dboptions, 0, fname, &cm, + &ci, rdataset, sigrdataset); CTRACE(ISC_LOG_DEBUG(3), "query_addns: dns_db_find complete"); } if (result != ISC_R_SUCCESS) { @@ -10532,7 +10507,6 @@ static void query_addbestns(query_ctx_t *qctx) { ns_client_t *client = qctx->client; dns_db_t *db = NULL, *zdb = NULL; - dns_dbnode_t *node = NULL; dns_name_t *fname = NULL, *zfname = NULL; dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL; dns_rdataset_t *zrdataset = NULL, *zsigrdataset = NULL; @@ -10610,14 +10584,13 @@ db_find: if (is_zone) { result = dns_db_findext( db, client->query.qname, version, dns_rdatatype_ns, - client->query.dboptions, client->inner.now, &node, - fname, &cm, &ci, rdataset, sigrdataset); + client->query.dboptions, client->inner.now, fname, &cm, + &ci, rdataset, sigrdataset); if (result != DNS_R_DELEGATION) { goto cleanup; } if (client->query.cacheok) { ns_client_keepname(client, fname, dbuf); - dns_db_detachnode(&node); zdb = MOVE_OWNERSHIP(db); zfname = MOVE_OWNERSHIP(fname); zrdataset = MOVE_OWNERSHIP(rdataset); @@ -10641,9 +10614,6 @@ db_find: ns_client_putrdataset(client, &sigrdataset); } - if (node != NULL) { - dns_db_detachnode(&node); - } dns_db_detach(&db); db = MOVE_OWNERSHIP(zdb); @@ -10698,9 +10668,6 @@ cleanup: if (fname != NULL) { ns_client_releasename(client, &fname); } - if (node != NULL) { - dns_db_detachnode(&node); - } if (db != NULL) { dns_db_detach(&db); } @@ -10725,7 +10692,6 @@ query_addwildcardproof(query_ctx_t *qctx, dns_name_t *name, bool ispositive, dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL; dns_fixedname_t wfixed; dns_name_t *wname; - dns_dbnode_t *node = NULL; unsigned int options; unsigned int olabels, nlabels, labels; isc_result_t result; @@ -10800,11 +10766,8 @@ again: sigrdataset = ns_client_newrdataset(client); result = dns_db_findext(qctx->db, name, qctx->version, - dns_rdatatype_nsec, options, 0, &node, fname, - &cm, &ci, rdataset, sigrdataset); - if (node != NULL) { - dns_db_detachnode(&node); - } + dns_rdatatype_nsec, options, 0, fname, &cm, &ci, + rdataset, sigrdataset); if (!dns_rdataset_isassociated(rdataset)) { /* @@ -10830,8 +10793,7 @@ again: } result = dns_db_findext(qctx->db, cname, qctx->version, dns_rdatatype_nsec, options, 0, - NULL, fname, &cm, &ci, NULL, - NULL); + fname, &cm, &ci, NULL, NULL); if (result == DNS_R_NXDOMAIN) { maxlabels = labels; } else { diff --git a/lib/ns/update.c b/lib/ns/update.c index d6517899204..a4677aa7fbd 100644 --- a/lib/ns/update.c +++ b/lib/ns/update.c @@ -2118,14 +2118,14 @@ check_mx(ns_client_t *client, dns_zone_t *zone, dns_db_t *db, continue; } result = dns_db_find(db, &mx.mx, newver, dns_rdatatype_a, 0, 0, - NULL, foundname, NULL, NULL); + foundname, NULL, NULL); if (result == ISC_R_SUCCESS) { continue; } if (result == DNS_R_NXRRSET) { result = dns_db_find(db, &mx.mx, newver, - dns_rdatatype_aaaa, 0, 0, NULL, + dns_rdatatype_aaaa, 0, 0, foundname, NULL, NULL); if (result == ISC_R_SUCCESS) { continue; diff --git a/tests/dns/db_test.c b/tests/dns/db_test.c index 57a0075e46b..66f116d06dc 100644 --- a/tests/dns/db_test.c +++ b/tests/dns/db_test.c @@ -169,7 +169,7 @@ ISC_LOOP_TEST_IMPL(dns_dbfind_staleok) { dns_rdataset_disassociate(&rdataset); result = dns_db_find(db, example, NULL, dns_rdatatype_a, 0, 0, - &node, found, &rdataset, NULL); + found, &rdataset, NULL); assert_int_equal(result, ISC_R_SUCCESS); /* @@ -181,14 +181,12 @@ ISC_LOOP_TEST_IMPL(dns_dbfind_staleok) { assert_int_in_range(count, 1, 21); /* loop sanity */ assert_int_equal(rdataset.attributes.stale, false); assert_true(rdataset.ttl > 0); - dns_db_detachnode(&node); dns_rdataset_disassociate(&rdataset); usleep(100000); /* 100 ms */ result = dns_db_find(db, example, NULL, dns_rdatatype_a, - 0, 0, &node, found, &rdataset, - NULL); + 0, 0, found, &rdataset, NULL); } while (result == ISC_R_SUCCESS); assert_int_equal(result, ISC_R_NOTFOUND); @@ -197,8 +195,8 @@ ISC_LOOP_TEST_IMPL(dns_dbfind_staleok) { * Check whether we can get stale data. */ result = dns_db_find(db, example, NULL, dns_rdatatype_a, - DNS_DBFIND_STALEOK, 0, &node, found, - &rdataset, NULL); + DNS_DBFIND_STALEOK, 0, found, &rdataset, + NULL); switch (pass) { case 0: assert_int_equal(result, ISC_R_NOTFOUND); @@ -216,15 +214,14 @@ ISC_LOOP_TEST_IMPL(dns_dbfind_staleok) { assert_int_equal(result, ISC_R_SUCCESS); assert_int_equal(rdataset.attributes.stale, true); - dns_db_detachnode(&node); dns_rdataset_disassociate(&rdataset); usleep(100000); /* 100 ms */ - result = dns_db_find( - db, example, NULL, dns_rdatatype_a, - DNS_DBFIND_STALEOK, 0, &node, found, - &rdataset, NULL); + result = dns_db_find(db, example, NULL, + dns_rdatatype_a, + DNS_DBFIND_STALEOK, 0, + found, &rdataset, NULL); } while (result == ISC_R_SUCCESS); /* * usleep(100000) can be slightly less than 10ms so @@ -311,11 +308,10 @@ ISC_LOOP_TEST_IMPL(version) { name = dns_fixedname_name(&fname); foundname = dns_fixedname_initname(&ffound); dns_rdataset_init(&rdataset); - result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, &node, - foundname, &rdataset, NULL); + result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, foundname, + &rdataset, NULL); assert_int_equal(result, ISC_R_SUCCESS); dns_rdataset_disassociate(&rdataset); - dns_db_detachnode(&node); dns_db_closeversion(db, &ver, false); /* Open new version for writing */ @@ -324,8 +320,10 @@ ISC_LOOP_TEST_IMPL(version) { name = dns_fixedname_name(&fname); foundname = dns_fixedname_initname(&ffound); dns_rdataset_init(&rdataset); - result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, &node, - foundname, &rdataset, NULL); + result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, foundname, + &rdataset, NULL); + assert_int_equal(result, ISC_R_SUCCESS); + result = dns_db_findnode(db, foundname, false, &node); assert_int_equal(result, ISC_R_SUCCESS); result = dns_db_newversion(db, &new); @@ -339,17 +337,16 @@ ISC_LOOP_TEST_IMPL(version) { dns_db_detachnode(&node); /* This should fail now */ - result = dns_db_find(db, name, new, dns_rdatatype_a, 0, 0, &node, - foundname, &rdataset, NULL); + result = dns_db_find(db, name, new, dns_rdatatype_a, 0, 0, foundname, + &rdataset, NULL); assert_int_equal(result, DNS_R_NXDOMAIN); dns_db_closeversion(db, &new, true); /* But this should still succeed */ - result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, &node, - foundname, &rdataset, NULL); + result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, foundname, + &rdataset, NULL); assert_int_equal(result, ISC_R_SUCCESS); - dns_db_detachnode(&node); /* Now we create a node with an empty parent */ result = dns_db_newversion(db, &new); @@ -364,8 +361,8 @@ ISC_LOOP_TEST_IMPL(version) { /* look up the ENT; it should be empty */ dns_test_namefromstring("ent.name.test.test.", &fname); dns_db_detachnode(&node); - result = dns_db_find(db, name, new, dns_rdatatype_a, 0, 0, &node, - foundname, &rdataset, NULL); + result = dns_db_find(db, name, new, dns_rdatatype_a, 0, 0, foundname, + &rdataset, NULL); assert_int_equal(result, DNS_R_EMPTYNAME); /* ... but then we roll it back... */ @@ -373,8 +370,8 @@ ISC_LOOP_TEST_IMPL(version) { /* ... and the ENT should be NXDOMAIN now */ dns_test_namefromstring("ent.name.test.test.", &fname); - result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, &node, - foundname, &rdataset, NULL); + result = dns_db_find(db, name, ver, dns_rdatatype_a, 0, 0, foundname, + &rdataset, NULL); assert_int_equal(result, DNS_R_NXDOMAIN); dns_rdataset_cleanup(&rdataset); diff --git a/tests/dns/dbversion_test.c b/tests/dns/dbversion_test.c index d3bfab1b706..2ad11cea341 100644 --- a/tests/dns/dbversion_test.c +++ b/tests/dns/dbversion_test.c @@ -170,8 +170,8 @@ ISC_RUN_TEST_IMPL(find) { name = dns_fixedname_initname(&fixed); dns_rdataset_init(&rdataset); - res = dns_db_find(db1, dns_rootname, v1, dns_rdatatype_soa, 0, 0, NULL, - name, &rdataset, NULL); + res = dns_db_find(db1, dns_rootname, v1, dns_rdatatype_soa, 0, 0, name, + &rdataset, NULL); /* * Note: in the QPzone database, the root node always exists, * even if it's empty, so we would get DNS_R_NXRRSET from this @@ -185,7 +185,7 @@ ISC_RUN_TEST_IMPL(find) { dns_rdataset_init(&rdataset); check_assertion((void)dns_db_find(db1, dns_rootname, v2, - dns_rdatatype_soa, 0, 0, NULL, name, + dns_rdatatype_soa, 0, 0, name, &rdataset, NULL)); } diff --git a/tests/dns/qpdb_test.c b/tests/dns/qpdb_test.c index 69cdc90061f..35c3b1412e2 100644 --- a/tests/dns/qpdb_test.c +++ b/tests/dns/qpdb_test.c @@ -217,8 +217,8 @@ ISC_LOOP_TEST_IMPL(servestale_fresh_over_stale_cname) { foundname = dns_fixedname_initname(&ffound); dns_rdataset_init(&rdataset); result = dns_db_find(db, name, NULL, dns_rdatatype_hinfo, - DNS_DBFIND_STALEOK, now, NULL, foundname, - &rdataset, NULL); + DNS_DBFIND_STALEOK, now, foundname, &rdataset, + NULL); assert_int_equal(result, ISC_R_SUCCESS); assert_int_equal(rdataset.type, dns_rdatatype_hinfo); @@ -256,8 +256,8 @@ ISC_LOOP_TEST_IMPL(servestale_fresh_cname_over_stale_type) { foundname = dns_fixedname_initname(&ffound); dns_rdataset_init(&rdataset); result = dns_db_find(db, name, NULL, dns_rdatatype_a, - DNS_DBFIND_STALEOK, now, NULL, foundname, - &rdataset, NULL); + DNS_DBFIND_STALEOK, now, foundname, &rdataset, + NULL); assert_int_equal(result, DNS_R_CNAME); assert_int_equal(rdataset.type, dns_rdatatype_cname); diff --git a/tests/dns/qpzone_test.c b/tests/dns/qpzone_test.c index e4a0306a168..d79b48ba480 100644 --- a/tests/dns/qpzone_test.c +++ b/tests/dns/qpzone_test.c @@ -291,7 +291,6 @@ verify_aaaa_records(dns_db_t *db, dns_dbversion_t *version, const dns_name_t *name, unsigned char (*ips)[16], ssize_t expected_count, uint32_t expected_ttl) { isc_result_t result; - dns_dbnode_t *node = NULL; dns_rdataset_t rdataset; bool *found_ips = NULL; dns_fixedname_t found_fname; @@ -303,7 +302,7 @@ verify_aaaa_records(dns_db_t *db, dns_dbversion_t *version, dns_rdataset_init(&rdataset); - result = dns_db_find(db, name, version, dns_rdatatype_aaaa, 0, 0, &node, + result = dns_db_find(db, name, version, dns_rdatatype_aaaa, 0, 0, found_name, &rdataset, NULL); assert_int_equal(result, ISC_R_SUCCESS); @@ -339,7 +338,6 @@ verify_aaaa_records(dns_db_t *db, dns_dbversion_t *version, /* Verify we found exactly the expected number of records */ assert_int_equal(found_count, expected_count); - dns_db_detachnode(&node); dns_rdataset_disassociate(&rdataset); isc_mem_cput(isc_g_mctx, found_ips, (size_t)expected_count, sizeof(bool)); @@ -458,7 +456,6 @@ ISC_RUN_TEST_IMPL(wildcard_foundname) { isc_result_t result; dns_db_t *db = NULL; dns_dbversion_t *version = NULL; - dns_dbnode_t *node = NULL; dns_fixedname_t fqname, fwild, ffound; dns_name_t *qname = NULL, *wild = NULL, *found = NULL; dns_rdataset_t rdataset; @@ -483,14 +480,13 @@ ISC_RUN_TEST_IMPL(wildcard_foundname) { dns_rdataset_init(&rdataset); dns_db_currentversion(db, &version); - result = dns_db_find(db, qname, version, dns_rdatatype_a, 0, 0, &node, - found, &rdataset, NULL); + result = dns_db_find(db, qname, version, dns_rdatatype_a, 0, 0, found, + &rdataset, NULL); assert_int_equal(result, ISC_R_SUCCESS); assert_true(dns_name_equal(found, wild)); assert_true(found->attributes.wildcard); dns_rdataset_disassociate(&rdataset); - dns_db_detachnode(&node); dns_db_closeversion(db, &version, false); dns_db_detach(&db); assert_null(db);