From 4f3327cd410a4d23735e6906f3c96d16f83dfcae Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 16 Nov 2022 10:47:40 +1100 Subject: [PATCH] Extend dns_db_allrdatasets to control interation results Add an options parameter to control what rdatasets are returned when iteratating over the node. Specific modes will be added later. (cherry picked from commit 7695c36a5de01c441690f2a0e46f176321b58896) --- bin/check/check-tool.c | 2 +- bin/dnssec/dnssec-signzone.c | 21 ++++++++++++--------- bin/tests/optional/db_test.c | 4 ++-- bin/tests/optional/nsecify.c | 2 +- bin/tests/system/dyndb/driver/db.c | 7 ++++--- lib/dns/cache.c | 3 ++- lib/dns/catz.c | 2 +- lib/dns/client.c | 2 +- lib/dns/db.c | 6 ++++-- lib/dns/ecdb.c | 4 +++- lib/dns/include/dns/db.h | 10 +++++++--- lib/dns/include/dns/rdatasetiter.h | 1 + lib/dns/journal.c | 2 +- lib/dns/masterdump.c | 4 ++-- lib/dns/nsec.c | 2 +- lib/dns/nsec3.c | 4 ++-- lib/dns/rbtdb.c | 4 +++- lib/dns/rootns.c | 2 +- lib/dns/rpz.c | 2 +- lib/dns/rriterator.c | 4 ++-- lib/dns/sdb.c | 4 +++- lib/dns/sdlz.c | 4 +++- lib/dns/tests/dbversion_test.c | 4 ++-- lib/dns/update.c | 4 ++-- lib/dns/zone.c | 21 ++++++++++++--------- lib/dns/zoneverify.c | 8 ++++---- lib/ns/query.c | 4 ++-- lib/ns/update.c | 2 +- 28 files changed, 81 insertions(+), 58 deletions(-) diff --git a/bin/check/check-tool.c b/bin/check/check-tool.c index a9c4c69c64..cad2185045 100644 --- a/bin/check/check-tool.c +++ b/bin/check/check-tool.c @@ -610,7 +610,7 @@ check_ttls(dns_zone_t *zone, dns_ttl_t maxttl) { } CHECK(result); - CHECK(dns_db_allrdatasets(db, node, version, 0, &rdsiter)); + CHECK(dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter)); for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS; result = dns_rdatasetiter_next(rdsiter)) diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c index 6befca1872..2d2c158776 100644 --- a/bin/dnssec/dnssec-signzone.c +++ b/bin/dnssec/dnssec-signzone.c @@ -227,7 +227,7 @@ dumpnode(dns_name_t *name, dns_dbnode_t *node) { return; } - result = dns_db_allrdatasets(gdb, node, gversion, 0, &iter); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &iter); check_result(result, "dns_db_allrdatasets"); dns_rdataset_init(&rds); @@ -1192,7 +1192,7 @@ signname(dns_dbnode_t *node, dns_name_t *name) { dns_diff_init(mctx, &del); dns_diff_init(mctx, &add); rdsiter = NULL; - result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter); check_result(result, "dns_db_allrdatasets()"); result = dns_rdatasetiter_first(rdsiter); while (result == ISC_R_SUCCESS) { @@ -1266,7 +1266,7 @@ active_node(dns_dbnode_t *node) { bool found; dns_rdataset_init(&rdataset); - result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter); check_result(result, "dns_db_allrdatasets()"); result = dns_rdatasetiter_first(rdsiter); while (result == ISC_R_SUCCESS) { @@ -1312,7 +1312,8 @@ active_node(dns_dbnode_t *node) { /* * Delete RRSIGs for types that no longer exist. */ - result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter2); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, + &rdsiter2); check_result(result, "dns_db_allrdatasets()"); for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS; @@ -1514,7 +1515,7 @@ cleannode(dns_db_t *db, dns_dbversion_t *dbversion, dns_dbnode_t *node) { } dns_rdataset_init(&set); - result = dns_db_allrdatasets(db, node, dbversion, 0, &rdsiter); + result = dns_db_allrdatasets(db, node, dbversion, 0, 0, &rdsiter); check_result(result, "dns_db_allrdatasets"); result = dns_rdatasetiter_first(rdsiter); while (result == ISC_R_SUCCESS) { @@ -1814,7 +1815,7 @@ remove_records(dns_dbnode_t *node, dns_rdatatype_t which, bool checknsec) { /* * Delete any records of the given type at the apex. */ - result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter); check_result(result, "dns_db_allrdatasets()"); for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS; result = dns_rdatasetiter_next(rdsiter)) @@ -1857,7 +1858,7 @@ remove_sigs(dns_dbnode_t *node, bool delegation, dns_rdatatype_t which) { dns_rdataset_t rdataset; dns_rdataset_init(&rdataset); - result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter); check_result(result, "dns_db_allrdatasets()"); for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS; result = dns_rdatasetiter_next(rdsiter)) @@ -1921,7 +1922,8 @@ nsecify(void) { { result = dns_dbiterator_current(dbiter, &node, name); check_dns_dbiterator_current(result); - result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, + &rdsiter); check_result(result, "dns_db_allrdatasets()"); for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS; @@ -2335,7 +2337,8 @@ cleanup_zone(void) { { result = dns_dbiterator_current(dbiter, &node, name); check_dns_dbiterator_current(result); - result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter); + result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, + &rdsiter); check_result(result, "dns_db_allrdatasets()"); for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS; diff --git a/bin/tests/optional/db_test.c b/bin/tests/optional/db_test.c index 23b727f74e..05bd748abb 100644 --- a/bin/tests/optional/db_test.c +++ b/bin/tests/optional/db_test.c @@ -199,7 +199,7 @@ list(dbinfo *dbi, char *seektext) { if (result != ISC_R_SUCCESS && result != DNS_R_NEWORIGIN) { break; } - result = dns_db_allrdatasets(dbi->db, node, dbi->iversion, 0, + result = dns_db_allrdatasets(dbi->db, node, dbi->iversion, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { dns_db_detachnode(dbi->db, &node); @@ -891,7 +891,7 @@ main(int argc, char *argv[]) { if (!found_as && type == dns_rdatatype_any) { rdsiter = NULL; - result = dns_db_allrdatasets(db, node, version, 0, + result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter); if (result == ISC_R_SUCCESS) { if (!quiet) { diff --git a/bin/tests/optional/nsecify.c b/bin/tests/optional/nsecify.c index 3e3238247e..357b47fce8 100644 --- a/bin/tests/optional/nsecify.c +++ b/bin/tests/optional/nsecify.c @@ -54,7 +54,7 @@ active_node(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node) { dns_rdataset_init(&rdataset); rdsiter = NULL; - result = dns_db_allrdatasets(db, node, version, 0, &rdsiter); + result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter); check_result(result, "dns_db_allrdatasets()"); result = dns_rdatasetiter_first(rdsiter); while (result == ISC_R_SUCCESS) { diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c index a32e3f4b04..bed7d3e3a0 100644 --- a/bin/tests/system/dyndb/driver/db.c +++ b/bin/tests/system/dyndb/driver/db.c @@ -311,13 +311,14 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, static isc_result_t allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) { + unsigned int options, isc_stdtime_t now, + dns_rdatasetiter_t **iteratorp) { sampledb_t *sampledb = (sampledb_t *)db; REQUIRE(VALID_SAMPLEDB(sampledb)); - return (dns_db_allrdatasets(sampledb->rbtdb, node, version, now, - iteratorp)); + return (dns_db_allrdatasets(sampledb->rbtdb, node, version, options, + now, iteratorp)); } static isc_result_t diff --git a/lib/dns/cache.c b/lib/dns/cache.c index ed607075b4..d684f8eb66 100644 --- a/lib/dns/cache.c +++ b/lib/dns/cache.c @@ -1102,7 +1102,8 @@ clearnode(dns_db_t *db, dns_dbnode_t *node) { isc_result_t result; dns_rdatasetiter_t *iter = NULL; - result = dns_db_allrdatasets(db, node, NULL, (isc_stdtime_t)0, &iter); + result = dns_db_allrdatasets(db, node, NULL, 0, (isc_stdtime_t)0, + &iter); if (result != ISC_R_SUCCESS) { return (result); } diff --git a/lib/dns/catz.c b/lib/dns/catz.c index 68927e84bb..49ad9bf37b 100644 --- a/lib/dns/catz.c +++ b/lib/dns/catz.c @@ -1921,7 +1921,7 @@ dns_catz_update_from_db(dns_db_t *db, dns_catz_zones_t *catzs) { break; } - result = dns_db_allrdatasets(db, node, oldzone->dbversion, 0, + result = dns_db_allrdatasets(db, node, oldzone->dbversion, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, diff --git a/lib/dns/client.c b/lib/dns/client.c index b3b1c656b5..9cfc810e47 100644 --- a/lib/dns/client.c +++ b/lib/dns/client.c @@ -823,7 +823,7 @@ client_resfind(resctx_t *rctx, dns_fetchevent_t *event) { int n = 0; dns_rdatasetiter_t *rdsiter = NULL; - tresult = dns_db_allrdatasets(db, node, NULL, 0, + tresult = dns_db_allrdatasets(db, node, NULL, 0, 0, &rdsiter); if (tresult != ISC_R_SUCCESS) { result = tresult; diff --git a/lib/dns/db.c b/lib/dns/db.c index 04cf6560fe..41dbaa3d68 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -684,7 +684,8 @@ dns_db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, isc_result_t dns_db_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) { + unsigned int options, isc_stdtime_t now, + dns_rdatasetiter_t **iteratorp) { /* * Make '*iteratorp' an rdataset iteratator for all rdatasets at * 'node' in version 'version' of 'db'. @@ -693,7 +694,8 @@ dns_db_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, REQUIRE(DNS_DB_VALID(db)); REQUIRE(iteratorp != NULL && *iteratorp == NULL); - return ((db->methods->allrdatasets)(db, node, version, now, iteratorp)); + return ((db->methods->allrdatasets)(db, node, version, options, now, + iteratorp)); } isc_result_t diff --git a/lib/dns/ecdb.c b/lib/dns/ecdb.c index 0222682fd5..abbb8d9697 100644 --- a/lib/dns/ecdb.c +++ b/lib/dns/ecdb.c @@ -484,7 +484,8 @@ createiterator(dns_db_t *db, unsigned int options, static isc_result_t allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) { + unsigned int options, isc_stdtime_t now, + dns_rdatasetiter_t **iteratorp) { dns_ecdb_t *ecdb = (dns_ecdb_t *)db; dns_ecdbnode_t *ecdbnode = (dns_ecdbnode_t *)node; isc_mem_t *mctx; @@ -503,6 +504,7 @@ allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, iterator->common.node = NULL; attachnode(db, node, &iterator->common.node); iterator->common.version = version; + iterator->common.options = options; iterator->common.now = now; *iteratorp = (dns_rdatasetiter_t *)iterator; diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index 08bdc80e4e..13e2c14c09 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -116,8 +116,8 @@ typedef struct dns_dbmethods { dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset); isc_result_t (*allrdatasets)(dns_db_t *db, dns_dbnode_t *node, - dns_dbversion_t *version, - isc_stdtime_t now, + dns_dbversion_t *version, + unsigned int options, isc_stdtime_t now, dns_rdatasetiter_t **iteratorp); isc_result_t (*addrdataset)(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, isc_stdtime_t now, @@ -1177,7 +1177,8 @@ dns_db_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, isc_result_t dns_db_allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp); + unsigned int options, isc_stdtime_t now, + dns_rdatasetiter_t **iteratorp); /*%< * Make '*iteratorp' an rdataset iterator for all rdatasets at 'node' in * version 'version' of 'db'. @@ -1186,6 +1187,9 @@ dns_db_allrdatasets(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 'options' controls which rdatasets are selected when interating over + * the node. + * * \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 * 'now'. Any ANY query will not match unless at least one rdataset at diff --git a/lib/dns/include/dns/rdatasetiter.h b/lib/dns/include/dns/rdatasetiter.h index 0ad1e407cb..2df4aad97f 100644 --- a/lib/dns/include/dns/rdatasetiter.h +++ b/lib/dns/include/dns/rdatasetiter.h @@ -94,6 +94,7 @@ struct dns_rdatasetiter { dns_dbnode_t *node; dns_dbversion_t *version; isc_stdtime_t now; + unsigned int options; }; void diff --git a/lib/dns/journal.c b/lib/dns/journal.c index 8a32c0135e..b5865285d3 100644 --- a/lib/dns/journal.c +++ b/lib/dns/journal.c @@ -2126,7 +2126,7 @@ get_name_diff(dns_db_t *db, dns_dbversion_t *ver, isc_stdtime_t now, return (result); } - result = dns_db_allrdatasets(db, node, ver, now, &rdsiter); + result = dns_db_allrdatasets(db, node, ver, 0, now, &rdsiter); if (result != ISC_R_SUCCESS) { goto cleanup_node; } diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c index 0a017fb699..efd08bc8bd 100644 --- a/lib/dns/masterdump.c +++ b/lib/dns/masterdump.c @@ -1790,7 +1790,7 @@ dumptostream(dns_dumpctx_t *dctx) { result = dns_dbiterator_pause(dctx->dbiter); RUNTIME_CHECK(result == ISC_R_SUCCESS); - result = dns_db_allrdatasets(dctx->db, node, dctx->version, + result = dns_db_allrdatasets(dctx->db, node, dctx->version, 0, dctx->now, &rdsiter); if (result != ISC_R_SUCCESS) { dns_db_detachnode(dctx->db, &node); @@ -2026,7 +2026,7 @@ dns_master_dumpnodetostream(isc_mem_t *mctx, dns_db_t *db, isc_buffer_init(&buffer, bufmem, initial_buffer_length); - result = dns_db_allrdatasets(db, node, version, now, &rdsiter); + result = dns_db_allrdatasets(db, node, version, 0, now, &rdsiter); if (result != ISC_R_SUCCESS) { goto failure; } diff --git a/lib/dns/nsec.c b/lib/dns/nsec.c index 4eda3d8450..3089c9eac2 100644 --- a/lib/dns/nsec.c +++ b/lib/dns/nsec.c @@ -128,7 +128,7 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node, max_type = dns_rdatatype_nsec; dns_rdataset_init(&rdataset); rdsiter = NULL; - result = dns_db_allrdatasets(db, node, version, 0, &rdsiter); + result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { return (result); } diff --git a/lib/dns/nsec3.c b/lib/dns/nsec3.c index 5a961ba4f5..520b031117 100644 --- a/lib/dns/nsec3.c +++ b/lib/dns/nsec3.c @@ -118,7 +118,7 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node, } dns_rdataset_init(&rdataset); rdsiter = NULL; - result = dns_db_allrdatasets(db, node, version, 0, &rdsiter); + result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { return (result); } @@ -365,7 +365,7 @@ name_exists(dns_db_t *db, dns_dbversion_t *version, const dns_name_t *name, return (result); } - result = dns_db_allrdatasets(db, node, version, (isc_stdtime_t)0, + result = dns_db_allrdatasets(db, node, version, 0, (isc_stdtime_t)0, &iter); if (result != ISC_R_SUCCESS) { goto cleanup_node; diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index ec3e3c4f52..3b2c179941 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -5975,7 +5975,8 @@ cache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, static isc_result_t allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) { + unsigned int options, isc_stdtime_t now, + dns_rdatasetiter_t **iteratorp) { dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node; rbtdb_version_t *rbtversion = version; @@ -6007,6 +6008,7 @@ allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, iterator->common.db = db; iterator->common.node = node; iterator->common.version = (dns_dbversion_t *)rbtversion; + iterator->common.options = options; iterator->common.now = now; isc_refcount_increment(&rbtnode->references); diff --git a/lib/dns/rootns.c b/lib/dns/rootns.c index 3172891dc9..69e2667953 100644 --- a/lib/dns/rootns.c +++ b/lib/dns/rootns.c @@ -176,7 +176,7 @@ check_hints(dns_db_t *db) { if (result != ISC_R_SUCCESS) { goto cleanup; } - result = dns_db_allrdatasets(db, node, NULL, now, &rdsiter); + result = dns_db_allrdatasets(db, node, NULL, 0, now, &rdsiter); if (result != ISC_R_SUCCESS) { goto cleanup; } diff --git a/lib/dns/rpz.c b/lib/dns/rpz.c index 0cf3871394..5b4187c398 100644 --- a/lib/dns/rpz.c +++ b/lib/dns/rpz.c @@ -1957,7 +1957,7 @@ update_quantum(isc_task_t *task, isc_event_t *event) { } result = dns_db_allrdatasets(rpz->updb, node, rpz->updbversion, - 0, &rdsiter); + 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_MASTER, ISC_LOG_ERROR, diff --git a/lib/dns/rriterator.c b/lib/dns/rriterator.c index a7f376e673..9b40597fad 100644 --- a/lib/dns/rriterator.c +++ b/lib/dns/rriterator.c @@ -84,7 +84,7 @@ dns_rriterator_first(dns_rriterator_t *it) { return (it->result); } - it->result = dns_db_allrdatasets(it->db, it->node, it->ver, + it->result = dns_db_allrdatasets(it->db, it->node, it->ver, 0, it->now, &it->rdatasetit); if (it->result != ISC_R_SUCCESS) { return (it->result); @@ -138,7 +138,7 @@ dns_rriterator_nextrrset(dns_rriterator_t *it) { if (it->result != ISC_R_SUCCESS) { return (it->result); } - it->result = dns_db_allrdatasets(it->db, it->node, it->ver, + it->result = dns_db_allrdatasets(it->db, it->node, it->ver, 0, it->now, &it->rdatasetit); if (it->result != ISC_R_SUCCESS) { return (it->result); diff --git a/lib/dns/sdb.c b/lib/dns/sdb.c index 9d69f04206..2c6802ff9c 100644 --- a/lib/dns/sdb.c +++ b/lib/dns/sdb.c @@ -1169,7 +1169,8 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, static isc_result_t allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) { + unsigned int options, isc_stdtime_t now, + dns_rdatasetiter_t **iteratorp) { sdb_rdatasetiter_t *iterator; REQUIRE(version == NULL || version == &dummy); @@ -1185,6 +1186,7 @@ allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, iterator->common.node = NULL; attachnode(db, node, &iterator->common.node); iterator->common.version = version; + iterator->common.options = options; iterator->common.now = now; *iteratorp = (dns_rdatasetiter_t *)iterator; diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 49e8edd416..8ba7aaeda4 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1021,7 +1021,8 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, static isc_result_t allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, - isc_stdtime_t now, dns_rdatasetiter_t **iteratorp) { + unsigned int options, isc_stdtime_t now, + dns_rdatasetiter_t **iteratorp) { dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db; sdlz_rdatasetiter_t *iterator; @@ -1041,6 +1042,7 @@ allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, iterator->common.node = NULL; attachnode(db, node, &iterator->common.node); iterator->common.version = version; + iterator->common.options = options; iterator->common.now = now; *iteratorp = (dns_rdatasetiter_t *)iterator; diff --git a/lib/dns/tests/dbversion_test.c b/lib/dns/tests/dbversion_test.c index 7dabf74aa5..70a5124758 100644 --- a/lib/dns/tests/dbversion_test.c +++ b/lib/dns/tests/dbversion_test.c @@ -206,10 +206,10 @@ allrdatasets(void **state) { res = dns_db_findnode(db1, dns_rootname, false, &node); assert_int_equal(res, ISC_R_SUCCESS); - res = dns_db_allrdatasets(db1, node, v1, 0, &iterator); + res = dns_db_allrdatasets(db1, node, v1, 0, 0, &iterator); assert_int_equal(res, ISC_R_SUCCESS); - check_assertion(dns_db_allrdatasets(db1, node, v2, 0, &iterator)); + check_assertion(dns_db_allrdatasets(db1, node, v2, 0, 0, &iterator)); dns_rdatasetiter_destroy(&iterator); assert_null(iterator); diff --git a/lib/dns/update.c b/lib/dns/update.c index 05e36c069a..9d712380b7 100644 --- a/lib/dns/update.c +++ b/lib/dns/update.c @@ -366,7 +366,7 @@ foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, } iter = NULL; - result = dns_db_allrdatasets(db, node, ver, (isc_stdtime_t)0, &iter); + result = dns_db_allrdatasets(db, node, ver, 0, (isc_stdtime_t)0, &iter); if (result != ISC_R_SUCCESS) { goto cleanup_node; } @@ -1398,7 +1398,7 @@ add_exposed_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db, } iter = NULL; - result = dns_db_allrdatasets(db, node, ver, (isc_stdtime_t)0, &iter); + result = dns_db_allrdatasets(db, node, ver, 0, (isc_stdtime_t)0, &iter); if (result != ISC_R_SUCCESS) { goto cleanup_node; } diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 21e71767e9..2456cd23be 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -3233,7 +3233,7 @@ zone_check_dup(dns_zone_t *zone, dns_db_t *db) { continue; } - result = dns_db_allrdatasets(db, node, NULL, 0, &rdsit); + result = dns_db_allrdatasets(db, node, NULL, 0, 0, &rdsit); if (result != ISC_R_SUCCESS) { continue; } @@ -7598,7 +7598,7 @@ next_active(dns_db_t *db, dns_dbversion_t *version, dns_name_t *oldname, /* * Is this node empty? */ - CHECK(dns_db_allrdatasets(db, node, version, 0, &rdsit)); + CHECK(dns_db_allrdatasets(db, node, version, 0, 0, &rdsit)); result = dns_rdatasetiter_first(rdsit); dns_db_detachnode(db, &node); dns_rdatasetiter_destroy(&rdsit); @@ -7721,7 +7721,7 @@ check_if_bottom_of_zone(dns_db_t *db, dns_dbnode_t *node, REQUIRE(is_bottom_of_zone != NULL); - result = dns_db_allrdatasets(db, node, version, 0, &iterator); + result = dns_db_allrdatasets(db, node, version, 0, 0, &iterator); if (result != ISC_R_SUCCESS) { if (result == ISC_R_NOTFOUND) { result = ISC_R_SUCCESS; @@ -7778,7 +7778,7 @@ sign_a_node(dns_db_t *db, dns_zone_t *zone, dns_name_t *name, unsigned char data[1024]; bool seen_soa, seen_ns, seen_rr, seen_nsec, seen_nsec3, seen_ds; - result = dns_db_allrdatasets(db, node, version, 0, &iterator); + result = dns_db_allrdatasets(db, node, version, 0, 0, &iterator); if (result != ISC_R_SUCCESS) { if (result == ISC_R_NOTFOUND) { result = ISC_R_SUCCESS; @@ -8716,7 +8716,8 @@ zone_nsec3chain(dns_zone_t *zone) { /* * Check to see if this is a bottom of zone node. */ - result = dns_db_allrdatasets(db, node, version, 0, &iterator); + result = dns_db_allrdatasets(db, node, version, 0, 0, + &iterator); if (result == ISC_R_NOTFOUND) { /* Empty node? */ goto next_addnode; @@ -8979,7 +8980,8 @@ zone_nsec3chain(dns_zone_t *zone) { /* * Check to see if this is a bottom of zone node. */ - result = dns_db_allrdatasets(db, node, version, 0, &iterator); + result = dns_db_allrdatasets(db, node, version, 0, 0, + &iterator); if (result == ISC_R_NOTFOUND) { /* Empty node? */ goto next_removenode; @@ -9100,7 +9102,8 @@ skip_removals: bool rebuild_nsec = false, rebuild_nsec3 = false; result = dns_db_getoriginnode(db, &node); RUNTIME_CHECK(result == ISC_R_SUCCESS); - result = dns_db_allrdatasets(db, node, version, 0, &iterator); + result = dns_db_allrdatasets(db, node, version, 0, 0, + &iterator); if (result != ISC_R_SUCCESS) { dnssec_log(zone, ISC_LOG_ERROR, "zone_nsec3chain:dns_db_allrdatasets -> %s", @@ -9401,7 +9404,7 @@ del_sig(dns_db_t *db, dns_dbversion_t *version, dns_name_t *name, char namebuf[DNS_NAME_FORMATSIZE]; dns_name_format(name, namebuf, sizeof(namebuf)); - result = dns_db_allrdatasets(db, node, version, 0, &iterator); + result = dns_db_allrdatasets(db, node, version, 0, 0, &iterator); if (result != ISC_R_SUCCESS) { if (result == ISC_R_NOTFOUND) { result = ISC_R_SUCCESS; @@ -17041,7 +17044,7 @@ copy_non_dnssec_records(dns_db_t *db, dns_db_t *version, dns_db_t *rawdb, goto cleanup; } - result = dns_db_allrdatasets(rawdb, rawnode, NULL, 0, &rdsit); + result = dns_db_allrdatasets(rawdb, rawnode, NULL, 0, 0, &rdsit); if (result != ISC_R_SUCCESS) { goto cleanup; } diff --git a/lib/dns/zoneverify.c b/lib/dns/zoneverify.c index 8237694c87..19ecdc039a 100644 --- a/lib/dns/zoneverify.c +++ b/lib/dns/zoneverify.c @@ -308,7 +308,7 @@ check_no_rrsig(const vctx_t *vctx, const dns_rdataset_t *rdataset, isc_result_t result; dns_rdataset_init(&sigrdataset); - result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, &rdsiter); + result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s", isc_result_totext(result)); @@ -817,7 +817,7 @@ verifyset(vctx_t *vctx, dns_rdataset_t *rdataset, const dns_name_t *name, isc_result_t result; dns_rdataset_init(&sigrdataset); - result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, &rdsiter); + result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s", isc_result_totext(result)); @@ -921,7 +921,7 @@ verifynode(vctx_t *vctx, const dns_name_t *name, dns_dbnode_t *node, REQUIRE(vresult != NULL || (nsecset == NULL && nsec3paramset == NULL)); - result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, &rdsiter); + result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s", isc_result_totext(result)); @@ -1013,7 +1013,7 @@ is_empty(const vctx_t *vctx, dns_dbnode_t *node, bool *empty) { dns_rdatasetiter_t *rdsiter = NULL; isc_result_t result; - result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, &rdsiter); + result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s", isc_result_totext(result)); diff --git a/lib/ns/query.c b/lib/ns/query.c index 067c6a2372..62c5e6d823 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -3031,7 +3031,7 @@ rpz_find_p(ns_client_t *client, dns_name_t *self_name, dns_rdatatype_t qtype, dns_rdatasetiter_t *rdsiter; rdsiter = NULL; - result = dns_db_allrdatasets(*dbp, *nodep, *versionp, 0, + result = dns_db_allrdatasets(*dbp, *nodep, *versionp, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { rpz_log_fail(client, DNS_RPZ_ERROR_LEVEL, p_name, @@ -7516,7 +7516,7 @@ query_respond_any(query_ctx_t *qctx) { CALL_HOOK(NS_QUERY_RESPOND_ANY_BEGIN, qctx); - result = dns_db_allrdatasets(qctx->db, qctx->node, qctx->version, 0, + result = dns_db_allrdatasets(qctx->db, qctx->node, qctx->version, 0, 0, &rdsiter); if (result != ISC_R_SUCCESS) { CCTRACE(ISC_LOG_ERROR, "query_respond_any: allrdatasets " diff --git a/lib/ns/update.c b/lib/ns/update.c index c4caa4d743..bbfb1974bc 100644 --- a/lib/ns/update.c +++ b/lib/ns/update.c @@ -599,7 +599,7 @@ foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name, } iter = NULL; - result = dns_db_allrdatasets(db, node, ver, (isc_stdtime_t)0, &iter); + result = dns_db_allrdatasets(db, node, ver, 0, (isc_stdtime_t)0, &iter); if (result != ISC_R_SUCCESS) { goto cleanup_node; }