Implement dns_db node tracing

This implements node reference tracing that passes all the internal
layers from dns_db API (and friends) to increment_reference() and
decrement_reference().

It can be enabled by #defining DNS_DB_NODETRACE in <dns/trace.h> header.

The output then looks like this:

    incr:node:check_address_records:rootns.c:409:0x7f67f5a55a40->references = 1
    decr:node:check_address_records:rootns.c:449:0x7f67f5a55a40->references = 0

    incr:nodelock:check_address_records:rootns.c:409:0x7f67f5a55a40:0x7f68304d7040->references = 1
    decr:nodelock:check_address_records:rootns.c:449:0x7f67f5a55a40:0x7f68304d7040->references = 0

There's associated python script to find the missing detach located at:
https://gitlab.isc.org/isc-projects/bind9/-/snippets/1038
This commit is contained in:
Ondřej Surý
2023-01-05 09:12:35 +01:00
parent 5737f7bc8f
commit cd632ad31d
40 changed files with 1046 additions and 671 deletions

View File

@@ -80,13 +80,15 @@ typedef struct bdb_rdatasetiter {
static isc_result_t
findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
dns_rdatatype_t type, dns_rdatatype_t covers, isc_stdtime_t now,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset);
dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG);
static void
attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp);
attachnode(dns_db_t *db, dns_dbnode_t *source,
dns_dbnode_t **targetp DNS__DB_FLARG);
static void
detachnode(dns_db_t *db, dns_dbnode_t **nodep);
detachnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG);
/*
* Helper functions to convert text to wire forma.
@@ -605,23 +607,24 @@ ipv4reverse_lookup(bdbnode_t *node) {
* the implementation can be the same as dns_rdatalist..
*/
static void
disassociate(dns_rdataset_t *rdataset) {
disassociate(dns_rdataset_t *rdataset DNS__DB_FLARG) {
dns_dbnode_t *node = rdataset->private5;
bdbnode_t *bdbnode = (bdbnode_t *)node;
dns_db_t *db = (dns_db_t *)bdbnode->bdb;
detachnode(db, &node);
dns_rdatalist_disassociate(rdataset);
detachnode(db, &node DNS__DB_FLARG_PASS);
dns_rdatalist_disassociate(rdataset DNS__DB_FLARG_PASS);
}
static void
rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target) {
rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target DNS__DB_FLARG) {
dns_dbnode_t *node = source->private5;
bdbnode_t *bdbnode = (bdbnode_t *)node;
dns_db_t *db = (dns_db_t *)bdbnode->bdb;
dns_rdatalist_clone(source, target);
attachnode(db, node, (dns_dbnode_t **)&target->private5);
dns_rdatalist_clone(source, target DNS__DB_FLARG_PASS);
attachnode(db, node,
(dns_dbnode_t **)&target->private5 DNS__DB_FLARG_PASS);
}
static dns_rdatasetmethods_t bdb_rdataset_methods = {
@@ -649,16 +652,17 @@ new_rdataset(dns_rdatalist_t *rdatalist, dns_db_t *db, dns_dbnode_t *node,
*/
static void
rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp) {
rdatasetiter_destroy(dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) {
bdb_rdatasetiter_t *bdbiterator = (bdb_rdatasetiter_t *)(*iteratorp);
detachnode(bdbiterator->common.db, &bdbiterator->common.node);
detachnode(bdbiterator->common.db,
&bdbiterator->common.node DNS__DB_FLARG_PASS);
isc_mem_put(bdbiterator->common.db->mctx, bdbiterator,
sizeof(bdb_rdatasetiter_t));
*iteratorp = NULL;
}
static isc_result_t
rdatasetiter_first(dns_rdatasetiter_t *iterator) {
rdatasetiter_first(dns_rdatasetiter_t *iterator DNS__DB_FLARG) {
bdb_rdatasetiter_t *bdbiterator = (bdb_rdatasetiter_t *)iterator;
bdbnode_t *bdbnode = (bdbnode_t *)iterator->node;
@@ -670,7 +674,7 @@ rdatasetiter_first(dns_rdatasetiter_t *iterator) {
}
static isc_result_t
rdatasetiter_next(dns_rdatasetiter_t *iterator) {
rdatasetiter_next(dns_rdatasetiter_t *iterator DNS__DB_FLARG) {
bdb_rdatasetiter_t *bdbiterator = (bdb_rdatasetiter_t *)iterator;
bdbiterator->current = ISC_LIST_NEXT(bdbiterator->current, link);
@@ -682,7 +686,8 @@ rdatasetiter_next(dns_rdatasetiter_t *iterator) {
}
static void
rdatasetiter_current(dns_rdatasetiter_t *iterator, dns_rdataset_t *rdataset) {
rdatasetiter_current(dns_rdatasetiter_t *iterator,
dns_rdataset_t *rdataset DNS__DB_FLARG) {
bdb_rdatasetiter_t *bdbiterator = (bdb_rdatasetiter_t *)iterator;
new_rdataset(bdbiterator->current, iterator->db, iterator->node,
@@ -748,7 +753,8 @@ attachversion(dns_db_t *db, dns_dbversion_t *source,
}
static void
closeversion(dns_db_t *db, dns_dbversion_t **versionp, bool commit) {
closeversion(dns_db_t *db, dns_dbversion_t **versionp,
bool commit DNS__DB_FLARG) {
bdb_t *bdb = (bdb_t *)db;
REQUIRE(VALID_BDB(bdb));
@@ -820,7 +826,7 @@ destroynode(bdbnode_t *node) {
}
static isc_result_t
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
bdb_t *bdb = (bdb_t *)db;
bdbnode_t *node = NULL;
isc_result_t result;
@@ -856,7 +862,7 @@ getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
static isc_result_t
findnode(dns_db_t *db, const dns_name_t *name, bool create,
dns_dbnode_t **nodep) {
dns_dbnode_t **nodep DNS__DB_FLARG) {
bdb_t *bdb = (bdb_t *)db;
bdbnode_t *node = NULL;
isc_result_t result;
@@ -904,7 +910,7 @@ static isc_result_t
find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
dns_dbnode_t **nodep, dns_name_t *foundname, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset) {
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
bdb_t *bdb = (bdb_t *)db;
isc_result_t result;
dns_dbnode_t *node = NULL;
@@ -939,7 +945,7 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
* Look up the next label.
*/
dns_name_getlabelsequence(name, nlabels - i, i, xname);
result = findnode(db, xname, false, &node);
result = findnode(db, xname, false, &node DNS__DB_FLARG_PASS);
if (result == ISC_R_NOTFOUND) {
/*
* No data at zone apex?
@@ -966,9 +972,9 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
* the qname.
*/
if (i < nlabels) {
result = findrdataset(db, node, version,
dns_rdatatype_dname, 0, now,
rdataset, sigrdataset);
result = findrdataset(
db, node, version, dns_rdatatype_dname, 0, now,
rdataset, sigrdataset DNS__DB_FLARG_PASS);
if (result == ISC_R_SUCCESS) {
result = DNS_R_DNAME;
break;
@@ -980,9 +986,9 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
* origin or glue is ok.
*/
if (i != olabels && (options & DNS_DBFIND_GLUEOK) == 0) {
result = findrdataset(db, node, version,
dns_rdatatype_ns, 0, now,
rdataset, sigrdataset);
result = findrdataset(
db, node, version, dns_rdatatype_ns, 0, now,
rdataset, sigrdataset DNS__DB_FLARG_PASS);
if (result == ISC_R_SUCCESS) {
if (i == nlabels && type == dns_rdatatype_any) {
result = DNS_R_ZONECUT;
@@ -1024,7 +1030,7 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
* Look for the qtype.
*/
result = findrdataset(db, node, version, type, 0, now, rdataset,
sigrdataset);
sigrdataset DNS__DB_FLARG_PASS);
if (result == ISC_R_SUCCESS) {
break;
}
@@ -1033,9 +1039,9 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
* Look for a CNAME.
*/
if (type != dns_rdatatype_cname) {
result = findrdataset(db, node, version,
dns_rdatatype_cname, 0, now,
rdataset, sigrdataset);
result = findrdataset(
db, node, version, dns_rdatatype_cname, 0, now,
rdataset, sigrdataset DNS__DB_FLARG_PASS);
if (result == ISC_R_SUCCESS) {
result = DNS_R_CNAME;
break;
@@ -1057,14 +1063,15 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
if (nodep != NULL) {
*nodep = node;
} else if (node != NULL) {
detachnode(db, &node);
detachnode(db, &node DNS__DB_FLARG_PASS);
}
return (result);
}
static void
attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
attachnode(dns_db_t *db, dns_dbnode_t *source,
dns_dbnode_t **targetp DNS__DB_FLARG) {
bdb_t *bdb = (bdb_t *)db;
bdbnode_t *node = (bdbnode_t *)source;
@@ -1076,7 +1083,7 @@ attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
}
static void
detachnode(dns_db_t *db, dns_dbnode_t **nodep) {
detachnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
bdb_t *bdb = (bdb_t *)db;
bdbnode_t *node = NULL;
@@ -1094,7 +1101,8 @@ detachnode(dns_db_t *db, dns_dbnode_t **nodep) {
static isc_result_t
findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
dns_rdatatype_t type, dns_rdatatype_t covers, isc_stdtime_t now,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
bdbnode_t *bdbnode = (bdbnode_t *)node;
dns_rdatalist_t *list = NULL;
@@ -1128,7 +1136,7 @@ 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,
unsigned int options, isc_stdtime_t now,
dns_rdatasetiter_t **iteratorp) {
dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) {
bdb_rdatasetiter_t *iterator = NULL;
REQUIRE(version == NULL || version == &dummy);
@@ -1143,7 +1151,7 @@ allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
.common.magic = DNS_RDATASETITER_MAGIC,
};
attachnode(db, node, &iterator->common.node);
attachnode(db, node, &iterator->common.node DNS__DB_FLARG_PASS);
*iteratorp = (dns_rdatasetiter_t *)iterator;

View File

@@ -132,66 +132,72 @@ attachversion(dns_db_t *db, dns_dbversion_t *source,
}
static void
closeversion(dns_db_t *db, dns_dbversion_t **versionp, bool commit) {
closeversion(dns_db_t *db, dns_dbversion_t **versionp,
bool commit DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
dns_db_closeversion(sampledb->rbtdb, versionp, commit);
dns__db_closeversion(sampledb->rbtdb, versionp,
commit DNS__DB_FLARG_PASS);
}
static isc_result_t
findnode(dns_db_t *db, const dns_name_t *name, bool create,
dns_dbnode_t **nodep) {
dns_dbnode_t **nodep DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_findnode(sampledb->rbtdb, name, create, nodep));
return (dns__db_findnode(sampledb->rbtdb, name, create,
nodep DNS__DB_FLARG_PASS));
}
static isc_result_t
find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
dns_dbnode_t **nodep, dns_name_t *foundname, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset) {
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_find(sampledb->rbtdb, name, version, type, options, now,
nodep, foundname, rdataset, sigrdataset));
return (dns__db_find(sampledb->rbtdb, name, version, type, options, now,
nodep, foundname, rdataset,
sigrdataset DNS__DB_FLARG_PASS));
}
static isc_result_t
findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options,
isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname,
dns_name_t *dcname, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset) {
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_findzonecut(sampledb->rbtdb, name, options, now, nodep,
foundname, dcname, rdataset, sigrdataset));
return (dns__db_findzonecut(sampledb->rbtdb, name, options, now, nodep,
foundname, dcname, rdataset,
sigrdataset DNS__DB_FLARG_PASS));
}
static void
attachnode(dns_db_t *db, dns_dbnode_t *source, dns_dbnode_t **targetp) {
attachnode(dns_db_t *db, dns_dbnode_t *source,
dns_dbnode_t **targetp DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
dns_db_attachnode(sampledb->rbtdb, source, targetp);
dns__db_attachnode(sampledb->rbtdb, source, targetp DNS__DB_FLARG_PASS);
}
static void
detachnode(dns_db_t *db, dns_dbnode_t **targetp) {
detachnode(dns_db_t *db, dns_dbnode_t **targetp DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
dns_db_detachnode(sampledb->rbtdb, targetp);
dns__db_detachnode(sampledb->rbtdb, targetp DNS__DB_FLARG_PASS);
}
static isc_result_t
@@ -225,31 +231,33 @@ createiterator(dns_db_t *db, unsigned int options,
static isc_result_t
findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
dns_rdatatype_t type, dns_rdatatype_t covers, isc_stdtime_t now,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_findrdataset(sampledb->rbtdb, node, version, type,
covers, now, rdataset, sigrdataset));
return (dns__db_findrdataset(sampledb->rbtdb, node, version, type,
covers, now, rdataset,
sigrdataset DNS__DB_FLARG_PASS));
}
static isc_result_t
allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
unsigned int options, isc_stdtime_t now,
dns_rdatasetiter_t **iteratorp) {
dns_rdatasetiter_t **iteratorp DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_allrdatasets(sampledb->rbtdb, node, version, options,
now, iteratorp));
return (dns__db_allrdatasets(sampledb->rbtdb, node, version, options,
now, iteratorp DNS__DB_FLARG_PASS));
}
static isc_result_t
addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
isc_stdtime_t now, dns_rdataset_t *rdataset, unsigned int options,
dns_rdataset_t *addedrdataset) {
dns_rdataset_t *addedrdataset DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
isc_result_t result;
dns_fixedname_t name;
@@ -257,8 +265,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
REQUIRE(VALID_SAMPLEDB(sampledb));
dns_fixedname_init(&name);
CHECK(dns_db_addrdataset(sampledb->rbtdb, node, version, now, rdataset,
options, addedrdataset));
CHECK(dns__db_addrdataset(sampledb->rbtdb, node, version, now, rdataset,
options, addedrdataset DNS__DB_FLARG_PASS));
if (rdataset->type == dns_rdatatype_a ||
rdataset->type == dns_rdatatype_aaaa)
{
@@ -274,7 +282,7 @@ cleanup:
static isc_result_t
subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
dns_rdataset_t *rdataset, unsigned int options,
dns_rdataset_t *newrdataset) {
dns_rdataset_t *newrdataset DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
isc_result_t result;
dns_fixedname_t name;
@@ -282,8 +290,9 @@ subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
REQUIRE(VALID_SAMPLEDB(sampledb));
dns_fixedname_init(&name);
result = dns_db_subtractrdataset(sampledb->rbtdb, node, version,
rdataset, options, newrdataset);
result = dns__db_subtractrdataset(sampledb->rbtdb, node, version,
rdataset, options,
newrdataset DNS__DB_FLARG_PASS);
if (result != ISC_R_SUCCESS && result != DNS_R_NXRRSET) {
goto cleanup;
}
@@ -306,13 +315,13 @@ cleanup:
*/
static isc_result_t
deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
dns_rdatatype_t type, dns_rdatatype_t covers) {
dns_rdatatype_t type, dns_rdatatype_t covers DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_deleterdataset(sampledb->rbtdb, node, version, type,
covers));
return (dns__db_deleterdataset(sampledb->rbtdb, node, version, type,
covers DNS__DB_FLARG_PASS));
}
static bool
@@ -352,12 +361,13 @@ setloop(dns_db_t *db, isc_loop_t *loop) {
}
static isc_result_t
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep) {
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_getoriginnode(sampledb->rbtdb, nodep));
return (dns__db_getoriginnode(sampledb->rbtdb,
nodep DNS__DB_FLARG_PASS));
}
static void
@@ -383,12 +393,13 @@ getnsec3parameters(dns_db_t *db, dns_dbversion_t *version, dns_hash_t *hash,
static isc_result_t
findnsec3node(dns_db_t *db, const dns_name_t *name, bool create,
dns_dbnode_t **nodep) {
dns_dbnode_t **nodep DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_findnsec3node(sampledb->rbtdb, name, create, nodep));
return (dns__db_findnsec3node(sampledb->rbtdb, name, create,
nodep DNS__DB_FLARG_PASS));
}
static isc_result_t
@@ -401,21 +412,24 @@ setsigningtime(dns_db_t *db, dns_rdataset_t *rdataset, isc_stdtime_t resign) {
}
static isc_result_t
getsigningtime(dns_db_t *db, dns_rdataset_t *rdataset, dns_name_t *name) {
getsigningtime(dns_db_t *db, dns_rdataset_t *rdataset,
dns_name_t *name DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_getsigningtime(sampledb->rbtdb, rdataset, name));
return (dns__db_getsigningtime(sampledb->rbtdb, rdataset,
name DNS__DB_FLARG_PASS));
}
static void
resigned(dns_db_t *db, dns_rdataset_t *rdataset, dns_dbversion_t *version) {
resigned(dns_db_t *db, dns_rdataset_t *rdataset,
dns_dbversion_t *version DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
dns_db_resigned(sampledb->rbtdb, rdataset, version);
dns__db_resigned(sampledb->rbtdb, rdataset, version DNS__DB_FLARG_PASS);
}
static bool
@@ -439,13 +453,13 @@ getrrsetstats(dns_db_t *db) {
static isc_result_t
findnodeext(dns_db_t *db, const dns_name_t *name, bool create,
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
dns_dbnode_t **nodep) {
dns_dbnode_t **nodep DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_findnodeext(sampledb->rbtdb, name, create, methods,
clientinfo, nodep));
return (dns__db_findnodeext(sampledb->rbtdb, name, create, methods,
clientinfo, nodep DNS__DB_FLARG_PASS));
}
static isc_result_t
@@ -453,14 +467,14 @@ findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
dns_dbnode_t **nodep, dns_name_t *foundname,
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_findext(sampledb->rbtdb, name, version, type, options,
now, nodep, foundname, methods, clientinfo,
rdataset, sigrdataset));
return (dns__db_findext(sampledb->rbtdb, name, version, type, options,
now, nodep, foundname, methods, clientinfo,
rdataset, sigrdataset DNS__DB_FLARG_PASS));
}
static isc_result_t