}
static qpcnode_t *
-new_qpcnode(qpcache_t *qpdb, const dns_name_t *name) {
+new_qpcnode(qpcache_t *qpdb, const dns_name_t *name, dns_namespace_t nspace) {
qpcnode_t *newdata = isc_mem_get(qpdb->common.mctx, sizeof(*newdata));
*newdata = (qpcnode_t){
.name = DNS_NAME_INITEMPTY,
+ .nspace = nspace,
.references = ISC_REFCOUNT_INITIALIZER(1),
.locknum = isc_random_uniform(qpdb->buckets_count),
};
result = dns_qp_getname(qpdb->tree, name, nspace,
(void **)&node, NULL);
if (result != ISC_R_SUCCESS) {
- node = new_qpcnode(qpdb, name);
- node->nspace = nspace;
+ node = new_qpcnode(qpdb, name, nspace);
result = dns_qp_insert(qpdb->tree, node, 0);
INSIST(result == ISC_R_SUCCESS);
qpcnode_unref(node);
(void **)&nsecnode, NULL);
if (result != ISC_R_SUCCESS) {
INSIST(nsecnode == NULL);
- nsecnode = new_qpcnode(qpdb, name);
- nsecnode->nspace = DNS_DBNAMESPACE_NSEC;
+ nsecnode = new_qpcnode(qpdb, name,
+ DNS_DBNAMESPACE_NSEC);
result = dns_qp_insert(qpdb->nsec, nsecnode, 0);
INSIST(result == ISC_R_SUCCESS);
qpcnode_detach(&nsecnode);
}
static qpznode_t *
-new_qpznode(qpzonedb_t *qpdb, const dns_name_t *name) {
+new_qpznode(qpzonedb_t *qpdb, const dns_name_t *name, dns_namespace_t nspace) {
qpznode_t *newdata = isc_mem_get(qpdb->common.mctx, sizeof(*newdata));
*newdata = (qpznode_t){
.name = DNS_NAME_INITEMPTY,
+ .nspace = nspace,
.heap = qpdb->heap,
.references = ISC_REFCOUNT_INITIALIZER(1),
.locknum = qpzone_get_locknum(),
* We now explicitly create a node for the zone's origin, and then
* we simply remember the node data's address.
*/
- qpdb->origin = new_qpznode(qpdb, &qpdb->common.origin);
- qpdb->origin->nspace = DNS_DBNAMESPACE_NORMAL;
+ qpdb->origin = new_qpznode(qpdb, &qpdb->common.origin,
+ DNS_DBNAMESPACE_NORMAL);
+
result = dns_qp_insert(qp, qpdb->origin, 0);
INSIST(result == ISC_R_SUCCESS);
* Add an apex node to the NSEC tree so that we can quickly skip over
* the NSEC nodes while iterating over the full tree.
*/
- qpdb->nsec_origin = new_qpznode(qpdb, &qpdb->common.origin);
- qpdb->nsec_origin->nspace = DNS_DBNAMESPACE_NSEC;
+ qpdb->nsec_origin = new_qpznode(qpdb, &qpdb->common.origin,
+ DNS_DBNAMESPACE_NSEC);
result = dns_qp_insert(qp, qpdb->nsec_origin, 0);
INSIST(result == ISC_R_SUCCESS);
* return partial matches when there is only a single NSEC3
* record in the tree.
*/
- qpdb->nsec3_origin = new_qpznode(qpdb, &qpdb->common.origin);
- qpdb->nsec3_origin->nspace = DNS_DBNAMESPACE_NSEC3;
+ qpdb->nsec3_origin = new_qpznode(qpdb, &qpdb->common.origin,
+ DNS_DBNAMESPACE_NSEC3);
result = dns_qp_insert(qp, qpdb->nsec3_origin, 0);
INSIST(result == ISC_R_SUCCESS);
if (result == ISC_R_SUCCESS) {
*nodep = node;
} else {
- node = new_qpznode(qpdb, name);
- node->nspace = DNS_DBNAMESPACE_NSEC3;
+ node = new_qpznode(qpdb, name, DNS_DBNAMESPACE_NSEC3);
result = dns_qp_insert(loadctx->tree, node, 0);
INSIST(result == ISC_R_SUCCESS);
*nodep = node;
}
} else {
INSIST(node == NULL);
- node = new_qpznode(qpdb, name);
- node->nspace = DNS_DBNAMESPACE_NORMAL;
+ node = new_qpznode(qpdb, name, DNS_DBNAMESPACE_NORMAL);
result = dns_qp_insert(loadctx->tree, node, 0);
INSIST(result == ISC_R_SUCCESS);
qpznode_unref(node);
* move on.
*/
node->havensec = true;
- nsecnode = new_qpznode(qpdb, name);
- nsecnode->nspace = DNS_DBNAMESPACE_NSEC;
+ nsecnode = new_qpznode(qpdb, name, DNS_DBNAMESPACE_NSEC);
(void)dns_qp_insert(loadctx->tree, nsecnode, 0);
qpznode_detach(&nsecnode);
result = dns_qp_getname(qp, &foundname, nspace, (void **)&node, NULL);
if (result != ISC_R_SUCCESS) {
INSIST(node == NULL);
- node = new_qpznode(qpdb, &foundname);
- node->nspace = nspace;
+ node = new_qpznode(qpdb, &foundname, nspace);
result = dns_qp_insert(qp, node, 0);
INSIST(result == ISC_R_SUCCESS);
qpznode_unref(node);
return result;
}
- node = new_qpznode(qpdb, name);
- node->nspace = nspace;
+ node = new_qpznode(qpdb, name, nspace);
result = dns_qp_insert(qp, node, 0);
INSIST(result == ISC_R_SUCCESS);
qpznode_unref(node);
* so we can detach the new one we created and
* move on.
*/
- qpznode_t *nsecnode = new_qpznode(qpdb, name);
- nsecnode->nspace = DNS_DBNAMESPACE_NSEC;
+ qpznode_t *nsecnode = new_qpznode(qpdb, name,
+ DNS_DBNAMESPACE_NSEC);
(void)dns_qp_insert(nsec, nsecnode, 0);
qpznode_detach(&nsecnode);
}