mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-22 01:59:26 +00:00
add DNS_DBITERATOR_FOREACH and DNS_RDATASETITER_FOREACH
when iterating databases, use DNS_DBITERATOR_FOREACH and DNS_DNSRDATASETITER_FOREACH macros where possible.
This commit is contained in:
parent
24d077afb0
commit
8d065fd3e1
@ -78,6 +78,6 @@ PenaltyBreakString: 80
|
|||||||
PenaltyExcessCharacter: 100
|
PenaltyExcessCharacter: 100
|
||||||
Standard: Cpp11
|
Standard: Cpp11
|
||||||
ContinuationIndentWidth: 8
|
ContinuationIndentWidth: 8
|
||||||
ForEachMacros: [ 'cds_lfs_for_each', 'cds_lfs_for_each_safe', 'cds_list_for_each_entry_safe', 'ISC_LIST_FOREACH', 'ISC_LIST_FOREACH_SAFE', 'ISC_LIST_FOREACH_REV', 'ISC_LIST_FOREACH_REV_SAFE', 'MSG_SECTION_FOREACH', 'DNS_RDATASET_FOREACH', 'CFG_LIST_FOREACH' ]
|
ForEachMacros: [ 'cds_lfs_for_each', 'cds_lfs_for_each_safe', 'cds_list_for_each_entry_safe', 'ISC_LIST_FOREACH', 'ISC_LIST_FOREACH_SAFE', 'ISC_LIST_FOREACH_REV', 'ISC_LIST_FOREACH_REV_SAFE', 'MSG_SECTION_FOREACH', 'DNS_DBITERATOR_FOREACH', 'DNS_RDATASET_FOREACH', 'DNS_RDATASETITER_FOREACH', 'CFG_LIST_FOREACH' ]
|
||||||
RemoveParentheses: ReturnStatement
|
RemoveParentheses: ReturnStatement
|
||||||
RemoveSemicolon: true
|
RemoveSemicolon: true
|
||||||
|
@ -199,7 +199,6 @@ savezonecut(dns_fixedname_t *fzonecut, dns_name_t *name) {
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
dumpnode(dns_name_t *name, dns_dbnode_t *node) {
|
dumpnode(dns_name_t *name, dns_dbnode_t *node) {
|
||||||
dns_rdataset_t rds;
|
|
||||||
dns_rdatasetiter_t *iter = NULL;
|
dns_rdatasetiter_t *iter = NULL;
|
||||||
isc_buffer_t *buffer = NULL;
|
isc_buffer_t *buffer = NULL;
|
||||||
isc_region_t r;
|
isc_region_t r;
|
||||||
@ -213,13 +212,10 @@ dumpnode(dns_name_t *name, dns_dbnode_t *node) {
|
|||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &iter);
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &iter);
|
||||||
check_result(result, "dns_db_allrdatasets");
|
check_result(result, "dns_db_allrdatasets");
|
||||||
|
|
||||||
dns_rdataset_init(&rds);
|
|
||||||
|
|
||||||
isc_buffer_allocate(mctx, &buffer, bufsize);
|
isc_buffer_allocate(mctx, &buffer, bufsize);
|
||||||
|
|
||||||
for (result = dns_rdatasetiter_first(iter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (iter) {
|
||||||
result = dns_rdatasetiter_next(iter))
|
dns_rdataset_t rds = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(iter, &rds);
|
dns_rdatasetiter_current(iter, &rds);
|
||||||
|
|
||||||
if (rds.type != dns_rdatatype_rrsig &&
|
if (rds.type != dns_rdatatype_rrsig &&
|
||||||
@ -1191,8 +1187,7 @@ signname(dns_dbnode_t *node, bool apex, dns_name_t *name) {
|
|||||||
rdsiter = NULL;
|
rdsiter = NULL;
|
||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
||||||
check_result(result, "dns_db_allrdatasets()");
|
check_result(result, "dns_db_allrdatasets()");
|
||||||
result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
|
|
||||||
/* If this is a RRSIG set, skip it. */
|
/* If this is a RRSIG set, skip it. */
|
||||||
@ -1226,11 +1221,6 @@ signname(dns_dbnode_t *node, bool apex, dns_name_t *name) {
|
|||||||
|
|
||||||
skip:
|
skip:
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
result = dns_rdatasetiter_next(rdsiter);
|
|
||||||
}
|
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
fatal("rdataset iteration for name '%s' failed: %s", namestr,
|
|
||||||
isc_result_totext(result));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
@ -1261,43 +1251,31 @@ active_node(dns_dbnode_t *node) {
|
|||||||
dns_rdatasetiter_t *rdsiter2 = NULL;
|
dns_rdatasetiter_t *rdsiter2 = NULL;
|
||||||
bool active = false;
|
bool active = false;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_rdataset_t rdataset;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
dns_rdatatype_t type;
|
dns_rdatatype_t type;
|
||||||
dns_rdatatype_t covers;
|
dns_rdatatype_t covers;
|
||||||
bool found;
|
bool found;
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
||||||
check_result(result, "dns_db_allrdatasets()");
|
check_result(result, "dns_db_allrdatasets()");
|
||||||
result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
if (rdataset.type != dns_rdatatype_nsec &&
|
dns_rdatatype_t t = rdataset.type;
|
||||||
rdataset.type != dns_rdatatype_nsec3 &&
|
dns_rdataset_disassociate(&rdataset);
|
||||||
rdataset.type != dns_rdatatype_rrsig)
|
|
||||||
|
if (t != dns_rdatatype_nsec && t != dns_rdatatype_nsec3 &&
|
||||||
|
t != dns_rdatatype_rrsig)
|
||||||
{
|
{
|
||||||
active = true;
|
active = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
|
||||||
if (!active) {
|
|
||||||
result = dns_rdatasetiter_next(rdsiter);
|
|
||||||
} else {
|
|
||||||
result = ISC_R_NOMORE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
fatal("rdataset iteration failed: %s",
|
|
||||||
isc_result_totext(result));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!active && nsec_datatype == dns_rdatatype_nsec) {
|
if (!active && nsec_datatype == dns_rdatatype_nsec) {
|
||||||
/*%
|
/*%
|
||||||
* The node is empty of everything but NSEC / RRSIG records.
|
* The node is empty of everything but NSEC / RRSIG records.
|
||||||
*/
|
*/
|
||||||
for (result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
result = dns_db_deleterdataset(gdb, node, gversion,
|
result = dns_db_deleterdataset(gdb, node, gversion,
|
||||||
rdataset.type,
|
rdataset.type,
|
||||||
@ -1305,10 +1283,6 @@ active_node(dns_dbnode_t *node) {
|
|||||||
check_result(result, "dns_db_deleterdataset()");
|
check_result(result, "dns_db_deleterdataset()");
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
fatal("rdataset iteration failed: %s",
|
|
||||||
isc_result_totext(result));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Delete RRSIGs for types that no longer exist.
|
* Delete RRSIGs for types that no longer exist.
|
||||||
@ -1316,10 +1290,7 @@ active_node(dns_dbnode_t *node) {
|
|||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0,
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0,
|
||||||
&rdsiter2);
|
&rdsiter2);
|
||||||
check_result(result, "dns_db_allrdatasets()");
|
check_result(result, "dns_db_allrdatasets()");
|
||||||
for (result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
type = rdataset.type;
|
type = rdataset.type;
|
||||||
covers = rdataset.covers;
|
covers = rdataset.covers;
|
||||||
@ -1342,10 +1313,7 @@ active_node(dns_dbnode_t *node) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
found = false;
|
found = false;
|
||||||
for (result = dns_rdatasetiter_first(rdsiter2);
|
DNS_RDATASETITER_FOREACH (rdsiter2) {
|
||||||
!found && result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsiter2))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter2, &rdataset);
|
dns_rdatasetiter_current(rdsiter2, &rdataset);
|
||||||
if (rdataset.type == covers) {
|
if (rdataset.type == covers) {
|
||||||
found = true;
|
found = true;
|
||||||
@ -1353,25 +1321,15 @@ active_node(dns_dbnode_t *node) {
|
|||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
fatal("rdataset iteration failed: %s",
|
|
||||||
isc_result_totext(result));
|
|
||||||
}
|
|
||||||
result = dns_db_deleterdataset(
|
result = dns_db_deleterdataset(
|
||||||
gdb, node, gversion, type, covers);
|
gdb, node, gversion, type, covers);
|
||||||
check_result(result, "dns_db_deleterdataset("
|
check_result(result, "dns_db_deleterdataset("
|
||||||
"rrsig)");
|
"rrsig)");
|
||||||
} else if (result != ISC_R_NOMORE &&
|
} else if (result != ISC_R_SUCCESS) {
|
||||||
result != ISC_R_SUCCESS)
|
|
||||||
{
|
|
||||||
fatal("rdataset iteration failed: %s",
|
fatal("rdataset iteration failed: %s",
|
||||||
isc_result_totext(result));
|
isc_result_totext(result));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
fatal("rdataset iteration failed: %s",
|
|
||||||
isc_result_totext(result));
|
|
||||||
}
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter2);
|
dns_rdatasetiter_destroy(&rdsiter2);
|
||||||
}
|
}
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
@ -1725,18 +1683,14 @@ remove_records(dns_dbnode_t *node, dns_rdatatype_t which, bool checknsec) {
|
|||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_rdatatype_t type, covers;
|
dns_rdatatype_t type, covers;
|
||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete any records of the given type at the apex.
|
* Delete any records of the given type at the apex.
|
||||||
*/
|
*/
|
||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
||||||
check_result(result, "dns_db_allrdatasets()");
|
check_result(result, "dns_db_allrdatasets()");
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
type = rdataset.type;
|
type = rdataset.type;
|
||||||
covers = rdataset.covers;
|
covers = rdataset.covers;
|
||||||
@ -1772,14 +1726,11 @@ remove_sigs(dns_dbnode_t *node, bool delegation, dns_rdatatype_t which) {
|
|||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_rdatatype_t type, covers;
|
dns_rdatatype_t type, covers;
|
||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0, &rdsiter);
|
||||||
check_result(result, "dns_db_allrdatasets()");
|
check_result(result, "dns_db_allrdatasets()");
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
type = rdataset.type;
|
type = rdataset.type;
|
||||||
covers = rdataset.covers;
|
covers = rdataset.covers;
|
||||||
@ -1816,36 +1767,28 @@ nsecify(void) {
|
|||||||
dns_dbiterator_t *dbiter = NULL;
|
dns_dbiterator_t *dbiter = NULL;
|
||||||
dns_dbnode_t *node = NULL, *nextnode = NULL;
|
dns_dbnode_t *node = NULL, *nextnode = NULL;
|
||||||
dns_fixedname_t fname, fnextname, fzonecut;
|
dns_fixedname_t fname, fnextname, fzonecut;
|
||||||
dns_name_t *name, *nextname, *zonecut;
|
dns_name_t *name = dns_fixedname_initname(&fname);
|
||||||
dns_rdataset_t rdataset;
|
dns_name_t *nextname = dns_fixedname_initname(&fnextname);
|
||||||
|
dns_name_t *zonecut = NULL;
|
||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
dns_rdatatype_t type, covers;
|
dns_rdatatype_t type, covers;
|
||||||
bool done = false;
|
bool done = false;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
uint32_t nsttl = 0;
|
uint32_t nsttl = 0;
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
name = dns_fixedname_initname(&fname);
|
|
||||||
nextname = dns_fixedname_initname(&fnextname);
|
|
||||||
zonecut = NULL;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove any NSEC3 chains.
|
* Remove any NSEC3 chains.
|
||||||
*/
|
*/
|
||||||
result = dns_db_createiterator(gdb, DNS_DB_NSEC3ONLY, &dbiter);
|
result = dns_db_createiterator(gdb, DNS_DB_NSEC3ONLY, &dbiter);
|
||||||
check_result(result, "dns_db_createiterator()");
|
check_result(result, "dns_db_createiterator()");
|
||||||
for (result = dns_dbiterator_first(dbiter); result == ISC_R_SUCCESS;
|
DNS_DBITERATOR_FOREACH (dbiter) {
|
||||||
result = dns_dbiterator_next(dbiter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
result = dns_dbiterator_current(dbiter, &node, name);
|
result = dns_dbiterator_current(dbiter, &node, name);
|
||||||
check_dns_dbiterator_current(result);
|
check_dns_dbiterator_current(result);
|
||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0,
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0,
|
||||||
&rdsiter);
|
&rdsiter);
|
||||||
check_result(result, "dns_db_allrdatasets()");
|
check_result(result, "dns_db_allrdatasets()");
|
||||||
for (result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
type = rdataset.type;
|
type = rdataset.type;
|
||||||
covers = rdataset.covers;
|
covers = rdataset.covers;
|
||||||
@ -2221,43 +2164,30 @@ cleanup_zone(void) {
|
|||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
dns_diff_t add, del;
|
dns_diff_t add, del;
|
||||||
dns_dbnode_t *node = NULL;
|
dns_dbnode_t *node = NULL;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_fixedname_t fname;
|
dns_fixedname_t fname;
|
||||||
dns_name_t *name;
|
dns_name_t *name = dns_fixedname_initname(&fname);
|
||||||
|
|
||||||
dns_diff_init(mctx, &add);
|
dns_diff_init(mctx, &add);
|
||||||
dns_diff_init(mctx, &del);
|
dns_diff_init(mctx, &del);
|
||||||
name = dns_fixedname_initname(&fname);
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
|
|
||||||
result = dns_db_createiterator(gdb, 0, &dbiter);
|
result = dns_db_createiterator(gdb, 0, &dbiter);
|
||||||
check_result(result, "dns_db_createiterator()");
|
check_result(result, "dns_db_createiterator()");
|
||||||
|
|
||||||
for (result = dns_dbiterator_first(dbiter); result == ISC_R_SUCCESS;
|
DNS_DBITERATOR_FOREACH (dbiter) {
|
||||||
result = dns_dbiterator_next(dbiter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
result = dns_dbiterator_current(dbiter, &node, name);
|
result = dns_dbiterator_current(dbiter, &node, name);
|
||||||
check_dns_dbiterator_current(result);
|
check_dns_dbiterator_current(result);
|
||||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0,
|
result = dns_db_allrdatasets(gdb, node, gversion, 0, 0,
|
||||||
&rdsiter);
|
&rdsiter);
|
||||||
check_result(result, "dns_db_allrdatasets()");
|
check_result(result, "dns_db_allrdatasets()");
|
||||||
for (result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
rrset_cleanup(name, &rdataset, &add, &del);
|
rrset_cleanup(name, &rdataset, &add, &del);
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
fatal("rdatasets iteration failed.");
|
|
||||||
}
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
dns_db_detachnode(gdb, &node);
|
dns_db_detachnode(gdb, &node);
|
||||||
}
|
}
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
fatal("zone iteration failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
result = dns_diff_applysilently(&del, gdb, gversion);
|
result = dns_diff_applysilently(&del, gdb, gversion);
|
||||||
check_result(result, "dns_diff_applysilently");
|
check_result(result, "dns_diff_applysilently");
|
||||||
@ -2432,9 +2362,7 @@ nsec3ify(unsigned int hashalg, dns_iterations_t iterations,
|
|||||||
result = dns_db_createiterator(gdb, DNS_DB_NSEC3ONLY, &dbiter);
|
result = dns_db_createiterator(gdb, DNS_DB_NSEC3ONLY, &dbiter);
|
||||||
check_result(result, "dns_db_createiterator()");
|
check_result(result, "dns_db_createiterator()");
|
||||||
|
|
||||||
for (result = dns_dbiterator_first(dbiter); result == ISC_R_SUCCESS;
|
DNS_DBITERATOR_FOREACH (dbiter) {
|
||||||
result = dns_dbiterator_next(dbiter))
|
|
||||||
{
|
|
||||||
result = dns_dbiterator_current(dbiter, &node, name);
|
result = dns_dbiterator_current(dbiter, &node, name);
|
||||||
check_dns_dbiterator_current(result);
|
check_dns_dbiterator_current(result);
|
||||||
nsec3clean(name, node, hashalg, iterations, salt, salt_len,
|
nsec3clean(name, node, hashalg, iterations, salt, salt_len,
|
||||||
|
@ -377,11 +377,8 @@ clearnode(dns_db_t *db, dns_dbnode_t *node) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_rdatasetiter_first(iter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (iter) {
|
||||||
result = dns_rdatasetiter_next(iter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
|
|
||||||
dns_rdatasetiter_current(iter, &rdataset);
|
dns_rdatasetiter_current(iter, &rdataset);
|
||||||
result = dns_db_deleterdataset(db, node, NULL, rdataset.type,
|
result = dns_db_deleterdataset(db, node, NULL, rdataset.type,
|
||||||
@ -392,10 +389,6 @@ clearnode(dns_db_t *db, dns_dbnode_t *node) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
dns_rdatasetiter_destroy(&iter);
|
dns_rdatasetiter_destroy(&iter);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2384,8 +2384,7 @@ dns__catz_update_cb(void *data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
dns_rdataset_init(&rdataset);
|
||||||
result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2395,7 +2394,8 @@ dns__catz_update_cb(void *data) {
|
|||||||
* and produce an unnecessary warning message.
|
* and produce an unnecessary warning message.
|
||||||
*/
|
*/
|
||||||
if (!catz_rdatatype_is_processable(rdataset.type)) {
|
if (!catz_rdatatype_is_processable(rdataset.type)) {
|
||||||
goto next;
|
dns_rdataset_disassociate(&rdataset);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2427,9 +2427,8 @@ dns__catz_update_cb(void *data) {
|
|||||||
cname, classbuf, typebuf,
|
cname, classbuf, typebuf,
|
||||||
isc_result_totext(result));
|
isc_result_totext(result));
|
||||||
}
|
}
|
||||||
next:
|
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
result = dns_rdatasetiter_next(rdsiter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
|
@ -22,10 +22,6 @@
|
|||||||
|
|
||||||
void
|
void
|
||||||
dns__dbiterator_destroy(dns_dbiterator_t **iteratorp DNS__DB_FLARG) {
|
dns__dbiterator_destroy(dns_dbiterator_t **iteratorp DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Destroy '*iteratorp'.
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(iteratorp != NULL);
|
REQUIRE(iteratorp != NULL);
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(*iteratorp));
|
REQUIRE(DNS_DBITERATOR_VALID(*iteratorp));
|
||||||
|
|
||||||
@ -36,33 +32,27 @@ dns__dbiterator_destroy(dns_dbiterator_t **iteratorp DNS__DB_FLARG) {
|
|||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__dbiterator_first(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
dns__dbiterator_first(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Move the node cursor to the first node in the database (if any).
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->first(iterator DNS__DB_FLARG_PASS);
|
isc_result_t result =
|
||||||
|
iterator->methods->first(iterator DNS__DB_FLARG_PASS);
|
||||||
|
ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__dbiterator_last(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
dns__dbiterator_last(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Move the node cursor to the first node in the database (if any).
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->last(iterator DNS__DB_FLARG_PASS);
|
isc_result_t result =
|
||||||
|
iterator->methods->last(iterator DNS__DB_FLARG_PASS);
|
||||||
|
ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__dbiterator_seek(dns_dbiterator_t *iterator,
|
dns__dbiterator_seek(dns_dbiterator_t *iterator,
|
||||||
const dns_name_t *name DNS__DB_FLARG) {
|
const dns_name_t *name DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Move the node cursor to the node with name 'name'.
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->seek(iterator, name DNS__DB_FLARG_PASS);
|
return iterator->methods->seek(iterator, name DNS__DB_FLARG_PASS);
|
||||||
@ -70,33 +60,27 @@ dns__dbiterator_seek(dns_dbiterator_t *iterator,
|
|||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__dbiterator_prev(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
dns__dbiterator_prev(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Move the node cursor to the previous node in the database (if any).
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->prev(iterator DNS__DB_FLARG_PASS);
|
isc_result_t result =
|
||||||
|
iterator->methods->prev(iterator DNS__DB_FLARG_PASS);
|
||||||
|
ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__dbiterator_next(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
dns__dbiterator_next(dns_dbiterator_t *iterator DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Move the node cursor to the next node in the database (if any).
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->next(iterator DNS__DB_FLARG_PASS);
|
isc_result_t result =
|
||||||
|
iterator->methods->next(iterator DNS__DB_FLARG_PASS);
|
||||||
|
ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
|
dns__dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
|
||||||
dns_name_t *name DNS__DB_FLARG) {
|
dns_name_t *name DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Return the current node.
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
REQUIRE(nodep != NULL && *nodep == NULL);
|
REQUIRE(nodep != NULL && *nodep == NULL);
|
||||||
REQUIRE(name == NULL || dns_name_hasbuffer(name));
|
REQUIRE(name == NULL || dns_name_hasbuffer(name));
|
||||||
@ -107,10 +91,6 @@ dns__dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
|
|||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns_dbiterator_pause(dns_dbiterator_t *iterator) {
|
dns_dbiterator_pause(dns_dbiterator_t *iterator) {
|
||||||
/*
|
|
||||||
* Pause iteration.
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->pause(iterator);
|
return iterator->methods->pause(iterator);
|
||||||
@ -118,10 +98,6 @@ dns_dbiterator_pause(dns_dbiterator_t *iterator) {
|
|||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns_dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) {
|
dns_dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) {
|
||||||
/*
|
|
||||||
* Return the origin to which returned node names are relative.
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
REQUIRE(DNS_DBITERATOR_VALID(iterator));
|
||||||
REQUIRE(iterator->relative_names);
|
REQUIRE(iterator->relative_names);
|
||||||
REQUIRE(dns_name_hasbuffer(name));
|
REQUIRE(dns_name_hasbuffer(name));
|
||||||
|
@ -99,6 +99,22 @@ struct dns_dbiterator {
|
|||||||
bool relative_names;
|
bool relative_names;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
/*
|
||||||
|
* This is a hack to build a unique variable name to
|
||||||
|
* replace 'res' below. (Two layers of macro indirection are
|
||||||
|
* needed to make the line number be part of the variable
|
||||||
|
* name; otherwise it would just be "x__LINE__".)
|
||||||
|
*/
|
||||||
|
#define DNS__DBITERATOR_CONNECT(x,y) x##y
|
||||||
|
#define DNS__DBITERATOR_CONCAT(x,y) DNS__DBITERATOR_CONNECT(x,y)
|
||||||
|
#define DNS_DBITERATOR_FOREACH_RES(rds, res) \
|
||||||
|
for (isc_result_t res = dns_dbiterator_first((rds)); \
|
||||||
|
res == ISC_R_SUCCESS; res = dns_dbiterator_next((rds)))
|
||||||
|
#define DNS_DBITERATOR_FOREACH(rds) \
|
||||||
|
DNS_DBITERATOR_FOREACH_RES(rds, DNS__DBITERATOR_CONCAT(x, __LINE__))
|
||||||
|
/* clang-format on */
|
||||||
|
|
||||||
#define dns_dbiterator_destroy(iteratorp) \
|
#define dns_dbiterator_destroy(iteratorp) \
|
||||||
dns__dbiterator_destroy(iteratorp DNS__DB_FILELINE)
|
dns__dbiterator_destroy(iteratorp DNS__DB_FILELINE)
|
||||||
void
|
void
|
||||||
|
@ -94,6 +94,22 @@ struct dns_rdatasetiter {
|
|||||||
unsigned int options;
|
unsigned int options;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
/*
|
||||||
|
* This is a hack to build a unique variable name to
|
||||||
|
* replace 'res' below. (Two layers of macro indirection are
|
||||||
|
* needed to make the line number be part of the variable
|
||||||
|
* name; otherwise it would just be "x__LINE__".)
|
||||||
|
*/
|
||||||
|
#define DNS__RDATASETITER_CONNECT(x,y) x##y
|
||||||
|
#define DNS__RDATASETITER_CONCAT(x,y) DNS__RDATASETITER_CONNECT(x,y)
|
||||||
|
#define DNS_RDATASETITER_FOREACH_RES(rds, res) \
|
||||||
|
for (isc_result_t res = dns_rdatasetiter_first((rds)); \
|
||||||
|
res == ISC_R_SUCCESS; res = dns_rdatasetiter_next((rds)))
|
||||||
|
#define DNS_RDATASETITER_FOREACH(rds) \
|
||||||
|
DNS_RDATASETITER_FOREACH_RES(rds, DNS__RDATASETITER_CONCAT(x, __LINE__))
|
||||||
|
/* clang-format on */
|
||||||
|
|
||||||
#define dns_rdatasetiter_destroy(iteratorp) \
|
#define dns_rdatasetiter_destroy(iteratorp) \
|
||||||
dns__rdatasetiter_destroy(iteratorp DNS__DB_FILELINE)
|
dns__rdatasetiter_destroy(iteratorp DNS__DB_FILELINE)
|
||||||
void
|
void
|
||||||
|
@ -2140,11 +2140,8 @@ get_name_diff(dns_db_t *db, dns_dbversion_t *ver, isc_stdtime_t now,
|
|||||||
goto cleanup_node;
|
goto cleanup_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
|
|
||||||
DNS_RDATASET_FOREACH (&rdataset) {
|
DNS_RDATASET_FOREACH (&rdataset) {
|
||||||
@ -2156,15 +2153,10 @@ get_name_diff(dns_db_t *db, dns_dbversion_t *ver, isc_stdtime_t now,
|
|||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
if (result != ISC_R_NOMORE) {
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
goto cleanup_iterator;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = ISC_R_SUCCESS;
|
result = ISC_R_SUCCESS;
|
||||||
|
|
||||||
cleanup_iterator:
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
|
||||||
|
|
||||||
cleanup_node:
|
cleanup_node:
|
||||||
dns_db_detachnode(db, &node);
|
dns_db_detachnode(db, &node);
|
||||||
|
|
||||||
|
@ -1312,17 +1312,13 @@ static isc_result_t
|
|||||||
dump_rdatasets_raw(isc_mem_t *mctx, const dns_name_t *owner_name,
|
dump_rdatasets_raw(isc_mem_t *mctx, const dns_name_t *owner_name,
|
||||||
dns_rdatasetiter_t *rdsiter, dns_totext_ctx_t *ctx,
|
dns_rdatasetiter_t *rdsiter, dns_totext_ctx_t *ctx,
|
||||||
isc_buffer_t *buffer, FILE *f) {
|
isc_buffer_t *buffer, FILE *f) {
|
||||||
isc_result_t result;
|
isc_result_t result = ISC_R_SUCCESS;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_fixedname_t fixed;
|
dns_fixedname_t fixed;
|
||||||
dns_name_t *name;
|
dns_name_t *name = dns_fixedname_initname(&fixed);
|
||||||
|
|
||||||
name = dns_fixedname_initname(&fixed);
|
|
||||||
dns_name_copy(owner_name, name);
|
dns_name_copy(owner_name, name);
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
|
|
||||||
dns_rdataset_getownercase(&rdataset, name);
|
dns_rdataset_getownercase(&rdataset, name);
|
||||||
@ -1341,10 +1337,6 @@ dump_rdatasets_raw(isc_mem_t *mctx, const dns_name_t *owner_name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1716,12 +1708,7 @@ dumptostream(dns_dumpctx_t *dctx) {
|
|||||||
|
|
||||||
CHECK(writeheader(dctx));
|
CHECK(writeheader(dctx));
|
||||||
|
|
||||||
result = dns_dbiterator_first(dctx->dbiter);
|
DNS_DBITERATOR_FOREACH (dctx->dbiter) {
|
||||||
if (result != ISC_R_SUCCESS && result != ISC_R_NOMORE) {
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
dns_dbnode_t *node = NULL;
|
dns_dbnode_t *node = NULL;
|
||||||
|
|
||||||
@ -1759,7 +1746,6 @@ dumptostream(dns_dumpctx_t *dctx) {
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
dns_db_detachnode(dctx->db, &node);
|
dns_db_detachnode(dctx->db, &node);
|
||||||
result = dns_dbiterator_next(dctx->dbiter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == ISC_R_NOMORE) {
|
if (result == ISC_R_NOMORE) {
|
||||||
|
@ -96,10 +96,8 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
const dns_name_t *target, unsigned char *buffer,
|
const dns_name_t *target, unsigned char *buffer,
|
||||||
dns_rdata_t *rdata) {
|
dns_rdata_t *rdata) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
isc_region_t r;
|
isc_region_t r;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
unsigned char *nsec_bits, *bm;
|
unsigned char *nsec_bits, *bm;
|
||||||
unsigned int max_type;
|
unsigned int max_type;
|
||||||
dns_rdatasetiter_t *rdsiter;
|
dns_rdatasetiter_t *rdsiter;
|
||||||
@ -119,15 +117,13 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
dns_nsec_setbit(bm, dns_rdatatype_rrsig, 1);
|
dns_nsec_setbit(bm, dns_rdatatype_rrsig, 1);
|
||||||
dns_nsec_setbit(bm, dns_rdatatype_nsec, 1);
|
dns_nsec_setbit(bm, dns_rdatatype_nsec, 1);
|
||||||
max_type = dns_rdatatype_nsec;
|
max_type = dns_rdatatype_nsec;
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
rdsiter = NULL;
|
rdsiter = NULL;
|
||||||
result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter);
|
result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
if (rdataset.type != dns_rdatatype_nsec &&
|
if (rdataset.type != dns_rdatatype_nsec &&
|
||||||
rdataset.type != dns_rdatatype_nsec3 &&
|
rdataset.type != dns_rdatatype_nsec3 &&
|
||||||
@ -140,6 +136,7 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At zone cuts, deny the existence of glue in the parent zone.
|
* At zone cuts, deny the existence of glue in the parent zone.
|
||||||
@ -156,11 +153,6 @@ dns_nsec_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsec_bits += dns_nsec_compressbitmap(nsec_bits, bm, max_type);
|
nsec_bits += dns_nsec_compressbitmap(nsec_bits, bm, max_type);
|
||||||
|
|
||||||
r.length = (unsigned int)(nsec_bits - r.base);
|
r.length = (unsigned int)(nsec_bits - r.base);
|
||||||
|
@ -61,13 +61,11 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
size_t hash_length, unsigned char *buffer,
|
size_t hash_length, unsigned char *buffer,
|
||||||
dns_rdata_t *rdata) {
|
dns_rdata_t *rdata) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
isc_region_t r;
|
isc_region_t r;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
bool found;
|
bool found;
|
||||||
bool found_ns;
|
bool found_ns;
|
||||||
bool need_rrsig;
|
bool need_rrsig;
|
||||||
|
|
||||||
unsigned char *nsec_bits, *bm;
|
unsigned char *nsec_bits, *bm;
|
||||||
unsigned int max_type;
|
unsigned int max_type;
|
||||||
dns_rdatasetiter_t *rdsiter;
|
dns_rdatasetiter_t *rdsiter;
|
||||||
@ -116,16 +114,14 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
if (node == NULL) {
|
if (node == NULL) {
|
||||||
goto collapse_bitmap;
|
goto collapse_bitmap;
|
||||||
}
|
}
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
rdsiter = NULL;
|
rdsiter = NULL;
|
||||||
result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter);
|
result = dns_db_allrdatasets(db, node, version, 0, 0, &rdsiter);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
found = found_ns = need_rrsig = false;
|
found = found_ns = need_rrsig = false;
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
if (rdataset.type != dns_rdatatype_nsec &&
|
if (rdataset.type != dns_rdatatype_nsec &&
|
||||||
rdataset.type != dns_rdatatype_nsec3 &&
|
rdataset.type != dns_rdatatype_nsec3 &&
|
||||||
@ -156,6 +152,8 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
|
|
||||||
if ((found && !found_ns) || need_rrsig) {
|
if ((found && !found_ns) || need_rrsig) {
|
||||||
if (dns_rdatatype_rrsig > max_type) {
|
if (dns_rdatatype_rrsig > max_type) {
|
||||||
max_type = dns_rdatatype_rrsig;
|
max_type = dns_rdatatype_rrsig;
|
||||||
@ -178,11 +176,6 @@ dns_nsec3_buildrdata(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
collapse_bitmap:
|
collapse_bitmap:
|
||||||
nsec_bits += dns_nsec_compressbitmap(nsec_bits, bm, max_type);
|
nsec_bits += dns_nsec_compressbitmap(nsec_bits, bm, max_type);
|
||||||
r.length = (unsigned int)(nsec_bits - r.base);
|
r.length = (unsigned int)(nsec_bits - r.base);
|
||||||
|
@ -22,10 +22,6 @@
|
|||||||
|
|
||||||
void
|
void
|
||||||
dns__rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) {
|
dns__rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Destroy '*iteratorp'.
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(iteratorp != NULL);
|
REQUIRE(iteratorp != NULL);
|
||||||
REQUIRE(DNS_RDATASETITER_VALID(*iteratorp));
|
REQUIRE(DNS_RDATASETITER_VALID(*iteratorp));
|
||||||
|
|
||||||
@ -36,33 +32,27 @@ dns__rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) {
|
|||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__rdatasetiter_first(dns_rdatasetiter_t *iterator DNS__DB_FLARG) {
|
dns__rdatasetiter_first(dns_rdatasetiter_t *iterator DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Move the rdataset cursor to the first rdataset at the node (if any).
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_RDATASETITER_VALID(iterator));
|
REQUIRE(DNS_RDATASETITER_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->first(iterator DNS__DB_FLARG_PASS);
|
isc_result_t result =
|
||||||
|
iterator->methods->first(iterator DNS__DB_FLARG_PASS);
|
||||||
|
ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns__rdatasetiter_next(dns_rdatasetiter_t *iterator DNS__DB_FLARG) {
|
dns__rdatasetiter_next(dns_rdatasetiter_t *iterator DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Move the rdataset cursor to the next rdataset at the node (if any).
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_RDATASETITER_VALID(iterator));
|
REQUIRE(DNS_RDATASETITER_VALID(iterator));
|
||||||
|
|
||||||
return iterator->methods->next(iterator DNS__DB_FLARG_PASS);
|
isc_result_t result =
|
||||||
|
iterator->methods->next(iterator DNS__DB_FLARG_PASS);
|
||||||
|
ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dns__rdatasetiter_current(dns_rdatasetiter_t *iterator,
|
dns__rdatasetiter_current(dns_rdatasetiter_t *iterator,
|
||||||
dns_rdataset_t *rdataset DNS__DB_FLARG) {
|
dns_rdataset_t *rdataset DNS__DB_FLARG) {
|
||||||
/*
|
|
||||||
* Return the current rdataset.
|
|
||||||
*/
|
|
||||||
|
|
||||||
REQUIRE(DNS_RDATASETITER_VALID(iterator));
|
REQUIRE(DNS_RDATASETITER_VALID(iterator));
|
||||||
REQUIRE(DNS_RDATASET_VALID(rdataset));
|
REQUIRE(DNS_RDATASET_VALID(rdataset));
|
||||||
REQUIRE(!dns_rdataset_isassociated(rdataset));
|
REQUIRE(!dns_rdataset_isassociated(rdataset));
|
||||||
|
@ -125,41 +125,27 @@ in_rootns(dns_rdataset_t *rootns, dns_name_t *name) {
|
|||||||
static isc_result_t
|
static isc_result_t
|
||||||
check_node(dns_rdataset_t *rootns, dns_name_t *name,
|
check_node(dns_rdataset_t *rootns, dns_name_t *name,
|
||||||
dns_rdatasetiter_t *rdsiter) {
|
dns_rdatasetiter_t *rdsiter) {
|
||||||
isc_result_t result;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
dns_rdataset_t rdataset;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
result = dns_rdatasetiter_first(rdsiter);
|
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
switch (rdataset.type) {
|
dns_rdatatype_t type = rdataset.type;
|
||||||
|
dns_rdataset_disassociate(&rdataset);
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
case dns_rdatatype_a:
|
case dns_rdatatype_a:
|
||||||
case dns_rdatatype_aaaa:
|
case dns_rdatatype_aaaa:
|
||||||
result = in_rootns(rootns, name);
|
return in_rootns(rootns, name);
|
||||||
if (result != ISC_R_SUCCESS) {
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case dns_rdatatype_ns:
|
case dns_rdatatype_ns:
|
||||||
if (dns_name_compare(name, dns_rootname) == 0) {
|
if (dns_name_compare(name, dns_rootname) == 0) {
|
||||||
break;
|
return ISC_R_SUCCESS;
|
||||||
}
|
}
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
default:
|
default:
|
||||||
result = ISC_R_FAILURE;
|
return ISC_R_FAILURE;
|
||||||
goto cleanup;
|
|
||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
|
||||||
result = dns_rdatasetiter_next(rdsiter);
|
|
||||||
}
|
}
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
return ISC_R_SUCCESS;
|
||||||
}
|
|
||||||
cleanup:
|
|
||||||
if (dns_rdataset_isassociated(&rdataset)) {
|
|
||||||
dns_rdataset_disassociate(&rdataset);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static isc_result_t
|
static isc_result_t
|
||||||
@ -182,8 +168,7 @@ check_hints(dns_db_t *db) {
|
|||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
result = dns_dbiterator_first(dbiter);
|
DNS_DBITERATOR_FOREACH (dbiter) {
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
result = dns_dbiterator_current(dbiter, &node, name);
|
result = dns_dbiterator_current(dbiter, &node, name);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -198,10 +183,6 @@ check_hints(dns_db_t *db) {
|
|||||||
}
|
}
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
dns_db_detachnode(db, &node);
|
dns_db_detachnode(db, &node);
|
||||||
result = dns_dbiterator_next(dbiter);
|
|
||||||
}
|
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
@ -341,10 +341,9 @@ static isc_result_t
|
|||||||
foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
|
foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
|
||||||
rrset_func *action, void *action_data) {
|
rrset_func *action, void *action_data) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_dbnode_t *node;
|
dns_dbnode_t *node = NULL;
|
||||||
dns_rdatasetiter_t *iter;
|
dns_rdatasetiter_t *iter = NULL;
|
||||||
|
|
||||||
node = NULL;
|
|
||||||
result = dns_db_findnode(db, name, false, &node);
|
result = dns_db_findnode(db, name, false, &node);
|
||||||
if (result == ISC_R_NOTFOUND) {
|
if (result == ISC_R_NOTFOUND) {
|
||||||
return ISC_R_SUCCESS;
|
return ISC_R_SUCCESS;
|
||||||
@ -353,32 +352,23 @@ foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
iter = NULL;
|
|
||||||
result = dns_db_allrdatasets(db, node, ver, 0, (isc_stdtime_t)0, &iter);
|
result = dns_db_allrdatasets(db, node, ver, 0, (isc_stdtime_t)0, &iter);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup_node;
|
goto cleanup_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_rdatasetiter_first(iter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (iter) {
|
||||||
result = dns_rdatasetiter_next(iter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
dns_rdatasetiter_current(iter, &rdataset);
|
dns_rdatasetiter_current(iter, &rdataset);
|
||||||
|
|
||||||
result = (*action)(action_data, &rdataset);
|
result = (*action)(action_data, &rdataset);
|
||||||
|
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup_iterator;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup_iterator:
|
|
||||||
dns_rdatasetiter_destroy(&iter);
|
dns_rdatasetiter_destroy(&iter);
|
||||||
|
|
||||||
cleanup_node:
|
cleanup_node:
|
||||||
@ -1379,14 +1369,11 @@ add_exposed_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
|
|||||||
goto cleanup_node;
|
goto cleanup_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_rdatasetiter_first(iter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (iter) {
|
||||||
result = dns_rdatasetiter_next(iter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_rdatatype_t type;
|
dns_rdatatype_t type;
|
||||||
bool flag;
|
bool flag;
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
dns_rdatasetiter_current(iter, &rdataset);
|
dns_rdatasetiter_current(iter, &rdataset);
|
||||||
type = rdataset.type;
|
type = rdataset.type;
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
@ -1403,7 +1390,7 @@ add_exposed_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
|
|||||||
result = rrset_exists(db, ver, name, dns_rdatatype_rrsig, type,
|
result = rrset_exists(db, ver, name, dns_rdatatype_rrsig, type,
|
||||||
&flag);
|
&flag);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup_iterator;
|
break;
|
||||||
}
|
}
|
||||||
if (flag) {
|
if (flag) {
|
||||||
continue;
|
continue;
|
||||||
@ -1411,15 +1398,10 @@ add_exposed_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
|
|||||||
result = add_sigs(log, zone, db, ver, name, type, diff, keys,
|
result = add_sigs(log, zone, db, ver, name, type, diff, keys,
|
||||||
nkeys, now, inception, expire);
|
nkeys, now, inception, expire);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup_iterator;
|
break;
|
||||||
}
|
}
|
||||||
(*sigs)++;
|
(*sigs)++;
|
||||||
}
|
}
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup_iterator:
|
|
||||||
dns_rdatasetiter_destroy(&iter);
|
dns_rdatasetiter_destroy(&iter);
|
||||||
|
|
||||||
cleanup_node:
|
cleanup_node:
|
||||||
|
121
lib/dns/zone.c
121
lib/dns/zone.c
@ -3143,23 +3143,17 @@ zone_check_dup(dns_zone_t *zone, dns_db_t *db) {
|
|||||||
dns_dbiterator_t *dbiterator = NULL;
|
dns_dbiterator_t *dbiterator = NULL;
|
||||||
dns_dbnode_t *node = NULL;
|
dns_dbnode_t *node = NULL;
|
||||||
dns_fixedname_t fixed;
|
dns_fixedname_t fixed;
|
||||||
dns_name_t *name;
|
dns_name_t *name = dns_fixedname_initname(&fixed);
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_rdatasetiter_t *rdsit = NULL;
|
dns_rdatasetiter_t *rdsit = NULL;
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
|
||||||
name = dns_fixedname_initname(&fixed);
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
|
|
||||||
result = dns_db_createiterator(db, 0, &dbiterator);
|
result = dns_db_createiterator(db, 0, &dbiterator);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_dbiterator_first(dbiterator); result == ISC_R_SUCCESS;
|
DNS_DBITERATOR_FOREACH (dbiterator) {
|
||||||
result = dns_dbiterator_next(dbiterator))
|
|
||||||
{
|
|
||||||
result = dns_dbiterator_current(dbiterator, &node, name);
|
result = dns_dbiterator_current(dbiterator, &node, name);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
continue;
|
continue;
|
||||||
@ -3170,10 +3164,8 @@ zone_check_dup(dns_zone_t *zone, dns_db_t *db) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_rdatasetiter_first(rdsit);
|
DNS_RDATASETITER_FOREACH (rdsit) {
|
||||||
result == ISC_R_SUCCESS;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
result = dns_rdatasetiter_next(rdsit))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsit, &rdataset);
|
dns_rdatasetiter_current(rdsit, &rdataset);
|
||||||
if (!zone_rrset_check_dup(zone, name, &rdataset)) {
|
if (!zone_rrset_check_dup(zone, name, &rdataset)) {
|
||||||
ok = false;
|
ok = false;
|
||||||
@ -3291,8 +3283,7 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = dns_dbiterator_first(dbiterator);
|
DNS_DBITERATOR_FOREACH (dbiterator) {
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
result = dns_dbiterator_current(dbiterator, &node, name);
|
result = dns_dbiterator_current(dbiterator, &node, name);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -3478,7 +3469,6 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) {
|
|||||||
|
|
||||||
next:
|
next:
|
||||||
dns_db_detachnode(db, &node);
|
dns_db_detachnode(db, &node);
|
||||||
result = dns_dbiterator_next(dbiterator);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_a) {
|
if (has_a) {
|
||||||
@ -7579,7 +7569,6 @@ check_if_bottom_of_zone(dns_db_t *db, dns_dbnode_t *node,
|
|||||||
dns_dbversion_t *version, bool *is_bottom_of_zone) {
|
dns_dbversion_t *version, bool *is_bottom_of_zone) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_rdatasetiter_t *iterator = NULL;
|
dns_rdatasetiter_t *iterator = NULL;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
bool seen_soa = false, seen_ns = false, seen_dname = false;
|
bool seen_soa = false, seen_ns = false, seen_dname = false;
|
||||||
|
|
||||||
REQUIRE(is_bottom_of_zone != NULL);
|
REQUIRE(is_bottom_of_zone != NULL);
|
||||||
@ -7592,10 +7581,8 @@ check_if_bottom_of_zone(dns_db_t *db, dns_dbnode_t *node,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
DNS_RDATASETITER_FOREACH (iterator) {
|
||||||
for (result = dns_rdatasetiter_first(iterator); result == ISC_R_SUCCESS;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
result = dns_rdatasetiter_next(iterator))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(iterator, &rdataset);
|
dns_rdatasetiter_current(iterator, &rdataset);
|
||||||
switch (rdataset.type) {
|
switch (rdataset.type) {
|
||||||
case dns_rdatatype_soa:
|
case dns_rdatatype_soa:
|
||||||
@ -7610,18 +7597,13 @@ check_if_bottom_of_zone(dns_db_t *db, dns_dbnode_t *node,
|
|||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
goto failure;
|
|
||||||
}
|
|
||||||
if ((seen_ns && !seen_soa) || seen_dname) {
|
if ((seen_ns && !seen_soa) || seen_dname) {
|
||||||
*is_bottom_of_zone = true;
|
*is_bottom_of_zone = true;
|
||||||
}
|
}
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
|
|
||||||
failure:
|
|
||||||
dns_rdatasetiter_destroy(&iterator);
|
dns_rdatasetiter_destroy(&iterator);
|
||||||
|
return ISC_R_SUCCESS;
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static isc_result_t
|
static isc_result_t
|
||||||
@ -7633,7 +7615,7 @@ sign_a_node(dns_db_t *db, dns_zone_t *zone, dns_name_t *name,
|
|||||||
dns_diff_t *diff, int32_t *signatures, isc_mem_t *mctx) {
|
dns_diff_t *diff, int32_t *signatures, isc_mem_t *mctx) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_rdatasetiter_t *iterator = NULL;
|
dns_rdatasetiter_t *iterator = NULL;
|
||||||
dns_rdataset_t rdataset;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
dns_rdata_t rdata = DNS_RDATA_INIT;
|
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||||
dns_stats_t *dnssecsignstats;
|
dns_stats_t *dnssecsignstats;
|
||||||
bool offlineksk = false;
|
bool offlineksk = false;
|
||||||
@ -7653,12 +7635,9 @@ sign_a_node(dns_db_t *db, dns_zone_t *zone, dns_name_t *name,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
isc_buffer_init(&buffer, data, sizeof(data));
|
isc_buffer_init(&buffer, data, sizeof(data));
|
||||||
seen_rr = seen_soa = seen_ns = seen_nsec = seen_nsec3 = seen_ds = false;
|
seen_rr = seen_soa = seen_ns = seen_nsec = seen_nsec3 = seen_ds = false;
|
||||||
for (result = dns_rdatasetiter_first(iterator); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (iterator) {
|
||||||
result = dns_rdatasetiter_next(iterator))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(iterator, &rdataset);
|
dns_rdatasetiter_current(iterator, &rdataset);
|
||||||
if (rdataset.type == dns_rdatatype_soa) {
|
if (rdataset.type == dns_rdatatype_soa) {
|
||||||
seen_soa = true;
|
seen_soa = true;
|
||||||
@ -7676,9 +7655,7 @@ sign_a_node(dns_db_t *db, dns_zone_t *zone, dns_name_t *name,
|
|||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
}
|
}
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
goto failure;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Going from insecure to NSEC3.
|
* Going from insecure to NSEC3.
|
||||||
* Don't generate NSEC3 records for NSEC3 records.
|
* Don't generate NSEC3 records for NSEC3 records.
|
||||||
@ -7704,15 +7681,19 @@ sign_a_node(dns_db_t *db, dns_zone_t *zone, dns_name_t *name,
|
|||||||
(*signatures)--;
|
(*signatures)--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result = dns_rdatasetiter_first(iterator);
|
|
||||||
while (result == ISC_R_SUCCESS) {
|
DNS_RDATASETITER_FOREACH (iterator) {
|
||||||
isc_stdtime_t when;
|
isc_stdtime_t when;
|
||||||
|
|
||||||
|
if (dns_rdataset_isassociated(&rdataset)) {
|
||||||
|
dns_rdataset_disassociate(&rdataset);
|
||||||
|
}
|
||||||
|
|
||||||
dns_rdatasetiter_current(iterator, &rdataset);
|
dns_rdatasetiter_current(iterator, &rdataset);
|
||||||
if (rdataset.type == dns_rdatatype_soa ||
|
if (rdataset.type == dns_rdatatype_soa ||
|
||||||
rdataset.type == dns_rdatatype_rrsig)
|
rdataset.type == dns_rdatatype_rrsig)
|
||||||
{
|
{
|
||||||
goto next_rdataset;
|
continue;
|
||||||
}
|
}
|
||||||
if (dns_rdatatype_iskeymaterial(rdataset.type)) {
|
if (dns_rdatatype_iskeymaterial(rdataset.type)) {
|
||||||
/*
|
/*
|
||||||
@ -7722,28 +7703,28 @@ sign_a_node(dns_db_t *db, dns_zone_t *zone, dns_name_t *name,
|
|||||||
* which would only include KSK's.)
|
* which would only include KSK's.)
|
||||||
*/
|
*/
|
||||||
if (!is_ksk && both) {
|
if (!is_ksk && both) {
|
||||||
goto next_rdataset;
|
continue;
|
||||||
}
|
}
|
||||||
} else if (!is_zsk && both) {
|
} else if (!is_zsk && both) {
|
||||||
goto next_rdataset;
|
continue;
|
||||||
} else if (is_zsk &&
|
} else if (is_zsk &&
|
||||||
!dst_key_is_signing(key, DST_BOOL_ZSK, now, &when))
|
!dst_key_is_signing(key, DST_BOOL_ZSK, now, &when))
|
||||||
{
|
{
|
||||||
/* Only applies to dnssec-policy. */
|
/* Only applies to dnssec-policy. */
|
||||||
if (zone->kasp != NULL) {
|
if (zone->kasp != NULL) {
|
||||||
goto next_rdataset;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seen_ns && !seen_soa && rdataset.type != dns_rdatatype_ds &&
|
if (seen_ns && !seen_soa && rdataset.type != dns_rdatatype_ds &&
|
||||||
rdataset.type != dns_rdatatype_nsec)
|
rdataset.type != dns_rdatatype_nsec)
|
||||||
{
|
{
|
||||||
goto next_rdataset;
|
continue;
|
||||||
}
|
}
|
||||||
if (signed_with_good_key(zone, db, node, version, rdataset.type,
|
if (signed_with_good_key(zone, db, node, version, rdataset.type,
|
||||||
key))
|
key))
|
||||||
{
|
{
|
||||||
goto next_rdataset;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate the signature, creating a RRSIG RDATA. */
|
/* Calculate the signature, creating a RRSIG RDATA. */
|
||||||
@ -7781,13 +7762,8 @@ sign_a_node(dns_db_t *db, dns_zone_t *zone, dns_name_t *name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
(*signatures)--;
|
(*signatures)--;
|
||||||
next_rdataset:
|
|
||||||
dns_rdataset_disassociate(&rdataset);
|
|
||||||
result = dns_rdatasetiter_next(iterator);
|
|
||||||
}
|
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
failure:
|
failure:
|
||||||
if (dns_rdataset_isassociated(&rdataset)) {
|
if (dns_rdataset_isassociated(&rdataset)) {
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
@ -8401,7 +8377,6 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||||||
dns_fixedname_t fixed;
|
dns_fixedname_t fixed;
|
||||||
dns_fixedname_t nextfixed;
|
dns_fixedname_t nextfixed;
|
||||||
dns_name_t *name = NULL, *nextname = NULL;
|
dns_name_t *name = NULL, *nextname = NULL;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_nsec3chain_t *nsec3chain = NULL;
|
dns_nsec3chain_t *nsec3chain = NULL;
|
||||||
dns_nsec3chainlist_t cleanup;
|
dns_nsec3chainlist_t cleanup;
|
||||||
dst_key_t *zone_keys[DNS_MAXZONEKEYS];
|
dst_key_t *zone_keys[DNS_MAXZONEKEYS];
|
||||||
@ -8423,7 +8398,6 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||||||
|
|
||||||
ENTER;
|
ENTER;
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
name = dns_fixedname_initname(&fixed);
|
name = dns_fixedname_initname(&fixed);
|
||||||
nextname = dns_fixedname_initname(&nextfixed);
|
nextname = dns_fixedname_initname(&nextfixed);
|
||||||
dns_diff_init(zone->mctx, ¶m_diff);
|
dns_diff_init(zone->mctx, ¶m_diff);
|
||||||
@ -8596,10 +8570,8 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
seen_soa = seen_ns = seen_dname = seen_ds = seen_nsec = false;
|
seen_soa = seen_ns = seen_dname = seen_ds = seen_nsec = false;
|
||||||
for (result = dns_rdatasetiter_first(iterator);
|
DNS_RDATASETITER_FOREACH (iterator) {
|
||||||
result == ISC_R_SUCCESS;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
result = dns_rdatasetiter_next(iterator))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(iterator, &rdataset);
|
dns_rdatasetiter_current(iterator, &rdataset);
|
||||||
INSIST(rdataset.type != dns_rdatatype_nsec3);
|
INSIST(rdataset.type != dns_rdatatype_nsec3);
|
||||||
if (rdataset.type == dns_rdatatype_soa) {
|
if (rdataset.type == dns_rdatatype_soa) {
|
||||||
@ -8862,10 +8834,8 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||||||
|
|
||||||
seen_soa = seen_ns = seen_dname = seen_nsec3 = seen_nsec =
|
seen_soa = seen_ns = seen_dname = seen_nsec3 = seen_nsec =
|
||||||
seen_rr = false;
|
seen_rr = false;
|
||||||
for (result = dns_rdatasetiter_first(iterator);
|
DNS_RDATASETITER_FOREACH (iterator) {
|
||||||
result == ISC_R_SUCCESS;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
result = dns_rdatasetiter_next(iterator))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(iterator, &rdataset);
|
dns_rdatasetiter_current(iterator, &rdataset);
|
||||||
if (rdataset.type == dns_rdatatype_soa) {
|
if (rdataset.type == dns_rdatatype_soa) {
|
||||||
seen_soa = true;
|
seen_soa = true;
|
||||||
@ -8980,10 +8950,8 @@ skip_removals:
|
|||||||
isc_result_totext(result));
|
isc_result_totext(result));
|
||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
for (result = dns_rdatasetiter_first(iterator);
|
DNS_RDATASETITER_FOREACH (iterator) {
|
||||||
result == ISC_R_SUCCESS;
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
result = dns_rdatasetiter_next(iterator))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(iterator, &rdataset);
|
dns_rdatasetiter_current(iterator, &rdataset);
|
||||||
if (rdataset.type == dns_rdatatype_nsec) {
|
if (rdataset.type == dns_rdatatype_nsec) {
|
||||||
rebuild_nsec = true;
|
rebuild_nsec = true;
|
||||||
@ -9275,9 +9243,7 @@ del_sig(dns_db_t *db, dns_dbversion_t *version, dns_name_t *name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
dns_rdataset_init(&rdataset);
|
||||||
for (result = dns_rdatasetiter_first(iterator); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (iterator) {
|
||||||
result = dns_rdatasetiter_next(iterator))
|
|
||||||
{
|
|
||||||
bool has_alg = false;
|
bool has_alg = false;
|
||||||
dns_rdatasetiter_current(iterator, &rdataset);
|
dns_rdatasetiter_current(iterator, &rdataset);
|
||||||
if (nkeys == 0 && rdataset.type == dns_rdatatype_nsec) {
|
if (nkeys == 0 && rdataset.type == dns_rdatatype_nsec) {
|
||||||
@ -9323,9 +9289,6 @@ del_sig(dns_db_t *db, dns_dbversion_t *version, dns_name_t *name,
|
|||||||
alg_missed = true;
|
alg_missed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set `has_algp` if the algorithm was found in every RRset:
|
* Set `has_algp` if the algorithm was found in every RRset:
|
||||||
@ -17324,7 +17287,6 @@ copy_non_dnssec_records(dns_db_t *db, dns_dbversion_t *version, dns_db_t *rawdb,
|
|||||||
dns_dbnode_t *rawnode = NULL, *node = NULL;
|
dns_dbnode_t *rawnode = NULL, *node = NULL;
|
||||||
dns_fixedname_t fixed;
|
dns_fixedname_t fixed;
|
||||||
dns_name_t *name = dns_fixedname_initname(&fixed);
|
dns_name_t *name = dns_fixedname_initname(&fixed);
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_rdatasetiter_t *rdsit = NULL;
|
dns_rdatasetiter_t *rdsit = NULL;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
|
||||||
@ -17345,11 +17307,8 @@ copy_non_dnssec_records(dns_db_t *db, dns_dbversion_t *version, dns_db_t *rawdb,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
DNS_RDATASETITER_FOREACH (rdsit) {
|
||||||
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
for (result = dns_rdatasetiter_first(rdsit); result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsit))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsit, &rdataset);
|
dns_rdatasetiter_current(rdsit, &rdataset);
|
||||||
if (rdataset.type == dns_rdatatype_nsec ||
|
if (rdataset.type == dns_rdatatype_nsec ||
|
||||||
rdataset.type == dns_rdatatype_rrsig ||
|
rdataset.type == dns_rdatatype_rrsig ||
|
||||||
@ -17374,12 +17333,9 @@ copy_non_dnssec_records(dns_db_t *db, dns_dbversion_t *version, dns_db_t *rawdb,
|
|||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (rdsit != NULL) {
|
if (rdsit != NULL) {
|
||||||
@ -17456,9 +17412,7 @@ receive_secure_db(void *arg) {
|
|||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_dbiterator_first(dbiterator); result == ISC_R_SUCCESS;
|
DNS_DBITERATOR_FOREACH (dbiterator) {
|
||||||
result = dns_dbiterator_next(dbiterator))
|
|
||||||
{
|
|
||||||
result = copy_non_dnssec_records(db, version, rawdb, dbiterator,
|
result = copy_non_dnssec_records(db, version, rawdb, dbiterator,
|
||||||
oldserialp);
|
oldserialp);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
@ -17466,9 +17420,6 @@ receive_secure_db(void *arg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
dns_dbiterator_destroy(&dbiterator);
|
dns_dbiterator_destroy(&dbiterator);
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
goto failure;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call restore_nsec3param() to create private-type records from
|
* Call restore_nsec3param() to create private-type records from
|
||||||
|
@ -301,7 +301,7 @@ check_no_rrsig(const vctx_t *vctx, const dns_rdataset_t *rdataset,
|
|||||||
const dns_name_t *name, dns_dbnode_t *node) {
|
const dns_name_t *name, dns_dbnode_t *node) {
|
||||||
char namebuf[DNS_NAME_FORMATSIZE];
|
char namebuf[DNS_NAME_FORMATSIZE];
|
||||||
char typebuf[DNS_RDATATYPE_FORMATSIZE];
|
char typebuf[DNS_RDATATYPE_FORMATSIZE];
|
||||||
dns_rdataset_t sigrdataset;
|
dns_rdataset_t sigrdataset = DNS_RDATASET_INIT;
|
||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
|
||||||
@ -312,9 +312,7 @@ check_no_rrsig(const vctx_t *vctx, const dns_rdataset_t *rdataset,
|
|||||||
isc_result_totext(result));
|
isc_result_totext(result));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &sigrdataset);
|
dns_rdatasetiter_current(rdsiter, &sigrdataset);
|
||||||
if (sigrdataset.type == dns_rdatatype_rrsig &&
|
if (sigrdataset.type == dns_rdatatype_rrsig &&
|
||||||
sigrdataset.covers == rdataset->type)
|
sigrdataset.covers == rdataset->type)
|
||||||
@ -798,29 +796,29 @@ verifyset(vctx_t *vctx, dns_rdataset_t *rdataset, const dns_name_t *name,
|
|||||||
char namebuf[DNS_NAME_FORMATSIZE];
|
char namebuf[DNS_NAME_FORMATSIZE];
|
||||||
char algbuf[DNS_SECALG_FORMATSIZE];
|
char algbuf[DNS_SECALG_FORMATSIZE];
|
||||||
char typebuf[DNS_RDATATYPE_FORMATSIZE];
|
char typebuf[DNS_RDATATYPE_FORMATSIZE];
|
||||||
dns_rdataset_t sigrdataset;
|
dns_rdataset_t sigrdataset = DNS_RDATASET_INIT;
|
||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
|
bool match = false;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
|
||||||
dns_rdataset_init(&sigrdataset);
|
|
||||||
result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, 0, &rdsiter);
|
result = dns_db_allrdatasets(vctx->db, node, vctx->ver, 0, 0, &rdsiter);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s",
|
zoneverify_log_error(vctx, "dns_db_allrdatasets(): %s",
|
||||||
isc_result_totext(result));
|
isc_result_totext(result));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
for (result = dns_rdatasetiter_first(rdsiter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, &sigrdataset);
|
dns_rdatasetiter_current(rdsiter, &sigrdataset);
|
||||||
if (sigrdataset.type == dns_rdatatype_rrsig &&
|
if (sigrdataset.type == dns_rdatatype_rrsig &&
|
||||||
sigrdataset.covers == rdataset->type)
|
sigrdataset.covers == rdataset->type)
|
||||||
{
|
{
|
||||||
|
match = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&sigrdataset);
|
dns_rdataset_disassociate(&sigrdataset);
|
||||||
}
|
}
|
||||||
if (result != ISC_R_SUCCESS) {
|
|
||||||
|
if (!match) {
|
||||||
dns_name_format(name, namebuf, sizeof(namebuf));
|
dns_name_format(name, namebuf, sizeof(namebuf));
|
||||||
dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
|
dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
|
||||||
zoneverify_log_error(vctx, "No signatures for %s/%s", namebuf,
|
zoneverify_log_error(vctx, "No signatures for %s/%s", namebuf,
|
||||||
@ -899,7 +897,6 @@ verifynode(vctx_t *vctx, const dns_name_t *name, dns_dbnode_t *node,
|
|||||||
const dns_name_t *nextname, isc_result_t *vresult) {
|
const dns_name_t *nextname, isc_result_t *vresult) {
|
||||||
unsigned char types[8192] = { 0 };
|
unsigned char types[8192] = { 0 };
|
||||||
unsigned int maxtype = 0;
|
unsigned int maxtype = 0;
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
dns_rdatasetiter_t *rdsiter = NULL;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
isc_result_t result, tvresult = ISC_R_UNSET;
|
isc_result_t result, tvresult = ISC_R_UNSET;
|
||||||
|
|
||||||
@ -912,10 +909,10 @@ verifynode(vctx_t *vctx, const dns_name_t *name, dns_dbnode_t *node,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
dns_rdataset_init(&rdataset);
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we are not at a delegation then everything should be
|
* If we are not at a delegation then everything should be
|
||||||
* signed. If we are at a delegation then only the DS set
|
* signed. If we are at a delegation then only the DS set
|
||||||
@ -958,14 +955,8 @@ verifynode(vctx_t *vctx, const dns_name_t *name, dns_dbnode_t *node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
result = dns_rdatasetiter_next(rdsiter);
|
|
||||||
}
|
}
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
zoneverify_log_error(vctx, "rdataset iteration failed: %s",
|
|
||||||
isc_result_totext(result));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vresult == NULL) {
|
if (vresult == NULL) {
|
||||||
return ISC_R_SUCCESS;
|
return ISC_R_SUCCESS;
|
||||||
@ -1848,9 +1839,7 @@ verify_nodes(vctx_t *vctx, isc_result_t *vresult) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_dbiterator_first(dbiter); result == ISC_R_SUCCESS;
|
DNS_DBITERATOR_FOREACH (dbiter) {
|
||||||
result = dns_dbiterator_next(dbiter))
|
|
||||||
{
|
|
||||||
result = dns_dbiterator_current(dbiter, &node, name);
|
result = dns_dbiterator_current(dbiter, &node, name);
|
||||||
if (result != ISC_R_SUCCESS && result != DNS_R_NEWORIGIN) {
|
if (result != ISC_R_SUCCESS && result != DNS_R_NEWORIGIN) {
|
||||||
zoneverify_log_error(vctx,
|
zoneverify_log_error(vctx,
|
||||||
|
@ -3251,9 +3251,9 @@ rpz_find_p(ns_client_t *client, dns_name_t *self_name, dns_rdatatype_t qtype,
|
|||||||
* Choose the best rdataset if we found something.
|
* Choose the best rdataset if we found something.
|
||||||
*/
|
*/
|
||||||
if (result == ISC_R_SUCCESS) {
|
if (result == ISC_R_SUCCESS) {
|
||||||
dns_rdatasetiter_t *rdsiter;
|
dns_rdatasetiter_t *rdsiter = NULL;
|
||||||
|
bool match = false;
|
||||||
|
|
||||||
rdsiter = NULL;
|
|
||||||
result = dns_db_allrdatasets(*dbp, *nodep, *versionp, 0, 0,
|
result = dns_db_allrdatasets(*dbp, *nodep, *versionp, 0, 0,
|
||||||
&rdsiter);
|
&rdsiter);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
@ -3266,10 +3266,7 @@ rpz_find_p(ns_client_t *client, dns_name_t *self_name, dns_rdatatype_t qtype,
|
|||||||
if (qtype == dns_rdatatype_aaaa &&
|
if (qtype == dns_rdatatype_aaaa &&
|
||||||
!ISC_LIST_EMPTY(client->view->dns64))
|
!ISC_LIST_EMPTY(client->view->dns64))
|
||||||
{
|
{
|
||||||
for (result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, *rdatasetp);
|
dns_rdatasetiter_current(rdsiter, *rdatasetp);
|
||||||
if ((*rdatasetp)->type == dns_rdatatype_a) {
|
if ((*rdatasetp)->type == dns_rdatatype_a) {
|
||||||
found_a = true;
|
found_a = true;
|
||||||
@ -3277,28 +3274,18 @@ rpz_find_p(ns_client_t *client, dns_name_t *self_name, dns_rdatatype_t qtype,
|
|||||||
dns_rdataset_disassociate(*rdatasetp);
|
dns_rdataset_disassociate(*rdatasetp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
result == ISC_R_SUCCESS;
|
|
||||||
result = dns_rdatasetiter_next(rdsiter))
|
|
||||||
{
|
|
||||||
dns_rdatasetiter_current(rdsiter, *rdatasetp);
|
dns_rdatasetiter_current(rdsiter, *rdatasetp);
|
||||||
if ((*rdatasetp)->type == dns_rdatatype_cname ||
|
if ((*rdatasetp)->type == dns_rdatatype_cname ||
|
||||||
(*rdatasetp)->type == qtype)
|
(*rdatasetp)->type == qtype)
|
||||||
{
|
{
|
||||||
|
match = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dns_rdataset_disassociate(*rdatasetp);
|
dns_rdataset_disassociate(*rdatasetp);
|
||||||
}
|
}
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (!match) {
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
rpz_log_fail(client, DNS_RPZ_ERROR_LEVEL,
|
|
||||||
p_name, rpz_type, "rdatasetiter",
|
|
||||||
result);
|
|
||||||
CTRACE(ISC_LOG_ERROR, "rpz_find_p: "
|
|
||||||
"rdatasetiter failed");
|
|
||||||
return DNS_R_SERVFAIL;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Ask again to get the right DNS_R_DNAME/NXRRSET/...
|
* Ask again to get the right DNS_R_DNAME/NXRRSET/...
|
||||||
* result if there is neither a CNAME nor target type.
|
* result if there is neither a CNAME nor target type.
|
||||||
@ -7660,8 +7647,7 @@ query_respond_any(query_ctx_t *qctx) {
|
|||||||
ns_client_keepname(qctx->client, qctx->fname, qctx->dbuf);
|
ns_client_keepname(qctx->client, qctx->fname, qctx->dbuf);
|
||||||
qctx->tname = qctx->fname;
|
qctx->tname = qctx->fname;
|
||||||
|
|
||||||
result = dns_rdatasetiter_first(rdsiter);
|
DNS_RDATASETITER_FOREACH (rdsiter) {
|
||||||
while (result == ISC_R_SUCCESS) {
|
|
||||||
dns_rdatasetiter_current(rdsiter, qctx->rdataset);
|
dns_rdatasetiter_current(rdsiter, qctx->rdataset);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -7770,19 +7756,10 @@ query_respond_any(query_ctx_t *qctx) {
|
|||||||
*/
|
*/
|
||||||
dns_rdataset_disassociate(qctx->rdataset);
|
dns_rdataset_disassociate(qctx->rdataset);
|
||||||
}
|
}
|
||||||
|
|
||||||
result = dns_rdatasetiter_next(rdsiter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dns_rdatasetiter_destroy(&rdsiter);
|
dns_rdatasetiter_destroy(&rdsiter);
|
||||||
|
|
||||||
if (result != ISC_R_NOMORE) {
|
|
||||||
CCTRACE(ISC_LOG_ERROR, "query_respond_any: rdataset iterator "
|
|
||||||
"failed");
|
|
||||||
QUERY_ERROR(qctx, DNS_R_SERVFAIL);
|
|
||||||
return ns_query_done(qctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (found) {
|
if (found) {
|
||||||
/*
|
/*
|
||||||
* Call hook if any answers were found.
|
* Call hook if any answers were found.
|
||||||
|
@ -607,26 +607,17 @@ foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
|
|||||||
goto cleanup_node;
|
goto cleanup_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (result = dns_rdatasetiter_first(iter); result == ISC_R_SUCCESS;
|
DNS_RDATASETITER_FOREACH (iter) {
|
||||||
result = dns_rdatasetiter_next(iter))
|
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
|
||||||
{
|
|
||||||
dns_rdataset_t rdataset;
|
|
||||||
|
|
||||||
dns_rdataset_init(&rdataset);
|
|
||||||
dns_rdatasetiter_current(iter, &rdataset);
|
dns_rdatasetiter_current(iter, &rdataset);
|
||||||
|
|
||||||
result = (*action)(action_data, &rdataset);
|
result = (*action)(action_data, &rdataset);
|
||||||
|
|
||||||
dns_rdataset_disassociate(&rdataset);
|
dns_rdataset_disassociate(&rdataset);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto cleanup_iterator;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result == ISC_R_NOMORE) {
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup_iterator:
|
|
||||||
dns_rdatasetiter_destroy(&iter);
|
dns_rdatasetiter_destroy(&iter);
|
||||||
|
|
||||||
cleanup_node:
|
cleanup_node:
|
||||||
|
@ -93,9 +93,7 @@ test_walk(const char *filename, int flags, int nodes) {
|
|||||||
result = dns_db_createiterator(db, flags, &iter);
|
result = dns_db_createiterator(db, flags, &iter);
|
||||||
assert_int_equal(result, ISC_R_SUCCESS);
|
assert_int_equal(result, ISC_R_SUCCESS);
|
||||||
|
|
||||||
for (result = dns_dbiterator_first(iter); result == ISC_R_SUCCESS;
|
DNS_DBITERATOR_FOREACH (iter) {
|
||||||
result = dns_dbiterator_next(iter))
|
|
||||||
{
|
|
||||||
result = dns_dbiterator_current(iter, &node, name);
|
result = dns_dbiterator_current(iter, &node, name);
|
||||||
assert_int_equal(result, ISC_R_SUCCESS);
|
assert_int_equal(result, ISC_R_SUCCESS);
|
||||||
dns_db_detachnode(db, &node);
|
dns_db_detachnode(db, &node);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user