]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Remove node output from the public lookup API
authorAlessio Podda <alessio@isc.org>
Wed, 22 Jul 2026 13:58:24 +0000 (15:58 +0200)
committerAlessio Podda <alessio@isc.org>
Wed, 12 Aug 2026 19:57:34 +0000 (19:57 +0000)
Remove nodep from dns_db_find() and dns_db_findext(), then update
callers and tests to consume names and rdatasets directly.

20 files changed:
bin/dnssec/dnssec-signzone.c
bin/tests/system/dyndb/driver/db.c
lib/dns/adb.c
lib/dns/client.c
lib/dns/db.c
lib/dns/include/dns/db.h
lib/dns/include/dns/view.h
lib/dns/nsec3.c
lib/dns/resolver.c
lib/dns/rootns.c
lib/dns/update.c
lib/dns/validator.c
lib/dns/view.c
lib/dns/zone.c
lib/ns/query.c
lib/ns/update.c
tests/dns/db_test.c
tests/dns/dbversion_test.c
tests/dns/qpdb_test.c
tests/dns/qpzone_test.c

index 75f85f31caee77219d818e42d87c5d2aa29746fe..59c24eec3e7b9e04982301f1c35200560753ee7d 100644 (file)
@@ -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));
index 57c2e5de7280853299f99f0970f5f5d23a94b277..562fe36df2d69e548aba799dd763930d3c7e864c 100644 (file)
@@ -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
index 758f0d8187f3688b095917691007c5206712de52..9c2144278f22f02371c577b9fd5e7a616cf641db 100644 (file)
@@ -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:
index fa9fdfcb128f74c378851d9af4d5b5bc07145872..0f54cb1b8d96d5a357426f329dbd6680252f130d 100644 (file)
@@ -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;
                                }
                        }
index cb97364d6aec4d5a0eec148f9f9d94c7080e44bb..4fc87e25250edca01acd711a79477a3f18578d42 100644 (file)
@@ -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);
        }
index 66c501d3323444377e206667a5267a155a7f0418..4569f210c9e49ba42b59e200d940b1362f2fd7ea 100644 (file)
@@ -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
index 2eadc2689870c11bb4dc91770f8fefd32f553fc4..453ac9d1b063f2fc007fd277be47b3f7a05b9c38 100644 (file)
@@ -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:
index 3de9466826ff8bdb85a36d112d61ee490baa486f..5d1fe87f07324e9c2a7ef7815a71ba448bf73153 100644 (file)
@@ -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)
        {
index 592cbac84b85096330db369ebf28903f87142cde..61b130e312d6c2243801ca7d1d14b3cced4abead 100644 (file)
@@ -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:
index c809f3bf4b89ab9894fc25df87ee1d576ae46200..10004af248460db0c747cfd5305a9fdc6a08ff47 100644 (file)
@@ -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));
index 446415ea2254193522d0a30fc9d40b95e9ed81a0..421b7ab4f7deb65eedcf16d15da71c108e5fb0d1 100644 (file)
@@ -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 ||
index 213a681af246b218d527a7f579721a99156ce92e..e6ee370a175ba538259b58ace5c302e3862c18db 100644 (file)
@@ -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) {
index 0e544151d6c6231846c5ecb2c856941b8be60699..dab6d375009384c8066eed0e0510574633e4beae 100644 (file)
@@ -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);
index e6ee06e21bee78baea5d65c05bb046b400fbded3..104199c22555916bc54379a215e6b1bc4a611cba 100644 (file)
@@ -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))
index b78e7f72033354997f77f514e9955cb0c95d1b30..0207466c842b2fad508f8966ea5e053895e5635d 100644 (file)
@@ -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 {
index d65178992044b90d05f7119d143577bcb10e03aa..a4677aa7fbdd93a534a55401ef1c077169248c9f 100644 (file)
@@ -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;
index 57a0075e46bf9ae1882d65392356a489b6751776..66f116d06dce3546eeb1daf0ac140a809b242308 100644 (file)
@@ -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);
index d3bfab1b706fe12c64b02dc9055eea750590dcde..2ad11cea3410842b03f00f046f02c2afaf21c6a9 100644 (file)
@@ -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));
 }
 
index 69cdc90061fe84a669d187538b1a9c511394adbb..35c3b1412e2c40914110161090d572a311cb1707 100644 (file)
@@ -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);
index e4a0306a168311810c4191bd5eca6ae167d99978..d79b48ba48077c1da0e19a0ddbcb30f9e816ba03 100644 (file)
@@ -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);