REQUIRE(VALID_FWDTABLE(fwdtable));
dns_qpmulti_query(fwdtable->table, &qpr);
- result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL, NULL,
+ result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL,
NULL, &pval, NULL);
if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH) {
dns_forwarders_t *fwdrs = pval;
isc_result_t
dns_qp_lookup(dns_qpreadable_t qpr, const dns_name_t *name,
- dns_namespace_t space, dns_name_t *foundname, dns_qpiter_t *iter,
+ dns_namespace_t space, dns_qpiter_t *iter,
dns_qpchain_t *chain, void **pval_r, uint32_t *ival_r);
/*%<
* Look up a leaf in a qp-trie that is equal to, or an ancestor domain of,
REQUIRE(foundname != NULL);
dns_qpmulti_query(keytable->table, &qpr);
- result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL, NULL,
+ result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL,
NULL, &pval, NULL);
keynode = pval;
REQUIRE(dns_name_isabsolute(name));
dns_qpmulti_query(keytable->table, &qpr);
- result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL, NULL,
+ result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL,
NULL, &pval, NULL);
if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH) {
keynode = pval;
REQUIRE(VALID_NAMETREE(nametree));
dns_qpmulti_query(nametree->table, &qpr);
- result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL, NULL,
+ result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL,
NULL, (void **)&node, NULL);
if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH) {
if (found != NULL) {
RWLOCK(&ntatable->rwlock, isc_rwlocktype_read);
dns_qpmulti_query(ntatable->table, &qpr);
- result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL, NULL,
+ result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL,
NULL, &pval, NULL);
nta = pval;
/***********************************************************************
* chains
*/
-static void
+void
maybe_set_name(dns_qpreader_t *qp, dns_qpnode_t *node, dns_name_t *name) {
dns_qpkey_t key;
size_t len;
isc_result_t
dns_qp_lookup(dns_qpreadable_t qpr, const dns_name_t *name,
- dns_namespace_t space, dns_name_t *foundname, dns_qpiter_t *iter,
+ dns_namespace_t space, dns_qpiter_t *iter,
dns_qpchain_t *chain, void **pval_r, uint32_t *ival_r) {
dns_qpreader_t *qp = dns_qpreader(qpr);
dns_qpkey_t search, found;
bool setiter = true;
REQUIRE(QP_VALID(qp));
- REQUIRE(foundname == NULL || ISC_MAGIC_VALID(name, DNS_NAME_MAGIC));
searchlen = dns_qpkey_fromname(search, name, space);
SET_IF_NOT_NULL(pval_r, leaf_pval(n));
SET_IF_NOT_NULL(ival_r, leaf_ival(n));
- maybe_set_name(qp, n, foundname);
return result;
}
n = chain->chain[len].node;
SET_IF_NOT_NULL(pval_r, leaf_pval(n));
SET_IF_NOT_NULL(ival_r, leaf_ival(n));
- maybe_set_name(qp, n, foundname);
return DNS_R_PARTIALMATCH;
} else {
/*
/**********************************************************************/
+void
+maybe_set_name(dns_qpreader_t *qp, dns_qpnode_t *node, dns_name_t *name);
+
void
dns__qp_initialize(void);
void
* Look for the node in the auxiliary NSEC namespace.
*/
result = dns_qp_lookup(search->qpdb->tree, name, DNS_DBNAMESPACE_NSEC,
- NULL, &iter, NULL, (void **)&node, NULL);
+ &iter, NULL, (void **)&node, NULL);
/*
* When DNS_R_PARTIALMATCH or ISC_R_NOTFOUND is returned from
* dns_qp_lookup there is potentially a covering NSEC present
* Search down from the root of the tree.
*/
result = dns_qp_lookup(search.qpdb->tree, name, DNS_DBNAMESPACE_NORMAL,
- NULL, NULL, &search.chain, (void **)&node, NULL);
+ NULL, &search.chain, (void **)&node, NULL);
if (result != ISC_R_NOTFOUND && foundname != NULL) {
dns_name_copy(&node->name, foundname);
}
* Search down from the root of the tree.
*/
result = dns_qp_lookup(search.qpdb->tree, name, DNS_DBNAMESPACE_NORMAL,
- NULL, NULL, &search.chain, (void **)&node, NULL);
+ NULL, &search.chain, (void **)&node, NULL);
switch (result) {
case ISC_R_SUCCESS:
if (continuing && qpdbiter->node != NULL) {
isc_result_t result;
result = dns_qp_lookup(qpdb->tree, qpdbiter->name,
- DNS_DBNAMESPACE_NORMAL, NULL,
+ DNS_DBNAMESPACE_NORMAL,
&qpdbiter->iter, NULL, NULL, NULL);
INSIST(result == ISC_R_SUCCESS);
}
dereference_iter_node(qpdbiter DNS__DB_FLARG_PASS);
- result = dns_qp_lookup(qpdb->tree, name, DNS_DBNAMESPACE_NORMAL, NULL,
+ result = dns_qp_lookup(qpdb->tree, name, DNS_DBNAMESPACE_NORMAL,
&qpdbiter->iter, NULL, (void **)&qpdbiter->node,
NULL);
}
result = dns_qp_lookup(&search->qpr, wname, nspace,
- NULL, &wit, NULL,
+ &wit, NULL,
(void **)&wnode, NULL);
if (result == ISC_R_SUCCESS) {
/*
*/
*firstp = false;
result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NSEC,
- NULL, nit, NULL, NULL, NULL);
+ nit, NULL, NULL, NULL);
INSIST(result != ISC_R_NOTFOUND);
if (result == ISC_R_SUCCESS) {
/*
*nodep = NULL;
result = dns_qp_lookup(
- &search->qpr, name, DNS_DBNAMESPACE_NORMAL, NULL,
+ &search->qpr, name, DNS_DBNAMESPACE_NORMAL,
&search->iter, &search->chain, (void **)nodep, NULL);
if (result == ISC_R_SUCCESS) {
break;
/*
* Search down from the root of the tree.
*/
- result = dns_qp_lookup(&search.qpr, name, nspace, NULL, &search.iter,
+ result = dns_qp_lookup(&search.qpr, name, nspace, &search.iter,
&search.chain, (void **)&node, NULL);
if (result != ISC_R_NOTFOUND) {
dns_name_copy(&node->name, foundname);
* origin node.
*/
result = dns_qp_lookup(qpdbiter->snap, &qpdb->common.origin,
- DNS_DBNAMESPACE_NSEC3, NULL,
+ DNS_DBNAMESPACE_NSEC3,
&qpdbiter->iter, NULL,
(void **)&qpdbiter->node, NULL);
if (result != ISC_R_SUCCESS ||
* The final non-nsec node is before the the NSEC origin node.
*/
result = dns_qp_lookup(qpdbiter->snap, &qpdb->common.origin,
- DNS_DBNAMESPACE_NSEC, NULL,
+ DNS_DBNAMESPACE_NSEC,
&qpdbiter->iter, NULL,
(void **)&qpdbiter->node, NULL);
if (result == ISC_R_SUCCESS) {
switch (qpdbiter->nsec3mode) {
case nsec3only:
result = dns_qp_lookup(
- qpdbiter->snap, name, DNS_DBNAMESPACE_NSEC3, NULL,
+ qpdbiter->snap, name, DNS_DBNAMESPACE_NSEC3,
&qpdbiter->iter, NULL, (void **)&qpdbiter->node, NULL);
break;
case nonsec3:
result = dns_qp_lookup(
- qpdbiter->snap, name, DNS_DBNAMESPACE_NORMAL, NULL,
+ qpdbiter->snap, name, DNS_DBNAMESPACE_NORMAL,
&qpdbiter->iter, NULL, (void **)&qpdbiter->node, NULL);
break;
case full:
result = dns_qp_lookup(
- qpdbiter->snap, name, DNS_DBNAMESPACE_NORMAL, NULL,
+ qpdbiter->snap, name, DNS_DBNAMESPACE_NORMAL,
&qpdbiter->iter, NULL, (void **)&qpdbiter->node, NULL);
if (result != ISC_R_SUCCESS) {
tresult = dns_qp_lookup(qpdbiter->snap, name,
- DNS_DBNAMESPACE_NSEC3, NULL,
+ DNS_DBNAMESPACE_NSEC3,
&qpdbiter->iter, NULL,
(void **)&qpdbiter->node, NULL);
if (tresult == ISC_R_SUCCESS) {
INSIST(qpdbiter->node->nspace == DNS_DBNAMESPACE_NSEC);
result = dns_qp_lookup(qpdbiter->snap, &qpdb->common.origin,
- DNS_DBNAMESPACE_NSEC, NULL,
+ DNS_DBNAMESPACE_NSEC,
&qpdbiter->iter, NULL,
(void **)&qpdbiter->node, NULL);
INSIST(qpdbiter->node->nspace == DNS_DBNAMESPACE_NSEC);
result = dns_qp_lookup(qpdbiter->snap, &qpdb->common.origin,
- DNS_DBNAMESPACE_NSEC3, NULL,
+ DNS_DBNAMESPACE_NSEC3,
&qpdbiter->iter, NULL,
(void **)&qpdbiter->node, NULL);
if (result != ISC_R_SUCCESS ||
* seek the NSEC3 origin node.
*/
result = dns_qp_lookup(iter->snap, &qpdb->common.origin,
- DNS_DBNAMESPACE_NSEC3, NULL, &iter->iter,
+ DNS_DBNAMESPACE_NSEC3, &iter->iter,
NULL, NULL, NULL);
INSIST(result == ISC_R_SUCCESS);
break;
dns_qpmulti_query(rpzs->table, &qpr);
dns_qpchain_init(&qpr, &chain);
- result = dns_qp_lookup(&qpr, trig_name, DNS_DBNAMESPACE_NORMAL, NULL,
+ result = dns_qp_lookup(&qpr, trig_name, DNS_DBNAMESPACE_NORMAL,
NULL, &chain, (void **)&data, NULL);
switch (result) {
case ISC_R_SUCCESS:
result = dns_qp_getname(&qpr, name, DNS_DBNAMESPACE_NORMAL,
&pval, NULL);
} else {
- result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL, NULL,
+ result = dns_qp_lookup(&qpr, name, DNS_DBNAMESPACE_NORMAL,
NULL, &chain, &pval, NULL);
if (exactopts == DNS_ZTFIND_NOEXACT && result == ISC_R_SUCCESS)
{
start = isc_time_monotonic();
for (i = 0; i < n; i++) {
name = dns_fixedname_name(&items[i]);
- dns_qp_lookup(qp, name, DNS_DBNAMESPACE_NORMAL, NULL, NULL,
+ dns_qp_lookup(qp, name, DNS_DBNAMESPACE_NORMAL, NULL,
NULL, NULL, NULL);
}
stop = isc_time_monotonic();
++search->ndata[1];
}
- dns_qp_lookup(qp, search, DNS_DBNAMESPACE_NORMAL, NULL, NULL,
+ dns_qp_lookup(qp, search, DNS_DBNAMESPACE_NORMAL, NULL,
NULL, NULL, NULL);
}
stop = isc_time_monotonic();
dns_fixedname_t fn1, fn2;
dns_name_t *name = dns_fixedname_initname(&fn1);
dns_name_t *foundname = dns_fixedname_initname(&fn2);
+ dns_qpchain_t chain;
void *pval = NULL;
dns_test_namefromstring(check[i].query, &fn1);
- result = dns_qp_lookup(qp, name, space, foundname, NULL, NULL,
- &pval, NULL);
+ dns_qpchain_init(qp, &chain);
+ result = dns_qp_lookup(qp, name, space, NULL,
+ &chain, &pval, NULL);
+
+ /* Extract the found name using maybe_set_name if we found something */
+ if (result == ISC_R_SUCCESS || result == DNS_R_PARTIALMATCH) {
+ if (chain.len > 0) {
+ dns_qpnode_t *node = chain.chain[chain.len - 1].node;
+ maybe_set_name((dns_qpreader_t *)qp, node, foundname);
+ }
+ }
#if 0
fprintf(stderr, "%s%s %s (expected %s) "
dns_qpchain_init(qp, &chain);
dns_test_namefromstring(check[i].query, &fn1);
- result = dns_qp_lookup(qp, name, check[i].space, NULL, iter,
+ result = dns_qp_lookup(qp, name, check[i].space, iter,
&chain, NULL, NULL);
#if 0
fprintf(stderr,
result = dns_name_tostring(expred, &predstr, isc_g_mctx);
assert_int_equal(result, ISC_R_SUCCESS);
- result = dns_qp_lookup(qp, name, check[i].space, NULL, &it,
+ result = dns_qp_lookup(qp, name, check[i].space, &it,
chain, NULL, NULL);
#if 0
fprintf(stderr, "%s %s: expected %s got %s\n", check[i].query,