mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
fix: dev: clean up the dns_db API
Some of the API calls in `dns_db` were obsolete, and have been removed. Others were more complicated than necessary, and have been refactored to simplify. Merge branch 'each-cleanup-db-api' into 'main' See merge request isc-projects/bind9!10830
This commit is contained in:
commit
29fc7850f1
14 changed files with 182 additions and 567 deletions
|
|
@ -913,23 +913,19 @@ sign_bundle(ksr_ctx_t *ksr, dns_kasp_t *kasp, isc_stdtime_t inception,
|
|||
next_bundle = next_time;
|
||||
}
|
||||
|
||||
for (isc_result_t r = dns_rdatalist_first(&ksk);
|
||||
r == ISC_R_SUCCESS; r = dns_rdatalist_next(&ksk))
|
||||
{
|
||||
DNS_RDATASET_FOREACH(&ksk) {
|
||||
dns_rdata_t *clone = isc_mem_get(isc_g_mctx,
|
||||
sizeof(*clone));
|
||||
dns_rdata_init(clone);
|
||||
dns_rdatalist_current(&ksk, clone);
|
||||
dns_rdataset_current(&ksk, clone);
|
||||
ISC_LIST_APPEND(dnskeylist->rdata, clone, link);
|
||||
}
|
||||
|
||||
for (isc_result_t r = dns_rdatalist_first(&zsk);
|
||||
r == ISC_R_SUCCESS; r = dns_rdatalist_next(&zsk))
|
||||
{
|
||||
DNS_RDATASET_FOREACH(&zsk) {
|
||||
dns_rdata_t *clone = isc_mem_get(isc_g_mctx,
|
||||
sizeof(*clone));
|
||||
dns_rdata_init(clone);
|
||||
dns_rdatalist_current(&zsk, clone);
|
||||
dns_rdataset_current(&zsk, clone);
|
||||
ISC_LIST_APPEND(dnskeylist->rdata, clone, link);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -631,19 +631,19 @@ static void
|
|||
rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target DNS__DB_FLARG) {
|
||||
dns_dbnode_t *node = source->rdlist.node;
|
||||
|
||||
dns_rdatalist_clone(source, target DNS__DB_FLARG_PASS);
|
||||
dns__rdatalist_clone(source, target DNS__DB_FLARG_PASS);
|
||||
bdbnode_attachnode(node, &target->rdlist.node DNS__DB_FLARG_PASS);
|
||||
}
|
||||
|
||||
static dns_rdatasetmethods_t bdb_rdataset_methods = {
|
||||
.disassociate = disassociate,
|
||||
.first = dns_rdatalist_first,
|
||||
.next = dns_rdatalist_next,
|
||||
.current = dns_rdatalist_current,
|
||||
.first = dns__rdatalist_first,
|
||||
.next = dns__rdatalist_next,
|
||||
.current = dns__rdatalist_current,
|
||||
.clone = rdataset_clone,
|
||||
.count = dns_rdatalist_count,
|
||||
.addnoqname = dns_rdatalist_addnoqname,
|
||||
.getnoqname = dns_rdatalist_getnoqname,
|
||||
.count = dns__rdatalist_count,
|
||||
.addnoqname = dns__rdatalist_addnoqname,
|
||||
.getnoqname = dns__rdatalist_getnoqname,
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
@ -822,43 +822,10 @@ destroynode(bdbnode_t *node) {
|
|||
dns_db_detach((dns_db_t **)(void *)&bdb);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
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;
|
||||
dns_name_t relname;
|
||||
dns_name_t *name = NULL;
|
||||
|
||||
REQUIRE(VALID_BDB(bdb));
|
||||
REQUIRE(nodep != NULL && *nodep == NULL);
|
||||
|
||||
dns_name_init(&relname);
|
||||
name = &relname;
|
||||
|
||||
result = createnode(bdb, &node);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result = builtin_lookup(bdb, name, node);
|
||||
if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND) {
|
||||
destroynode(node);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = builtin_authority(bdb, node);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
destroynode(node);
|
||||
return result;
|
||||
}
|
||||
|
||||
*nodep = (dns_dbnode_t *)node;
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
||||
dns_clientinfomethods_t *methods ISC_ATTR_UNUSED,
|
||||
dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
bdb_t *bdb = (bdb_t *)db;
|
||||
bdbnode_t *node = NULL;
|
||||
|
|
@ -906,7 +873,9 @@ findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
|||
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_dbnode_t **nodep, dns_name_t *foundname,
|
||||
dns_clientinfomethods_t *methods ISC_ATTR_UNUSED,
|
||||
dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED, dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
|
||||
bdb_t *bdb = (bdb_t *)db;
|
||||
isc_result_t result;
|
||||
|
|
@ -942,7 +911,8 @@ 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 DNS__DB_FLARG_PASS);
|
||||
result = findnode(db, xname, false, NULL, NULL,
|
||||
&node DNS__DB_FLARG_PASS);
|
||||
if (result == ISC_R_NOTFOUND) {
|
||||
/*
|
||||
* No data at zone apex?
|
||||
|
|
@ -1149,7 +1119,6 @@ static dns_dbmethods_t bdb_methods = {
|
|||
.closeversion = closeversion,
|
||||
.findrdataset = findrdataset,
|
||||
.allrdatasets = allrdatasets,
|
||||
.getoriginnode = getoriginnode,
|
||||
.findnode = findnode,
|
||||
.find = find,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -125,31 +125,6 @@ closeversion(dns_db_t *db, dns_dbversion_t **versionp,
|
|||
dns__db_closeversion(sampledb->db, 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__DB_FLARG) {
|
||||
sampledb_t *sampledb = (sampledb_t *)db;
|
||||
|
||||
REQUIRE(VALID_SAMPLEDB(sampledb));
|
||||
|
||||
return dns__db_findnode(sampledb->db, 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__DB_FLARG) {
|
||||
sampledb_t *sampledb = (sampledb_t *)db;
|
||||
|
||||
REQUIRE(VALID_SAMPLEDB(sampledb));
|
||||
|
||||
return dns__db_find(sampledb->db, 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,
|
||||
|
|
@ -214,9 +189,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
CHECK(dns__db_addrdataset(sampledb->db, node, version, now, rdataset,
|
||||
options, addedrdataset DNS__DB_FLARG_PASS));
|
||||
if (dns_rdatatype_isaddr(rdataset->type)) {
|
||||
CHECK(dns_db_nodefullname(node, dns_fixedname_name(&name)));
|
||||
CHECK(syncptrs(sampledb->inst, dns_fixedname_name(&name),
|
||||
rdataset, DNS_DIFFOP_ADD));
|
||||
CHECK(syncptrs(sampledb->inst, &node->name, rdataset,
|
||||
DNS_DIFFOP_ADD));
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
|
@ -242,9 +216,8 @@ subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
}
|
||||
|
||||
if (dns_rdatatype_isaddr(rdataset->type)) {
|
||||
CHECK(dns_db_nodefullname(node, dns_fixedname_name(&name)));
|
||||
CHECK(syncptrs(sampledb->inst, dns_fixedname_name(&name),
|
||||
rdataset, DNS_DIFFOP_DEL));
|
||||
CHECK(syncptrs(sampledb->inst, &node->name, rdataset,
|
||||
DNS_DIFFOP_DEL));
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
|
@ -284,15 +257,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree) {
|
|||
return dns_db_nodecount(sampledb->db, tree);
|
||||
}
|
||||
|
||||
static void
|
||||
setloop(dns_db_t *db, isc_loop_t *loop) {
|
||||
sampledb_t *sampledb = (sampledb_t *)db;
|
||||
|
||||
REQUIRE(VALID_SAMPLEDB(sampledb));
|
||||
|
||||
dns_db_setloop(sampledb->db, loop);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
sampledb_t *sampledb = (sampledb_t *)db;
|
||||
|
|
@ -354,30 +318,30 @@ 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__DB_FLARG) {
|
||||
findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
sampledb_t *sampledb = (sampledb_t *)db;
|
||||
|
||||
REQUIRE(VALID_SAMPLEDB(sampledb));
|
||||
|
||||
return dns__db_findnodeext(sampledb->db, name, create, methods,
|
||||
clientinfo, nodep DNS__DB_FLARG_PASS);
|
||||
return dns__db_findnode(sampledb->db, name, create, methods, clientinfo,
|
||||
nodep DNS__DB_FLARG_PASS);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
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__DB_FLARG) {
|
||||
find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
||||
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
|
||||
dns_dbnode_t **nodep, dns_name_t *foundname,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
|
||||
sampledb_t *sampledb = (sampledb_t *)db;
|
||||
|
||||
REQUIRE(VALID_SAMPLEDB(sampledb));
|
||||
|
||||
return dns__db_findext(sampledb->db, name, version, type, options, now,
|
||||
nodep, foundname, methods, clientinfo, rdataset,
|
||||
sigrdataset DNS__DB_FLARG_PASS);
|
||||
return dns__db_find(sampledb->db, name, version, type, options, now,
|
||||
nodep, foundname, methods, clientinfo, rdataset,
|
||||
sigrdataset DNS__DB_FLARG_PASS);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
|
|
@ -399,8 +363,6 @@ static dns_dbmethods_t sampledb_methods = {
|
|||
.newversion = newversion,
|
||||
.attachversion = attachversion,
|
||||
.closeversion = closeversion,
|
||||
.findnode = findnode,
|
||||
.find = find,
|
||||
.findzonecut = findzonecut,
|
||||
.createiterator = createiterator,
|
||||
.findrdataset = findrdataset,
|
||||
|
|
@ -410,15 +372,14 @@ static dns_dbmethods_t sampledb_methods = {
|
|||
.deleterdataset = deleterdataset,
|
||||
.issecure = issecure,
|
||||
.nodecount = nodecount,
|
||||
.setloop = setloop,
|
||||
.getoriginnode = getoriginnode,
|
||||
.getnsec3parameters = getnsec3parameters,
|
||||
.findnsec3node = findnsec3node,
|
||||
.setsigningtime = setsigningtime,
|
||||
.getsigningtime = getsigningtime,
|
||||
.getrrsetstats = getrrsetstats,
|
||||
.findnodeext = findnodeext,
|
||||
.findext = findext,
|
||||
.findnode = findnode,
|
||||
.find = find,
|
||||
.setcachestats = setcachestats,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -130,12 +130,6 @@ cache_create_db(dns_cache_t *cache, dns_db_t **dbp, isc_mem_t **tmctxp,
|
|||
dns_db_setmaxrrperset(db, cache->maxrrperset);
|
||||
dns_db_setmaxtypepername(db, cache->maxtypepername);
|
||||
|
||||
/*
|
||||
* XXX this is only used by the RBT cache, and can
|
||||
* be removed when it is.
|
||||
*/
|
||||
dns_db_setloop(db, isc_loop_main());
|
||||
|
||||
*dbp = db;
|
||||
*hmctxp = hmctx;
|
||||
*tmctxp = tmctx;
|
||||
|
|
@ -628,8 +622,6 @@ dns_cache_dumpstats(dns_cache_t *cache, FILE *fp) {
|
|||
"cache database nodes");
|
||||
fprintf(fp, "%20u %s\n", dns_db_nodecount(cache->db, dns_dbtree_nsec),
|
||||
"cache NSEC auxiliary database nodes");
|
||||
fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)dns_db_hashsize(cache->db),
|
||||
"cache database hash buckets");
|
||||
|
||||
fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)isc_mem_inuse(cache->tmctx),
|
||||
"cache tree memory in use");
|
||||
|
|
@ -689,7 +681,6 @@ dns_cache_renderxml(dns_cache_t *cache, void *writer0) {
|
|||
dns_db_nodecount(cache->db, dns_dbtree_main), writer));
|
||||
TRY0(renderstat("CacheNSECNodes",
|
||||
dns_db_nodecount(cache->db, dns_dbtree_nsec), writer));
|
||||
TRY0(renderstat("CacheBuckets", dns_db_hashsize(cache->db), writer));
|
||||
|
||||
TRY0(renderstat("TreeMemInUse", isc_mem_inuse(cache->tmctx), writer));
|
||||
|
||||
|
|
@ -759,10 +750,6 @@ dns_cache_renderjson(dns_cache_t *cache, void *cstats0) {
|
|||
CHECKMEM(obj);
|
||||
json_object_object_add(cstats, "CacheNSECNodes", obj);
|
||||
|
||||
obj = json_object_new_int64(dns_db_hashsize(cache->db));
|
||||
CHECKMEM(obj);
|
||||
json_object_object_add(cstats, "CacheBuckets", obj);
|
||||
|
||||
obj = json_object_new_int64(isc_mem_inuse(cache->tmctx));
|
||||
CHECKMEM(obj);
|
||||
json_object_object_add(cstats, "TreeMemInUse", obj);
|
||||
|
|
|
|||
127
lib/dns/db.c
127
lib/dns/db.c
|
|
@ -415,28 +415,8 @@ dns__db_closeversion(dns_db_t *db, dns_dbversion_t **versionp,
|
|||
|
||||
isc_result_t
|
||||
dns__db_findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
/*
|
||||
* Find the node with name 'name'.
|
||||
*/
|
||||
|
||||
REQUIRE(DNS_DB_VALID(db));
|
||||
REQUIRE(nodep != NULL && *nodep == NULL);
|
||||
|
||||
if (db->methods->findnode != NULL) {
|
||||
return (db->methods->findnode)(db, name, create,
|
||||
nodep DNS__DB_FLARG_PASS);
|
||||
} else {
|
||||
return (db->methods->findnodeext)(db, name, create, NULL, NULL,
|
||||
nodep DNS__DB_FLARG_PASS);
|
||||
}
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns__db_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__DB_FLARG) {
|
||||
/*
|
||||
* Find the node with name 'name', passing 'arg' to the database
|
||||
* implementation.
|
||||
|
|
@ -445,14 +425,12 @@ dns__db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create,
|
|||
REQUIRE(DNS_DB_VALID(db));
|
||||
REQUIRE(nodep != NULL && *nodep == NULL);
|
||||
|
||||
if (db->methods->findnodeext != NULL) {
|
||||
return (db->methods->findnodeext)(db, name, create, methods,
|
||||
clientinfo,
|
||||
nodep DNS__DB_FLARG_PASS);
|
||||
} else {
|
||||
return (db->methods->findnode)(db, name, create,
|
||||
if (db->methods->findnode != NULL) {
|
||||
return (db->methods->findnode)(db, name, create, methods,
|
||||
clientinfo,
|
||||
nodep DNS__DB_FLARG_PASS);
|
||||
}
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
|
@ -473,41 +451,9 @@ isc_result_t
|
|||
dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
||||
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
|
||||
dns_dbnode_t **nodep, dns_name_t *foundname,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
|
||||
/*
|
||||
* Find the best match for 'name' and 'type' in version 'version'
|
||||
* of 'db'.
|
||||
*/
|
||||
|
||||
REQUIRE(DNS_DB_VALID(db));
|
||||
REQUIRE(type != dns_rdatatype_rrsig);
|
||||
REQUIRE(nodep == NULL || *nodep == NULL);
|
||||
REQUIRE(dns_name_hasbuffer(foundname));
|
||||
REQUIRE(rdataset == NULL || (DNS_RDATASET_VALID(rdataset) &&
|
||||
!dns_rdataset_isassociated(rdataset)));
|
||||
REQUIRE(sigrdataset == NULL ||
|
||||
(DNS_RDATASET_VALID(sigrdataset) &&
|
||||
!dns_rdataset_isassociated(sigrdataset)));
|
||||
|
||||
if (db->methods->find != NULL) {
|
||||
return (db->methods->find)(db, name, version, type, options,
|
||||
now, nodep, foundname, rdataset,
|
||||
sigrdataset DNS__DB_FLARG_PASS);
|
||||
} else {
|
||||
return (db->methods->findext)(
|
||||
db, name, version, type, options, now, nodep, foundname,
|
||||
NULL, NULL, rdataset, sigrdataset DNS__DB_FLARG_PASS);
|
||||
}
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns__db_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__DB_FLARG) {
|
||||
/*
|
||||
* Find the best match for 'name' and 'type' in version 'version'
|
||||
* of 'db', passing in 'arg'.
|
||||
|
|
@ -523,16 +469,13 @@ dns__db_findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
|||
(DNS_RDATASET_VALID(sigrdataset) &&
|
||||
!dns_rdataset_isassociated(sigrdataset)));
|
||||
|
||||
if (db->methods->findext != NULL) {
|
||||
return (db->methods->findext)(db, name, version, type, options,
|
||||
now, nodep, foundname, methods,
|
||||
clientinfo, rdataset,
|
||||
sigrdataset DNS__DB_FLARG_PASS);
|
||||
} else {
|
||||
if (db->methods->find != NULL) {
|
||||
return (db->methods->find)(db, name, version, type, options,
|
||||
now, nodep, foundname, rdataset,
|
||||
now, nodep, foundname, methods,
|
||||
clientinfo, rdataset,
|
||||
sigrdataset DNS__DB_FLARG_PASS);
|
||||
}
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
|
@ -800,26 +743,6 @@ dns_db_nodecount(dns_db_t *db, dns_dbtree_t tree) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
size_t
|
||||
dns_db_hashsize(dns_db_t *db) {
|
||||
REQUIRE(DNS_DB_VALID(db));
|
||||
|
||||
if (db->methods->hashsize == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (db->methods->hashsize)(db);
|
||||
}
|
||||
|
||||
void
|
||||
dns_db_setloop(dns_db_t *db, isc_loop_t *loop) {
|
||||
REQUIRE(DNS_DB_VALID(db));
|
||||
|
||||
if (db->methods->setloop != NULL) {
|
||||
(db->methods->setloop)(db, loop);
|
||||
}
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_db_register(const char *name, dns_dbcreatefunc_t create, void *driverarg,
|
||||
isc_mem_t *mctx, dns_dbimplementation_t **dbimp) {
|
||||
|
|
@ -874,6 +797,9 @@ dns__db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
|
|||
if (db->methods->getoriginnode != NULL) {
|
||||
return (db->methods->getoriginnode)(db,
|
||||
nodep DNS__DB_FLARG_PASS);
|
||||
} else if (db->methods->findnode != NULL) {
|
||||
return (db->methods->findnode)(db, &db->origin, false, NULL,
|
||||
NULL, nodep DNS__DB_FLARG_PASS);
|
||||
}
|
||||
|
||||
return ISC_R_NOTFOUND;
|
||||
|
|
@ -1117,22 +1043,6 @@ dns_db_addglue(dns_db_t *db, dns_dbversion_t *version, dns_rdataset_t *rdataset,
|
|||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
void
|
||||
dns_db_locknode(dns_dbnode_t *node, isc_rwlocktype_t type) {
|
||||
REQUIRE(node != NULL && node->methods != NULL);
|
||||
if (node->methods->locknode != NULL) {
|
||||
(node->methods->locknode)(node, type);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
dns_db_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type) {
|
||||
REQUIRE(node != NULL && node->methods != NULL);
|
||||
if (node->methods->unlocknode != NULL) {
|
||||
(node->methods->unlocknode)(node, type);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
dns_db_expiredata(dns_dbnode_t *node, void *data) {
|
||||
REQUIRE(node != NULL && node->methods != NULL);
|
||||
|
|
@ -1149,17 +1059,6 @@ dns_db_deletedata(dns_dbnode_t *node, void *data) {
|
|||
}
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_db_nodefullname(dns_dbnode_t *node, dns_name_t *name) {
|
||||
REQUIRE(node != NULL && node->methods != NULL);
|
||||
REQUIRE(name != NULL);
|
||||
|
||||
if (node->methods != NULL && node->methods->nodefullname != NULL) {
|
||||
return node->methods->nodefullname(node, name);
|
||||
}
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
void
|
||||
dns_db_setmaxrrperset(dns_db_t *db, uint32_t value) {
|
||||
REQUIRE(DNS_DB_VALID(db));
|
||||
|
|
|
|||
|
|
@ -76,15 +76,10 @@ extern unsigned int dns_pps;
|
|||
*****/
|
||||
|
||||
typedef struct dns_dbnode_methods {
|
||||
isc_result_t (*nodefullname)(dns_dbnode_t *node, dns_name_t *name);
|
||||
|
||||
void (*attachnode)(dns_dbnode_t *source,
|
||||
dns_dbnode_t **targetp DNS__DB_FLARG);
|
||||
void (*detachnode)(dns_dbnode_t **targetp DNS__DB_FLARG);
|
||||
|
||||
void (*locknode)(dns_dbnode_t *node, isc_rwlocktype_t t);
|
||||
void (*unlocknode)(dns_dbnode_t *node, isc_rwlocktype_t t);
|
||||
|
||||
void (*deletedata)(dns_dbnode_t *node, void *data);
|
||||
void (*expiredata)(dns_dbnode_t *node, void *data);
|
||||
} dns_dbnode_methods_t;
|
||||
|
|
@ -100,15 +95,6 @@ typedef struct dns_db_methods {
|
|||
dns_dbversion_t **targetp);
|
||||
void (*closeversion)(dns_db_t *db, dns_dbversion_t **versionp,
|
||||
bool commit DNS__DB_FLARG);
|
||||
isc_result_t (*findnode)(dns_db_t *db, const dns_name_t *name,
|
||||
bool create,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG);
|
||||
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__DB_FLARG);
|
||||
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,
|
||||
|
|
@ -142,7 +128,6 @@ typedef struct dns_db_methods {
|
|||
dns_rdatatype_t covers DNS__DB_FLARG);
|
||||
bool (*issecure)(dns_db_t *db);
|
||||
unsigned int (*nodecount)(dns_db_t *db, dns_dbtree_t);
|
||||
void (*setloop)(dns_db_t *db, isc_loop_t *);
|
||||
isc_result_t (*getoriginnode)(dns_db_t *db,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG);
|
||||
isc_result_t (*getnsec3parameters)(dns_db_t *db,
|
||||
|
|
@ -160,21 +145,19 @@ typedef struct dns_db_methods {
|
|||
dns_name_t *name,
|
||||
dns_typepair_t *typepair);
|
||||
dns_stats_t *(*getrrsetstats)(dns_db_t *db);
|
||||
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__DB_FLARG);
|
||||
isc_result_t (*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__DB_FLARG);
|
||||
isc_result_t (*findnode)(dns_db_t *db, const dns_name_t *name,
|
||||
bool create, dns_clientinfomethods_t *methods,
|
||||
dns_clientinfo_t *clientinfo,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG);
|
||||
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_clientinfomethods_t *methods,
|
||||
dns_clientinfo_t *clientinfo,
|
||||
dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *sigrdataset DNS__DB_FLARG);
|
||||
isc_result_t (*setcachestats)(dns_db_t *db, isc_stats_t *stats);
|
||||
size_t (*hashsize)(dns_db_t *db);
|
||||
isc_result_t (*getsize)(dns_db_t *db, dns_dbversion_t *version,
|
||||
uint64_t *records, uint64_t *bytes);
|
||||
isc_result_t (*setservestalettl)(dns_db_t *db, dns_ttl_t ttl);
|
||||
|
|
@ -696,19 +679,14 @@ dns__db_closeversion(dns_db_t *db, dns_dbversion_t **versionp,
|
|||
***/
|
||||
|
||||
#define dns_db_findnode(db, name, create, nodep) \
|
||||
dns__db_findnode(db, name, create, nodep DNS__DB_FILELINE)
|
||||
dns__db_findnode(db, name, create, NULL, NULL, nodep DNS__DB_FILELINE)
|
||||
#define dns_db_findnodeext(db, name, create, methods, clientinfo, nodep) \
|
||||
dns__db_findnode(db, name, create, methods, clientinfo, \
|
||||
nodep DNS__DB_FILELINE)
|
||||
isc_result_t
|
||||
dns__db_findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG);
|
||||
|
||||
#define dns_db_findnodeext(db, name, create, methods, clientinfo, nodep) \
|
||||
dns__db_findnodeext(db, name, create, methods, clientinfo, \
|
||||
nodep DNS__DB_FILELINE)
|
||||
isc_result_t
|
||||
dns__db_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__DB_FLARG);
|
||||
/*%<
|
||||
* Find the node with name 'name'.
|
||||
*
|
||||
|
|
@ -750,26 +728,19 @@ dns__db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create,
|
|||
#define dns_db_find(db, name, version, type, options, now, nodep, foundname, \
|
||||
rdataset, sigrdataset) \
|
||||
dns__db_find(db, name, version, type, options, now, nodep, foundname, \
|
||||
rdataset, sigrdataset DNS__DB_FILELINE)
|
||||
NULL, NULL, rdataset, sigrdataset DNS__DB_FILELINE)
|
||||
#define dns_db_findext(db, name, version, type, options, now, nodep, \
|
||||
foundname, methods, clientinfo, rdataset, sigrdataset) \
|
||||
dns__db_find(db, name, version, type, options, now, nodep, foundname, \
|
||||
methods, clientinfo, rdataset, \
|
||||
sigrdataset DNS__DB_FILELINE)
|
||||
isc_result_t
|
||||
dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
||||
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
|
||||
dns_dbnode_t **nodep, dns_name_t *foundname,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *sigrdataset DNS__DB_FLARG);
|
||||
|
||||
#define dns_db_findext(db, name, version, type, options, now, nodep, \
|
||||
foundname, methods, clientinfo, rdataset, sigrdataset) \
|
||||
dns__db_findext(db, name, version, type, options, now, nodep, \
|
||||
foundname, methods, clientinfo, rdataset, \
|
||||
sigrdataset DNS__DB_FILELINE)
|
||||
isc_result_t
|
||||
dns__db_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__DB_FLARG);
|
||||
/*%<
|
||||
* Find the best match for 'name' and 'type' in version 'version' of 'db'.
|
||||
*
|
||||
|
|
@ -1422,16 +1393,6 @@ dns_db_hashsize(dns_db_t *db);
|
|||
* 0 if not implemented.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_db_setloop(dns_db_t *db, isc_loop_t *loop);
|
||||
/*%<
|
||||
* If loop is set then the final detach may be performed asynchronously.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'db' is a valid database.
|
||||
* \li 'loop' to be valid or NULL.
|
||||
*/
|
||||
|
||||
bool
|
||||
dns_db_ispersistent(dns_db_t *db);
|
||||
/*%<
|
||||
|
|
@ -1754,15 +1715,6 @@ dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats);
|
|||
* dns_rdatasetstats_create(); otherwise NULL.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_db_locknode(dns_dbnode_t *node, isc_rwlocktype_t type);
|
||||
void
|
||||
dns_db_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type);
|
||||
/*%<
|
||||
* Lock/unlock a single node within a database so that data stored
|
||||
* there can be manipulated directly.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
dns_db_addglue(dns_db_t *db, dns_dbversion_t *version, dns_rdataset_t *rdataset,
|
||||
dns_message_t *msg);
|
||||
|
|
@ -1798,17 +1750,6 @@ dns_db_deletedata(dns_dbnode_t *node, void *data);
|
|||
* data from an LRU list or a heap.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
dns_db_nodefullname(dns_dbnode_t *node, dns_name_t *name);
|
||||
/*%<
|
||||
* Get the name associated with a database node.
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
* \li 'db' is a valid database
|
||||
* \li 'node' and 'name' are not NULL
|
||||
*/
|
||||
|
||||
void
|
||||
dns_db_setmaxrrperset(dns_db_t *db, uint32_t value);
|
||||
/*%<
|
||||
|
|
|
|||
|
|
@ -107,43 +107,38 @@ dns_rdatalist_fromrdataset(dns_rdataset_t *rdataset,
|
|||
*\li 'rdatalist' is pointed to the rdatalist in rdataset.
|
||||
*/
|
||||
|
||||
/*%
|
||||
* The following are implementation functions for list-based rdatasets.
|
||||
* They are called by rdataset implementations in rdatalist.c, sdlz.c,
|
||||
* and builtin.c. They are not meant to be used directly by callers of
|
||||
* those implmentations.
|
||||
*/
|
||||
void
|
||||
dns_rdatalist_disassociate(dns_rdataset_t *rdatasetp DNS__DB_FLARG);
|
||||
|
||||
isc_result_t
|
||||
dns_rdatalist_first(dns_rdataset_t *rdataset);
|
||||
|
||||
dns__rdatalist_first(dns_rdataset_t *rdataset);
|
||||
isc_result_t
|
||||
dns_rdatalist_next(dns_rdataset_t *rdataset);
|
||||
|
||||
dns__rdatalist_next(dns_rdataset_t *rdataset);
|
||||
void
|
||||
dns_rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata);
|
||||
|
||||
dns__rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata);
|
||||
void
|
||||
dns_rdatalist_clone(dns_rdataset_t *source,
|
||||
dns_rdataset_t *target DNS__DB_FLARG);
|
||||
|
||||
dns__rdatalist_clone(dns_rdataset_t *source,
|
||||
dns_rdataset_t *target DNS__DB_FLARG);
|
||||
unsigned int
|
||||
dns_rdatalist_count(dns_rdataset_t *rdataset);
|
||||
|
||||
dns__rdatalist_count(dns_rdataset_t *rdataset);
|
||||
isc_result_t
|
||||
dns_rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
|
||||
dns__rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
isc_result_t
|
||||
dns_rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG);
|
||||
|
||||
dns__rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG);
|
||||
isc_result_t
|
||||
dns_rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
|
||||
dns__rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
isc_result_t
|
||||
dns_rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG);
|
||||
|
||||
dns__rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG);
|
||||
void
|
||||
dns_rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name);
|
||||
|
||||
dns__rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name);
|
||||
void
|
||||
dns_rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
dns__rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
|
|
|
|||
|
|
@ -83,13 +83,13 @@ struct dns_slabtop {
|
|||
};
|
||||
|
||||
struct dns_slabheader {
|
||||
_Atomic(uint16_t) attributes;
|
||||
_Atomic(uint16_t) attributes;
|
||||
_Atomic(dns_trust_t) trust;
|
||||
|
||||
/*%
|
||||
* Locked by the owning node's lock.
|
||||
*/
|
||||
dns_trust_t trust;
|
||||
uint32_t serial;
|
||||
uint32_t serial;
|
||||
union {
|
||||
isc_stdtime_t expire;
|
||||
dns_ttl_t ttl;
|
||||
|
|
|
|||
|
|
@ -305,10 +305,6 @@ qpcnode_attachnode(dns_dbnode_t *source, dns_dbnode_t **targetp DNS__DB_FLARG);
|
|||
static void
|
||||
qpcnode_detachnode(dns_dbnode_t **nodep DNS__DB_FLARG);
|
||||
static void
|
||||
qpcnode_locknode(dns_dbnode_t *node, isc_rwlocktype_t type);
|
||||
static void
|
||||
qpcnode_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type);
|
||||
static void
|
||||
qpcnode_deletedata(dns_dbnode_t *node, void *data);
|
||||
static void
|
||||
qpcnode_expiredata(dns_dbnode_t *node, void *data);
|
||||
|
|
@ -316,8 +312,6 @@ qpcnode_expiredata(dns_dbnode_t *node, void *data);
|
|||
static dns_dbnode_methods_t qpcnode_methods = (dns_dbnode_methods_t){
|
||||
.attachnode = qpcnode_attachnode,
|
||||
.detachnode = qpcnode_detachnode,
|
||||
.locknode = qpcnode_locknode,
|
||||
.unlocknode = qpcnode_unlocknode,
|
||||
.deletedata = qpcnode_deletedata,
|
||||
.expiredata = qpcnode_expiredata,
|
||||
};
|
||||
|
|
@ -1045,7 +1039,7 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header,
|
|||
rdataset->covers = DNS_TYPEPAIR_COVERS(header->typepair);
|
||||
}
|
||||
rdataset->ttl = !ZEROTTL(header) ? header->expire - now : 0;
|
||||
rdataset->trust = header->trust;
|
||||
rdataset->trust = atomic_load(&header->trust);
|
||||
rdataset->resign = 0;
|
||||
|
||||
if (NEGATIVE(header)) {
|
||||
|
|
@ -1313,7 +1307,7 @@ check_zonecut(qpcnode_t *node, void *arg DNS__DB_FLARG) {
|
|||
}
|
||||
}
|
||||
|
||||
if (found != NULL && (!DNS_TRUST_PENDING(found->trust) ||
|
||||
if (found != NULL && (!DNS_TRUST_PENDING(atomic_load(&found->trust)) ||
|
||||
(search->options & DNS_DBFIND_PENDINGOK) != 0))
|
||||
{
|
||||
/*
|
||||
|
|
@ -1506,14 +1500,19 @@ find_coveringnsec(qpc_search_t *search, const dns_name_t *name,
|
|||
return result;
|
||||
}
|
||||
|
||||
#define MISSING_ANSWER(found, options) \
|
||||
((found) == NULL || \
|
||||
(DNS_TRUST_ADDITIONAL((found)->trust) && \
|
||||
(((options) & DNS_DBFIND_ADDITIONALOK) == 0)) || \
|
||||
((found)->trust == dns_trust_glue && \
|
||||
(((options) & DNS_DBFIND_GLUEOK) == 0)) || \
|
||||
(DNS_TRUST_PENDING((found)->trust) && \
|
||||
(((options) & DNS_DBFIND_PENDINGOK) == 0)))
|
||||
static inline bool
|
||||
missing_answer(dns_slabheader_t *found, unsigned int options) {
|
||||
if (found == NULL) {
|
||||
return true;
|
||||
}
|
||||
|
||||
dns_trust_t trust = atomic_load(&found->trust);
|
||||
return (DNS_TRUST_ADDITIONAL(trust) &&
|
||||
(options & DNS_DBFIND_ADDITIONALOK) == 0) ||
|
||||
(DNS_TRUST_GLUE(trust) && (options & DNS_DBFIND_GLUEOK) == 0) ||
|
||||
(DNS_TRUST_PENDING(trust) &&
|
||||
(options & DNS_DBFIND_PENDINGOK) == 0);
|
||||
}
|
||||
|
||||
static void
|
||||
qpc_search_init(qpc_search_t *search, qpcache_t *db, unsigned int options,
|
||||
|
|
@ -1542,6 +1541,8 @@ static isc_result_t
|
|||
qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
||||
dns_rdatatype_t type, unsigned int options, isc_stdtime_t __now,
|
||||
dns_dbnode_t **nodep, dns_name_t *foundname,
|
||||
dns_clientinfomethods_t *methods ISC_ATTR_UNUSED,
|
||||
dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED,
|
||||
dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
|
||||
qpcnode_t *node = NULL;
|
||||
|
|
@ -1696,7 +1697,7 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
|||
empty_node = false;
|
||||
|
||||
if (header->noqname != NULL &&
|
||||
header->trust == dns_trust_secure)
|
||||
atomic_load(&header->trust) == dns_trust_secure)
|
||||
{
|
||||
found_noqname = true;
|
||||
}
|
||||
|
|
@ -1708,15 +1709,14 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
|||
bool match = false;
|
||||
if (related_headers(header, typepair, sigpair, &found,
|
||||
&foundsig, &match) &&
|
||||
!MISSING_ANSWER(found, options))
|
||||
!missing_answer(found, options))
|
||||
{
|
||||
/*
|
||||
* We can't exit early until we have an answer with
|
||||
* sufficient trust level, see MISSING_ANSWER() macro
|
||||
* for details, because we might need NS or NSEC
|
||||
* sufficient trust level - see missing_answer()
|
||||
* for details - because we might need NS or NSEC
|
||||
* records.
|
||||
*/
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1806,7 +1806,7 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
|||
/*
|
||||
* If we didn't find what we were looking for...
|
||||
*/
|
||||
if (MISSING_ANSWER(found, options)) {
|
||||
if (missing_answer(found, options)) {
|
||||
/*
|
||||
* Return covering NODATA NSEC record.
|
||||
*/
|
||||
|
|
@ -2420,6 +2420,8 @@ new_qpcnode(qpcache_t *qpdb, const dns_name_t *name, dns_namespace_t nspace) {
|
|||
|
||||
static isc_result_t
|
||||
qpcache_findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
||||
dns_clientinfomethods_t *methods ISC_ATTR_UNUSED,
|
||||
dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
qpcache_t *qpdb = (qpcache_t *)db;
|
||||
qpcnode_t *node = NULL;
|
||||
|
|
@ -2744,7 +2746,8 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader,
|
|||
* data will supersede it below. Unclear what the best
|
||||
* policy is here.
|
||||
*/
|
||||
if (trust < oldheader->trust &&
|
||||
dns_trust_t oldtrust = atomic_load(&oldheader->trust);
|
||||
if (trust < oldtrust &&
|
||||
(ACTIVE(oldheader, now) || !EXISTS(oldheader)))
|
||||
{
|
||||
qpcache_hit(qpdb, oldheader);
|
||||
|
|
@ -2777,7 +2780,7 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader,
|
|||
if (ACTIVE(oldheader, now) &&
|
||||
oldheader->typepair == DNS_TYPEPAIR(dns_rdatatype_ns) &&
|
||||
EXISTS(oldheader) && EXISTS(newheader) &&
|
||||
oldheader->trust >= newheader->trust &&
|
||||
newheader->trust < oldtrust &&
|
||||
oldheader->expire < newheader->expire &&
|
||||
dns_rdataslab_equalx(
|
||||
oldheader, newheader, qpdb->common.rdclass,
|
||||
|
|
@ -2811,14 +2814,14 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader,
|
|||
}
|
||||
|
||||
/*
|
||||
* If we will be replacing a NS RRset force its TTL
|
||||
* If we will be replacing an NS RRset, force its TTL
|
||||
* to be no more than the current NS RRset's TTL. This
|
||||
* ensures the delegations that are withdrawn are honoured.
|
||||
*/
|
||||
if (ACTIVE(oldheader, now) &&
|
||||
oldheader->typepair == DNS_TYPEPAIR(dns_rdatatype_ns) &&
|
||||
EXISTS(oldheader) && EXISTS(newheader) &&
|
||||
oldheader->trust <= newheader->trust)
|
||||
newheader->trust > oldtrust)
|
||||
{
|
||||
if (newheader->expire > oldheader->expire) {
|
||||
if (ZEROTTL(oldheader)) {
|
||||
|
|
@ -2837,7 +2840,7 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader,
|
|||
oldheader->typepair ==
|
||||
DNS_SIGTYPEPAIR(dns_rdatatype_ds)) &&
|
||||
EXISTS(oldheader) && EXISTS(newheader) &&
|
||||
oldheader->trust >= newheader->trust &&
|
||||
newheader->trust < oldtrust &&
|
||||
oldheader->expire < newheader->expire &&
|
||||
dns_rdataslab_equal(oldheader, newheader))
|
||||
{
|
||||
|
|
@ -3255,22 +3258,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree) {
|
|||
return mu.leaves;
|
||||
}
|
||||
|
||||
static void
|
||||
qpcnode_locknode(dns_dbnode_t *node, isc_rwlocktype_t type) {
|
||||
qpcnode_t *qpnode = (qpcnode_t *)node;
|
||||
qpcache_t *qpdb = qpnode->qpdb;
|
||||
|
||||
RWLOCK(&qpdb->buckets[qpnode->locknum].lock, type);
|
||||
}
|
||||
|
||||
static void
|
||||
qpcnode_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type) {
|
||||
qpcnode_t *qpnode = (qpcnode_t *)node;
|
||||
qpcache_t *qpdb = qpnode->qpdb;
|
||||
|
||||
RWUNLOCK(&qpdb->buckets[qpnode->locknum].lock, type);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns__qpcache_create(isc_mem_t *mctx, const dns_name_t *origin,
|
||||
dns_dbtype_t type, dns_rdataclass_t rdclass,
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#include <isc/heap.h>
|
||||
#include <isc/hex.h>
|
||||
#include <isc/log.h>
|
||||
#include <isc/loop.h>
|
||||
#include <isc/mem.h>
|
||||
#include <isc/mutex.h>
|
||||
#include <isc/os.h>
|
||||
|
|
@ -238,7 +237,6 @@ struct qpzonedb {
|
|||
qpz_version_t *current_version;
|
||||
qpz_version_t *future_version;
|
||||
qpz_versionlist_t open_versions;
|
||||
isc_loop_t *loop;
|
||||
struct rcu_head rcu_head;
|
||||
|
||||
qpz_heap_t *heap; /* Resigning heap */
|
||||
|
|
@ -517,10 +515,6 @@ free_db_rcu(struct rcu_head *rcu_head) {
|
|||
isc_stats_detach(&qpdb->gluecachestats);
|
||||
}
|
||||
|
||||
if (qpdb->loop != NULL) {
|
||||
isc_loop_detach(&qpdb->loop);
|
||||
}
|
||||
|
||||
isc_rwlock_destroy(&qpdb->lock);
|
||||
isc_refcount_destroy(&qpdb->common.references);
|
||||
|
||||
|
|
@ -987,7 +981,7 @@ bindrdataset(qpzonedb_t *qpdb, qpznode_t *node, dns_slabheader_t *header,
|
|||
rdataset->type = DNS_TYPEPAIR_TYPE(header->typepair);
|
||||
rdataset->covers = DNS_TYPEPAIR_COVERS(header->typepair);
|
||||
rdataset->ttl = header->ttl;
|
||||
rdataset->trust = header->trust;
|
||||
rdataset->trust = atomic_load(&header->trust);
|
||||
|
||||
if (OPTOUT(header)) {
|
||||
rdataset->attributes.optout = true;
|
||||
|
|
@ -2143,7 +2137,7 @@ loading_addrdataset(void *arg, const dns_name_t *name,
|
|||
dns_slabheader_reset(newheader, (dns_dbnode_t *)node);
|
||||
|
||||
newheader->ttl = rdataset->ttl;
|
||||
newheader->trust = rdataset->trust;
|
||||
atomic_store(&newheader->trust, rdataset->trust);
|
||||
newheader->serial = 1;
|
||||
|
||||
dns_slabheader_setownercase(newheader, name);
|
||||
|
|
@ -2511,6 +2505,8 @@ findnodeintree(qpzonedb_t *qpdb, const dns_name_t *name, bool create,
|
|||
|
||||
static isc_result_t
|
||||
qpzone_findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
||||
dns_clientinfomethods_t *methods ISC_ATTR_UNUSED,
|
||||
dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
qpzonedb_t *qpdb = (qpzonedb_t *)db;
|
||||
|
||||
|
|
@ -3275,7 +3271,10 @@ static isc_result_t
|
|||
qpzone_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 ISC_ATTR_UNUSED, dns_dbnode_t **nodep,
|
||||
dns_name_t *foundname, dns_rdataset_t *rdataset,
|
||||
dns_name_t *foundname,
|
||||
dns_clientinfomethods_t *methods ISC_ATTR_UNUSED,
|
||||
dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED,
|
||||
dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
|
||||
isc_result_t result;
|
||||
qpzonedb_t *qpdb = (qpzonedb_t *)db;
|
||||
|
|
@ -3872,24 +3871,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree ISC_ATTR_UNUSED) {
|
|||
return mu.leaves;
|
||||
}
|
||||
|
||||
static void
|
||||
setloop(dns_db_t *db, isc_loop_t *loop) {
|
||||
qpzonedb_t *qpdb = NULL;
|
||||
|
||||
qpdb = (qpzonedb_t *)db;
|
||||
|
||||
REQUIRE(VALID_QPZONE(qpdb));
|
||||
|
||||
RWLOCK(&qpdb->lock, isc_rwlocktype_write);
|
||||
if (qpdb->loop != NULL) {
|
||||
isc_loop_detach(&qpdb->loop);
|
||||
}
|
||||
if (loop != NULL) {
|
||||
isc_loop_attach(loop, &qpdb->loop);
|
||||
}
|
||||
RWUNLOCK(&qpdb->lock, isc_rwlocktype_write);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
qpzonedb_t *qpdb = (qpzonedb_t *)db;
|
||||
|
|
@ -3905,20 +3886,6 @@ getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
|
|||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
static void
|
||||
locknode(dns_dbnode_t *dbnode, isc_rwlocktype_t type) {
|
||||
qpznode_t *node = (qpznode_t *)dbnode;
|
||||
|
||||
RWLOCK(qpzone_get_lock(node), type);
|
||||
}
|
||||
|
||||
static void
|
||||
unlocknode(dns_dbnode_t *dbnode, isc_rwlocktype_t type) {
|
||||
qpznode_t *node = (qpznode_t *)dbnode;
|
||||
|
||||
RWUNLOCK(qpzone_get_lock(node), type);
|
||||
}
|
||||
|
||||
static void
|
||||
deletedata(dns_dbnode_t *node ISC_ATTR_UNUSED, void *data) {
|
||||
dns_slabheader_t *header = data;
|
||||
|
|
@ -4941,18 +4908,6 @@ qpzone_deleterdataset(dns_db_t *db, dns_dbnode_t *dbnode,
|
|||
return result;
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
nodefullname(dns_dbnode_t *node, dns_name_t *name) {
|
||||
REQUIRE(node != NULL);
|
||||
REQUIRE(name != NULL);
|
||||
|
||||
qpznode_t *qpnode = (qpznode_t *)node;
|
||||
|
||||
dns_name_copy(&qpnode->name, name);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
static dns_glue_t *
|
||||
new_glue(isc_mem_t *mctx, const dns_name_t *name) {
|
||||
dns_glue_t *glue = isc_mem_get(mctx, sizeof(*glue));
|
||||
|
|
@ -5016,7 +4971,7 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
|
|||
|
||||
result = qpzone_find(ctx->db, name, ctx->version, dns_rdatatype_a,
|
||||
DNS_DBFIND_GLUEOK, 0, (dns_dbnode_t **)&node_a,
|
||||
name_a, &rdataset_a,
|
||||
name_a, NULL, NULL, &rdataset_a,
|
||||
&sigrdataset_a DNS__DB_FLARG_PASS);
|
||||
if (result == DNS_R_GLUE) {
|
||||
glue = new_glue(ctx->db->mctx, name_a);
|
||||
|
|
@ -5035,7 +4990,7 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
|
|||
|
||||
result = qpzone_find(ctx->db, name, ctx->version, dns_rdatatype_aaaa,
|
||||
DNS_DBFIND_GLUEOK, 0, (dns_dbnode_t **)&node_aaaa,
|
||||
name_aaaa, &rdataset_aaaa,
|
||||
name_aaaa, NULL, NULL, &rdataset_aaaa,
|
||||
&sigrdataset_aaaa DNS__DB_FLARG_PASS);
|
||||
if (result == DNS_R_GLUE) {
|
||||
if (glue == NULL) {
|
||||
|
|
@ -5308,7 +5263,6 @@ static dns_dbmethods_t qpdb_zonemethods = {
|
|||
.deleterdataset = qpzone_deleterdataset,
|
||||
.issecure = issecure,
|
||||
.nodecount = nodecount,
|
||||
.setloop = setloop,
|
||||
.getoriginnode = getoriginnode,
|
||||
.getnsec3parameters = getnsec3parameters,
|
||||
.findnsec3node = qpzone_findnsec3node,
|
||||
|
|
@ -5322,11 +5276,8 @@ static dns_dbmethods_t qpdb_zonemethods = {
|
|||
};
|
||||
|
||||
static dns_dbnode_methods_t qpznode_methods = (dns_dbnode_methods_t){
|
||||
.nodefullname = nodefullname,
|
||||
.attachnode = qpzone_attachnode,
|
||||
.detachnode = qpzone_detachnode,
|
||||
.locknode = locknode,
|
||||
.unlocknode = unlocknode,
|
||||
.deletedata = deletedata,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -26,17 +26,17 @@
|
|||
|
||||
static dns_rdatasetmethods_t methods = {
|
||||
.disassociate = dns_rdatalist_disassociate,
|
||||
.first = dns_rdatalist_first,
|
||||
.next = dns_rdatalist_next,
|
||||
.current = dns_rdatalist_current,
|
||||
.clone = dns_rdatalist_clone,
|
||||
.count = dns_rdatalist_count,
|
||||
.addnoqname = dns_rdatalist_addnoqname,
|
||||
.getnoqname = dns_rdatalist_getnoqname,
|
||||
.addclosest = dns_rdatalist_addclosest,
|
||||
.getclosest = dns_rdatalist_getclosest,
|
||||
.setownercase = dns_rdatalist_setownercase,
|
||||
.getownercase = dns_rdatalist_getownercase,
|
||||
.first = dns__rdatalist_first,
|
||||
.next = dns__rdatalist_next,
|
||||
.current = dns__rdatalist_current,
|
||||
.clone = dns__rdatalist_clone,
|
||||
.count = dns__rdatalist_count,
|
||||
.addnoqname = dns__rdatalist_addnoqname,
|
||||
.getnoqname = dns__rdatalist_getnoqname,
|
||||
.addclosest = dns__rdatalist_addclosest,
|
||||
.getclosest = dns__rdatalist_getclosest,
|
||||
.setownercase = dns__rdatalist_setownercase,
|
||||
.getownercase = dns__rdatalist_getownercase,
|
||||
};
|
||||
|
||||
void
|
||||
|
|
@ -100,7 +100,7 @@ dns_rdatalist_disassociate(dns_rdataset_t *rdataset DNS__DB_FLARG) {
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_rdatalist_first(dns_rdataset_t *rdataset) {
|
||||
dns__rdatalist_first(dns_rdataset_t *rdataset) {
|
||||
dns_rdatalist_t *rdatalist = NULL;
|
||||
|
||||
rdatalist = rdataset->rdlist.list;
|
||||
|
|
@ -114,7 +114,7 @@ dns_rdatalist_first(dns_rdataset_t *rdataset) {
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_rdatalist_next(dns_rdataset_t *rdataset) {
|
||||
dns__rdatalist_next(dns_rdataset_t *rdataset) {
|
||||
dns_rdata_t *rdata;
|
||||
|
||||
rdata = rdataset->rdlist.iter;
|
||||
|
|
@ -132,7 +132,7 @@ dns_rdatalist_next(dns_rdataset_t *rdataset) {
|
|||
}
|
||||
|
||||
void
|
||||
dns_rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) {
|
||||
dns__rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) {
|
||||
dns_rdata_t *list_rdata;
|
||||
|
||||
list_rdata = rdataset->rdlist.iter;
|
||||
|
|
@ -142,8 +142,8 @@ dns_rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) {
|
|||
}
|
||||
|
||||
void
|
||||
dns_rdatalist_clone(dns_rdataset_t *source,
|
||||
dns_rdataset_t *target DNS__DB_FLARG) {
|
||||
dns__rdatalist_clone(dns_rdataset_t *source,
|
||||
dns_rdataset_t *target DNS__DB_FLARG) {
|
||||
REQUIRE(source != NULL);
|
||||
REQUIRE(target != NULL);
|
||||
|
||||
|
|
@ -153,7 +153,7 @@ dns_rdatalist_clone(dns_rdataset_t *source,
|
|||
}
|
||||
|
||||
unsigned int
|
||||
dns_rdatalist_count(dns_rdataset_t *rdataset) {
|
||||
dns__rdatalist_count(dns_rdataset_t *rdataset) {
|
||||
dns_rdatalist_t *rdatalist = NULL;
|
||||
unsigned int count;
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ dns_rdatalist_count(dns_rdataset_t *rdataset) {
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
dns__rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
dns_rdataset_t *neg = NULL;
|
||||
dns_rdataset_t *negsig = NULL;
|
||||
dns_ttl_t ttl;
|
||||
|
|
@ -218,9 +218,9 @@ dns_rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name) {
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG) {
|
||||
dns__rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG) {
|
||||
dns_rdataclass_t rdclass;
|
||||
dns_rdataset_t *tneg = NULL;
|
||||
dns_rdataset_t *tnegsig = NULL;
|
||||
|
|
@ -264,7 +264,7 @@ dns_rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
dns__rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
dns_rdataset_t *neg = NULL;
|
||||
dns_rdataset_t *negsig = NULL;
|
||||
dns_ttl_t ttl;
|
||||
|
|
@ -311,9 +311,9 @@ dns_rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name) {
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG) {
|
||||
dns__rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_rdataset_t *neg,
|
||||
dns_rdataset_t *negsig DNS__DB_FLARG) {
|
||||
dns_rdataclass_t rdclass;
|
||||
dns_rdataset_t *tneg = NULL;
|
||||
dns_rdataset_t *tnegsig = NULL;
|
||||
|
|
@ -357,7 +357,7 @@ dns_rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
|||
}
|
||||
|
||||
void
|
||||
dns_rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
|
||||
dns__rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
|
||||
dns_rdatalist_t *rdatalist;
|
||||
unsigned int i;
|
||||
|
||||
|
|
@ -379,7 +379,7 @@ dns_rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
|
|||
}
|
||||
|
||||
void
|
||||
dns_rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
dns__rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
dns_rdatalist_t *rdatalist;
|
||||
unsigned int i;
|
||||
|
||||
|
|
|
|||
|
|
@ -1123,9 +1123,8 @@ static void
|
|||
rdataset_settrust(dns_rdataset_t *rdataset, dns_trust_t trust) {
|
||||
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
|
||||
|
||||
dns_db_locknode(header->node, isc_rwlocktype_write);
|
||||
header->trust = rdataset->trust = trust;
|
||||
dns_db_unlocknode(header->node, isc_rwlocktype_write);
|
||||
rdataset->trust = trust;
|
||||
atomic_store(&header->trust, trust);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1139,9 +1138,7 @@ static void
|
|||
rdataset_clearprefetch(dns_rdataset_t *rdataset) {
|
||||
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
|
||||
|
||||
dns_db_locknode(header->node, isc_rwlocktype_write);
|
||||
DNS_SLABHEADER_CLRATTR(header, DNS_SLABHEADERATTR_PREFETCH);
|
||||
dns_db_unlocknode(header->node, isc_rwlocktype_write);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -618,17 +618,11 @@ getnodedata(dns_db_t *db, const dns_name_t *name, bool create,
|
|||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
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__DB_FLARG) {
|
||||
return getnodedata(db, name, create, 0, methods, clientinfo, nodep);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
findnode(dns_db_t *db, const dns_name_t *name, bool create,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
return getnodedata(db, name, create, 0, NULL, NULL, nodep);
|
||||
return getnodedata(db, name, create, 0, methods, clientinfo, nodep);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -771,11 +765,11 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
}
|
||||
|
||||
static isc_result_t
|
||||
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__DB_FLARG) {
|
||||
find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
||||
dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
|
||||
dns_dbnode_t **nodep, dns_name_t *foundname,
|
||||
dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo,
|
||||
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) {
|
||||
dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db;
|
||||
dns_dbnode_t *node = NULL;
|
||||
dns_fixedname_t fname;
|
||||
|
|
@ -935,15 +929,6 @@ findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
|
|||
return result;
|
||||
}
|
||||
|
||||
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__DB_FLARG) {
|
||||
return findext(db, name, version, type, options, now, nodep, foundname,
|
||||
NULL, NULL, 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,
|
||||
|
|
@ -1107,50 +1092,6 @@ deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
return result;
|
||||
}
|
||||
|
||||
static bool
|
||||
issecure(dns_db_t *db) {
|
||||
UNUSED(db);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
nodecount(dns_db_t *db, dns_dbtree_t tree) {
|
||||
UNUSED(db);
|
||||
UNUSED(tree);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
setloop(dns_db_t *db, isc_loop_t *loop) {
|
||||
UNUSED(db);
|
||||
UNUSED(loop);
|
||||
}
|
||||
|
||||
/*
|
||||
* getoriginnode() is used by the update code to find the
|
||||
* dns_rdatatype_dnskey record for a zone
|
||||
*/
|
||||
static isc_result_t
|
||||
getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) {
|
||||
dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db;
|
||||
isc_result_t result;
|
||||
|
||||
REQUIRE(VALID_SDLZDB(sdlz));
|
||||
if (sdlz->dlzimp->methods->newversion == NULL) {
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
result = getnodedata(db, &sdlz->common.origin, false, 0, NULL, NULL,
|
||||
nodep);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
sdlz_log(ISC_LOG_ERROR, "sdlz getoriginnode failed: %s",
|
||||
isc_result_totext(result));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static dns_dbmethods_t sdlzdb_methods = {
|
||||
.destroy = destroy,
|
||||
.currentversion = currentversion,
|
||||
|
|
@ -1165,12 +1106,6 @@ static dns_dbmethods_t sdlzdb_methods = {
|
|||
.addrdataset = addrdataset,
|
||||
.subtractrdataset = subtractrdataset,
|
||||
.deleterdataset = deleterdataset,
|
||||
.issecure = issecure,
|
||||
.nodecount = nodecount,
|
||||
.setloop = setloop,
|
||||
.getoriginnode = getoriginnode,
|
||||
.findnodeext = findnodeext,
|
||||
.findext = findext,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -1303,19 +1238,19 @@ static void
|
|||
rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target DNS__DB_FLARG) {
|
||||
dns_dbnode_t *node = source->rdlist.node;
|
||||
|
||||
dns_rdatalist_clone(source, target DNS__DB_FLARG_PASS);
|
||||
dns__rdatalist_clone(source, target DNS__DB_FLARG_PASS);
|
||||
sdlznode_attachnode(node, &target->rdlist.node DNS__DB_FLARG_PASS);
|
||||
}
|
||||
|
||||
static dns_rdatasetmethods_t rdataset_methods = {
|
||||
.disassociate = disassociate,
|
||||
.first = dns_rdatalist_first,
|
||||
.next = dns_rdatalist_next,
|
||||
.current = dns_rdatalist_current,
|
||||
.first = dns__rdatalist_first,
|
||||
.next = dns__rdatalist_next,
|
||||
.current = dns__rdatalist_current,
|
||||
.clone = rdataset_clone,
|
||||
.count = dns_rdatalist_count,
|
||||
.addnoqname = dns_rdatalist_addnoqname,
|
||||
.getnoqname = dns_rdatalist_getnoqname,
|
||||
.count = dns__rdatalist_count,
|
||||
.addnoqname = dns__rdatalist_addnoqname,
|
||||
.getnoqname = dns__rdatalist_getnoqname,
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -15128,7 +15128,6 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
|
|||
isc_result_totext(result));
|
||||
goto cleanup;
|
||||
}
|
||||
dns_db_setloop(stub->db, zone->loop);
|
||||
dns_db_setmaxrrperset(stub->db, zone->maxrrperset);
|
||||
dns_db_setmaxtypepername(stub->db,
|
||||
zone->maxtypepername);
|
||||
|
|
@ -18172,7 +18171,6 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, bool dump) {
|
|||
zone_detachdb(zone);
|
||||
}
|
||||
zone_attachdb(zone, db);
|
||||
dns_db_setloop(zone->db, zone->loop);
|
||||
dns_db_setmaxrrperset(zone->db, zone->maxrrperset);
|
||||
dns_db_setmaxtypepername(zone->db, zone->maxtypepername);
|
||||
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED | DNS_ZONEFLG_NEEDNOTIFY);
|
||||
|
|
@ -24800,7 +24798,6 @@ dns_zone_makedb(dns_zone_t *zone, dns_db_t **dbp) {
|
|||
break;
|
||||
}
|
||||
|
||||
dns_db_setloop(db, zone->loop);
|
||||
dns_db_setmaxrrperset(db, zone->maxrrperset);
|
||||
dns_db_setmaxtypepername(db, zone->maxtypepername);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue