Commit e9207d2d1e for bind
commit e9207d2d1e3c614fbbd71a1762217eea96a7ceb1
Author: Alessio Podda <alessio@isc.org>
Date: Mon Feb 16 21:05:11 2026 +0100
Split dns_name_t into two types
The dns_name_t type is widely used through the codebase. It also
occupies 64 bytes, which is a substantial overhead given that domain
names are usually smaller than 32 bytes.
Most of the overhead comes from the two intrusive linked lists and the
hashmap pointer embedded in the type. Those intrusive linked lists are
only used in a fraction of the cases.
This commit splits dns_name_t into two types, one which contains the
linked lists, and one that doesn't, and uses the former only when the
linked lists are necessary.
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bdc45b2388..ab533e80bd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -608,9 +608,9 @@ stages:
- git ls-files -z | xargs -0 -r touch -t 199808172205
# Build the test binaries here (rather than in the build job) and run them.
# CMocka tests: Mark Meson-generated XMLs to exclude them later with --logbase, CMocka generates better ones.
- - meson test -C build --suite cmocka --wrapper "$MESON_WRAPPER" --logbase "exclude-" || RET=1
+ - meson test -C build --print-errorlogs --suite cmocka --wrapper "$MESON_WRAPPER" --logbase "exclude-" || RET=1
# Non-CMocka test: Use Meson-generated XMLs.
- - meson test -C build --no-suite cmocka --wrapper "$MESON_WRAPPER" --logbase "include-" || RET=1
+ - meson test -C build --print-errorlogs --no-suite cmocka --wrapper "$MESON_WRAPPER" --logbase "include-" || RET=1
- >
"$PYTHON" "$CI_PROJECT_DIR"/bind9-qa/ci/postprocess_junit_files.py build/meson-logs/include-*.junit.xml --output "$CI_PROJECT_DIR/junit.xml"
- (exit $RET)
diff --git a/bin/delv/delv.c b/bin/delv/delv.c
index b5d12f122b..2450223172 100644
--- a/bin/delv/delv.c
+++ b/bin/delv/delv.c
@@ -1838,7 +1838,7 @@ resolve_cb(dns_client_t *client, const dns_name_t *query_name,
ISC_LIST_FOREACH(*namelist, response_name, link) {
ISC_LIST_FOREACH(response_name->list, rdataset, link) {
- printdata(rdataset, response_name);
+ printdata(rdataset, dns_linkedname_name(response_name));
}
}
@@ -1982,7 +1982,7 @@ recvresponse(void *arg) {
* fine, we can just print that version.
*/
if (!showtrust) {
- printdata(rdataset, name);
+ printdata(rdataset, dns_linkedname_name(name));
continue;
}
@@ -1994,10 +1994,12 @@ recvresponse(void *arg) {
* duplicate output, so we check here whether we've
* already printed this name and type.
*/
- if (prev != NULL && dns_name_equal(prev, name)) {
+ if (prev != NULL &&
+ dns_name_equal(prev, dns_linkedname_name(name)))
+ {
continue;
}
- prev = name;
+ prev = dns_linkedname_name(name);
if (prevtype == rdataset->type) {
continue;
@@ -2015,13 +2017,15 @@ recvresponse(void *arg) {
if (cdflag) {
options |= DNS_DBFIND_PENDINGOK;
}
- result = dns_view_simplefind(view, name, rdataset->type,
- 0, options, &rds, &sigs);
+ result = dns_view_simplefind(
+ view, dns_linkedname_name(name), rdataset->type,
+ 0, options, &rds, &sigs);
if (result == ISC_R_SUCCESS) {
- printdata(&rds, name);
+ printdata(&rds, dns_linkedname_name(name));
dns_rdataset_disassociate(&rds);
if (dns_rdataset_isassociated(&sigs)) {
- printdata(&sigs, name);
+ printdata(&sigs,
+ dns_linkedname_name(name));
dns_rdataset_disassociate(&sigs);
}
}
@@ -2051,7 +2055,8 @@ sendquery(void *arg) {
isc_sockaddr_t peer = isc_nmsocket_getaddr(sock);
isc_result_t result;
dns_message_t *message = NULL;
- dns_name_t *query_name = NULL, *mname = NULL;
+ dns_name_t *query_name = NULL;
+ dns_linkedname_t *mname = NULL;
dns_rdataset_t *mrdataset = NULL;
dns_request_t *request = NULL;
@@ -2070,7 +2075,7 @@ sendquery(void *arg) {
dns_message_gettempname(message, &mname);
dns_message_gettemprdataset(message, &mrdataset);
- dns_name_clone(query_name, mname);
+ dns_name_clone(query_name, dns_linkedname_name(mname));
dns_rdataset_makequestion(mrdataset, dns_rdataclass_in, qtype);
ISC_LIST_APPEND(mname->list, mrdataset, link);
dns_message_addname(message, mname, DNS_SECTION_QUESTION);
diff --git a/bin/dig/dig.c b/bin/dig/dig.c
index e8d83c5288..440fe8a86b 100644
--- a/bin/dig/dig.c
+++ b/bin/dig/dig.c
@@ -625,7 +625,7 @@ isdotlocal(dns_message_t *msg) {
static dns_name_t local = DNS_NAME_INITABSOLUTE(local_ndata);
MSG_SECTION_FOREACH(msg, DNS_SECTION_QUESTION, name) {
- if (dns_name_issubdomain(name, &local)) {
+ if (dns_name_issubdomain(dns_linkedname_name(name), &local)) {
return true;
}
}
diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c
index 3e6ebeb312..621a7852b0 100644
--- a/bin/dig/dighost.c
+++ b/bin/dig/dighost.c
@@ -1442,8 +1442,8 @@ save_opt(dig_lookup_t *lookup, char *code, char *value) {
* type, and class.
*/
static void
-add_question(dns_message_t *message, dns_name_t *name, dns_rdataclass_t rdclass,
- dns_rdatatype_t rdtype) {
+add_question(dns_message_t *message, dns_linkedname_t *name,
+ dns_rdataclass_t rdclass, dns_rdatatype_t rdtype) {
dns_rdataset_t *rdataset;
debug("add_question()");
@@ -1817,8 +1817,9 @@ followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section) {
int order;
domain = dns_fixedname_name(&query->lookup->fdomain);
- namereln = dns_name_fullcompare(name, domain, &order,
- &nlabels);
+ namereln =
+ dns_name_fullcompare(dns_linkedname_name(name),
+ domain, &order, &nlabels);
if (namereln == dns_namereln_equal) {
if (!horizontal) {
dighost_warning("BAD (HORIZONTAL) "
@@ -1874,7 +1875,8 @@ followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section) {
lookup->recurse = false;
}
domain = dns_fixedname_name(&lookup->fdomain);
- dns_name_copy(name, domain);
+ dns_name_copy(dns_linkedname_name(name),
+ domain);
lookup->edns = lookup->original_edns;
}
debug("adding server %s", namestr);
@@ -2006,7 +2008,7 @@ insert_soa(dig_lookup_t *lookup) {
dns_rdata_t *rdata = NULL;
dns_rdatalist_t *rdatalist = NULL;
dns_rdataset_t *rdataset = NULL;
- dns_name_t *soaname = NULL;
+ dns_linkedname_t *soaname = NULL;
debug("insert_soa()");
soa.serial = lookup->ixfr_serial;
@@ -2042,7 +2044,8 @@ insert_soa(dig_lookup_t *lookup) {
dns_rdatalist_tordataset(rdatalist, rdataset);
dns_message_gettempname(lookup->sendmsg, &soaname);
- dns_name_clone(lookup->name, soaname);
+ dns_name_clone(dns_linkedname_name(lookup->name),
+ dns_linkedname_name(soaname));
ISC_LIST_INIT(soaname->list);
ISC_LIST_APPEND(soaname->list, rdataset, link);
dns_message_addname(lookup->sendmsg, soaname, DNS_SECTION_AUTHORITY);
@@ -2185,7 +2188,8 @@ setup_lookup(dig_lookup_t *lookup) {
len = (unsigned int)strlen(origin);
isc_buffer_init(&b, origin, len);
isc_buffer_add(&b, len);
- result = dns_name_fromtext(lookup->oname, &b, dns_rootname, 0);
+ result = dns_name_fromtext(dns_linkedname_name(lookup->oname),
+ &b, dns_rootname, 0);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(lookup->sendmsg, &lookup->name);
dns_message_puttempname(lookup->sendmsg,
@@ -2194,7 +2198,8 @@ setup_lookup(dig_lookup_t *lookup) {
isc_result_totext(result));
}
if (lookup->trace && lookup->trace_root) {
- dns_name_clone(dns_rootname, lookup->name);
+ dns_name_clone(dns_rootname,
+ dns_linkedname_name(lookup->name));
} else {
dns_fixedname_t fixed;
dns_name_t *name;
@@ -2207,10 +2212,15 @@ setup_lookup(dig_lookup_t *lookup) {
if (result == ISC_R_SUCCESS) {
if (!dns_name_isabsolute(name)) {
result = dns_name_concatenate(
- name, lookup->oname,
- lookup->name);
+ name,
+ dns_linkedname_name(
+ lookup->oname),
+ dns_linkedname_name(
+ lookup->name));
} else {
- dns_name_copy(name, lookup->name);
+ dns_name_copy(name,
+ dns_linkedname_name(
+ lookup->name));
}
}
if (result != ISC_R_SUCCESS) {
@@ -2230,13 +2240,15 @@ setup_lookup(dig_lookup_t *lookup) {
} else {
debug("using root origin");
if (lookup->trace && lookup->trace_root) {
- dns_name_clone(dns_rootname, lookup->name);
+ dns_name_clone(dns_rootname,
+ dns_linkedname_name(lookup->name));
} else {
len = (unsigned int)strlen(textname);
isc_buffer_init(&b, textname, len);
isc_buffer_add(&b, len);
- result = dns_name_fromtext(lookup->name, &b,
- dns_rootname, 0);
+ result = dns_name_fromtext(
+ dns_linkedname_name(lookup->name), &b,
+ dns_rootname, 0);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(lookup->sendmsg,
&lookup->name);
@@ -2253,9 +2265,10 @@ setup_lookup(dig_lookup_t *lookup) {
}
}
}
- dns_name_format(lookup->name, store, sizeof(store));
+ dns_name_format(dns_linkedname_name(lookup->name), store,
+ sizeof(store));
dighost_trying(store, lookup);
- INSIST(dns_name_isabsolute(lookup->name));
+ INSIST(dns_name_isabsolute(dns_linkedname_name(lookup->name)));
lookup->sendmsg->id = (dns_messageid_t)isc_random16();
lookup->sendmsg->opcode = lookup->opcode;
@@ -4188,13 +4201,16 @@ recv_done(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region,
ISC_LIST_FOREACH(name->list, rdataset, link) {
if (l->rdtype != rdataset->type ||
l->rdclass != rdataset->rdclass ||
- !dns_name_equal(l->name, name))
+ !dns_name_equal(
+ dns_linkedname_name(l->name),
+ dns_linkedname_name(name)))
{
char namestr[DNS_NAME_FORMATSIZE];
char typebuf[DNS_RDATATYPE_FORMATSIZE];
char classbuf[DNS_RDATACLASS_FORMATSIZE];
- dns_name_format(name, namestr,
- sizeof(namestr));
+ dns_name_format(
+ dns_linkedname_name(name),
+ namestr, sizeof(namestr));
dns_rdatatype_format(rdataset->type,
typebuf,
sizeof(typebuf));
diff --git a/bin/dig/dighost.h b/bin/dig/dighost.h
index 470429bcba..16cf60fb9f 100644
--- a/bin/dig/dighost.h
+++ b/bin/dig/dighost.h
@@ -135,10 +135,10 @@ struct dig_lookup {
char oname_space[BUFSIZE];
isc_buffer_t renderbuf;
char *sendspace;
- dns_name_t *name;
+ dns_linkedname_t *name;
isc_interval_t interval;
dns_message_t *sendmsg;
- dns_name_t *oname;
+ dns_linkedname_t *oname;
ISC_LINK(dig_lookup_t) link;
ISC_LIST(dig_query_t) q;
ISC_LIST(dig_query_t) connecting;
diff --git a/bin/dig/host.c b/bin/dig/host.c
index 5207680cb1..2e95938a87 100644
--- a/bin/dig/host.c
+++ b/bin/dig/host.c
@@ -223,7 +223,7 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
MSG_SECTION_FOREACH(msg, sectionid, name) {
isc_buffer_init(&target, tbuf, sizeof(tbuf));
first = true;
- print_name = name;
+ print_name = dns_linkedname_name(name);
ISC_LIST_FOREACH(name->list, rdataset, link) {
if (query->lookup->rdtype == dns_rdatatype_axfr &&
@@ -375,7 +375,8 @@ printmessage(dig_query_t *query, const isc_buffer_t *msgbuf, dns_message_t *msg,
if (msg->rcode != 0) {
char namestr[DNS_NAME_FORMATSIZE];
- dns_name_format(query->lookup->name, namestr, sizeof(namestr));
+ dns_name_format(dns_linkedname_name(query->lookup->name),
+ namestr, sizeof(namestr));
if (query->lookup->identify_previous_line) {
printf("Nameserver %s:\n\t%s not found: %d(%s)\n",
@@ -402,7 +403,7 @@ printmessage(dig_query_t *query, const isc_buffer_t *msgbuf, dns_message_t *msg,
/* Add AAAA and MX lookups. */
name = dns_fixedname_initname(&fixed);
- dns_name_copy(query->lookup->name, name);
+ dns_name_copy(dns_linkedname_name(query->lookup->name), name);
chase_cnamechain(msg, name);
dns_name_format(name, namestr, sizeof(namestr));
lookup = clone_lookup(query->lookup, false);
@@ -531,7 +532,8 @@ printmessage(dig_query_t *query, const isc_buffer_t *msgbuf, dns_message_t *msg,
{
char namestr[DNS_NAME_FORMATSIZE];
char typestr[DNS_RDATATYPE_FORMATSIZE];
- dns_name_format(query->lookup->name, namestr, sizeof(namestr));
+ dns_name_format(dns_linkedname_name(query->lookup->name),
+ namestr, sizeof(namestr));
dns_rdatatype_format(query->lookup->rdtype, typestr,
sizeof(typestr));
printf("%s has no %s record\n", namestr, typestr);
diff --git a/bin/dig/nslookup.c b/bin/dig/nslookup.c
index 3281ec6f63..992a99cdd5 100644
--- a/bin/dig/nslookup.c
+++ b/bin/dig/nslookup.c
@@ -215,21 +215,24 @@ printsection(dig_query_t *query, dns_message_t *msg, bool headers,
if (section != DNS_SECTION_ANSWER) {
goto def_short_section;
}
- dns_name_format(name, namebuf,
- sizeof(namebuf));
+ dns_name_format(
+ dns_linkedname_name(name),
+ namebuf, sizeof(namebuf));
printf("Name:\t%s\n", namebuf);
printaddr(&rdata);
break;
case dns_rdatatype_soa:
- dns_name_format(name, namebuf,
- sizeof(namebuf));
+ dns_name_format(
+ dns_linkedname_name(name),
+ namebuf, sizeof(namebuf));
printf("%s\n", namebuf);
printsoa(&rdata);
break;
default:
def_short_section:
- dns_name_format(name, namebuf,
- sizeof(namebuf));
+ dns_name_format(
+ dns_linkedname_name(name),
+ namebuf, sizeof(namebuf));
printf("%s\t", namebuf);
printrdata(&rdata);
break;
@@ -271,7 +274,8 @@ detailsection(dig_query_t *query, dns_message_t *msg, bool headers,
MSG_SECTION_FOREACH(msg, section, name) {
ISC_LIST_FOREACH(name->list, rdataset, link) {
if (section == DNS_SECTION_QUESTION) {
- dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(name),
+ namebuf, sizeof(namebuf));
printf("\t%s, ", namebuf);
dns_rdatatype_format(rdataset->type, namebuf,
sizeof(namebuf));
@@ -284,7 +288,8 @@ detailsection(dig_query_t *query, dns_message_t *msg, bool headers,
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdataset_current(rdataset, &rdata);
- dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(name),
+ namebuf, sizeof(namebuf));
printf(" -> %s\n", namebuf);
switch (rdata.type) {
@@ -373,8 +378,8 @@ printmessage(dig_query_t *query, const isc_buffer_t *msgbuf, dns_message_t *msg,
if (msg->rcode != 0) {
char nametext[DNS_NAME_FORMATSIZE];
- dns_name_format(query->lookup->name, nametext,
- sizeof(nametext));
+ dns_name_format(dns_linkedname_name(query->lookup->name),
+ nametext, sizeof(nametext));
printf("** server can't find %s: %s\n", nametext,
rcode_totext(msg->rcode));
debug("returning with rcode == 0");
@@ -392,7 +397,7 @@ printmessage(dig_query_t *query, const isc_buffer_t *msgbuf, dns_message_t *msg,
/* Add AAAA lookup. */
name = dns_fixedname_initname(&fixed);
- dns_name_copy(query->lookup->name, name);
+ dns_name_copy(dns_linkedname_name(query->lookup->name), name);
chase_cnamechain(msg, name);
dns_name_format(name, namestr, sizeof(namestr));
lookup = clone_lookup(query->lookup, false);
diff --git a/bin/dnssec/dnssec-cds.c b/bin/dnssec/dnssec-cds.c
index d994dd42eb..8f0cddb5fb 100644
--- a/bin/dnssec/dnssec-cds.c
+++ b/bin/dnssec/dnssec-cds.c
@@ -622,7 +622,8 @@ matching_sigs(keyinfo_t *keytbl, dns_rdataset_t *rdataset,
for (i = 0; i < nkey; i++) {
keyinfo_t *ki = &keytbl[i];
if (sig.keyid != ki->tag || sig.algorithm != ki->algo ||
- !dns_name_equal(&sig.signer, name))
+ !dns_name_equal(dns_linkedname_name(&sig.signer),
+ name))
{
continue;
}
diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c
index 9b9f7a97bf..6aa0eba274 100644
--- a/bin/dnssec/dnssec-signzone.c
+++ b/bin/dnssec/dnssec-signzone.c
@@ -350,7 +350,8 @@ keythatsigned_unlocked(dns_rdata_rrsig_t *rrsig) {
ISC_LIST_FOREACH(keylist, key, link) {
if (rrsig->keyid == dst_key_id(key->key) &&
algorithm == dst_key_alg(key->key) &&
- dns_name_equal(&rrsig->signer, dst_key_name(key->key)))
+ dns_name_equal(dns_linkedname_name(&rrsig->signer),
+ dst_key_name(key->key)))
{
return key;
}
@@ -389,16 +390,17 @@ keythatsigned(dns_rdata_rrsig_t *rrsig) {
return key;
}
- result = dst_key_fromfile(&rrsig->signer, rrsig->keyid,
- rrsig->algorithm, DST_TYPE_PUBLIC, directory,
- isc_g_mctx, &pubkey);
+ result = dst_key_fromfile(dns_linkedname_name(&rrsig->signer),
+ rrsig->keyid, rrsig->algorithm,
+ DST_TYPE_PUBLIC, directory, isc_g_mctx,
+ &pubkey);
if (result != ISC_R_SUCCESS) {
isc_rwlock_unlock(&keylist_lock, isc_rwlocktype_write);
return NULL;
}
- result = dst_key_fromfile(&rrsig->signer, rrsig->keyid,
- rrsig->algorithm,
+ result = dst_key_fromfile(dns_linkedname_name(&rrsig->signer),
+ rrsig->keyid, rrsig->algorithm,
DST_TYPE_PUBLIC | DST_TYPE_PRIVATE, directory,
isc_g_mctx, &privkey);
if (result == ISC_R_SUCCESS) {
@@ -578,7 +580,8 @@ signset(dns_diff_t *del, dns_diff_t *add, dns_dbnode_t *node, dns_name_t *name,
"invalid validity period\n",
sigstr);
} else if (key == NULL && !future &&
- expecttofindkey(&rrsig.signer))
+ expecttofindkey(
+ dns_linkedname_name(&rrsig.signer)))
{
/* rrsig is dropped and not replaced */
vbprintf(2,
diff --git a/bin/dnssec/dnssectool.c b/bin/dnssec/dnssectool.c
index bb8d12d5e3..08557186c3 100644
--- a/bin/dnssec/dnssectool.c
+++ b/bin/dnssec/dnssectool.c
@@ -126,7 +126,8 @@ sig_format(dns_rdata_rrsig_t *sig, char *cp, unsigned int size) {
dst_algorithm_t algorithm = dst_algorithm_fromdata(
sig->algorithm, sig->signature, sig->siglen);
- dns_name_format(&sig->signer, namestr, sizeof(namestr));
+ dns_name_format(dns_linkedname_name(&sig->signer), namestr,
+ sizeof(namestr));
dst_algorithm_format(algorithm, algstr, sizeof(algstr));
snprintf(cp, size, "%s/%s/%d", namestr, algstr, sig->keyid);
}
diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c
index fce0d785f4..9eac232fd9 100644
--- a/bin/nsupdate/nsupdate.c
+++ b/bin/nsupdate/nsupdate.c
@@ -1281,7 +1281,7 @@ parse_args(int argc, char **argv) {
}
static uint16_t
-parse_name(char **cmdlinep, dns_message_t *msg, dns_name_t **namep) {
+parse_name(char **cmdlinep, dns_message_t *msg, dns_linkedname_t **namep) {
isc_result_t result;
char *word;
isc_buffer_t source;
@@ -1295,7 +1295,8 @@ parse_name(char **cmdlinep, dns_message_t *msg, dns_name_t **namep) {
dns_message_gettempname(msg, namep);
isc_buffer_init(&source, word, strlen(word));
isc_buffer_add(&source, strlen(word));
- result = dns_name_fromtext(*namep, &source, dns_rootname, 0);
+ result = dns_name_fromtext(dns_linkedname_name(*namep), &source,
+ dns_rootname, 0);
if (result != ISC_R_SUCCESS) {
error("invalid owner name: %s", isc_result_totext(result));
isc_buffer_invalidate(&source);
@@ -1362,7 +1363,7 @@ static uint16_t
make_prereq(char *cmdline, bool ispositive, bool isrrset) {
isc_result_t result;
char *word;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
isc_textregion_t region;
dns_rdataset_t *rdataset = NULL;
dns_rdatalist_t *rdatalist = NULL;
@@ -1876,7 +1877,7 @@ evaluate_class(char *cmdline) {
static uint16_t
update_addordelete(char *cmdline, bool isdelete) {
isc_result_t result;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
uint32_t ttl;
char *word;
dns_rdataclass_t rdataclass;
@@ -2021,19 +2022,22 @@ parseclass:
dns_fixedname_t fixed;
dns_name_t *bad;
- if (!dns_rdata_checkowner(name, rdata->rdclass, rdata->type,
- true))
+ if (!dns_rdata_checkowner(dns_linkedname_name(name),
+ rdata->rdclass, rdata->type, true))
{
char namebuf[DNS_NAME_FORMATSIZE];
- dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(name), namebuf,
+ sizeof(namebuf));
fprintf(stderr, "check-names failed: bad owner '%s'\n",
namebuf);
goto failure;
}
bad = dns_fixedname_initname(&fixed);
- if (!dns_rdata_checknames(rdata, name, bad)) {
+ if (!dns_rdata_checknames(rdata, dns_linkedname_name(name),
+ bad))
+ {
char namebuf[DNS_NAME_FORMATSIZE];
dns_name_format(bad, namebuf, sizeof(namebuf));
@@ -2044,7 +2048,7 @@ parseclass:
}
if (!isdelete && checksvcb && rdata->type == dns_rdatatype_svcb) {
- result = dns_rdata_checksvcb(name, rdata);
+ result = dns_rdata_checksvcb(dns_linkedname_name(name), rdata);
if (result != ISC_R_SUCCESS) {
fprintf(stderr, "check-svcb failed: %s\n",
isc_result_totext(result));
@@ -2167,7 +2171,7 @@ evaluate_checksvcb(char *cmdline) {
static void
setzone(dns_name_t *zonename) {
dns_namelist_t *secs = updatemsg->sections;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
if (!ISC_LIST_EMPTY(secs[DNS_SECTION_ZONE])) {
INSIST(updatemsg->from_to_wire == DNS_MESSAGE_INTENTRENDER);
@@ -2187,7 +2191,7 @@ setzone(dns_name_t *zonename) {
dns_rdataset_t *rdataset = NULL;
dns_message_gettempname(updatemsg, &name);
- dns_name_clone(zonename, name);
+ dns_name_clone(zonename, dns_linkedname_name(name));
dns_message_gettemprdataset(updatemsg, &rdataset);
dns_rdataset_makequestion(rdataset, getzoneclass(),
dns_rdatatype_soa);
@@ -2652,7 +2656,8 @@ send_update(dns_name_t *zone, isc_sockaddr_t *primary) {
/* Windows doesn't like the tsig name to be compressed. */
if (updatemsg->tsigname) {
- updatemsg->tsigname->attributes.nocompress = true;
+ dns_linkedname_name(updatemsg->tsigname)->attributes.nocompress =
+ true;
}
result = dns_request_create(requestmgr, updatemsg, srcaddr, primary,
@@ -2691,7 +2696,7 @@ recvsoa(void *arg) {
dns_message_t *soaquery = reqinfo->msg;
dns_message_t *rcvmsg = NULL;
dns_section_t section;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_rdataset_t *soaset = NULL;
dns_rdata_soa_t soa;
dns_rdata_t soarr = DNS_RDATA_INIT;
@@ -2858,7 +2863,8 @@ lookforsoa:
if (debugging) {
char namestr[DNS_NAME_FORMATSIZE];
- dns_name_format(name, namestr, sizeof(namestr));
+ dns_name_format(dns_linkedname_name(name), namestr,
+ sizeof(namestr));
fprintf(stderr, "Found zone name: %s\n", namestr);
}
@@ -2881,7 +2887,7 @@ lookforsoa:
* address.
*/
zname = dns_fixedname_initname(&fzname);
- dns_name_copy(name, zname);
+ dns_name_copy(dns_linkedname_name(name), zname);
}
if (debugging) {
@@ -2949,13 +2955,14 @@ out:
droplabel:
INSIST(!ISC_LIST_EMPTY(soaquery->sections[DNS_SECTION_QUESTION]));
name = ISC_LIST_HEAD(soaquery->sections[DNS_SECTION_QUESTION]);
- nlabels = dns_name_countlabels(name);
+ nlabels = dns_name_countlabels(dns_linkedname_name(name));
if (nlabels == 1) {
fatal("could not find enclosing zone");
}
dns_name_init(&tname);
- dns_name_getlabelsequence(name, 1, nlabels - 1, &tname);
- dns_name_clone(&tname, name);
+ dns_name_getlabelsequence(dns_linkedname_name(name), 1, nlabels - 1,
+ &tname);
+ dns_name_clone(&tname, dns_linkedname_name(name));
dns_request_destroy(&request);
dns_message_renderreset(soaquery);
dns_message_settsigkey(soaquery, NULL);
@@ -3341,7 +3348,7 @@ recvgss(void *arg) {
static void
start_update(void) {
dns_rdataset_t *rdataset = NULL;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_request_t *request = NULL;
dns_message_t *soaquery = NULL;
@@ -3379,7 +3386,7 @@ start_update(void) {
dns_rdataset_makequestion(rdataset, getzoneclass(), dns_rdatatype_soa);
if (userzone != NULL) {
- dns_name_clone(userzone, name);
+ dns_name_clone(userzone, dns_linkedname_name(name));
} else {
dns_rdataset_t *tmprdataset;
@@ -3401,9 +3408,10 @@ start_update(void) {
return;
}
- dns_name_t *firstname =
+ dns_linkedname_t *firstname =
ISC_LIST_HEAD(updatemsg->sections[section]);
- dns_name_clone(firstname, name);
+ dns_name_clone(dns_linkedname_name(firstname),
+ dns_linkedname_name(name));
/*
* Looks to see if the first name references a DS record
@@ -3413,11 +3421,14 @@ start_update(void) {
*/
tmprdataset = ISC_LIST_HEAD(firstname->list);
if (section == DNS_SECTION_UPDATE &&
- !dns_name_isroot(firstname) &&
+ !dns_name_isroot(dns_linkedname_name(firstname)) &&
tmprdataset->type == dns_rdatatype_ds)
{
- unsigned int labels = dns_name_countlabels(name);
- dns_name_getlabelsequence(name, 1, labels - 1, name);
+ unsigned int labels =
+ dns_name_countlabels(dns_linkedname_name(name));
+ dns_name_getlabelsequence(dns_linkedname_name(name), 1,
+ labels - 1,
+ dns_linkedname_name(name));
}
}
diff --git a/bin/plugins/filter-a.c b/bin/plugins/filter-a.c
index 111a4c887f..65dd2f9e63 100644
--- a/bin/plugins/filter-a.c
+++ b/bin/plugins/filter-a.c
@@ -512,12 +512,12 @@ mark_as_rendered(dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
* above processing to happen.
*/
static bool
-process_name(query_ctx_t *qctx, filter_a_t mode, const dns_name_t *name,
+process_name(query_ctx_t *qctx, filter_a_t mode, const dns_linkedname_t *name,
dns_rdatatype_t type, bool only_if_aaaa_exists) {
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
isc_result_t result;
bool modified = false;
- dns_name_t *n = UNCONST(name);
+ dns_linkedname_t *n = UNCONST(name);
if (only_if_aaaa_exists) {
CHECK(dns_message_findtype(n, dns_rdatatype_aaaa, 0, NULL));
@@ -570,7 +570,9 @@ process_section(const section_filter_t *filter) {
dns_message_t *message = qctx->client->message;
MSG_SECTION_FOREACH(message, section, cur) {
- if (name != NULL && !dns_name_equal(name, cur)) {
+ if (name != NULL &&
+ !dns_name_equal(name, dns_linkedname_name(cur)))
+ {
/*
* We only want to process 'name' and this is not it.
*/
@@ -737,7 +739,8 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
*/
result = ns_query_recurse(
qctx->client, dns_rdatatype_aaaa,
- qctx->client->query.qname, qctx->resuming);
+ dns_linkedname_name(qctx->client->query.qname),
+ qctx->resuming);
if (result == ISC_R_SUCCESS) {
client_state->flags |= FILTER_A_RECURSING;
qctx->client->query.recursing = true;
@@ -750,7 +753,7 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
.qctx = qctx,
.mode = client_state->mode,
.section = DNS_SECTION_ANSWER,
- .name = qctx->fname,
+ .name = dns_linkedname_name(qctx->fname),
.type = dns_rdatatype_a,
};
process_section(&filter_answer);
@@ -791,7 +794,7 @@ filter_respond_any_found(void *arg, void *cbdata, isc_result_t *resp) {
.qctx = qctx,
.mode = client_state->mode,
.section = DNS_SECTION_ANSWER,
- .name = qctx->tname,
+ .name = dns_linkedname_name(qctx->tname),
.type = dns_rdatatype_a,
.only_if_aaaa_exists = qctx->authoritative,
};
diff --git a/bin/plugins/filter-aaaa.c b/bin/plugins/filter-aaaa.c
index b04d11cf47..f238a9447f 100644
--- a/bin/plugins/filter-aaaa.c
+++ b/bin/plugins/filter-aaaa.c
@@ -516,12 +516,13 @@ mark_as_rendered(dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
* above processing to happen.
*/
static bool
-process_name(query_ctx_t *qctx, filter_aaaa_t mode, const dns_name_t *name,
- dns_rdatatype_t type, bool only_if_a_exists) {
+process_name(query_ctx_t *qctx, filter_aaaa_t mode,
+ const dns_linkedname_t *name, dns_rdatatype_t type,
+ bool only_if_a_exists) {
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
isc_result_t result;
bool modified = false;
- dns_name_t *n = UNCONST(name);
+ dns_linkedname_t *n = UNCONST(name);
if (only_if_a_exists) {
CHECK(dns_message_findtype(n, dns_rdatatype_a, 0, NULL));
@@ -574,7 +575,9 @@ process_section(const section_filter_t *filter) {
dns_message_t *message = qctx->client->message;
MSG_SECTION_FOREACH(message, section, cur) {
- if (name != NULL && !dns_name_equal(name, cur)) {
+ if (name != NULL &&
+ !dns_name_equal(name, dns_linkedname_name(cur)))
+ {
/*
* We only want to process 'name' and this is not it.
*/
@@ -739,9 +742,10 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
* We'll make a note to not render it
* if the recursion for the A succeeds.
*/
- result = ns_query_recurse(qctx->client, dns_rdatatype_a,
- qctx->client->query.qname,
- qctx->resuming);
+ result = ns_query_recurse(
+ qctx->client, dns_rdatatype_a,
+ dns_linkedname_name(qctx->client->query.qname),
+ qctx->resuming);
if (result == ISC_R_SUCCESS) {
client_state->flags |= FILTER_AAAA_RECURSING;
qctx->client->query.recursing = true;
@@ -754,7 +758,7 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
.qctx = qctx,
.mode = client_state->mode,
.section = DNS_SECTION_ANSWER,
- .name = qctx->fname,
+ .name = dns_linkedname_name(qctx->fname),
.type = dns_rdatatype_aaaa,
};
process_section(&filter_answer);
@@ -795,7 +799,7 @@ filter_respond_any_found(void *arg, void *cbdata, isc_result_t *resp) {
.qctx = qctx,
.mode = client_state->mode,
.section = DNS_SECTION_ANSWER,
- .name = qctx->tname,
+ .name = dns_linkedname_name(qctx->tname),
.type = dns_rdatatype_aaaa,
.only_if_a_exists = qctx->authoritative,
};
diff --git a/bin/plugins/synthrecord.c b/bin/plugins/synthrecord.c
index eb2b5a60a4..0acacd5f52 100644
--- a/bin/plugins/synthrecord.c
+++ b/bin/plugins/synthrecord.c
@@ -123,7 +123,7 @@ synthrecord_respond(synthrecord_t *inst, query_ctx_t *qctx, void *rdata,
dns_rdatatype_t rtype) {
isc_result_t result;
dns_message_t *msg = qctx->client->message;
- dns_name_t *aname = NULL;
+ dns_linkedname_t *aname = NULL;
dns_rdataset_t *synthset = NULL;
dns_rdatalist_t *synthlist = NULL;
dns_rdata_t *synthdata = NULL;
@@ -159,9 +159,10 @@ synthrecord_respond(synthrecord_t *inst, query_ctx_t *qctx, void *rdata,
* rdataset to it.
*/
dns_message_gettempname(msg, &aname);
- dns_name_copy(qctx->client->query.qname, aname);
+ dns_name_copy(dns_linkedname_name(qctx->client->query.qname),
+ dns_linkedname_name(aname));
dns_message_addname(msg, aname, DNS_SECTION_ANSWER);
- dns_rdataset_setownercase(synthset, aname);
+ dns_rdataset_setownercase(synthset, dns_linkedname_name(aname));
ISC_LIST_APPEND(aname->list, synthset, link);
/*
@@ -254,7 +255,8 @@ static ns_hookresult_t
synthrecord_forward(synthrecord_t *inst, query_ctx_t *qctx,
isc_result_t *resp) {
isc_netaddr_t addr;
- const dns_name_t *qname = qctx->client->query.qname;
+ const dns_name_t *qname =
+ dns_linkedname_name(qctx->client->query.qname);
*resp = ISC_R_UNSET;
@@ -319,7 +321,8 @@ synthrecord_reverse(synthrecord_t *inst, query_ctx_t *qctx,
char anamebdata[DNS_NAME_FORMATSIZE];
isc_buffer_t anameb;
isc_netaddr_t qaddr;
- const dns_name_t *qname = qctx->client->query.qname;
+ const dns_name_t *qname =
+ dns_linkedname_name(qctx->client->query.qname);
dns_rdata_ptr_t synthptrdata;
*resp = ISC_R_UNSET;
diff --git a/bin/tests/system/hooks/driver/test-syncplugin.c b/bin/tests/system/hooks/driver/test-syncplugin.c
index 07aa95861e..4c0730b1ce 100644
--- a/bin/tests/system/hooks/driver/test-syncplugin.c
+++ b/bin/tests/system/hooks/driver/test-syncplugin.c
@@ -36,7 +36,8 @@ syncplugin__hook(void *arg, void *cbdata, isc_result_t *resp) {
UNUSED(resp);
if (inst->firstlbl != NULL) {
- const dns_name_t *qname = qctx->client->query.qname;
+ const dns_name_t *qname =
+ dns_linkedname_name(qctx->client->query.qname);
dns_label_t label;
size_t len = strlen(inst->firstlbl);
diff --git a/bin/tools/mdig.c b/bin/tools/mdig.c
index fb113a3d47..0ec425fc70 100644
--- a/bin/tools/mdig.c
+++ b/bin/tools/mdig.c
@@ -534,7 +534,7 @@ static isc_result_t
sendquery(struct query *query) {
dns_request_t *request = NULL;
dns_message_t *message = NULL;
- dns_name_t *qname = NULL;
+ dns_linkedname_t *qname = NULL;
dns_rdataset_t *qrdataset = NULL;
isc_result_t result;
dns_fixedname_t queryname;
@@ -576,7 +576,8 @@ sendquery(struct query *query) {
dns_message_gettemprdataset(message, &qrdataset);
- dns_name_clone(dns_fixedname_name(&queryname), qname);
+ dns_name_clone(dns_fixedname_name(&queryname),
+ dns_linkedname_name(qname));
dns_rdataset_makequestion(qrdataset, query->rdclass, query->rdtype);
ISC_LIST_APPEND(qname->list, qrdataset, link);
dns_message_addname(message, qname, DNS_SECTION_QUESTION);
diff --git a/lib/dns/client.c b/lib/dns/client.c
index b132e979b3..9be3f68106 100644
--- a/lib/dns/client.c
+++ b/lib/dns/client.c
@@ -491,7 +491,7 @@ client_resfind(resctx_t *rctx, dns_fetchresponse_t *resp) {
do {
dns_name_t *fname = dns_fixedname_initname(&foundname);
- dns_name_t *ansname = NULL;
+ dns_linkedname_t *ansname = NULL;
dns_db_t *db = NULL;
dns_dbnode_t *node = NULL;
@@ -542,9 +542,9 @@ client_resfind(resctx_t *rctx, dns_fetchresponse_t *resp) {
dns_name_t *aname = dns_fixedname_name(&rctx->name);
ansname = isc_mem_get(mctx, sizeof(*ansname));
- dns_name_init(ansname);
+ dns_linkedname_init(ansname);
- dns_name_dup(aname, mctx, ansname);
+ dns_name_dup(aname, mctx, dns_linkedname_name(ansname));
switch (result) {
case ISC_R_SUCCESS:
@@ -761,7 +761,7 @@ client_resfind(resctx_t *rctx, dns_fetchresponse_t *resp) {
ISC_LIST_UNLINK(ansname->list, rdataset, link);
putrdataset(mctx, &rdataset);
}
- dns_name_free(ansname, mctx);
+ dns_name_free(dns_linkedname_name(ansname), mctx);
isc_mem_put(mctx, ansname, sizeof(*ansname));
}
@@ -987,7 +987,7 @@ dns_client_freeresanswer(dns_client_t *client, dns_namelist_t *namelist) {
putrdataset(client->mctx, &rdataset);
}
- dns_name_free(name, client->mctx);
+ dns_name_free(dns_linkedname_name(name), client->mctx);
isc_mem_put(client->mctx, name, sizeof(*name));
}
}
diff --git a/lib/dns/deleg.c b/lib/dns/deleg.c
index bafc663da4..8362465d90 100644
--- a/lib/dns/deleg.c
+++ b/lib/dns/deleg.c
@@ -458,14 +458,14 @@ dns_delegset_addaddr(dns_delegset_t *delegset, dns_deleg_t *deleg,
static void
addname(dns_delegset_t *delegset, dns_namelist_t *list,
const dns_name_t *name) {
- dns_name_t *clone = NULL;
+ dns_linkedname_t *clone = NULL;
REQUIRE(DNS_DELEGSET_VALID(delegset));
REQUIRE(DNS_NAME_VALID(name));
clone = isc_mem_get(delegset->mctx, sizeof(*clone));
- dns_name_init(clone);
- dns_name_dup(name, delegset->mctx, clone);
+ dns_linkedname_init(clone);
+ dns_name_dup(name, delegset->mctx, dns_linkedname_name(clone));
ISC_LIST_APPEND(*list, clone, link);
}
@@ -541,7 +541,8 @@ delegset_size(dns_delegset_t *delegset) {
sz += sizeof(*address);
}
ISC_LIST_FOREACH(deleg->names, name, link) {
- sz += sizeof(*name) + dns_name_size(name);
+ sz += sizeof(*name) +
+ dns_name_size(dns_linkedname_name(name));
}
}
@@ -753,7 +754,7 @@ delegset_destroy(dns_delegset_t *delegset) {
ISC_LIST_FOREACH(deleg->names, nameserver, link) {
ISC_LIST_UNLINK(deleg->names, nameserver, link);
- dns_name_free(nameserver, delegset->mctx);
+ dns_linkedname_free(nameserver, delegset->mctx);
isc_mem_put(delegset->mctx, nameserver,
sizeof(*nameserver));
}
@@ -774,7 +775,7 @@ tostring_namelist(dns_namelist_t *namelist, const char *id, FILE *fp) {
char bdata[DNS_NAME_FORMATSIZE] = { 0 };
isc_buffer_init(&nameb, bdata, sizeof(bdata));
- dns_name_totext(name, 0, &nameb);
+ dns_name_totext(dns_linkedname_name(name), 0, &nameb);
fprintf(fp, "%s", bdata);
if (name != ISC_LIST_TAIL(*namelist)) {
@@ -972,7 +973,8 @@ dns_delegset_copy(dns_delegset_t *src, dns_delegdb_t *db,
}
ISC_LIST_FOREACH(srcdeleg->names, name, link) {
- addname(delegset, &deleg->names, name);
+ addname(delegset, &deleg->names,
+ dns_linkedname_name(name));
}
}
diff --git a/lib/dns/dnssec.c b/lib/dns/dnssec.c
index 36e866aa6a..7acf861af8 100644
--- a/lib/dns/dnssec.c
+++ b/lib/dns/dnssec.c
@@ -190,12 +190,13 @@ digest_sig(dst_context_t *ctx, bool downcase, dns_rdata_t *sigrdata,
if (downcase) {
dns_fixedname_init(&fname);
- RUNTIME_CHECK(dns_name_downcase(&rrsig->signer,
- dns_fixedname_name(&fname)) ==
- ISC_R_SUCCESS);
+ RUNTIME_CHECK(
+ dns_name_downcase(dns_linkedname_name(&rrsig->signer),
+ dns_fixedname_name(&fname)) ==
+ ISC_R_SUCCESS);
dns_name_toregion(dns_fixedname_name(&fname), &r);
} else {
- dns_name_toregion(&rrsig->signer, &r);
+ dns_name_toregion(dns_linkedname_name(&rrsig->signer), &r);
}
return dst_context_adddata(ctx, &r);
@@ -240,12 +241,13 @@ dns_dnssec_sign(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
/*
* Downcase signer.
*/
- dns_name_init(&sig.signer);
+ dns_name_init(dns_linkedname_name(&sig.signer));
dns_fixedname_init(&fsigner);
RUNTIME_CHECK(dns_name_downcase(dst_key_name(key),
dns_fixedname_name(&fsigner)) ==
ISC_R_SUCCESS);
- dns_name_clone(dns_fixedname_name(&fsigner), &sig.signer);
+ dns_name_clone(dns_fixedname_name(&fsigner),
+ dns_linkedname_name(&sig.signer));
sig.covered = set->type;
sig.algorithm = dst_algorithm_tosecalg(dst_key_alg(key));
@@ -418,7 +420,9 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
* for it.
*/
siglabels = sig.labels + 1;
- if (siglabels < dns_name_countlabels(&sig.signer) || siglabels > labels)
+ if (siglabels <
+ dns_name_countlabels(dns_linkedname_name(&sig.signer)) ||
+ siglabels > labels)
{
inc_stat(dns_dnssecstats_fail);
return DNS_R_SIGINVALID;
@@ -459,7 +463,7 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
return DNS_R_INVALIDNSEC3;
}
dns_name_split(name, labels - 1, NULL, &apex);
- if (!dns_name_equal(&apex, &sig.signer)) {
+ if (!dns_name_equal(&apex, dns_linkedname_name(&sig.signer))) {
inc_stat(dns_dnssecstats_fail);
return DNS_R_SIGINVALID;
}
@@ -467,19 +471,21 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
case dns_rdatatype_ns:
case dns_rdatatype_soa:
case dns_rdatatype_dnskey:
- if (!dns_name_equal(name, &sig.signer)) {
+ if (!dns_name_equal(name, dns_linkedname_name(&sig.signer))) {
inc_stat(dns_dnssecstats_fail);
return DNS_R_SIGINVALID;
}
break;
case dns_rdatatype_ds:
- if (dns_name_equal(name, &sig.signer)) {
+ if (dns_name_equal(name, dns_linkedname_name(&sig.signer))) {
inc_stat(dns_dnssecstats_fail);
return DNS_R_SIGINVALID;
}
FALLTHROUGH;
default:
- if (!dns_name_issubdomain(name, &sig.signer)) {
+ if (!dns_name_issubdomain(name,
+ dns_linkedname_name(&sig.signer)))
+ {
inc_stat(dns_dnssecstats_fail);
return DNS_R_SIGINVALID;
}
@@ -492,7 +498,9 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
RETERR(dns_rdataset_first(set));
dns_rdataset_current(set, &rdata);
RETERR(dns_rdata_tostruct(&rdata, &nsec));
- if (!dns_name_issubdomain(&nsec.next, &sig.signer)) {
+ if (!dns_name_issubdomain(&nsec.next,
+ dns_linkedname_name(&sig.signer)))
+ {
return DNS_R_NOVALIDNSEC;
}
}
@@ -591,7 +599,8 @@ again:
result = dst_context_verify(ctx, &r);
if (result == ISC_R_SUCCESS && downcase) {
char namebuf[DNS_NAME_FORMATSIZE];
- dns_name_format(&sig.signer, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(&sig.signer), namebuf,
+ sizeof(namebuf));
isc_log_write(DNS_LOGCATEGORY_DNSSEC, DNS_LOGMODULE_DNSSEC,
ISC_LOG_DEBUG(1),
"successfully validated after lower casing "
@@ -627,7 +636,8 @@ cleanup:
wild) == ISC_R_SUCCESS);
}
if (wildsigner != NULL) {
- dns_name_copy(&sig.signer, wildsigner);
+ dns_name_copy(dns_linkedname_name(&sig.signer),
+ wildsigner);
}
inc_stat(dns_dnssecstats_wildcard);
result = DNS_R_FROMWILDCARD;
diff --git a/lib/dns/dnstap.c b/lib/dns/dnstap.c
index 5d2468ffa5..62008fe839 100644
--- a/lib/dns/dnstap.c
+++ b/lib/dns/dnstap.c
@@ -1185,14 +1185,15 @@ dns_dt_parse(isc_mem_t *mctx, isc_region_t *src, dns_dtdata_t **destp) {
/* Query tuple */
if (d->msg != NULL) {
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_rdataset_t *rdataset;
CHECK(dns_message_firstname(d->msg, DNS_SECTION_QUESTION));
dns_message_currentname(d->msg, DNS_SECTION_QUESTION, &name);
rdataset = ISC_LIST_HEAD(name->list);
- dns_name_format(name, d->namebuf, sizeof(d->namebuf));
+ dns_name_format(dns_linkedname_name(name), d->namebuf,
+ sizeof(d->namebuf));
dns_rdatatype_format(rdataset->type, d->typebuf,
sizeof(d->typebuf));
dns_rdataclass_format(rdataset->rdclass, d->classbuf,
diff --git a/lib/dns/fixedname.c b/lib/dns/fixedname.c
index 70ad467816..22485fae85 100644
--- a/lib/dns/fixedname.c
+++ b/lib/dns/fixedname.c
@@ -63,19 +63,20 @@ base32hexnp_encode(const dns_nsec3hash_t *hash, isc_buffer_t *target) {
void
dns_fixedname_init(dns_fixedname_t *fixed) {
- dns_name_init(&fixed->name);
+ dns_linkedname_init(&fixed->name_wl);
isc_buffer_init(&fixed->buffer, fixed->data, DNS_NAME_MAXWIRE);
- dns_name_setbuffer(&fixed->name, &fixed->buffer);
+ dns_name_setbuffer(dns_linkedname_name(&fixed->name_wl),
+ &fixed->buffer);
}
void
dns_fixedname_invalidate(dns_fixedname_t *fixed) {
- dns_name_invalidate(&fixed->name);
+ dns_name_invalidate(dns_linkedname_name(&fixed->name_wl));
}
dns_name_t *
dns_fixedname_name(dns_fixedname_t *fixed) {
- return &fixed->name;
+ return dns_linkedname_name(&fixed->name_wl);
}
dns_name_t *
@@ -100,15 +101,24 @@ dns_fixedname_fromnsec3hash(dns_fixedname_t *fixed, const dns_nsec3hash_t *hash,
dns_name_toregion(origin, &origin_region);
RETERR(isc_buffer_copyregion(&fixed->buffer, &origin_region));
- fixed->name = (dns_name_t){
+ *dns_fixedname_name(fixed) = (dns_name_t){
.magic = DNS_NAME_MAGIC,
.attributes = { .absolute = true },
.ndata = fixed->data,
.length = (uint8_t)isc_buffer_usedlength(&fixed->buffer),
.buffer = &fixed->buffer,
- .link = ISC_LINK_INITIALIZER,
- .list = ISC_LIST_INITIALIZER,
};
return ISC_R_SUCCESS;
}
+
+dns_linkedname_t *
+dns_fixedname_linkedname(dns_fixedname_t *fixed) {
+ return &fixed->name_wl;
+}
+
+dns_linkedname_t *
+dns_fixedname_initlinkedname(dns_fixedname_t *fixed) {
+ dns_fixedname_init(fixed);
+ return dns_fixedname_linkedname(fixed);
+}
diff --git a/lib/dns/include/dns/fixedname.h b/lib/dns/include/dns/fixedname.h
index 814b82b9e0..6b325b5928 100644
--- a/lib/dns/include/dns/fixedname.h
+++ b/lib/dns/include/dns/fixedname.h
@@ -59,9 +59,9 @@
*****/
struct dns_fixedname {
- dns_name_t name;
- isc_buffer_t buffer;
- unsigned char data[DNS_NAME_MAXWIRE];
+ dns_linkedname_t name_wl;
+ isc_buffer_t buffer;
+ unsigned char data[DNS_NAME_MAXWIRE];
};
typedef unsigned char dns_nsec3hash_t[ISC_SHA1_DIGESTLENGTH];
@@ -93,3 +93,8 @@ dns_fixedname_fromnsec3hash(dns_fixedname_t *fixed, const dns_nsec3hash_t *hash,
* Returns:
*\li #ISC_R_NOSPACE when the resulting name does not fit in 'fixed'.
*/
+dns_linkedname_t *
+dns_fixedname_linkedname(dns_fixedname_t *fixed);
+
+dns_linkedname_t *
+dns_fixedname_initlinkedname(dns_fixedname_t *fixed);
diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h
index a4cfa6efdf..6bbb0af8bf 100644
--- a/lib/dns/include/dns/message.h
+++ b/lib/dns/include/dns/message.h
@@ -224,9 +224,9 @@ typedef enum dns_message_intent {
/* Obsolete: DNS_MESSAGERENDER_FILTER_AAAA 0x0020 */
/* clang-format off */
-#define MSG_SECTION_FOREACH(msg, section, elt) \
- for (dns_name_t *elt = ISC_LIST_HEAD((msg)->sections[(section)]); \
- elt != NULL; \
+#define MSG_SECTION_FOREACH(msg, section, elt) \
+ for (dns_linkedname_t *elt = ISC_LIST_HEAD((msg)->sections[(section)]); \
+ elt != NULL; \
elt = ISC_LIST_NEXT(elt, link))
/* clang-format on */
@@ -258,11 +258,11 @@ struct dns_message {
unsigned int counts[DNS_SECTION_MAX];
/* private from here down */
- dns_namelist_t sections[DNS_SECTION_MAX];
- dns_name_t *cursors[DNS_SECTION_MAX];
- dns_rdataset_t *opt;
- dns_rdataset_t *sig0;
- dns_rdataset_t *tsig;
+ dns_namelist_t sections[DNS_SECTION_MAX];
+ dns_linkedname_t *cursors[DNS_SECTION_MAX];
+ dns_rdataset_t *opt;
+ dns_rdataset_t *sig0;
+ dns_rdataset_t *tsig;
int state;
unsigned int : 0; /* bits */
@@ -307,20 +307,20 @@ struct dns_message {
ISC_LIST(dns_rdata_t) freerdata;
ISC_LIST(dns_rdatalist_t) freerdatalist;
- dns_rcode_t tsigstatus;
- dns_rcode_t querytsigstatus;
- dns_name_t *tsigname; /* Owner name of TSIG, if any */
- dns_rdataset_t *querytsig;
- dns_tsigkey_t *tsigkey;
- dst_context_t *tsigctx;
- int sigstart;
- int timeadjust;
-
- dns_name_t *sig0name; /* Owner name of SIG0, if any */
- dst_key_t *sig0key;
- dns_rcode_t sig0status;
- isc_region_t query;
- isc_region_t saved;
+ dns_rcode_t tsigstatus;
+ dns_rcode_t querytsigstatus;
+ dns_linkedname_t *tsigname; /* Owner name of TSIG, if any */
+ dns_rdataset_t *querytsig;
+ dns_tsigkey_t *tsigkey;
+ dst_context_t *tsigctx;
+ int sigstart;
+ int timeadjust;
+
+ dns_linkedname_t *sig0name; /* Owner name of SIG0, if any */
+ dst_key_t *sig0key;
+ dns_rcode_t sig0status;
+ isc_region_t query;
+ isc_region_t saved;
/*
* Time to be used when fuzzing.
@@ -767,7 +767,7 @@ dns_message_nextname(dns_message_t *msg, dns_section_t section);
void
dns_message_currentname(dns_message_t *msg, dns_section_t section,
- dns_name_t **name);
+ dns_linkedname_t **name);
/*%<
* Sets 'name' to point to the name where the per-section internal name
* pointer is currently set.
@@ -791,7 +791,7 @@ dns_message_currentname(dns_message_t *msg, dns_section_t section,
isc_result_t
dns_message_findname(dns_message_t *msg, dns_section_t section,
const dns_name_t *target, dns_rdatatype_t type,
- dns_rdatatype_t covers, dns_name_t **foundname,
+ dns_rdatatype_t covers, dns_linkedname_t **foundname,
dns_rdataset_t **rdataset);
/*%<
* Search for a name in the specified section. If it is found, *name is
@@ -825,7 +825,7 @@ dns_message_findname(dns_message_t *msg, dns_section_t section,
*/
isc_result_t
-dns_message_findtype(dns_name_t *name, dns_rdatatype_t type,
+dns_message_findtype(dns_linkedname_t *name, dns_rdatatype_t type,
dns_rdatatype_t covers, dns_rdataset_t **rdataset);
/*%<
* Search the name for the specified type. If it is found, *rdataset is
@@ -845,7 +845,7 @@ dns_message_findtype(dns_name_t *name, dns_rdatatype_t type,
*/
void
-dns_message_addname(dns_message_t *msg, dns_name_t *name,
+dns_message_addname(dns_message_t *msg, dns_linkedname_t *name,
dns_section_t section);
/*%<
* Adds the name to the given section.
@@ -863,7 +863,7 @@ dns_message_addname(dns_message_t *msg, dns_name_t *name,
*/
void
-dns_message_removename(dns_message_t *msg, dns_name_t *name,
+dns_message_removename(dns_message_t *msg, dns_linkedname_t *name,
dns_section_t section);
/*%<
* Remove a existing name from a given section.
@@ -889,7 +889,7 @@ dns_message_removename(dns_message_t *msg, dns_name_t *name,
*/
void
-dns_message_gettempname(dns_message_t *msg, dns_name_t **item);
+dns_message_gettempname(dns_message_t *msg, dns_linkedname_t **item);
/*%<
* Return a name that can be used for any temporary purpose, including
* inserting into the message's linked lists. The name must be returned
@@ -946,7 +946,7 @@ dns_message_gettemprdatalist(dns_message_t *msg, dns_rdatalist_t **item);
*/
void
-dns_message_puttempname(dns_message_t *msg, dns_name_t **item);
+dns_message_puttempname(dns_message_t *msg, dns_linkedname_t **item);
/*%<
* Return a borrowed name to the message's name free list.
*
diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h
index b7baf08bca..d3d313291e 100644
--- a/lib/dns/include/dns/name.h
+++ b/lib/dns/include/dns/name.h
@@ -65,6 +65,7 @@
#include <inttypes.h>
#include <stdbool.h>
+#include <stddef.h>
#include <stdio.h>
#include <isc/attributes.h>
@@ -114,11 +115,25 @@ struct dns_name {
} attributes;
unsigned char *ndata ISC_ATTR_COUNTED_BY_PTR(length);
isc_buffer_t *buffer;
- ISC_LINK(dns_name_t) link;
+};
+
+struct dns_linkedname {
+ dns_name_t name;
+ ISC_LINK(dns_linkedname_t) link;
ISC_LIST(dns_rdataset_t) list;
isc_hashmap_t *hashmap;
};
+static inline dns_name_t *
+dns_linkedname_name(dns_linkedname_t *nwl) {
+ return nwl != NULL ? &nwl->name : NULL;
+}
+
+static inline const dns_name_t *
+dns_linkedname_name_const(const dns_linkedname_t *nwl) {
+ return nwl != NULL ? &nwl->name : NULL;
+}
+
#define DNS_NAME_MAGIC ISC_MAGIC('D', 'N', 'S', 'n')
#define DNS_NAME_VALID(n) ISC_MAGIC_VALID(n, DNS_NAME_MAGIC)
@@ -166,8 +181,6 @@ extern const dns_name_t *dns_inaddrarpa;
.ndata = (__ndata), \
.length = (sizeof(__ndata) - 1), \
.attributes = { .readonly = true }, \
- .link = ISC_LINK_INITIALIZER, \
- .list = ISC_LIST_INITIALIZER, \
}
#define DNS_NAME_INITABSOLUTE(__ndata) \
@@ -176,14 +189,9 @@ extern const dns_name_t *dns_inaddrarpa;
.ndata = (__ndata), \
.length = sizeof(__ndata), \
.attributes = { .readonly = true, .absolute = true }, \
- .link = ISC_LINK_INITIALIZER, \
- .list = ISC_LIST_INITIALIZER, \
}
-#define DNS_NAME_INITEMPTY \
- { .magic = DNS_NAME_MAGIC, \
- .link = ISC_LINK_INITIALIZER, \
- .list = ISC_LIST_INITIALIZER }
+#define DNS_NAME_INITEMPTY { .magic = DNS_NAME_MAGIC }
/*%
* Standard sizes of a wire format name
@@ -210,8 +218,6 @@ static inline void
dns_name_init(dns_name_t *name) {
*name = (dns_name_t){
.magic = DNS_NAME_MAGIC,
- .link = ISC_LINK_INITIALIZER,
- .list = ISC_LIST_INITIALIZER,
};
}
/*%<
@@ -270,7 +276,6 @@ dns_name_invalidate(dns_name_t *name) {
name->length = 0;
name->attributes = (struct dns_name_attrs){};
name->buffer = NULL;
- ISC_LINK_INIT(name, link);
}
/*%<
* Make 'name' invalid.
@@ -291,6 +296,28 @@ dns_name_isvalid(const dns_name_t *name);
* Check whether 'name' points to a valid dns_name
*/
+static inline void
+dns_linkedname_init(dns_linkedname_t *name) {
+ dns_name_init(&name->name);
+ ISC_LINK_INIT(name, link);
+ ISC_LIST_INIT(name->list);
+ name->hashmap = NULL;
+}
+/*%<
+ * Initialize 'name' as a dns_linkedname_t.
+ */
+
+static inline void
+dns_linkedname_invalidate(dns_linkedname_t *name) {
+ dns_name_invalidate(&name->name);
+ ISC_LINK_INIT(name, link);
+ ISC_LIST_INIT(name->list);
+ name->hashmap = NULL;
+}
+/*%<
+ * Make dns_linkedname_t 'name' invalid.
+ */
+
/***
*** Dedicated Buffers
***/
@@ -1145,6 +1172,17 @@ dns_name_free(dns_name_t *name, isc_mem_t *mctx);
* invalidated.
*/
+static inline void
+dns_linkedname_free(dns_linkedname_t *nwl, isc_mem_t *mctx) {
+ REQUIRE(DNS_NAME_VALID(&nwl->name));
+ REQUIRE(nwl->name.attributes.dynamic);
+ isc_mem_put(mctx, nwl->name.ndata, nwl->name.length);
+ dns_linkedname_invalidate(nwl);
+}
+/*%<
+ * Free 'nwl' and make the dns_linkedname_t invalid.
+ */
+
isc_result_t
dns_name_digest(const dns_name_t *name, dns_digestfunc_t digest, void *arg);
/*%<
diff --git a/lib/dns/include/dns/rdatalist.h b/lib/dns/include/dns/rdatalist.h
index e8941d2ad4..e22afaa2f8 100644
--- a/lib/dns/include/dns/rdatalist.h
+++ b/lib/dns/include/dns/rdatalist.h
@@ -127,7 +127,7 @@ dns__rdatalist_clone(const dns_rdataset_t *source,
unsigned int
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_linkedname_t *name,
dns_rdatatype_t type);
isc_result_t
dns__rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
diff --git a/lib/dns/include/dns/rdataset.h b/lib/dns/include/dns/rdataset.h
index 083387171e..d9b0643658 100644
--- a/lib/dns/include/dns/rdataset.h
+++ b/lib/dns/include/dns/rdataset.h
@@ -72,8 +72,9 @@ struct dns_rdatasetmethods {
void (*clone)(const dns_rdataset_t *source,
dns_rdataset_t *target DNS__DB_FLARG);
unsigned int (*count)(dns_rdataset_t *rdataset);
- isc_result_t (*addnoqname)(dns_rdataset_t *rdataset, dns_name_t *name,
- dns_rdatatype_t type);
+ isc_result_t (*addnoqname)(dns_rdataset_t *rdataset,
+ dns_linkedname_t *name,
+ dns_rdatatype_t type);
isc_result_t (*getnoqname)(dns_rdataset_t *rdataset, dns_name_t *name,
dns_rdataset_t *neg,
dns_rdataset_t *negsig DNS__DB_FLARG);
@@ -236,9 +237,9 @@ struct dns_rdataset {
* dns_rdataset_addnoqname(), and the denial type
* (NSEC or NSEC3) of the proof selected there.
*/
- struct dns_name *noqname;
- dns_rdatatype_t noqnametype;
- dns_dbnode_t *node;
+ struct dns_linkedname *noqname;
+ dns_rdatatype_t noqnametype;
+ dns_dbnode_t *node;
} rdlist;
};
};
@@ -542,7 +543,7 @@ dns__rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
*/
isc_result_t
-dns_rdataset_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
+dns_rdataset_addnoqname(dns_rdataset_t *rdataset, dns_linkedname_t *name,
dns_rdatatype_t type);
/*%<
* Associate a noqname proof with this record: the rdataset of 'type'
diff --git a/lib/dns/include/dns/types.h b/lib/dns/include/dns/types.h
index 18816cc21d..f8316d3a33 100644
--- a/lib/dns/include/dns/types.h
+++ b/lib/dns/include/dns/types.h
@@ -119,8 +119,9 @@ typedef struct dns_message dns_message_t;
typedef uint16_t dns_messageid_t;
typedef isc_region_t dns_label_t;
typedef struct dns_name dns_name_t;
-typedef struct dns_nametree dns_nametree_t;
-typedef ISC_LIST(dns_name_t) dns_namelist_t;
+typedef struct dns_linkedname dns_linkedname_t;
+typedef ISC_LIST(dns_linkedname_t) dns_namelist_t;
+typedef struct dns_nametree dns_nametree_t;
typedef struct dns_notify dns_notify_t;
typedef struct dns_notifyctx dns_notifyctx_t;
typedef ISC_LIST(dns_notify_t) dns_notifylist_t;
diff --git a/lib/dns/include/dns/validator.h b/lib/dns/include/dns/validator.h
index de4234229b..757360131a 100644
--- a/lib/dns/include/dns/validator.h
+++ b/lib/dns/include/dns/validator.h
@@ -83,8 +83,8 @@ struct dns_validator {
isc_refcount_t references;
/* Name and type of the response to be validated. */
- dns_name_t *name;
- dns_rdatatype_t type;
+ dns_linkedname_t *name;
+ dns_rdatatype_t type;
/*
* Callback and argument to use to inform the caller
@@ -114,7 +114,7 @@ struct dns_validator {
/*
* Proofs to be cached.
*/
- dns_name_t *proofs[DNS_VALIDATOR_MAXPROOF];
+ dns_linkedname_t *proofs[DNS_VALIDATOR_MAXPROOF];
/*
* The denial type (NSEC or NSEC3) of the NOQNAME proof.
*/
@@ -184,12 +184,13 @@ struct dns_validator {
#define DNS_VALIDATOR_NONTA 0x0008U /*% Ignore NTA table */
isc_result_t
-dns_validator_create(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset,
- dns_message_t *message, unsigned int options,
- isc_loop_t *loop, isc_job_cb cb, void *arg,
- isc_counter_t *nvalidations, isc_counter_t *nfails,
- isc_counter_t *qc, isc_counter_t *gqc, fetchctx_t *parent,
+dns_validator_create(dns_view_t *view, dns_linkedname_t *name,
+ dns_rdatatype_t type, dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset, dns_message_t *message,
+ unsigned int options, isc_loop_t *loop, isc_job_cb cb,
+ void *arg, isc_counter_t *nvalidations,
+ isc_counter_t *nfails, isc_counter_t *qc,
+ isc_counter_t *gqc, fetchctx_t *parent,
dns_edectx_t *edectx, dns_validator_t **validatorp);
/*%<
* Start a DNSSEC validation.
diff --git a/lib/dns/message.c b/lib/dns/message.c
index 4357556416..2c0286dc5d 100644
--- a/lib/dns/message.c
+++ b/lib/dns/message.c
@@ -20,6 +20,7 @@
#include <ctype.h>
#include <inttypes.h>
#include <stdbool.h>
+#include <stddef.h>
#include <isc/async.h>
#include <isc/buffer.h>
@@ -34,6 +35,7 @@
#include <isc/work.h>
#include <dns/dnssec.h>
+#include <dns/fixedname.h>
#include <dns/keyvalues.h>
#include <dns/masterdump.h>
#include <dns/message.h>
@@ -448,7 +450,7 @@ msginit(dns_message_t *m) {
}
static void
-msgresetname(dns_message_t *msg, dns_name_t *name) {
+msgresetname(dns_message_t *msg, dns_linkedname_t *name) {
ISC_LIST_FOREACH(name->list, rds, link) {
ISC_LIST_UNLINK(name->list, rds, link);
dns__message_putassociatedrdataset(msg, &rds);
@@ -773,10 +775,10 @@ name_match(void *node, const void *key) {
}
static isc_result_t
-findname(dns_name_t **foundname, const dns_name_t *target,
+findname(dns_linkedname_t **foundname, const dns_name_t *target,
dns_namelist_t *section) {
ISC_LIST_FOREACH_REV(*section, name, link) {
- if (dns_name_equal(name, target)) {
+ if (dns_name_equal(dns_linkedname_name(name), target)) {
SET_IF_NOT_NULL(foundname, name);
return ISC_R_SUCCESS;
}
@@ -807,7 +809,7 @@ rds_match(void *node, const void *key0) {
}
isc_result_t
-dns_message_findtype(dns_name_t *name, dns_rdatatype_t type,
+dns_message_findtype(dns_linkedname_t *name, dns_rdatatype_t type,
dns_rdatatype_t covers, dns_rdataset_t **rdatasetp) {
REQUIRE(name != NULL);
REQUIRE(rdatasetp == NULL || *rdatasetp == NULL);
@@ -904,7 +906,7 @@ static isc_result_t
getquestions(isc_buffer_t *source, dns_message_t *msg, unsigned int options) {
isc_region_t r;
unsigned int count;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_rdataset_t *rdataset = NULL;
dns_rdatalist_t *rdatalist = NULL;
isc_result_t result = ISC_R_SUCCESS;
@@ -927,8 +929,8 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, unsigned int options) {
*/
isc_buffer_remainingregion(source, &r);
isc_buffer_setactive(source, r.length);
- CHECK(dns_name_fromwire(name, source, DNS_DECOMPRESS_ALWAYS,
- NULL));
+ CHECK(dns_name_fromwire(dns_linkedname_name(name), source,
+ DNS_DECOMPRESS_ALWAYS, NULL));
ISC_LIST_APPEND(*section, name, link);
@@ -1030,8 +1032,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
unsigned int options) {
isc_region_t r;
unsigned int count, rdatalen;
- dns_name_t *name = NULL;
- dns_name_t *found_name = NULL;
+ dns_linkedname_t *name = NULL;
+ dns_linkedname_t *found_name = NULL;
dns_rdataset_t *rdataset = NULL;
dns_rdataset_t *found_rdataset = NULL;
dns_rdatalist_t *rdatalist = NULL;
@@ -1072,8 +1074,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
*/
isc_buffer_remainingregion(source, &r);
isc_buffer_setactive(source, r.length);
- CHECK(dns_name_fromwire(name, source, DNS_DECOMPRESS_ALWAYS,
- NULL));
+ CHECK(dns_name_fromwire(dns_linkedname_name(name), source,
+ DNS_DECOMPRESS_ALWAYS, NULL));
/*
* Get type, class, ttl, and rdatalen. Verify that at least
@@ -1152,7 +1154,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
* must be in the additional data section, and
* it must be the first OPT we've seen.
*/
- if (!dns_name_isroot(name) ||
+ if (!dns_name_isroot(dns_linkedname_name(name)) ||
sectionid != DNS_SECTION_ADDITIONAL ||
msg->opt != NULL)
{
@@ -1250,7 +1252,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
if (covers == dns_rdatatype_none) {
if (sectionid != DNS_SECTION_ADDITIONAL ||
count != msg->counts[sectionid] - 1 ||
- !dns_name_isroot(name))
+ !dns_name_isroot(dns_linkedname_name(name)))
{
DO_ERROR(DNS_R_BADSIG0);
} else {
@@ -1269,7 +1271,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
* Check the ownername of NSEC3 records
*/
if (rdtype == dns_rdatatype_nsec3 &&
- !dns_rdata_checkowner(name, msg->rdclass, rdtype, false))
+ !dns_rdata_checkowner(dns_linkedname_name(name),
+ msg->rdclass, rdtype, false))
{
CLEANUP(DNS_R_BADOWNERNAME);
}
@@ -1298,9 +1301,10 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
* allocated name since we no longer need it, and set
* our name pointer to point to the name we found.
*/
- result = isc_hashmap_add(name_map, dns_name_hash(name),
- name_match, name, name,
- (void **)&found_name);
+ result = isc_hashmap_add(
+ name_map,
+ dns_name_hash(dns_linkedname_name(name)),
+ name_match, name, name, (void **)&found_name);
/*
* If it is a new name, append to the section.
@@ -1329,7 +1333,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
dns_message_gettemprdataset(msg, &rdataset);
dns_rdatalist_tordataset(rdatalist, rdataset);
- dns_rdataset_setownercase(rdataset, name);
+ dns_rdataset_setownercase(rdataset, dns_linkedname_name(name));
rdatalist = NULL;
/*
@@ -1470,7 +1474,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
/*
* Windows doesn't like TSIG names to be compressed.
*/
- msg->tsigname->attributes.nocompress = true;
+ dns_linkedname_name(msg->tsigname)
+ ->attributes.nocompress = true;
free_name = false;
} else if (rdtype == dns_rdatatype_dname &&
sectionid == DNS_SECTION_ANSWER &&
@@ -1850,7 +1855,7 @@ isc_result_t
dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
unsigned int options) {
dns_namelist_t *section = NULL;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_rdataset_t *rdataset = NULL;
unsigned int count, total;
isc_result_t result;
@@ -1913,8 +1918,9 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
st = *(msg->buffer);
count = 0;
result = dns_rdataset_towire(
- rdataset, name, msg->id, msg->cctx, msg->buffer,
- partial, rd_options, &count);
+ rdataset, dns_linkedname_name(name), msg->id,
+ msg->cctx, msg->buffer, partial, rd_options,
+ &count);
total += count;
if (partial && result == ISC_R_NOSPACE) {
msg->flags |= DNS_MESSAGEFLAG_TC;
@@ -1965,8 +1971,9 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
count = 0;
result = dns_rdataset_towire(
- rds, n, msg->id, msg->cctx, msg->buffer,
- partial, rd_options, &count);
+ rds, dns_linkedname_name(n), msg->id,
+ msg->cctx, msg->buffer, partial,
+ rd_options, &count);
total += count;
@@ -2185,8 +2192,9 @@ dns_message_renderend(dns_message_t *msg) {
msg->sig_reserved = 0;
RETERR(dns_tsig_sign(msg));
count = 0;
- result = renderset(msg->tsig, msg->tsigname, msg->id, msg->cctx,
- msg->buffer, msg->reserved, 0, &count);
+ result = renderset(
+ msg->tsig, dns_linkedname_name(msg->tsigname), msg->id,
+ msg->cctx, msg->buffer, msg->reserved, 0, &count);
msg->counts[DNS_SECTION_ADDITIONAL] += count;
if (result != ISC_R_SUCCESS) {
return result;
@@ -2289,7 +2297,7 @@ dns_message_nextname(dns_message_t *msg, dns_section_t section) {
void
dns_message_currentname(dns_message_t *msg, dns_section_t section,
- dns_name_t **name) {
+ dns_linkedname_t **name) {
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(VALID_NAMED_SECTION(section));
REQUIRE(name != NULL && *name == NULL);
@@ -2301,9 +2309,9 @@ dns_message_currentname(dns_message_t *msg, dns_section_t section,
isc_result_t
dns_message_findname(dns_message_t *msg, dns_section_t section,
const dns_name_t *target, dns_rdatatype_t type,
- dns_rdatatype_t covers, dns_name_t **name,
+ dns_rdatatype_t covers, dns_linkedname_t **name,
dns_rdataset_t **rdataset) {
- dns_name_t *foundname = NULL;
+ dns_linkedname_t *foundname = NULL;
isc_result_t result;
/*
@@ -2349,36 +2357,38 @@ dns_message_findname(dns_message_t *msg, dns_section_t section,
}
void
-dns_message_addname(dns_message_t *msg, dns_name_t *name,
+dns_message_addname(dns_message_t *msg, dns_linkedname_t *name,
dns_section_t section) {
REQUIRE(msg != NULL);
REQUIRE(msg->from_to_wire == DNS_MESSAGE_INTENTRENDER);
- REQUIRE(dns_name_isabsolute(name));
+ REQUIRE(dns_name_isabsolute(dns_linkedname_name(name)));
REQUIRE(VALID_NAMED_SECTION(section));
ISC_LIST_APPEND(msg->sections[section], name, link);
}
void
-dns_message_removename(dns_message_t *msg, dns_name_t *name,
+dns_message_removename(dns_message_t *msg, dns_linkedname_t *name,
dns_section_t section) {
REQUIRE(msg != NULL);
REQUIRE(msg->from_to_wire == DNS_MESSAGE_INTENTRENDER);
- REQUIRE(dns_name_isabsolute(name));
+ REQUIRE(dns_name_isabsolute(dns_linkedname_name(name)));
REQUIRE(VALID_NAMED_SECTION(section));
ISC_LIST_UNLINK(msg->sections[section], name, link);
}
void
-dns_message_gettempname(dns_message_t *msg, dns_name_t **item) {
+dns_message_gettempname(dns_message_t *msg, dns_linkedname_t **item) {
dns_fixedname_t *fn = NULL;
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(item != NULL && *item == NULL);
fn = isc_mempool_get(msg->namepool);
- *item = dns_fixedname_initname(fn);
+ dns_fixedname_init(fn);
+
+ *item = &fn->name_wl;
}
void
@@ -2407,8 +2417,8 @@ dns_message_gettemprdatalist(dns_message_t *msg, dns_rdatalist_t **item) {
}
void
-dns_message_puttempname(dns_message_t *msg, dns_name_t **itemp) {
- dns_name_t *item = NULL;
+dns_message_puttempname(dns_message_t *msg, dns_linkedname_t **itemp) {
+ dns_linkedname_t *item = NULL;
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(itemp != NULL && *itemp != NULL);
@@ -2426,16 +2436,16 @@ dns_message_puttempname(dns_message_t *msg, dns_name_t **itemp) {
/*
* we need to check this in case dns_name_dup() was used.
*/
- if (dns_name_dynamic(item)) {
- dns_name_free(item, msg->mctx);
+ if (dns_name_dynamic(dns_linkedname_name(item))) {
+ dns_name_free(dns_linkedname_name(item), msg->mctx);
}
/*
- * 'name' is the first field in dns_fixedname_t, so putting
- * back the address of name is the same as putting back
- * the fixedname.
+ * Since name_wl is the first field in dns_fixedname_t,
+ * we can cast directly.
*/
- isc_mempool_put(msg->namepool, item);
+ dns_fixedname_t *fn = (dns_fixedname_t *)item;
+ isc_mempool_put(msg->namepool, fn);
}
void
@@ -2639,7 +2649,7 @@ dns_message_gettsig(dns_message_t *msg, const dns_name_t **owner) {
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(owner == NULL || *owner == NULL);
- SET_IF_NOT_NULL(owner, msg->tsigname);
+ SET_IF_NOT_NULL(owner, dns_linkedname_name(msg->tsigname));
return msg->tsig;
}
@@ -2760,7 +2770,7 @@ dns_message_getsig0(dns_message_t *msg, const dns_name_t **owner) {
if (msg->sig0name == NULL) {
*owner = dns_rootname;
} else {
- *owner = msg->sig0name;
+ *owner = dns_linkedname_name(msg->sig0name);
}
}
return msg->sig0;
@@ -3236,10 +3246,12 @@ dns_message_sectiontotext(dns_message_t *msg, dns_section_t section,
ADD_STRING(target, ";");
}
result = dns_master_questiontotext(
- name, rds, style, target);
+ dns_linkedname_name(name), rds, style,
+ target);
} else {
result = dns_master_rdatasettotext(
- name, rds, style, &msg->indent, target);
+ dns_linkedname_name(name), rds, style,
+ &msg->indent, target);
}
if (result != ISC_R_SUCCESS) {
goto cleanup;
@@ -3482,7 +3494,9 @@ render_zoneversion(dns_message_t *msg, isc_buffer_t *optbuf,
unsigned int type = isc_buffer_getuint8(optbuf);
char buf[sizeof("4000000000")];
char namebuf[DNS_NAME_FORMATSIZE];
- dns_name_t *name = ISC_LIST_HEAD(msg->sections[DNS_SECTION_QUESTION]);
+ dns_linkedname_t *linkedname =
+ ISC_LIST_HEAD(msg->sections[DNS_SECTION_QUESTION]);
+ dns_name_t *name = dns_linkedname_name(linkedname);
dns_name_t suffix = DNS_NAME_INITEMPTY;
bool yaml = false, rawmode = false;
const char *sep1 = " ", *sep2 = ", ";
diff --git a/lib/dns/ncache.c b/lib/dns/ncache.c
index d316ed2b15..f57d4bd94f 100644
--- a/lib/dns/ncache.c
+++ b/lib/dns/ncache.c
@@ -156,7 +156,7 @@ dns_ncache_add(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
isc_buffer_init(&buffer, data, sizeof(data));
MSG_SECTION_FOREACH(message, DNS_SECTION_AUTHORITY, name) {
- if (name->attributes.ncache) {
+ if (dns_linkedname_name(name)->attributes.ncache) {
ISC_LIST_FOREACH(name->list, rdataset, link) {
if (!rdataset->attributes.ncache) {
continue;
@@ -194,7 +194,8 @@ dns_ncache_add(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
/*
* Copy the owner name to the buffer.
*/
- dns_name_toregion(name, &r);
+ dns_name_toregion(
+ dns_linkedname_name(name), &r);
RETERR(isc_buffer_copyregion(&buffer,
&r));
/*
diff --git a/lib/dns/notify.c b/lib/dns/notify.c
index 983ef68b5a..70d12df630 100644
--- a/lib/dns/notify.c
+++ b/lib/dns/notify.c
@@ -196,7 +196,7 @@ notify_createmessage(dns_notify_t *notify, dns_message_t **messagep) {
dns_rdataset_t rdataset;
dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_name_t *tempname = NULL;
+ dns_linkedname_t *tempname = NULL;
dns_rdata_t *temprdata = NULL;
dns_rdatalist_t *temprdatalist = NULL;
dns_rdataset_t *temprdataset = NULL;
@@ -222,7 +222,8 @@ notify_createmessage(dns_notify_t *notify, dns_message_t **messagep) {
/*
* Make question.
*/
- dns_name_clone(dns_zone_getorigin(notify->zone), tempname);
+ dns_name_clone(dns_zone_getorigin(notify->zone),
+ dns_linkedname_name(tempname));
dns_rdataset_makequestion(temprdataset, dns_zone_getclass(notify->zone),
notify->type);
ISC_LIST_APPEND(tempname->list, temprdataset, link);
@@ -243,9 +244,11 @@ notify_createmessage(dns_notify_t *notify, dns_message_t **messagep) {
INSIST(result == ISC_R_SUCCESS);
INSIST(zonedb != NULL); /* XXXJT: is this assumption correct? */
- dns_name_clone(dns_zone_getorigin(notify->zone), tempname);
+ dns_name_clone(dns_zone_getorigin(notify->zone),
+ dns_linkedname_name(tempname));
dns_db_currentversion(zonedb, &version);
- result = dns_db_findnode(zonedb, tempname, false, &node);
+ result = dns_db_findnode(zonedb, dns_linkedname_name(tempname), false,
+ &node);
if (result != ISC_R_SUCCESS) {
goto soa_cleanup;
}
diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c
index 8b841fbd90..043765851b 100644
--- a/lib/dns/qpzone.c
+++ b/lib/dns/qpzone.c
@@ -5420,7 +5420,7 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
static void
addglue_to_message(qpzonedb_t *qpdb, dns_glue_t *ge, dns_message_t *msg) {
for (; ge != NULL; ge = ge->next) {
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_rdataset_t *rdataset_a = NULL;
dns_rdataset_t *sigrdataset_a = NULL;
dns_rdataset_t *rdataset_aaaa = NULL;
@@ -5429,7 +5429,7 @@ addglue_to_message(qpzonedb_t *qpdb, dns_glue_t *ge, dns_message_t *msg) {
dns_message_gettempname(msg, &name);
- dns_name_copy(&ge->name, name);
+ dns_name_copy(&ge->name, dns_linkedname_name(name));
if (ge->header_a != NULL) {
dns_message_gettemprdataset(msg, &rdataset_a);
diff --git a/lib/dns/rdata/generic/rrsig_46.c b/lib/dns/rdata/generic/rrsig_46.c
index 1ad781ebea..bca2146fa0 100644
--- a/lib/dns/rdata/generic/rrsig_46.c
+++ b/lib/dns/rdata/generic/rrsig_46.c
@@ -502,7 +502,7 @@ fromstruct_rrsig(ARGS_FROMSTRUCT) {
/*
* Signer name.
*/
- RETERR(name_tobuffer(&sig->signer, target));
+ RETERR(name_tobuffer(dns_linkedname_name(&sig->signer), target));
/*
* Signature.
@@ -568,9 +568,9 @@ tostruct_rrsig(ARGS_TOSTRUCT) {
dns_name_init(&signer);
dns_name_fromregion(&signer, &sr);
- dns_name_init(&sig->signer);
- dns_name_clone(&signer, &sig->signer);
- isc_region_consume(&sr, name_length(&sig->signer));
+ dns_linkedname_init(&sig->signer);
+ dns_name_clone(&signer, dns_linkedname_name(&sig->signer));
+ isc_region_consume(&sr, name_length(dns_linkedname_name(&sig->signer)));
/*
* Signature.
diff --git a/lib/dns/rdata/generic/rrsig_46.h b/lib/dns/rdata/generic/rrsig_46.h
index 80e13abc3b..0f1afe2b07 100644
--- a/lib/dns/rdata/generic/rrsig_46.h
+++ b/lib/dns/rdata/generic/rrsig_46.h
@@ -24,7 +24,7 @@ typedef struct dns_rdata_rrsig {
uint32_t timeexpire;
uint32_t timesigned;
uint16_t keyid;
- dns_name_t signer;
+ dns_linkedname_t signer;
uint16_t siglen;
unsigned char *signature;
} dns_rdata_rrsig_t;
diff --git a/lib/dns/rdatalist.c b/lib/dns/rdatalist.c
index 79c6853d9d..86e0a7edc4 100644
--- a/lib/dns/rdatalist.c
+++ b/lib/dns/rdatalist.c
@@ -202,16 +202,18 @@ findproof(dns_name_t *name, dns_rdataclass_t rdclass, dns_rdatatype_t type,
}
isc_result_t
-dns__rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
+dns__rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_linkedname_t *name,
dns_rdatatype_t type) {
dns_rdataset_t *neg = NULL;
dns_rdataset_t *negsig = NULL;
dns_ttl_t ttl;
REQUIRE(rdataset != NULL);
- REQUIRE(DNS_NAME_VALID(name));
+ REQUIRE(DNS_NAME_VALID(dns_linkedname_name(name)));
- if (!findproof(name, rdataset->rdclass, type, &neg, &negsig)) {
+ if (!findproof(dns_linkedname_name(name), rdataset->rdclass, type, &neg,
+ &negsig))
+ {
return ISC_R_NOTFOUND;
}
@@ -233,22 +235,22 @@ dns__rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
dns_rdataset_t *negsig DNS__DB_FLARG) {
dns_rdataset_t *tneg = NULL;
dns_rdataset_t *tnegsig = NULL;
- dns_name_t *noqname = NULL;
+ dns_linkedname_t *noqname = NULL;
REQUIRE(rdataset != NULL);
REQUIRE(rdataset->attributes.noqname);
noqname = rdataset->rdlist.noqname;
- REQUIRE(DNS_NAME_VALID(noqname));
+ REQUIRE(DNS_NAME_VALID(dns_linkedname_name(noqname)));
- if (!findproof(noqname, rdataset->rdclass, rdataset->rdlist.noqnametype,
- &tneg, &tnegsig))
+ if (!findproof(dns_linkedname_name(noqname), rdataset->rdclass,
+ rdataset->rdlist.noqnametype, &tneg, &tnegsig))
{
return ISC_R_NOTFOUND;
}
- dns_name_clone(noqname, name);
+ dns_name_clone(dns_linkedname_name(noqname), name);
dns_rdataset_clone(tneg, neg);
dns_rdataset_clone(tnegsig, negsig);
return ISC_R_SUCCESS;
diff --git a/lib/dns/rdataset.c b/lib/dns/rdataset.c
index 3da673a102..94680f1e48 100644
--- a/lib/dns/rdataset.c
+++ b/lib/dns/rdataset.c
@@ -458,7 +458,7 @@ dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
}
isc_result_t
-dns_rdataset_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
+dns_rdataset_addnoqname(dns_rdataset_t *rdataset, dns_linkedname_t *name,
dns_rdatatype_t type) {
REQUIRE(DNS_RDATASET_VALID(rdataset));
REQUIRE(rdataset->methods != NULL);
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
index b9af354e54..542fa748bc 100644
--- a/lib/dns/resolver.c
+++ b/lib/dns/resolver.c
@@ -712,7 +712,7 @@ static void
add_bad(fetchctx_t *fctx, dns_message_t *rmessage, dns_adbaddrinfo_t *addrinfo,
isc_result_t reason, badnstype_t badtype);
static void
-findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name,
+findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_linkedname_t *name,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset);
#define fctx_failure_detach(fctxp, result) \
@@ -967,13 +967,13 @@ typedef struct respctx {
* of
* labels in a DNAME */
- dns_name_t *aname; /* answer name */
+ dns_linkedname_t *aname; /* answer name */
dns_rdataset_t *ardataset; /* answer rdataset */
- dns_name_t *cname; /* CNAME name */
+ dns_linkedname_t *cname; /* CNAME name */
dns_rdataset_t *crdataset; /* CNAME rdataset */
- dns_name_t *dname; /* DNAME name */
+ dns_linkedname_t *dname; /* DNAME name */
dns_rdataset_t *drdataset; /* DNAME rdataset */
dns_name_t *ns_name; /* NS name */
@@ -1108,8 +1108,8 @@ set_stats(dns_resolver_t *res, isc_statscounter_t counter, uint64_t val) {
static void
valcreate(fetchctx_t *fctx, dns_message_t *message, dns_adbaddrinfo_t *addrinfo,
- dns_name_t *name, dns_rdatatype_t type, dns_rdataset_t *rdataset,
- dns_rdataset_t *sigrdataset) {
+ dns_linkedname_t *name, dns_rdatatype_t type,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
dns_validator_t *validator = NULL;
dns_valarg_t *valarg = NULL;
unsigned int valoptions = 0;
@@ -2485,7 +2485,7 @@ resquery_send(resquery_t *query) {
fetchctx_t *fctx = query->fctx;
dns_resolver_t *res = fctx->res;
isc_buffer_t buffer;
- dns_name_t *qname = NULL;
+ dns_linkedname_t *qname = NULL;
dns_rdataset_t *qrdataset = NULL;
isc_region_t r;
isc_netaddr_t ipaddr;
@@ -2519,7 +2519,7 @@ resquery_send(resquery_t *query) {
/*
* Set up question.
*/
- dns_name_clone(fctx->name, qname);
+ dns_name_clone(fctx->name, dns_linkedname_name(qname));
dns_rdataset_makequestion(qrdataset, res->rdclass, fctx->type);
ISC_LIST_APPEND(qname->list, qrdataset, link);
dns_message_addname(fctx->qmessage, qname, DNS_SECTION_QUESTION);
@@ -3702,7 +3702,8 @@ fctx_getaddresses_nameservers(fetchctx_t *fctx, isc_stdtime_t now,
size_t *ns_processed) {
bool have_address = false;
unsigned int name_processed = 0;
- static thread_local dns_name_t *nameservers[MAX_DELEGATION_SERVERS];
+ static thread_local dns_linkedname_t
+ *nameservers[MAX_DELEGATION_SERVERS];
size_t max_delegation_servers = fctx->res->view->max_delegation_servers;
/*
@@ -3754,7 +3755,7 @@ shufflens:
bool overquota = false;
unsigned int static_stub = 0;
unsigned int no_fetch = 0;
- dns_name_t *ns = nameservers[i];
+ dns_name_t *ns = dns_linkedname_name(nameservers[i]);
size_t maxfindlen = max_delegation_servers - *ns_processed;
size_t findlen = 0;
@@ -5280,8 +5281,9 @@ is_lame(fetchctx_t *fctx, dns_message_t *message) {
if (rdataset->type != dns_rdatatype_ns) {
continue;
}
- namereln = dns_name_fullcompare(name, fctx->domain,
- &order, &labels);
+ namereln = dns_name_fullcompare(
+ dns_linkedname_name(name), fctx->domain, &order,
+ &labels);
if (namereln == dns_namereln_equal &&
(message->flags & DNS_MESSAGEFLAG_AA) != 0)
{
@@ -5331,7 +5333,7 @@ log_formerr(fetchctx_t *fctx, const char *format, ...) {
static isc_result_t
same_question(fetchctx_t *fctx, dns_message_t *message) {
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_rdataset_t *rdataset = NULL;
/*
@@ -5380,13 +5382,14 @@ same_question(fetchctx_t *fctx, dns_message_t *message) {
if (fctx->type != rdataset->type ||
fctx->res->rdclass != rdataset->rdclass ||
- !dns_name_equal(fctx->name, name))
+ !dns_name_equal(fctx->name, dns_linkedname_name(name)))
{
char namebuf[DNS_NAME_FORMATSIZE];
char classbuf[DNS_RDATACLASS_FORMATSIZE];
char typebuf[DNS_RDATATYPE_FORMATSIZE];
- dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(name), namebuf,
+ sizeof(namebuf));
dns_rdataclass_format(rdataset->rdclass, classbuf,
sizeof(classbuf));
dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
@@ -5544,7 +5547,7 @@ gettrust(dns_rdataset_t *rdataset) {
}
static inline dns_rdataset_t *
-getrrsig(dns_name_t *name, dns_rdatatype_t type) {
+getrrsig(dns_linkedname_t *name, dns_rdatatype_t type) {
for (dns_rdataset_t *sig = ISC_LIST_HEAD(name->list); sig != NULL;
sig = ISC_LIST_NEXT(sig, link))
{
@@ -5676,7 +5679,7 @@ get_and_check_signer_name(dns_name_t *signer, dns_rdataset_t *sigrdataset) {
dns_rdataset_current(sigrdataset, &rdata);
result = dns_rdata_tostruct(&rdata, &rrsig);
INSIST(result == ISC_R_SUCCESS);
- dns_name_copy(&rrsig.signer, signer);
+ dns_name_copy(dns_linkedname_name(&rrsig.signer), signer);
while (dns_rdataset_next(sigrdataset) == ISC_R_SUCCESS) {
rdata = (dns_rdata_t)DNS_RDATA_INIT;
@@ -5684,7 +5687,8 @@ get_and_check_signer_name(dns_name_t *signer, dns_rdataset_t *sigrdataset) {
result = dns_rdata_tostruct(&rdata, &rrsig);
INSIST(result == ISC_R_SUCCESS);
- if (!dns_name_equal(signer, &rrsig.signer)) {
+ if (!dns_name_equal(signer, dns_linkedname_name(&rrsig.signer)))
+ {
return false;
}
}
@@ -5743,7 +5747,8 @@ fctx_cacheauthority(fetchctx_t *fctx, dns_message_t *message,
* "black lies".
*/
if (rdataset->type == dns_rdatatype_nsec &&
- !dns_name_equal(fctx->name, name) &&
+ !dns_name_equal(fctx->name,
+ dns_linkedname_name(name)) &&
is_minimal_nsec(rdataset))
{
continue;
@@ -5767,9 +5772,9 @@ fctx_cacheauthority(fetchctx_t *fctx, dns_message_t *message,
continue;
}
- result = cache_rrset(fctx, now, name, rdataset,
- sigrdataset, NULL, NULL, NULL,
- false);
+ result = cache_rrset(
+ fctx, now, dns_linkedname_name(name), rdataset,
+ sigrdataset, NULL, NULL, NULL, false);
if (result != ISC_R_SUCCESS) {
continue;
}
@@ -5841,13 +5846,15 @@ validated(void *arg) {
* Cache the data as pending for later
* validation.
*/
- cache_rrset(fctx, now, val->name, val->rdataset,
- val->sigrdataset, NULL, NULL, NULL,
- false);
+ cache_rrset(fctx, now,
+ dns_linkedname_name(val->name),
+ val->rdataset, val->sigrdataset,
+ NULL, NULL, NULL, false);
}
break;
default:
- delete_rrset(fctx, val->name, val->type);
+ delete_rrset(fctx, dns_linkedname_name(val->name),
+ val->type);
}
add_bad(fctx, message, addrinfo, result, badns_validation);
@@ -5900,8 +5907,9 @@ validated(void *arg) {
FCTXTRACE("nonexistence validation OK");
inc_stats(res, dns_resstatscounter_valnegsuccess);
- result = negcache(message, fctx, val->name, now, val->optout,
- val->secure, ardataset, &node);
+ result = negcache(message, fctx, dns_linkedname_name(val->name),
+ now, val->optout, val->secure, ardataset,
+ &node);
if (result != ISC_R_SUCCESS) {
done = true;
goto cleanup;
@@ -5929,9 +5937,9 @@ validated(void *arg) {
/*
* The data was already cached as pending. Re-cache it as secure.
*/
- result = cache_rrset(fctx, now, val->name, val->rdataset,
- val->sigrdataset, &node, ardataset, asigrdataset,
- true);
+ result = cache_rrset(fctx, now, dns_linkedname_name(val->name),
+ val->rdataset, val->sigrdataset, &node, ardataset,
+ asigrdataset, true);
if (result != ISC_R_SUCCESS) {
done = true;
goto cleanup;
@@ -5971,7 +5979,7 @@ answer_response:
FCTX_ATTR_SET(fctx, FCTX_ATTR_HAVEANSWER);
fctx_setresult(fctx);
- dns_name_copy(val->name, fctx->resp.foundname);
+ dns_name_copy(dns_linkedname_name(val->name), fctx->resp.foundname);
dns_db_transfernode(fctx->cache, &node, &fctx->resp_node);
done = true;
@@ -6023,7 +6031,7 @@ fctx_log(void *arg, int level, const char *fmt, ...) {
}
static void
-findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name,
+findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_linkedname_t *name,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
isc_result_t result;
dns_rdata_rrsig_t rrsig;
@@ -6035,7 +6043,7 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name,
dns_name_t *nearest = NULL;
dns_fixedname_t fnearest;
dns_rdatatype_t found = dns_rdatatype_none;
- dns_name_t *noqname = NULL;
+ dns_linkedname_t *noqname = NULL;
dns_rdatatype_t type = rdataset->type;
FCTXTRACE("findnoqname");
@@ -6044,7 +6052,7 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name,
return;
}
- labels = dns_name_countlabels(name);
+ labels = dns_name_countlabels(dns_linkedname_name(name));
result = ISC_R_NOTFOUND;
DNS_RDATASET_FOREACH(sigrdataset) {
@@ -6082,8 +6090,9 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name,
if (nrdataset->type == dns_rdatatype_nsec &&
NXND(dns_nsec_noexistnodata(
- type, name, nsec, nrdataset, &exists, &data,
- NULL, fctx_log, fctx)))
+ type, dns_linkedname_name(name),
+ dns_linkedname_name(nsec), nrdataset,
+ &exists, &data, NULL, fctx_log, fctx)))
{
if (!exists) {
noqname = nsec;
@@ -6093,8 +6102,9 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name,
if (nrdataset->type == dns_rdatatype_nsec3 &&
NXND(dns_nsec3_noexistnodata(
- type, name, nsec, nrdataset, zonename,
- &exists, &data, &optout, &unknown,
+ type, dns_linkedname_name(name),
+ dns_linkedname_name(nsec), nrdataset,
+ zonename, &exists, &data, &optout, &unknown,
&setnearest, closest, nearest, fctx_log,
fctx)))
{
@@ -6121,7 +6131,7 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_name_t *name,
}
static isc_result_t
-check_cacheable(dns_name_t *name, dns_rdataset_t *rdataset, bool fail) {
+check_cacheable(dns_linkedname_t *name, dns_rdataset_t *rdataset, bool fail) {
/* This rdataset isn't marked for caching */
if (!CACHE(rdataset)) {
return DNS_R_CONTINUE;
@@ -6133,7 +6143,8 @@ check_cacheable(dns_name_t *name, dns_rdataset_t *rdataset, bool fail) {
char typebuf[DNS_RDATATYPE_FORMATSIZE];
char classbuf[DNS_RDATATYPE_FORMATSIZE];
- dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(name), namebuf,
+ sizeof(namebuf));
dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
dns_rdataclass_format(rdataset->rdclass, classbuf,
sizeof(classbuf));
@@ -6191,9 +6202,10 @@ fixttls(dns_view_t *view, dns_rdataset_t *rdataset,
}
static isc_result_t
-rctx_cache_secure(respctx_t *rctx, dns_message_t *message, dns_name_t *name,
- dns_dbnode_t *node, dns_rdataset_t *rdataset,
- dns_rdataset_t *sigrdataset, bool need_validation) {
+rctx_cache_secure(respctx_t *rctx, dns_message_t *message,
+ dns_linkedname_t *name, dns_dbnode_t *node,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset,
+ bool need_validation) {
fetchctx_t *fctx = rctx->fctx;
resquery_t *query = rctx->query;
dns_rdataset_t *ardataset = NULL, *asigset = NULL;
@@ -6275,17 +6287,18 @@ rctx_cache_secure(respctx_t *rctx, dns_message_t *message, dns_name_t *name,
* in-between.
*/
- RETERR(cache_rrset(fctx, rctx->now, name, rdataset, sigrdataset,
- &node, ardataset, asigset, need_validation));
+ RETERR(cache_rrset(fctx, rctx->now, dns_linkedname_name(name),
+ rdataset, sigrdataset, &node, ardataset,
+ asigset, need_validation));
}
return ISC_R_SUCCESS;
}
static isc_result_t
-rctx_cache_insecure(respctx_t *rctx, dns_message_t *message, dns_name_t *name,
- dns_dbnode_t *node, dns_rdataset_t *rdataset,
- dns_rdataset_t *sigrdataset) {
+rctx_cache_insecure(respctx_t *rctx, dns_message_t *message,
+ dns_linkedname_t *name, dns_dbnode_t *node,
+ dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
isc_result_t result;
fetchctx_t *fctx = rctx->fctx;
dns_rdataset_t *added = NULL;
@@ -6313,14 +6326,15 @@ rctx_cache_insecure(respctx_t *rctx, dns_message_t *message, dns_name_t *name,
/*
* Cache the rdataset.
*/
- result = cache_rrset(fctx, rctx->now, name, rdataset, NULL, &node,
- added, NULL, false);
+ result = cache_rrset(fctx, rctx->now, dns_linkedname_name(name),
+ rdataset, NULL, &node, added, NULL, false);
return result;
}
static isc_result_t
-rctx_cachename(respctx_t *rctx, dns_message_t *message, dns_name_t *name) {
+rctx_cachename(respctx_t *rctx, dns_message_t *message,
+ dns_linkedname_t *name) {
isc_result_t result = ISC_R_SUCCESS;
fetchctx_t *fctx = rctx->fctx;
resquery_t *query = rctx->query;
@@ -6337,14 +6351,16 @@ rctx_cachename(respctx_t *rctx, dns_message_t *message, dns_name_t *name) {
/*
* Is DNSSEC validation required for this name?
*/
- bool secure_domain = issecuredomain(fctx, name, fctx->type, rctx->now);
+ bool secure_domain = issecuredomain(fctx, dns_linkedname_name(name),
+ fctx->type, rctx->now);
bool need_validation = secure_domain &&
((fctx->options & DNS_FETCHOPT_NOVALIDATE) == 0);
/*
* Find or create the cache node.
*/
- RETERR(dns_db_findnode(fctx->cache, name, true, &node));
+ RETERR(dns_db_findnode(fctx->cache, dns_linkedname_name(name), true,
+ &node));
/*
* Cache or validate each cacheable rdataset.
@@ -6407,13 +6423,15 @@ rctx_cachename(respctx_t *rctx, dns_message_t *message, dns_name_t *name) {
* We're not validating and have an answer ready; pass
* it back to the caller.
*/
- if (!need_validation && name->attributes.answer && !HAVE_ANSWER(fctx)) {
+ if (!need_validation && dns_linkedname_name(name)->attributes.answer &&
+ !HAVE_ANSWER(fctx))
+ {
fctx->resp_result = ISC_R_SUCCESS;
if (dns_rdataset_isassociated(&fctx->resp.rdataset)) {
fctx_setresult(fctx);
}
- dns_name_copy(name, fctx->resp.foundname);
+ dns_name_copy(dns_linkedname_name(name), fctx->resp.foundname);
dns_db_transfernode(fctx->cache, &node, &fctx->resp_node);
FCTX_ATTR_SET(fctx, FCTX_ATTR_HAVEANSWER);
}
@@ -6441,7 +6459,7 @@ rctx_cachemessage(respctx_t *rctx) {
section <= DNS_SECTION_ADDITIONAL; section++)
{
MSG_SECTION_FOREACH(message, section, name) {
- if (name->attributes.cache) {
+ if (dns_linkedname_name(name)->attributes.cache) {
CHECK(rctx_cachename(rctx, message, name));
}
}
@@ -6600,8 +6618,8 @@ rctx_ncache(respctx_t *rctx) {
* will call validated() on completion; the caching of
* negative answers will be done then.
*/
- valcreate(fctx, message, addrinfo, name, fctx->type, NULL,
- NULL);
+ valcreate(fctx, message, addrinfo, &fctx->fname.name_wl,
+ fctx->type, NULL, NULL);
goto done;
}
@@ -6961,7 +6979,7 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
respctx_t *rctx = arg;
fetchctx_t *fctx = rctx->fctx;
isc_result_t result;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
bool external;
dns_rdatatype_t rtype;
@@ -6970,7 +6988,7 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
result = dns_message_findname(rctx->query->rmessage, section, addname,
dns_rdatatype_any, 0, &name, NULL);
if (result == ISC_R_SUCCESS) {
- external = name_external(name, type, rctx);
+ external = name_external(dns_linkedname_name(name), type, rctx);
if (type == dns_rdatatype_a) {
ISC_LIST_FOREACH(name->list, rdataset, link) {
if (dns_rdatatype_issig(rdataset->type)) {
@@ -6979,14 +6997,16 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
rtype = rdataset->type;
}
if (dns_rdatatype_isaddr(rtype)) {
- mark_related(name, rdataset, external);
+ mark_related(dns_linkedname_name(name),
+ rdataset, external);
}
}
} else {
dns_rdataset_t *rdataset = NULL;
result = dns_message_findtype(name, type, 0, &rdataset);
if (result == ISC_R_SUCCESS) {
- mark_related(name, rdataset, external);
+ mark_related(dns_linkedname_name(name),
+ rdataset, external);
if (found != NULL) {
dns_rdataset_clone(rdataset, found);
}
@@ -6998,7 +7018,8 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
name, dns_rdatatype_rrsig, type,
&rdataset);
if (result == ISC_R_SUCCESS) {
- mark_related(name, rdataset, external);
+ mark_related(dns_linkedname_name(name),
+ rdataset, external);
}
}
}
@@ -7014,7 +7035,7 @@ check_related(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
}
static bool
-is_answeraddress_allowed(dns_view_t *view, dns_name_t *name,
+is_answeraddress_allowed(dns_view_t *view, dns_linkedname_t *name,
dns_rdataset_t *rdataset) {
isc_result_t result;
dns_rdata_t rdata = DNS_RDATA_INIT;
@@ -7036,7 +7057,9 @@ is_answeraddress_allowed(dns_view_t *view, dns_name_t *name,
* If the owner name matches one in the exclusion list, either
* exactly or partially, allow it.
*/
- if (dns_nametree_covered(view->answeracl_exclude, name, NULL, 0)) {
+ if (dns_nametree_covered(view->answeracl_exclude,
+ dns_linkedname_name(name), NULL, 0))
+ {
return true;
}
@@ -7069,7 +7092,8 @@ is_answeraddress_allowed(dns_view_t *view, dns_name_t *name,
view->aclenv, &match, NULL);
if (result == ISC_R_SUCCESS && match > 0) {
isc_netaddr_format(&netaddr, addrbuf, sizeof(addrbuf));
- dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(name), namebuf,
+ sizeof(namebuf));
dns_rdatatype_format(rdataset->type, typebuf,
sizeof(typebuf));
dns_rdataclass_format(rdataset->rdclass, classbuf,
@@ -7086,8 +7110,9 @@ is_answeraddress_allowed(dns_view_t *view, dns_name_t *name,
}
static bool
-is_answertarget_allowed(fetchctx_t *fctx, dns_name_t *qname, dns_name_t *rname,
- dns_rdataset_t *rdataset, bool *chainingp) {
+is_answertarget_allowed(fetchctx_t *fctx, dns_name_t *qname,
+ dns_linkedname_t *rname, dns_rdataset_t *rdataset,
+ bool *chainingp) {
isc_result_t result;
dns_name_t *tname = NULL;
dns_rdata_cname_t cname;
@@ -7120,8 +7145,9 @@ is_answertarget_allowed(fetchctx_t *fctx, dns_name_t *qname, dns_name_t *rname,
tname = &cname.cname;
break;
case dns_rdatatype_dname:
- if (dns_name_fullcompare(qname, rname, &order, &nlabels) !=
- dns_namereln_subdomain)
+ if (dns_name_fullcompare(qname, dns_linkedname_name(rname),
+ &order,
+ &nlabels) != dns_namereln_subdomain)
{
return true;
}
@@ -7129,7 +7155,7 @@ is_answertarget_allowed(fetchctx_t *fctx, dns_name_t *qname, dns_name_t *rname,
RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_name_init(&prefix);
tname = dns_fixedname_initname(&fixed);
- nlabels = dns_name_countlabels(rname);
+ nlabels = dns_name_countlabels(dns_linkedname_name(rname));
dns_name_split(qname, nlabels, &prefix, NULL);
result = dns_name_concatenate(&prefix, &dname.dname, tname);
if (result == DNS_R_NAMETOOLONG) {
@@ -7383,9 +7409,12 @@ checknamessection(dns_message_t *message, dns_section_t section) {
DNS_RDATASET_FOREACH(rdataset) {
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdataset_current(rdataset, &rdata);
- if (!dns_rdata_checkowner(name, rdata.rdclass,
- rdata.type, false) ||
- !dns_rdata_checknames(&rdata, name, NULL))
+ if (!dns_rdata_checkowner(
+ dns_linkedname_name(name),
+ rdata.rdclass, rdata.type, false) ||
+ !dns_rdata_checknames(
+ &rdata, dns_linkedname_name(name),
+ NULL))
{
rdataset->attributes.checknames = true;
}
@@ -7563,7 +7592,9 @@ betterreferral(respctx_t *rctx) {
dns_message_t *msg = rctx->query->rmessage;
MSG_SECTION_FOREACH(msg, DNS_SECTION_AUTHORITY, name) {
- if (!isstrictsubdomain(name, rctx->fctx->domain)) {
+ if (!isstrictsubdomain(dns_linkedname_name(name),
+ rctx->fctx->domain))
+ {
continue;
}
@@ -8719,8 +8750,9 @@ rctx_answer_scan(respctx_t *rctx) {
unsigned int nlabels;
dns_namereln_t namereln;
- namereln = dns_name_fullcompare(fctx->name, name, &order,
- &nlabels);
+ namereln = dns_name_fullcompare(fctx->name,
+ dns_linkedname_name(name),
+ &order, &nlabels);
switch (namereln) {
case dns_namereln_equal:
ISC_LIST_FOREACH(name->list, rdataset, link) {
@@ -8745,7 +8777,9 @@ rctx_answer_scan(respctx_t *rctx) {
/*
* Don't accept DNAME from parent namespace.
*/
- if (name_external(name, dns_rdatatype_dname, rctx)) {
+ if (name_external(dns_linkedname_name(name),
+ dns_rdatatype_dname, rctx))
+ {
continue;
}
@@ -8836,8 +8870,8 @@ rctx_answer_any(respctx_t *rctx) {
return ISC_R_COMPLETE;
}
- rctx->aname->attributes.cache = true;
- rctx->aname->attributes.answer = true;
+ dns_linkedname_name(rctx->aname)->attributes.cache = true;
+ dns_linkedname_name(rctx->aname)->attributes.answer = true;
if (dns_rdatatype_issig(rdataset->type)) {
rdataset->attributes.answersig = true;
} else {
@@ -8855,7 +8889,7 @@ rctx_answer_any(respctx_t *rctx) {
* would leave the fetch waiting for a validator that is never
* started.
*/
- if (!rctx->aname->attributes.cache) {
+ if (!dns_linkedname_name(rctx->aname)->attributes.cache) {
rctx->result = DNS_R_FORMERR;
return ISC_R_COMPLETE;
}
@@ -8896,14 +8930,14 @@ rctx_answer_match(respctx_t *rctx) {
return ISC_R_COMPLETE;
}
- rctx->aname->attributes.cache = true;
- rctx->aname->attributes.answer = true;
+ dns_linkedname_name(rctx->aname)->attributes.cache = true;
+ dns_linkedname_name(rctx->aname)->attributes.answer = true;
rctx->ardataset->attributes.answer = true;
rctx->ardataset->attributes.cache = true;
rctx->ardataset->trust = rctx->trust;
- (void)dns_rdataset_additionaldata(rctx->ardataset, rctx->aname,
- check_related, rctx,
- DNS_RDATASET_MAXADDITIONAL);
+ (void)dns_rdataset_additionaldata(
+ rctx->ardataset, dns_linkedname_name(rctx->aname),
+ check_related, rctx, DNS_RDATASET_MAXADDITIONAL);
ISC_LIST_FOREACH(rctx->aname->list, sigrdataset, link) {
if (!validinanswer(sigrdataset, fctx)) {
@@ -8945,9 +8979,9 @@ rctx_answer_cname(respctx_t *rctx) {
return ISC_R_COMPLETE;
}
- rctx->cname->attributes.cache = true;
- rctx->cname->attributes.answer = true;
- rctx->cname->attributes.chaining = true;
+ dns_linkedname_name(rctx->cname)->attributes.cache = true;
+ dns_linkedname_name(rctx->cname)->attributes.answer = true;
+ dns_linkedname_name(rctx->cname)->attributes.chaining = true;
rctx->crdataset->attributes.answer = true;
rctx->crdataset->attributes.cache = true;
rctx->crdataset->attributes.chaining = true;
@@ -8995,9 +9029,9 @@ rctx_answer_dname(respctx_t *rctx) {
return ISC_R_COMPLETE;
}
- rctx->dname->attributes.cache = true;
- rctx->dname->attributes.answer = true;
- rctx->dname->attributes.chaining = true;
+ dns_linkedname_name(rctx->dname)->attributes.cache = true;
+ dns_linkedname_name(rctx->dname)->attributes.answer = true;
+ dns_linkedname_name(rctx->dname)->attributes.chaining = true;
rctx->drdataset->attributes.answer = true;
rctx->drdataset->attributes.cache = true;
rctx->drdataset->attributes.chaining = true;
@@ -9046,8 +9080,9 @@ rctx_authority_positive(respctx_t *rctx) {
}
MSG_SECTION_FOREACH(msg, DNS_SECTION_AUTHORITY, name) {
- if (!name_external(name, dns_rdatatype_ns, rctx) &&
- dns_name_issubdomain(fctx->name, name))
+ if (!name_external(dns_linkedname_name(name), dns_rdatatype_ns,
+ rctx) &&
+ dns_name_issubdomain(fctx->name, dns_linkedname_name(name)))
{
/*
* We expect to find NS or SIG NS rdatasets, and
@@ -9057,7 +9092,8 @@ rctx_authority_positive(respctx_t *rctx) {
if (dns_rdataset_matchestype(rdataset,
dns_rdatatype_ns))
{
- name->attributes.cache = true;
+ dns_linkedname_name(name)
+ ->attributes.cache = true;
rdataset->attributes.cache = true;
if (rctx->aa) {
@@ -9070,7 +9106,9 @@ rctx_authority_positive(respctx_t *rctx) {
if (rdataset->type == dns_rdatatype_ns)
{
- rctx->ns_name = name;
+ rctx->ns_name =
+ dns_linkedname_name(
+ name);
rctx->ns_rdataset = rdataset;
}
/*
@@ -9078,8 +9116,9 @@ rctx_authority_positive(respctx_t *rctx) {
* related to this rdataset.
*/
(void)dns_rdataset_additionaldata(
- rdataset, name, check_related,
- rctx,
+ rdataset,
+ dns_linkedname_name(name),
+ check_related, rctx,
DNS_RDATASET_MAXADDITIONAL);
return;
}
@@ -9243,7 +9282,9 @@ rctx_authority_negative(respctx_t *rctx) {
dns_message_t *msg = rctx->query->rmessage;
MSG_SECTION_FOREACH(msg, section, name) {
- if (!dns_name_issubdomain(name, fctx->domain)) {
+ if (!dns_name_issubdomain(dns_linkedname_name(name),
+ fctx->domain))
+ {
continue;
}
@@ -9254,13 +9295,15 @@ rctx_authority_negative(respctx_t *rctx) {
}
if ((type == dns_rdatatype_ns ||
type == dns_rdatatype_soa) &&
- !dns_name_issubdomain(fctx->name, name))
+ !dns_name_issubdomain(fctx->name,
+ dns_linkedname_name(name)))
{
char qbuf[DNS_NAME_FORMATSIZE];
char nbuf[DNS_NAME_FORMATSIZE];
char tbuf[DNS_RDATATYPE_FORMATSIZE];
dns_rdatatype_format(type, tbuf, sizeof(tbuf));
- dns_name_format(name, nbuf, sizeof(nbuf));
+ dns_name_format(dns_linkedname_name(name), nbuf,
+ sizeof(nbuf));
dns_name_format(fctx->name, qbuf, sizeof(qbuf));
log_formerr(fctx,
"unrelated %s %s in "
@@ -9271,7 +9314,8 @@ rctx_authority_negative(respctx_t *rctx) {
switch (type) {
case dns_rdatatype_ns:
- if (name_external(name, dns_rdatatype_ns, rctx))
+ if (name_external(dns_linkedname_name(name),
+ dns_rdatatype_ns, rctx))
{
continue;
}
@@ -9282,7 +9326,8 @@ rctx_authority_negative(respctx_t *rctx) {
*/
if (rdataset->type == dns_rdatatype_ns) {
if (rctx->ns_name != NULL &&
- name != rctx->ns_name)
+ dns_linkedname_name(name) !=
+ rctx->ns_name)
{
log_formerr(
fctx,
@@ -9291,7 +9336,8 @@ rctx_authority_negative(respctx_t *rctx) {
rctx->result = DNS_R_FORMERR;
return ISC_R_COMPLETE;
}
- rctx->ns_name = name;
+ rctx->ns_name =
+ dns_linkedname_name(name);
rctx->ns_rdataset = rdataset;
}
break;
@@ -9303,7 +9349,8 @@ rctx_authority_negative(respctx_t *rctx) {
*/
if (rdataset->type == dns_rdatatype_soa) {
if (rctx->soa_name != NULL &&
- name != rctx->soa_name)
+ dns_linkedname_name(name) !=
+ rctx->soa_name)
{
log_formerr(
fctx,
@@ -9312,9 +9359,11 @@ rctx_authority_negative(respctx_t *rctx) {
rctx->result = DNS_R_FORMERR;
return ISC_R_COMPLETE;
}
- rctx->soa_name = name;
+ rctx->soa_name =
+ dns_linkedname_name(name);
}
- name->attributes.ncache = true;
+ dns_linkedname_name(name)->attributes.ncache =
+ true;
rdataset->attributes.ncache = true;
if (rctx->aa) {
rdataset->trust =
@@ -9346,12 +9395,14 @@ rctx_authority_dnssec(respctx_t *rctx) {
dns_message_t *msg = rctx->query->rmessage;
MSG_SECTION_FOREACH(msg, DNS_SECTION_AUTHORITY, name) {
- if (!dns_name_issubdomain(name, fctx->domain)) {
+ if (!dns_name_issubdomain(dns_linkedname_name(name),
+ fctx->domain))
+ {
/*
* Invalid name found; preserve it for logging
* later.
*/
- rctx->found_name = name;
+ rctx->found_name = dns_linkedname_name(name);
rctx->found_type = ISC_LIST_HEAD(name->list)->type;
continue;
}
@@ -9368,10 +9419,12 @@ rctx_authority_dnssec(respctx_t *rctx) {
case dns_rdatatype_nsec:
case dns_rdatatype_nsec3:
if (rctx->negative) {
- name->attributes.ncache = true;
+ dns_linkedname_name(name)
+ ->attributes.ncache = true;
rdataset->attributes.ncache = true;
} else if (type == dns_rdatatype_nsec) {
- name->attributes.cache = true;
+ dns_linkedname_name(name)
+ ->attributes.cache = true;
rdataset->attributes.cache = true;
}
@@ -9408,7 +9461,8 @@ rctx_authority_dnssec(respctx_t *rctx) {
return ISC_R_COMPLETE;
}
- if (name != rctx->ns_name) {
+ if (dns_linkedname_name(name) != rctx->ns_name)
+ {
log_formerr(fctx,
"%s doesn't match the "
"delegation owner name",
@@ -9416,12 +9470,13 @@ rctx_authority_dnssec(respctx_t *rctx) {
rctx->result = DNS_R_FORMERR;
return ISC_R_COMPLETE;
}
- name->attributes.cache = true;
+ dns_linkedname_name(name)->attributes.cache =
+ true;
rdataset->attributes.cache = true;
- secure_domain = issecuredomain(fctx, name,
- dns_rdatatype_ds,
- fctx->now);
+ secure_domain = issecuredomain(
+ fctx, dns_linkedname_name(name),
+ dns_rdatatype_ds, fctx->now);
if (secure_domain) {
rdataset->trust =
dns_trust_pending_answer;
@@ -9594,15 +9649,16 @@ again:
dns_message_t *msg = rctx->query->rmessage;
MSG_SECTION_FOREACH(msg, section, name) {
- if (!name->attributes.chase) {
+ if (!dns_linkedname_name(name)->attributes.chase) {
continue;
}
- name->attributes.chase = false;
+ dns_linkedname_name(name)->attributes.chase = false;
ISC_LIST_FOREACH(name->list, rdataset, link) {
if (CHASE(rdataset)) {
rdataset->attributes.chase = false;
(void)dns_rdataset_additionaldata(
- rdataset, name, check_related, rctx,
+ rdataset, dns_linkedname_name(name),
+ check_related, rctx,
DNS_RDATASET_MAXADDITIONAL);
rescan = true;
}
diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c
index 448ec9add8..92e59e554a 100644
--- a/lib/dns/sdlz.c
+++ b/lib/dns/sdlz.c
@@ -1095,7 +1095,7 @@ deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
static bool
sdlz_addglue_addr(sdlz_addglue_ctx_t *ctx, dns_dbnode_t *node,
- dns_rdatatype_t type, dns_name_t **mnamep,
+ dns_rdatatype_t type, dns_linkedname_t **mnamep,
bool required DNS__DB_FLARG) {
dns_rdataset_t *rdataset = NULL;
isc_result_t result;
@@ -1112,7 +1112,7 @@ sdlz_addglue_addr(sdlz_addglue_ctx_t *ctx, dns_dbnode_t *node,
dns_sdlznode_t *sdlznode = (dns_sdlznode_t *)node;
dns_message_gettempname(ctx->msg, mnamep);
- dns_name_copy(&sdlznode->name, *mnamep);
+ dns_name_copy(&sdlznode->name, dns_linkedname_name(*mnamep));
}
if (required) {
@@ -1133,7 +1133,7 @@ sdlz_addglue_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
dns_rdataset_t *unused ISC_ATTR_UNUSED DNS__DB_FLARG) {
sdlz_addglue_ctx_t *ctx = arg;
dns_dbnode_t *node = NULL;
- dns_name_t *mname = NULL;
+ dns_linkedname_t *mname = NULL;
isc_result_t result;
bool added = false;
bool required;
diff --git a/lib/dns/tkey.c b/lib/dns/tkey.c
index 5ea3596bc9..750bf03d58 100644
--- a/lib/dns/tkey.c
+++ b/lib/dns/tkey.c
@@ -104,7 +104,7 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata,
uint32_t ttl, dns_namelist_t *namelist) {
isc_region_t r, newr;
dns_rdata_t *newrdata = NULL;
- dns_name_t *newname = NULL;
+ dns_linkedname_t *newname = NULL;
dns_rdatalist_t *newlist = NULL;
dns_rdataset_t *newset = NULL;
isc_buffer_t *tmprdatabuf = NULL;
@@ -119,7 +119,7 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata,
dns_message_takebuffer(msg, &tmprdatabuf);
dns_message_gettempname(msg, &newname);
- dns_name_copy(name, newname);
+ dns_name_copy(name, dns_linkedname_name(newname));
dns_message_gettemprdatalist(msg, &newlist);
newlist->rdclass = newrdata->rdclass;
@@ -326,7 +326,7 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
dns_tsigkeyring_t *ring) {
isc_result_t result = ISC_R_SUCCESS;
dns_rdata_tkey_t tkeyin, tkeyout;
- dns_name_t *qname = NULL;
+ dns_linkedname_t *qname = NULL;
dns_name_t *keyname = NULL, *signer = NULL;
dns_name_t tsigner = DNS_NAME_INITEMPTY;
dns_fixedname_t fkeyname;
@@ -352,7 +352,8 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
/* * Look for a TKEY record that matches the question.
*/
- result = dns_message_findname(msg, DNS_SECTION_ADDITIONAL, qname,
+ result = dns_message_findname(msg, DNS_SECTION_ADDITIONAL,
+ dns_linkedname_name(qname),
dns_rdatatype_tkey, 0, NULL, &tkeyset);
if (result != ISC_R_SUCCESS) {
tkey_log("dns_tkey_processquery: couldn't find a TKEY "
@@ -401,16 +402,18 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
/*
* A delete operation uses the fully specified qname.
*/
- keyname = qname;
+ // FIXME: Is this correct?
+ keyname = dns_linkedname_name(qname);
CHECK(process_deletetkey(signer, keyname, &tkeyin, &tkeyout,
ring));
break;
case DNS_TKEYMODE_GSSAPI:
keyname = dns_fixedname_initname(&fkeyname);
- if (!dns_name_isroot(qname)) {
- unsigned int n = dns_name_countlabels(qname);
- dns_name_copy(qname, keyname);
+ if (!dns_name_isroot(dns_linkedname_name(qname))) {
+ unsigned int n = dns_name_countlabels(
+ dns_linkedname_name(qname));
+ dns_name_copy(dns_linkedname_name(qname), keyname);
dns_name_getlabelsequence(keyname, 0, n - 1, keyname);
} else {
unsigned char randomdata[16];
@@ -463,7 +466,7 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
/*
* For unrecognized modes also use the fully specified qname.
*/
- keyname = qname;
+ keyname = dns_linkedname_name(qname);
tkeyout.error = dns_tsigerror_badmode;
}
@@ -493,7 +496,7 @@ cleanup:
static isc_result_t
buildquery(dns_message_t *msg, const dns_name_t *name, dns_rdata_tkey_t *tkey) {
- dns_name_t *qname = NULL, *aname = NULL;
+ dns_linkedname_t *qname = NULL, *aname = NULL;
dns_rdataset_t *question = NULL, *tkeyset = NULL;
dns_rdatalist_t *tkeylist = NULL;
dns_rdata_t *rdata = NULL;
@@ -532,8 +535,8 @@ buildquery(dns_message_t *msg, const dns_name_t *name, dns_rdata_tkey_t *tkey) {
dns_message_gettemprdataset(msg, &tkeyset);
dns_rdatalist_tordataset(tkeylist, tkeyset);
- dns_name_copy(name, qname);
- dns_name_copy(name, aname);
+ dns_name_copy(name, dns_linkedname_name(qname));
+ dns_name_copy(name, dns_linkedname_name(aname));
ISC_LIST_APPEND(qname->list, question, link);
ISC_LIST_APPEND(aname->list, tkeyset, link);
@@ -596,7 +599,7 @@ find_tkey(dns_message_t *msg, dns_name_t **name, dns_rdata_t *rdata,
RETERR(dns_rdataset_first(tkeyset));
dns_rdataset_current(tkeyset, rdata);
- *name = cur;
+ *name = dns_linkedname_name(cur);
return ISC_R_SUCCESS;
}
}
diff --git a/lib/dns/tsig.c b/lib/dns/tsig.c
index 2ab8e4a521..b13bd723f8 100644
--- a/lib/dns/tsig.c
+++ b/lib/dns/tsig.c
@@ -600,7 +600,7 @@ dns_tsig_sign(dns_message_t *msg) {
unsigned char data[128];
isc_buffer_t databuf, sigbuf;
isc_buffer_t *dynbuf = NULL;
- dns_name_t *owner = NULL;
+ dns_linkedname_t *owner = NULL;
dns_rdata_t *rdata = NULL;
dns_rdatalist_t *datalist = NULL;
dns_rdataset_t *dataset = NULL;
@@ -843,7 +843,7 @@ dns_tsig_sign(dns_message_t *msg) {
}
dns_message_gettempname(msg, &owner);
- dns_name_copy(key->name, owner);
+ dns_name_copy(key->name, dns_linkedname_name(owner));
dns_message_gettemprdatalist(msg, &datalist);
@@ -856,7 +856,7 @@ dns_tsig_sign(dns_message_t *msg) {
msg->tsigname = owner;
/* Windows does not like the tsig name being compressed. */
- msg->tsigname->attributes.nocompress = true;
+ dns_linkedname_name(msg->tsigname)->attributes.nocompress = true;
return ISC_R_SUCCESS;
@@ -935,7 +935,7 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
* TSIG record.
*/
- keyname = msg->tsigname;
+ keyname = dns_linkedname_name(msg->tsigname);
RETERR(dns_rdataset_first(msg->tsig));
dns_rdataset_current(msg->tsig, &rdata);
RETERR(dns_rdata_tostruct(&rdata, &tsig));
@@ -1262,7 +1262,7 @@ tsig_verify_tcp(isc_buffer_t *source, dns_message_t *msg) {
if (msg->tsig != NULL) {
has_tsig = true;
- keyname = msg->tsigname;
+ keyname = dns_linkedname_name(msg->tsigname);
result = dns_rdataset_first(msg->tsig);
if (result != ISC_R_SUCCESS) {
goto cleanup_querystruct;
diff --git a/lib/dns/validator.c b/lib/dns/validator.c
index a17c27d743..9bd64bac92 100644
--- a/lib/dns/validator.c
+++ b/lib/dns/validator.c
@@ -47,6 +47,8 @@
#include <dns/validator.h>
#include <dns/view.h>
+#include "dns/name.h"
+
/*! \file
* \brief
* Basic processing sequences:
@@ -175,8 +177,8 @@ create_fetch(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
isc_job_cb callback, const char *caller);
static isc_result_t
-create_ds_fetch(dns_validator_t *val, dns_name_t *name, isc_job_cb callback,
- const char *caller);
+create_ds_fetch(dns_validator_t *val, dns_linkedname_t *name,
+ isc_job_cb callback, const char *caller);
static isc_result_t
view_find(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type);
@@ -313,8 +315,10 @@ find_nsec_signer(dns_validator_t *val, dns_rdataset_t *sigp,
}
if (dns_name_empty(signer)) {
- dns_name_copy(&sig.signer, signer);
- } else if (!dns_name_equal(signer, &sig.signer)) {
+ dns_name_copy(dns_linkedname_name(&sig.signer), signer);
+ } else if (!dns_name_equal(signer,
+ dns_linkedname_name(&sig.signer)))
+ {
validator_log(val, ISC_LOG_DEBUG(3),
"is_insecure_referral: NSEC "
"RRSIG signers differ; refusing "
@@ -947,10 +951,10 @@ validator_callback_dnskey(void *arg) {
break;
default:
expire_rdatasets(val);
- result = create_fetch(val, &val->siginfo->signer,
- dns_rdatatype_dnskey, NULL, NULL,
- fetch_callback_dnskey,
- "validator_callback_dnskey");
+ result = create_fetch(
+ val, dns_linkedname_name(&val->siginfo->signer),
+ dns_rdatatype_dnskey, NULL, NULL, fetch_callback_dnskey,
+ "validator_callback_dnskey");
if (result == ISC_R_SUCCESS) {
result = DNS_R_WAIT;
}
@@ -1138,19 +1142,22 @@ validator_callback_nsec(void *arg) {
}
switch (result) {
case ISC_R_SUCCESS: {
- dns_name_t **proofs = val->proofs;
+ dns_linkedname_t **proofs = val->proofs;
dns_name_t *wild = dns_fixedname_name(&val->wild);
if (rdataset->type == dns_rdatatype_nsec &&
rdataset->trust == dns_trust_secure &&
(NEEDNODATA(val) || NEEDNOQNAME(val)) &&
!FOUNDNODATA(val) && !FOUNDNOQNAME(val) &&
- dns_name_issubdomain(val->name,
- &subvalidator->siginfo->signer) &&
- dns_nsec_noexistnodata(val->type, val->name,
- subvalidator->name, rdataset,
- &exists, &data, wild, validator_log,
- val) == ISC_R_SUCCESS)
+ dns_name_issubdomain(
+ dns_linkedname_name(val->name),
+ dns_linkedname_name(
+ &subvalidator->siginfo->signer)) &&
+ dns_nsec_noexistnodata(
+ val->type, dns_linkedname_name(val->name),
+ dns_linkedname_name(subvalidator->name), rdataset,
+ &exists, &data, wild, validator_log,
+ val) == ISC_R_SUCCESS)
{
if (exists && !data) {
val->attributes |= VALATTR_FOUNDNODATA;
@@ -1279,7 +1286,7 @@ static bool
check_deadlock(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
for (dns_validator_t *cur = val; cur != NULL; cur = cur->parent) {
- if (!dns_name_equal(cur->name, name)) {
+ if (!dns_name_equal(dns_linkedname_name(cur->name), name)) {
continue;
}
@@ -1362,8 +1369,8 @@ create_fetch(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
* Fetch DS from the parent, using a cached delegation hint if available.
*/
static isc_result_t
-create_ds_fetch(dns_validator_t *val, dns_name_t *name, isc_job_cb callback,
- const char *caller) {
+create_ds_fetch(dns_validator_t *val, dns_linkedname_t *name,
+ isc_job_cb callback, const char *caller) {
isc_result_t result;
dns_fixedname_t pfixed, fixed;
dns_name_t *pname = NULL, *fname = NULL;
@@ -1371,10 +1378,11 @@ create_ds_fetch(dns_validator_t *val, dns_name_t *name, isc_job_cb callback,
const dns_name_t *parent = NULL;
unsigned int n;
- n = dns_name_countlabels(name);
+ n = dns_name_countlabels(dns_linkedname_name(name));
if (n > 1) {
pname = dns_fixedname_initname(&pfixed);
- dns_name_getlabelsequence(name, 1, n - 1, pname);
+ dns_name_getlabelsequence(dns_linkedname_name(name), 1, n - 1,
+ pname);
fname = dns_fixedname_initname(&fixed);
result = dns_view_bestzonecut(val->view, pname, fname, NULL, 0,
@@ -1386,8 +1394,8 @@ create_ds_fetch(dns_validator_t *val, dns_name_t *name, isc_job_cb callback,
}
}
- result = create_fetch(val, name, dns_rdatatype_ds, parent, delegset,
- callback, caller);
+ result = create_fetch(val, dns_linkedname_name(name), dns_rdatatype_ds,
+ parent, delegset, callback, caller);
if (delegset != NULL) {
dns_delegset_detach(&delegset);
}
@@ -1399,9 +1407,10 @@ create_ds_fetch(dns_validator_t *val, dns_name_t *name, isc_job_cb callback,
* Start a subvalidation process.
*/
static isc_result_t
-create_validator(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset,
- isc_job_cb cb, const char *caller) {
+create_validator(dns_validator_t *val, dns_linkedname_t *name,
+ dns_rdatatype_t type, dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset, isc_job_cb cb,
+ const char *caller) {
isc_result_t result;
unsigned int vopts = 0;
dns_rdataset_t *sig = NULL;
@@ -1410,7 +1419,8 @@ create_validator(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
sig = sigrdataset;
}
- if (check_deadlock(val, name, type, rdataset, sig)) {
+ if (check_deadlock(val, dns_linkedname_name(name), type, rdataset, sig))
+ {
validator_log(val, ISC_LOG_DEBUG(3),
"deadlock found (create_validator)");
return ISC_R_DEADLOCK;
@@ -1420,7 +1430,8 @@ create_validator(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
vopts |= (val->options &
(DNS_VALIDATOR_NOCDFLAG | DNS_VALIDATOR_NONTA));
- validator_logcreate(val, name, type, caller, "validator");
+ validator_logcreate(val, dns_linkedname_name(name), type, caller,
+ "validator");
result = dns_validator_create(
val->view, name, type, rdataset, sig, NULL, vopts, val->loop,
cb, val, val->nvalidations, val->nfails, val->qc, val->gqc,
@@ -1477,8 +1488,9 @@ select_signing_key(dns_validator_t *val, dns_rdataset_t *rdataset) {
continue;
}
- result = dns_dnssec_keyfromrdata(&siginfo->signer, &rdata,
- val->view->mctx, &val->key);
+ result = dns_dnssec_keyfromrdata(
+ dns_linkedname_name(&siginfo->signer), &rdata,
+ val->view->mctx, &val->key);
/* Don't count unsupported algorithm towards max fails */
if (result == DST_R_UNSUPPORTEDALG) {
/* Continue with the next key */
@@ -1507,8 +1519,9 @@ seek_dnskey(dns_validator_t *val) {
* The signer name must be at the same level as the owner name
* or closer to the DNS root.
*/
- namereln = dns_name_fullcompare(val->name, &siginfo->signer, &order,
- &nlabels);
+ namereln = dns_name_fullcompare(dns_linkedname_name(val->name),
+ dns_linkedname_name(&siginfo->signer),
+ &order, &nlabels);
if (namereln != dns_namereln_subdomain &&
namereln != dns_namereln_equal)
{
@@ -1555,7 +1568,8 @@ seek_dnskey(dns_validator_t *val) {
/*
* Do we know about this key?
*/
- result = view_find(val, &siginfo->signer, dns_rdatatype_dnskey);
+ result = view_find(val, dns_linkedname_name(&siginfo->signer),
+ dns_rdatatype_dnskey);
switch (result) {
case ISC_R_SUCCESS:
/*
@@ -1609,9 +1623,9 @@ seek_dnskey(dns_validator_t *val) {
/*
* We don't know anything about this key.
*/
- RETERR(create_fetch(val, &siginfo->signer, dns_rdatatype_dnskey,
- NULL, NULL, fetch_callback_dnskey,
- "seek_dnskey"));
+ RETERR(create_fetch(val, dns_linkedname_name(&siginfo->signer),
+ dns_rdatatype_dnskey, NULL, NULL,
+ fetch_callback_dnskey, "seek_dnskey"));
return DNS_R_WAIT;
case DNS_R_NCACHENXDOMAIN:
@@ -1701,7 +1715,7 @@ static isc_result_t
selfsigned_dnskey(dns_validator_t *val) {
dns_rdataset_t *rdataset = val->rdataset;
dns_rdataset_t *sigrdataset = val->sigrdataset;
- dns_name_t *name = val->name;
+ dns_name_t *name = dns_linkedname_name(val->name);
isc_result_t result;
isc_mem_t *mctx = val->view->mctx;
bool match = false;
@@ -1731,7 +1745,8 @@ selfsigned_dnskey(dns_validator_t *val) {
if (sig.algorithm != key.algorithm ||
sig.keyid != keytag ||
- !dns_name_equal(name, &sig.signer))
+ !dns_name_equal(name,
+ dns_linkedname_name(&sig.signer)))
{
continue;
}
@@ -1855,8 +1870,9 @@ verify(dns_validator_t *val, dst_key_t *key, dns_rdata_t *rdata,
consume_validation(val);
again:
- result = dns_dnssec_verify(val->name, val->rdataset, key, ignore,
- val->view->mctx, rdata, wild, wildsigner);
+ result = dns_dnssec_verify(dns_linkedname_name(val->name),
+ val->rdataset, key, ignore, val->view->mctx,
+ rdata, wild, wildsigner);
if ((result == DNS_R_SIGEXPIRED || result == DNS_R_SIGFUTURE) &&
val->view->acceptexpired)
{
@@ -1881,7 +1897,7 @@ again:
isc_result_totext(result));
}
if (result == DNS_R_FROMWILDCARD) {
- if (!dns_name_equal(val->name, wild)) {
+ if (!dns_name_equal(dns_linkedname_name(val->name), wild)) {
dns_name_t *closest = dns_fixedname_name(&val->closest);
/*
@@ -2087,7 +2103,8 @@ validate_answer_process(void *arg) {
* was known and "sufficiently good".
*/
if (!dns_resolver_algorithm_supported(
- val->view->resolver, &val->siginfo->signer,
+ val->view->resolver,
+ dns_linkedname_name(&val->siginfo->signer),
val->siginfo->algorithm, val->siginfo->signature,
val->siginfo->siglen))
{
@@ -2331,8 +2348,8 @@ check_signer(dns_validator_t *val, dns_rdata_t *keyrdata, uint16_t keyid,
dst_key_t *dstkey = NULL;
dns_rdataset_t rdataset = DNS_RDATASET_INIT;
- RETERR(dns_dnssec_keyfromrdata(val->name, keyrdata, val->view->mctx,
- &dstkey));
+ RETERR(dns_dnssec_keyfromrdata(dns_linkedname_name(val->name), keyrdata,
+ val->view->mctx, &dstkey));
dns_rdataset_clone(val->sigrdataset, &rdataset);
DNS_RDATASET_FOREACH(&rdataset) {
@@ -2372,10 +2389,10 @@ check_signer(dns_validator_t *val, dns_rdata_t *keyrdata, uint16_t keyid,
* continue the zone key validation.
*/
static isc_result_t
-get_dsset(dns_validator_t *val, dns_name_t *tname, isc_result_t *resp) {
+get_dsset(dns_validator_t *val, dns_linkedname_t *tname, isc_result_t *resp) {
isc_result_t result;
- result = view_find(val, tname, dns_rdatatype_ds);
+ result = view_find(val, dns_linkedname_name(tname), dns_rdatatype_ds);
switch (result) {
case ISC_R_SUCCESS:
/*
@@ -2492,7 +2509,8 @@ validate_dnskey_dsset(dns_validator_t *val) {
return DNS_R_BADALG;
}
- if (!dns_resolver_ds_digest_supported(val->view->resolver, val->name,
+ if (!dns_resolver_ds_digest_supported(val->view->resolver,
+ dns_linkedname_name(val->name),
ds.digest_type))
{
if (val->unsupported_digest == 0) {
@@ -2523,9 +2541,9 @@ validate_dnskey_dsset(dns_validator_t *val) {
if (data != NULL || (ds.algorithm != DNS_KEYALG_PRIVATEDNS &&
ds.algorithm != DNS_KEYALG_PRIVATEOID))
{
- if (!dns_resolver_algorithm_supported(val->view->resolver,
- val->name, ds.algorithm,
- data, datalen))
+ if (!dns_resolver_algorithm_supported(
+ val->view->resolver, dns_linkedname_name(val->name),
+ ds.algorithm, data, datalen))
{
if (val->unsupported_algorithm == 0) {
val->unsupported_algorithm = ds.algorithm;
@@ -2563,8 +2581,8 @@ validate_dnskey_dsset(dns_validator_t *val) {
/*
* Find the DNSKEY matching the DS...
*/
- result = dns_dnssec_matchdskey(val->name, &dsrdata, val->rdataset,
- &keyrdata);
+ result = dns_dnssec_matchdskey(dns_linkedname_name(val->name), &dsrdata,
+ val->rdataset, &keyrdata);
if (result != ISC_R_SUCCESS) {
val->validation_attempts++;
validator_log(val, ISC_LOG_DEBUG(3), "no DNSKEY matching DS");
@@ -2590,9 +2608,9 @@ validate_dnskey_dsset(dns_validator_t *val) {
if (data == NULL && (ds.algorithm == DNS_KEYALG_PRIVATEDNS ||
ds.algorithm == DNS_KEYALG_PRIVATEOID))
{
- if (!dns_resolver_algorithm_supported(val->view->resolver,
- val->name, key.algorithm,
- key.data, key.datalen))
+ if (!dns_resolver_algorithm_supported(
+ val->view->resolver, dns_linkedname_name(val->name),
+ key.algorithm, key.data, key.datalen))
{
if (val->unsupported_algorithm == 0) {
val->unsupported_algorithm = key.algorithm;
@@ -2723,7 +2741,9 @@ validate_dnskey(void *arg) {
* a DS style trust anchor configured for this key.
*/
if (val->dsset == NULL) {
- result = dns_keytable_find(val->keytable, val->name, &keynode);
+ result = dns_keytable_find(val->keytable,
+ dns_linkedname_name(val->name),
+ &keynode);
if (result == ISC_R_SUCCESS) {
if (dns_keynode_dsset(keynode, &val->fdsset)) {
val->dsset = &val->fdsset;
@@ -2742,7 +2762,7 @@ validate_dnskey(void *arg) {
* If this is the root name and there was no trust anchor,
* we can give up now, since there's no DS at the root.
*/
- if (dns_name_isroot(val->name)) {
+ if (dns_name_isroot(dns_linkedname_name(val->name))) {
if ((val->attributes & VALATTR_TRIEDVERIFY) != 0) {
validator_log(val, ISC_LOG_DEBUG(3),
"root key failed to validate");
@@ -2795,14 +2815,15 @@ validate_dnskey(void *arg) {
RUNTIME_CHECK(result == ISC_R_SUCCESS);
if (!dns_resolver_ds_digest_supported(
- val->view->resolver, val->name, ds.digest_type))
+ val->view->resolver, dns_linkedname_name(val->name),
+ ds.digest_type))
{
continue;
}
- if (!dns_resolver_algorithm_supported(val->view->resolver,
- val->name, ds.algorithm,
- NULL, 0))
+ if (!dns_resolver_algorithm_supported(
+ val->view->resolver, dns_linkedname_name(val->name),
+ ds.algorithm, NULL, 0))
{
continue;
}
@@ -2834,7 +2855,7 @@ cleanup:
* a message, or a negative cache rdataset.
*/
static isc_result_t
-val_rdataset_first(dns_validator_t *val, dns_name_t **namep,
+val_rdataset_first(dns_validator_t *val, dns_linkedname_t **namep,
dns_rdataset_t **rdatasetp) {
dns_message_t *message = val->message;
isc_result_t result = ISC_R_SUCCESS;
@@ -2857,7 +2878,9 @@ val_rdataset_first(dns_validator_t *val, dns_name_t **namep,
} else {
result = dns_rdataset_first(val->rdataset);
if (result == ISC_R_SUCCESS) {
- dns_ncache_current(val->rdataset, *namep, *rdatasetp);
+ dns_ncache_current(val->rdataset,
+ dns_linkedname_name(*namep),
+ *rdatasetp);
}
}
@@ -2865,7 +2888,7 @@ val_rdataset_first(dns_validator_t *val, dns_name_t **namep,
}
static isc_result_t
-val_rdataset_next(dns_validator_t *val, dns_name_t **namep,
+val_rdataset_next(dns_validator_t *val, dns_linkedname_t **namep,
dns_rdataset_t **rdatasetp) {
dns_message_t *message = val->message;
isc_result_t result = ISC_R_SUCCESS;
@@ -2892,7 +2915,9 @@ val_rdataset_next(dns_validator_t *val, dns_name_t **namep,
dns_rdataset_disassociate(*rdatasetp);
result = dns_rdataset_next(val->rdataset);
if (result == ISC_R_SUCCESS) {
- dns_ncache_current(val->rdataset, *namep, *rdatasetp);
+ dns_ncache_current(val->rdataset,
+ dns_linkedname_name(*namep),
+ *rdatasetp);
}
}
return result;
@@ -2979,13 +3004,15 @@ cleanup:
static isc_result_t
checkwildcard(dns_validator_t *val, dns_rdatatype_t type,
dns_name_t *zonename) {
- dns_name_t *name, *wild, tname;
+ dns_linkedname_t *name;
+ dns_linkedname_t tname_wl;
+ dns_name_t *wild;
isc_result_t result;
bool exists, data;
char namebuf[DNS_NAME_FORMATSIZE];
dns_rdataset_t *rdataset, trdataset;
- dns_name_init(&tname);
+ dns_linkedname_init(&tname_wl);
dns_rdataset_init(&trdataset);
wild = dns_fixedname_name(&val->wild);
@@ -2999,7 +3026,7 @@ checkwildcard(dns_validator_t *val, dns_rdatatype_t type,
validator_log(val, ISC_LOG_DEBUG(3), "in checkwildcard: %s", namebuf);
if (val->message == NULL) {
- name = &tname;
+ name = &tname_wl;
rdataset = &trdataset;
} else {
name = NULL;
@@ -3022,16 +3049,18 @@ checkwildcard(dns_validator_t *val, dns_rdatatype_t type,
continue;
}
- dns_name_t **proofs = val->proofs;
+ dns_linkedname_t **proofs = val->proofs;
switch (rdataset->type) {
case dns_rdatatype_nsec:
- result = valid_nsec_signer(val, name, zonename);
+ result = valid_nsec_signer(
+ val, dns_linkedname_name(name), zonename);
if (result != ISC_R_SUCCESS) {
continue;
}
result = dns_nsec_noexistnodata(
- val->type, wild, name, rdataset, &exists, &data,
- NULL, validator_log, val);
+ val->type, wild, dns_linkedname_name(name),
+ rdataset, &exists, &data, NULL, validator_log,
+ val);
if (result != ISC_R_SUCCESS) {
continue;
@@ -3039,9 +3068,9 @@ checkwildcard(dns_validator_t *val, dns_rdatatype_t type,
break;
case dns_rdatatype_nsec3:
result = dns_nsec3_noexistnodata(
- val->type, wild, name, rdataset, zonename,
- &exists, &data, NULL, NULL, NULL, NULL, NULL,
- validator_log, val);
+ val->type, wild, dns_linkedname_name(name),
+ rdataset, zonename, &exists, &data, NULL, NULL,
+ NULL, NULL, NULL, validator_log, val);
if (result != ISC_R_SUCCESS) {
continue;
}
@@ -3078,19 +3107,21 @@ checkwildcard(dns_validator_t *val, dns_rdatatype_t type,
*/
static isc_result_t
findnsec3proofs(dns_validator_t *val) {
+ dns_linkedname_t tname_wl;
+ dns_linkedname_t *name = (val->message == NULL) ? &tname_wl : NULL;
isc_result_t result;
dns_rdataset_t trdataset = DNS_RDATASET_INIT;
dns_rdataset_t *rdataset = (val->message == NULL) ? &trdataset : NULL;
- dns_name_t tname = DNS_NAME_INITEMPTY;
- dns_name_t *name = (val->message == NULL) ? &tname : NULL;
dns_fixedname_t fclosest, fnearest, fzonename;
dns_name_t *closest = dns_fixedname_initname(&fclosest);
dns_name_t *nearest = dns_fixedname_initname(&fnearest);
dns_name_t *zonename = dns_fixedname_initname(&fzonename);
dns_name_t *closestp = NULL;
- dns_name_t **proofs = val->proofs;
+ dns_linkedname_t **proofs = val->proofs;
bool exists, data, optout, unknown, setnearest;
+ dns_linkedname_init(&tname_wl);
+
for (result = val_rdataset_first(val, &name, &rdataset);
result == ISC_R_SUCCESS;
result = val_rdataset_next(val, &name, &rdataset))
@@ -3102,7 +3133,8 @@ findnsec3proofs(dns_validator_t *val) {
}
result = dns_nsec3_noexistnodata(
- val->type, val->name, name, rdataset, zonename, NULL,
+ val->type, dns_linkedname_name(val->name),
+ dns_linkedname_name(name), rdataset, zonename, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, validator_log, val);
if (result != ISC_R_IGNORE && result != ISC_R_SUCCESS) {
CLEANUP(result);
@@ -3148,7 +3180,8 @@ findnsec3proofs(dns_validator_t *val) {
optout = false;
unknown = false;
result = dns_nsec3_noexistnodata(
- val->type, val->name, name, rdataset, zonename, &exists,
+ val->type, dns_linkedname_name(val->name),
+ dns_linkedname_name(name), rdataset, zonename, &exists,
&data, &optout, &unknown, &setnearest, closestp,
nearest, validator_log, val);
if (unknown) {
@@ -3243,7 +3276,7 @@ cleanup:
* \li Other return codes indicate failure.
*/
static isc_result_t
-validate_neg_rrset(dns_validator_t *val, dns_name_t *name,
+validate_neg_rrset(dns_validator_t *val, dns_linkedname_t *name,
dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
/*
* If a signed zone is missing the zone key, bad
@@ -3257,7 +3290,8 @@ validate_neg_rrset(dns_validator_t *val, dns_name_t *name,
*/
if (val->type == dns_rdatatype_dnskey &&
rdataset->type == dns_rdatatype_nsec &&
- dns_name_equal(name, val->name))
+ dns_name_equal(dns_linkedname_name(name),
+ dns_linkedname_name(val->name)))
{
dns_rdata_t nsec = DNS_RDATA_INIT;
@@ -3292,7 +3326,7 @@ validate_neg_rrset(dns_validator_t *val, dns_name_t *name,
*/
static isc_result_t
validate_authority(dns_validator_t *val, bool resume) {
- dns_name_t *name;
+ dns_linkedname_t *name;
dns_message_t *message = val->message;
isc_result_t result;
@@ -3344,7 +3378,7 @@ validate_authority(dns_validator_t *val, bool resume) {
*/
static isc_result_t
validate_ncache(dns_validator_t *val, bool resume) {
- dns_name_t *name;
+ dns_linkedname_t *name;
isc_result_t result;
if (!resume) {
@@ -3360,17 +3394,18 @@ validate_ncache(dns_validator_t *val, bool resume) {
disassociate_rdatasets(val);
- name = dns_fixedname_initname(&val->fname);
+ name = dns_fixedname_initlinkedname(&val->fname);
rdataset = &val->frdataset;
- dns_ncache_current(val->rdataset, name, rdataset);
+ dns_ncache_current(val->rdataset, dns_linkedname_name(name),
+ rdataset);
if (val->frdataset.type == dns_rdatatype_rrsig) {
continue;
}
- result = dns_ncache_getsigrdataset(val->rdataset, name,
- rdataset->type,
- &val->fsigrdataset);
+ result = dns_ncache_getsigrdataset(
+ val->rdataset, dns_linkedname_name(name),
+ rdataset->type, &val->fsigrdataset);
if (result == ISC_R_SUCCESS) {
sigrdataset = &val->fsigrdataset;
}
@@ -3650,19 +3685,22 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
char namebuf[DNS_NAME_FORMATSIZE];
dns_fixedname_t fixedfound;
dns_name_t *found = dns_fixedname_initname(&fixedfound);
- dns_name_t *tname = dns_fixedname_initname(&val->fname);
+ dns_linkedname_t *tname = dns_fixedname_initlinkedname(&val->fname);
- if (val->labels == dns_name_countlabels(val->name)) {
- dns_name_copy(val->name, tname);
+ if (val->labels == dns_name_countlabels(dns_linkedname_name(val->name)))
+ {
+ dns_name_copy(dns_linkedname_name(val->name),
+ dns_linkedname_name(tname));
} else {
- dns_name_split(val->name, val->labels, NULL, tname);
+ dns_name_split(dns_linkedname_name(val->name), val->labels,
+ NULL, dns_linkedname_name(tname));
}
- dns_name_format(tname, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(tname), namebuf, sizeof(namebuf));
validator_log(val, ISC_LOG_DEBUG(3), "checking existence of DS at '%s'",
namebuf);
- result = view_find(val, tname, dns_rdatatype_ds);
+ result = view_find(val, dns_linkedname_name(tname), dns_rdatatype_ds);
switch (result) {
case ISC_R_SUCCESS:
/*
@@ -3679,7 +3717,8 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
&val->dsrdataset);
dssetp = &val->dsrdataset;
dns_rdataset_disassociate(&val->frdataset);
- result = view_find(val, tname,
+ result = view_find(val,
+ dns_linkedname_name(tname),
dns_rdatatype_dnskey);
switch (result) {
case ISC_R_SUCCESS:
@@ -3692,7 +3731,7 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
*/
*resp = DNS_R_WAIT;
result = create_fetch(
- val, tname,
+ val, dns_linkedname_name(tname),
dns_rdatatype_dnskey, NULL,
NULL, fetch_callback_dnskey,
"seek_ds");
@@ -3708,7 +3747,9 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
break;
}
}
- if (!check_ds_algs(val, tname, dssetp, keysetp)) {
+ if (!check_ds_algs(val, dns_linkedname_name(tname),
+ dssetp, keysetp))
+ {
validator_log(
val, ISC_LOG_DEBUG(3),
"no supported algorithm/digest (%s/DS)",
@@ -3775,9 +3816,10 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
*/
if (result == DNS_R_NXRRSET &&
!dns_rdataset_isassociated(&val->frdataset) &&
- dns_view_bestzonecut(val->view, tname, found, NULL, 0, 0,
- false, false, NULL) == ISC_R_SUCCESS &&
- dns_name_equal(tname, found))
+ dns_view_bestzonecut(val->view, dns_linkedname_name(tname),
+ found, NULL, 0, 0, false, false,
+ NULL) == ISC_R_SUCCESS &&
+ dns_name_equal(dns_linkedname_name(tname), found))
{
*resp = markanswer(val, "seek_ds (2)");
return ISC_R_COMPLETE;
@@ -3799,8 +3841,10 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
{
bool crossed = false;
- if (is_insecure_referral(val, tname, &val->frdataset,
- result, "seek_ds", &crossed))
+ if (is_insecure_referral(val,
+ dns_linkedname_name(tname),
+ &val->frdataset, result,
+ "seek_ds", &crossed))
{
*resp = markanswer(val, "seek_ds (3)");
return ISC_R_COMPLETE;
@@ -3926,7 +3970,7 @@ proveunsecure(dns_validator_t *val, bool have_ds, bool have_dnskey,
*/
val->attributes |= VALATTR_INSECURITY;
- dns_name_copy(val->name, secroot);
+ dns_name_copy(dns_linkedname_name(val->name), secroot);
/*
* If this is a response to a DS query, we need to look in
@@ -4023,7 +4067,9 @@ proveunsecure(dns_validator_t *val, bool have_ds, bool have_dnskey,
* Walk down through each of the remaining labels in the name,
* looking for DS records.
*/
- while (val->labels <= dns_name_countlabels(val->name)) {
+ while (val->labels <=
+ dns_name_countlabels(dns_linkedname_name(val->name)))
+ {
isc_result_t tresult;
result = seek_ds(val, &tresult);
@@ -4156,12 +4202,13 @@ cleanup:
}
isc_result_t
-dns_validator_create(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
- dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset,
- dns_message_t *message, unsigned int options,
- isc_loop_t *loop, isc_job_cb cb, void *arg,
- isc_counter_t *nvalidations, isc_counter_t *nfails,
- isc_counter_t *qc, isc_counter_t *gqc, fetchctx_t *parent,
+dns_validator_create(dns_view_t *view, dns_linkedname_t *name,
+ dns_rdatatype_t type, dns_rdataset_t *rdataset,
+ dns_rdataset_t *sigrdataset, dns_message_t *message,
+ unsigned int options, isc_loop_t *loop, isc_job_cb cb,
+ void *arg, isc_counter_t *nvalidations,
+ isc_counter_t *nfails, isc_counter_t *qc,
+ isc_counter_t *gqc, fetchctx_t *parent,
dns_edectx_t *edectx, dns_validator_t **validatorp) {
dns_validator_t *val = NULL;
dns_keytable_t *kt = NULL;
@@ -4397,7 +4444,8 @@ validator_logv(dns_validator_t *val, isc_logcategory_t category,
char namebuf[DNS_NAME_FORMATSIZE];
char typebuf[DNS_RDATATYPE_FORMATSIZE];
- dns_name_format(val->name, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(val->name), namebuf,
+ sizeof(namebuf));
dns_rdatatype_format(val->type, typebuf, sizeof(typebuf));
isc_log_write(category, module, level,
"%s%s%s%.*svalidating %s/%s: %s", sep1, viewname,
@@ -4455,7 +4503,8 @@ validator_addede(dns_validator_t *val, uint16_t code, const char *extra) {
if (extra != NULL) {
isc_buffer_putuint8(&b, ' ');
}
- dns_name_totext(val->name, DNS_NAME_OMITFINALDOT, &b);
+ dns_name_totext(dns_linkedname_name(val->name),
+ DNS_NAME_OMITFINALDOT, &b);
isc_buffer_putuint8(&b, '/');
dns_rdatatype_totext(val->type, &b);
}
diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c
index 555bf21be7..01e90cb98a 100644
--- a/lib/dns/xfrin.c
+++ b/lib/dns/xfrin.c
@@ -1521,11 +1521,12 @@ detach:
* into the given dns_message_t.
*/
static void
-tuple2msgname(dns_difftuple_t *tuple, dns_message_t *msg, dns_name_t **target) {
+tuple2msgname(dns_difftuple_t *tuple, dns_message_t *msg,
+ dns_linkedname_t **target) {
dns_rdata_t *rdata = NULL;
dns_rdatalist_t *rdl = NULL;
dns_rdataset_t *rds = NULL;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
REQUIRE(target != NULL && *target == NULL);
@@ -1542,7 +1543,7 @@ tuple2msgname(dns_difftuple_t *tuple, dns_message_t *msg, dns_name_t **target) {
dns_rdatalist_tordataset(rdl, rds);
dns_message_gettempname(msg, &name);
- dns_name_clone(&tuple->name, name);
+ dns_name_clone(&tuple->name, dns_linkedname_name(name));
ISC_LIST_APPEND(name->list, rds, link);
*target = name;
@@ -1590,9 +1591,9 @@ xfrin_send_request(dns_xfrin_t *xfr) {
dns_rdataset_t *qrdataset = NULL;
dns_message_t *msg = NULL;
dns_difftuple_t *soatuple = NULL;
- dns_name_t *qname = NULL;
+ dns_linkedname_t *qname = NULL;
dns_dbversion_t *ver = NULL;
- dns_name_t *msgsoaname = NULL;
+ dns_linkedname_t *msgsoaname = NULL;
bool edns = xfr->edns;
bool reqnsid = xfr->view->requestnsid;
bool reqexpire = dns_zone_getrequestexpire(xfr->zone);
@@ -1607,7 +1608,7 @@ xfrin_send_request(dns_xfrin_t *xfr) {
/* Create a name for the question section. */
dns_message_gettempname(msg, &qname);
- dns_name_clone(&xfr->name, qname);
+ dns_name_clone(&xfr->name, dns_linkedname_name(qname));
/* Formulate the question and attach it to the question name. */
dns_message_gettemprdataset(msg, &qrdataset);
@@ -1937,7 +1938,7 @@ xfrin_recv_done(isc_result_t result, isc_region_t *region, void *arg) {
LIBDNS_XFRIN_RECV_QUESTION(xfr, xfr->info, msg);
- if (!dns_name_equal(name, &xfr->name)) {
+ if (!dns_name_equal(dns_linkedname_name(name), &xfr->name)) {
xfrin_log(xfr, ISC_LOG_NOTICE,
"question name mismatch");
CLEANUP(DNS_R_FORMERR);
@@ -1984,7 +1985,8 @@ xfrin_recv_done(isc_result_t result, isc_region_t *region, void *arg) {
DNS_RDATASET_FOREACH(rds) {
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdataset_current(rds, &rdata);
- CHECK(xfr_rr(xfr, name, rds->ttl, &rdata));
+ CHECK(xfr_rr(xfr, dns_linkedname_name(name),
+ rds->ttl, &rdata));
/*
* Did we hit the maximum ixfr diffs limit?
diff --git a/lib/dns/zone.c b/lib/dns/zone.c
index 46afd466f9..6b1b55b081 100644
--- a/lib/dns/zone.c
+++ b/lib/dns/zone.c
@@ -11199,7 +11199,7 @@ static void
create_query(dns_zone_t *zone, dns_rdatatype_t rdtype, dns_name_t *name,
dns_message_t **messagep) {
dns_message_t *message = NULL;
- dns_name_t *qname = NULL;
+ dns_linkedname_t *qname = NULL;
dns_rdataset_t *qrdataset = NULL;
dns_message_create(zone->mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER,
@@ -11215,7 +11215,7 @@ create_query(dns_zone_t *zone, dns_rdatatype_t rdtype, dns_name_t *name,
/*
* Make question.
*/
- dns_name_clone(name, qname);
+ dns_name_clone(name, dns_linkedname_name(qname));
dns_rdataset_makequestion(qrdataset, zone->rdclass, rdtype);
ISC_LIST_APPEND(qname->list, qrdataset, link);
dns_message_addname(message, qname, DNS_SECTION_QUESTION);
@@ -11662,11 +11662,12 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
* provided in this message will be used.
*/
if (!has_glue && dns_name_issubdomain(&ns.name, name)) {
- dns_name_t *tmp_name;
+ dns_linkedname_t *tmp_name;
tmp_name = isc_mem_get(cb_args->stub->mctx,
sizeof(*tmp_name));
- dns_name_init(tmp_name);
- dns_name_dup(&ns.name, cb_args->stub->mctx, tmp_name);
+ dns_linkedname_init(tmp_name);
+ dns_name_dup(&ns.name, cb_args->stub->mctx,
+ dns_linkedname_name(tmp_name));
ISC_LIST_APPEND(ns_list, tmp_name, link);
}
}
@@ -11680,16 +11681,16 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
/*
* Resolve NS IPv4 address/A.
*/
- result = stub_request_nameserver_address(cb_args, true,
- ns_name);
+ result = stub_request_nameserver_address(
+ cb_args, true, dns_linkedname_name(ns_name));
if (result != ISC_R_SUCCESS) {
goto done;
}
/*
* Resolve NS IPv6 address/AAAA.
*/
- result = stub_request_nameserver_address(cb_args, false,
- ns_name);
+ result = stub_request_nameserver_address(
+ cb_args, false, dns_linkedname_name(ns_name));
if (result != ISC_R_SUCCESS) {
goto done;
}
@@ -11701,7 +11702,8 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
done:
ISC_LIST_FOREACH(ns_list, ns_name, link) {
ISC_LIST_UNLINK(ns_list, ns_name, link);
- dns_name_free(ns_name, cb_args->stub->mctx);
+ dns_name_free(dns_linkedname_name(ns_name),
+ cb_args->stub->mctx);
isc_mem_put(cb_args->stub->mctx, ns_name, sizeof(*ns_name));
}
return result;
@@ -17125,7 +17127,9 @@ checkds_done(void *arg) {
/* Lookup DS RRset. */
MSG_SECTION_FOREACH(message, DNS_SECTION_ANSWER, name) {
- if (dns_name_compare(&zone->origin, name) != 0) {
+ if (dns_name_compare(&zone->origin,
+ dns_linkedname_name(name)) != 0)
+ {
continue;
}
@@ -17319,7 +17323,7 @@ static void
checkds_createmessage(dns_zone_t *zone, dns_message_t **messagep) {
dns_message_t *message = NULL;
- dns_name_t *tempname = NULL;
+ dns_linkedname_t *tempname = NULL;
dns_rdataset_t *temprdataset = NULL;
REQUIRE(DNS_ZONE_VALID(zone));
@@ -17339,8 +17343,8 @@ checkds_createmessage(dns_zone_t *zone, dns_message_t **messagep) {
/*
* Make question.
*/
- dns_name_init(tempname);
- dns_name_clone(&zone->origin, tempname);
+ dns_name_init(dns_linkedname_name(tempname));
+ dns_name_clone(&zone->origin, dns_linkedname_name(tempname));
dns_rdataset_makequestion(temprdataset, zone->rdclass,
dns_rdatatype_ds);
ISC_LIST_APPEND(tempname->list, temprdataset, link);
diff --git a/lib/dns/zoneverify.c b/lib/dns/zoneverify.c
index 6969cd2b3e..b8efb180ab 100644
--- a/lib/dns/zoneverify.c
+++ b/lib/dns/zoneverify.c
@@ -183,7 +183,8 @@ goodsig(const vctx_t *vctx, dns_rdata_t *sigrdata, const dns_name_t *name,
for (size_t key = 0; key < nkeys; key++) {
if (algorithm != dst_key_alg(dstkeys[key]) ||
sig.keyid != dst_key_id(dstkeys[key]) ||
- !dns_name_equal(&sig.signer, vctx->origin))
+ !dns_name_equal(dns_linkedname_name(&sig.signer),
+ vctx->origin))
{
continue;
}
diff --git a/lib/ns/client.c b/lib/ns/client.c
index 78db3e2060..996d4a4234 100644
--- a/lib/ns/client.c
+++ b/lib/ns/client.c
@@ -1018,9 +1018,9 @@ ns_client_error(ns_client_t *client, isc_result_t result) {
isc_time_t expire;
isc_interval_t i;
uint32_t flags = 0;
- dns_name_t *qname = client->query.origqname != NULL
- ? client->query.origqname
- : client->query.qname;
+ dns_linkedname_t *qname = client->query.origqname != NULL
+ ? client->query.origqname
+ : client->query.qname;
if ((message->flags & DNS_MESSAGEFLAG_CD) != 0) {
flags = NS_FAILCACHE_CD;
@@ -1029,7 +1029,8 @@ ns_client_error(ns_client_t *client, isc_result_t result) {
isc_interval_set(&i, client->inner.view->fail_ttl, 0);
result = isc_time_nowplusinterval(&expire, &i);
if (result == ISC_R_SUCCESS) {
- dns_badcache_add(client->inner.view->failcache, qname,
+ dns_badcache_add(client->inner.view->failcache,
+ dns_linkedname_name(qname),
client->query.qtype, flags,
isc_time_seconds(&expire));
}
@@ -2817,8 +2818,10 @@ ns_client_logv(ns_client_t *client, isc_logcategory_t category,
signer = signerbuf;
}
- q = client->query.origqname != NULL ? client->query.origqname
- : client->query.qname;
+ q = dns_linkedname_name(client->query.origqname);
+ if (q == NULL) {
+ q = dns_linkedname_name(client->query.qname);
+ }
if (q != NULL) {
dns_name_format(q, qnamebuf, sizeof(qnamebuf));
sep2 = " (";
@@ -2943,13 +2946,15 @@ ns_client_dumprecursing(FILE *f, ns_clientmgr_t *manager) {
LOCK(&client->query.fetchlock);
INSIST(client->query.qname != NULL);
- dns_name_format(client->query.qname, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(client->query.qname),
+ namebuf, sizeof(namebuf));
if (client->query.qname != client->query.origqname &&
client->query.origqname != NULL)
{
origfor = " for ";
- dns_name_format(client->query.origqname, original,
- sizeof(original));
+ dns_name_format(
+ dns_linkedname_name(client->query.origqname),
+ original, sizeof(original));
} else {
origfor = "";
original[0] = '\0';
@@ -2981,7 +2986,7 @@ ns_client_dumprecursing(FILE *f, ns_clientmgr_t *manager) {
}
void
-ns_client_qnamereplace(ns_client_t *client, dns_name_t *name) {
+ns_client_qnamereplace(ns_client_t *client, dns_linkedname_t *name) {
LOCK(&client->query.fetchlock);
if (client->query.restarts > 0) {
/*
@@ -3045,24 +3050,24 @@ ns_client_newnamebuf(ns_client_t *client) {
return ISC_R_SUCCESS;
}
-dns_name_t *
+dns_linkedname_t *
ns_client_newname(ns_client_t *client, isc_buffer_t *dbuf, isc_buffer_t *nbuf) {
- dns_name_t *name = NULL;
+ dns_linkedname_t *name_links = NULL;
isc_region_t r;
REQUIRE(!client->query.namebufused);
CTRACE("ns_client_newname");
- dns_message_gettempname(client->message, &name);
+ dns_message_gettempname(client->message, &name_links);
isc_buffer_availableregion(dbuf, &r);
isc_buffer_init(nbuf, r.base, r.length);
- dns_name_setbuffer(name, NULL);
- dns_name_setbuffer(name, nbuf);
+ dns_name_setbuffer(dns_linkedname_name(name_links), NULL);
+ dns_name_setbuffer(dns_linkedname_name(name_links), nbuf);
client->query.namebufused = true;
CTRACE("ns_client_newname: done");
- return name;
+ return name_links;
}
isc_buffer_t *
@@ -3094,7 +3099,8 @@ ns_client_getnamebuf(ns_client_t *client) {
}
void
-ns_client_keepname(ns_client_t *client, dns_name_t *name, isc_buffer_t *dbuf) {
+ns_client_keepname(ns_client_t *client, dns_linkedname_t *name,
+ isc_buffer_t *dbuf) {
isc_region_t r;
CTRACE("ns_client_keepname");
@@ -3105,14 +3111,14 @@ ns_client_keepname(ns_client_t *client, dns_name_t *name, isc_buffer_t *dbuf) {
*/
REQUIRE(client->query.namebufused);
- dns_name_toregion(name, &r);
+ dns_name_toregion(dns_linkedname_name(name), &r);
isc_buffer_add(dbuf, r.length);
- dns_name_setbuffer(name, NULL);
+ dns_name_setbuffer(dns_linkedname_name(name), NULL);
client->query.namebufused = false;
}
void
-ns_client_releasename(ns_client_t *client, dns_name_t **namep) {
+ns_client_releasename(ns_client_t *client, dns_linkedname_t **namep) {
/*%
* 'name' is no longer needed. Return it to our pool of temporary
* names. If it is using a name buffer, relinquish its exclusive
diff --git a/lib/ns/include/ns/client.h b/lib/ns/include/ns/client.h
index f7ba7db70d..d84a60117c 100644
--- a/lib/ns/include/ns/client.h
+++ b/lib/ns/include/ns/client.h
@@ -465,7 +465,7 @@ ns_client_dumprecursing(FILE *f, ns_clientmgr_t *manager);
*/
void
-ns_client_qnamereplace(ns_client_t *client, dns_name_t *name);
+ns_client_qnamereplace(ns_client_t *client, dns_linkedname_t *name);
/*%<
* Replace the qname.
*/
@@ -514,7 +514,7 @@ ns_client_newnamebuf(ns_client_t *client);
* Allocate a name buffer for the client message.
*/
-dns_name_t *
+dns_linkedname_t *
ns_client_newname(ns_client_t *client, isc_buffer_t *dbuf, isc_buffer_t *nbuf);
/*%<
* Get a temporary name for the client message.
@@ -527,14 +527,15 @@ ns_client_getnamebuf(ns_client_t *client);
*/
void
-ns_client_keepname(ns_client_t *client, dns_name_t *name, isc_buffer_t *dbuf);
+ns_client_keepname(ns_client_t *client, dns_linkedname_t *name,
+ isc_buffer_t *dbuf);
/*%<
* Adjust buffer 'dbuf' to reflect that 'name' is using space in it,
* and set client attributes appropriately.
*/
void
-ns_client_releasename(ns_client_t *client, dns_name_t **namep);
+ns_client_releasename(ns_client_t *client, dns_linkedname_t **namep);
/*%<
* Release 'name' back to the pool of temporary names for the client
* message. If it is using a name buffer, relinquish its exclusive
diff --git a/lib/ns/include/ns/query.h b/lib/ns/include/ns/query.h
index ce7dbd46cd..8478154b56 100644
--- a/lib/ns/include/ns/query.h
+++ b/lib/ns/include/ns/query.h
@@ -119,15 +119,15 @@ struct ns_query {
};
};
- unsigned int restarts;
- isc_counter_t *qc;
- bool timerset;
- dns_name_t *qname;
- dns_name_t *origqname;
- dns_rdatatype_t qtype;
- unsigned int dboptions;
- unsigned int fetchoptions;
- dns_db_t *gluedb;
+ unsigned int restarts;
+ isc_counter_t *qc;
+ bool timerset;
+ dns_linkedname_t *qname;
+ dns_linkedname_t *origqname;
+ dns_rdatatype_t qtype;
+ unsigned int dboptions;
+ unsigned int fetchoptions;
+ dns_db_t *gluedb;
uintptr_t authdb_id; /* Database identity; not an attached reference. */
dns_zone_t *authzone;
bool isreferral;
@@ -177,9 +177,9 @@ typedef struct query_ctx query_ctx_t;
/* query context structure */
struct query_ctx {
- isc_buffer_t *dbuf; /* name buffer */
- dns_name_t *fname; /* lookup/response name */
- dns_name_t *tname; /* temporary name, used
+ isc_buffer_t *dbuf; /* name buffer */
+ dns_linkedname_t *fname; /* found name from DB lookup */
+ dns_linkedname_t *tname; /* temporary name, used
* when processing ANY
* queries */
dns_rdataset_t *rdataset; /* found rdataset */
@@ -213,12 +213,12 @@ struct query_ctx {
dns_db_t *db; /* zone or cache database */
dns_dbversion_t *version; /* DB version */
- dns_db_t *zdb; /* zone DB values, saved */
- dns_name_t *zfname; /* for a better answer */
- dns_fixedname_t zfoundname;
- dns_dbversion_t *zversion;
- dns_rdataset_t *zrdataset;
- dns_rdataset_t *zsigrdataset;
+ dns_db_t *zdb; /* zone DB values, saved */
+ dns_linkedname_t *zfname; /* for a better answer */
+ dns_fixedname_t zfoundname;
+ dns_dbversion_t *zversion;
+ dns_rdataset_t *zrdataset;
+ dns_rdataset_t *zsigrdataset;
dns_rpz_st_t *rpz_st; /* RPZ state */
dns_zone_t *zone; /* zone to search */
diff --git a/lib/ns/notify.c b/lib/ns/notify.c
index 6e0fe6536d..c18a85b08b 100644
--- a/lib/ns/notify.c
+++ b/lib/ns/notify.c
@@ -112,7 +112,7 @@ void
ns_notify_start(ns_client_t *client, isc_nmhandle_t *handle) {
dns_message_t *request = client->message;
isc_result_t result;
- dns_name_t *zonename;
+ dns_linkedname_t *zonename;
dns_rdataset_t *zone_rdataset;
dns_zone_t *zone = NULL;
@@ -170,7 +170,8 @@ ns_notify_start(ns_client_t *client, isc_nmhandle_t *handle) {
zone_rdataset->type, result);
goto done;
}
- result = dns_view_findzone(client->inner.view, zonename,
+ result = dns_view_findzone(client->inner.view,
+ dns_linkedname_name(zonename),
DNS_ZTFIND_EXACT, &zone);
if (result == ISC_R_SUCCESS) {
dns_zonetype_t zonetype = dns_zone_gettype(zone);
diff --git a/lib/ns/query.c b/lib/ns/query.c
index 72c1f2403e..55cd910a43 100644
--- a/lib/ns/query.c
+++ b/lib/ns/query.c
@@ -107,8 +107,9 @@ client_trace(ns_client_t *client, int level, const char *message) {
if (isc_log_wouldlog(level)) {
char qbuf[DNS_NAME_FORMATSIZE];
char tbuf[DNS_RDATATYPE_FORMATSIZE];
- dns_name_format(client->query.qname, qbuf,
- sizeof(qbuf));
+ dns_name_format(
+ dns_linkedname_name(client->query.qname), qbuf,
+ sizeof(qbuf));
dns_rdatatype_format(client->query.qtype, tbuf,
sizeof(tbuf));
isc_log_write(NS_LOGCATEGORY_CLIENT, NS_LOGMODULE_QUERY,
@@ -591,7 +592,8 @@ log_response(ns_client_t *client, dns_rcode_t rcode) {
return;
}
- dns_name_format(client->query.origqname, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(client->query.origqname), namebuf,
+ sizeof(namebuf));
dns_rdataclass_format(client->message->rdclass, classbuf,
sizeof(classbuf));
dns_rdatatype_format(client->query.qtype, typebuf, sizeof(typebuf));
@@ -1266,7 +1268,8 @@ rpz_log_rewrite(ns_client_t *client, bool disabled, dns_rpz_policy_t policy,
return;
}
- dns_name_format(client->query.qname, qname_buf, sizeof(qname_buf));
+ dns_name_format(dns_linkedname_name(client->query.qname), qname_buf,
+ sizeof(qname_buf));
dns_name_format(p_name, p_name_buf, sizeof(p_name_buf));
if (cname != NULL) {
s1 = " (CNAME to: ";
@@ -1329,7 +1332,8 @@ rpz_log_fail_helper(ns_client_t *client, int level, dns_name_t *p_name,
str_blank = (*str != ' ' && *str != '\0') ? " " : "";
- dns_name_format(client->query.qname, qnamebuf, sizeof(qnamebuf));
+ dns_name_format(dns_linkedname_name(client->query.qname), qnamebuf,
+ sizeof(qnamebuf));
if (p_name != NULL) {
via = " via ";
@@ -1378,8 +1382,9 @@ rpz_getdb(ns_client_t *client, dns_name_t *p_name, dns_rpz_type_t rpz_type,
if (st->popt.no_log == 0 &&
isc_log_wouldlog(DNS_RPZ_DEBUG_LEVEL2))
{
- dns_name_format(client->query.qname, qnamebuf,
- sizeof(qnamebuf));
+ dns_name_format(
+ dns_linkedname_name(client->query.qname),
+ qnamebuf, sizeof(qnamebuf));
dns_name_format(p_name, p_namebuf, sizeof(p_namebuf));
ns_client_log(client, DNS_LOGCATEGORY_RPZ,
NS_LOGMODULE_QUERY, DNS_RPZ_DEBUG_LEVEL2,
@@ -1524,9 +1529,9 @@ out:
static bool
query_isduplicate(ns_client_t *client, dns_name_t *name, dns_rdatatype_t type,
- dns_name_t **mnamep) {
+ dns_linkedname_t **mnamep) {
dns_section_t section;
- dns_name_t *mname = NULL;
+ dns_linkedname_t *mname = NULL;
isc_result_t result;
CTRACE(ISC_LOG_DEBUG(3), "query_isduplicate");
@@ -1715,7 +1720,7 @@ query_additional_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
dns_dbnode_t *node = NULL;
dns_db_t *db = NULL;
dns_fixedname_t foundfixed;
- dns_name_t *fname = NULL, *mname = NULL;
+ dns_linkedname_t *fname = NULL, *mname = NULL;
dns_name_t *foundname = NULL;
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
dns_rdataset_t *trdataset = NULL;
@@ -1779,7 +1784,8 @@ query_additional_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
/*
* First, look for authoritative additional data.
*/
- result = query_additionalauth(qctx, name, type, &db, fname, rdataset,
+ result = query_additionalauth(qctx, name, type, &db,
+ dns_linkedname_name(fname), rdataset,
sigrdataset);
if (result == ISC_R_SUCCESS) {
goto found;
@@ -1811,8 +1817,8 @@ query_additional_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
result = dns_db_findext(db, name, version, type,
client->query.dboptions | DNS_DBFIND_GLUEOK |
DNS_DBFIND_ADDITIONALOK,
- client->inner.now, fname, &cm, &ci, rdataset,
- sigrdataset);
+ client->inner.now, dns_linkedname_name(fname),
+ &cm, &ci, rdataset, sigrdataset);
dns_cache_updatestats(qctx->view->cache, result);
if (!client->inner.wantdnssec) {
@@ -1865,8 +1871,8 @@ try_glue:
version = dbversion->version;
result = dns_db_findext(db, name, version, type,
client->query.dboptions | DNS_DBFIND_GLUEOK,
- client->inner.now, fname, &cm, &ci, rdataset,
- sigrdataset);
+ client->inner.now, dns_linkedname_name(fname),
+ &cm, &ci, rdataset, sigrdataset);
if (result != ISC_R_SUCCESS && result != DNS_R_ZONECUT &&
result != DNS_R_GLUE)
{
@@ -1879,8 +1885,8 @@ found:
* at least a node to iterate over.
*/
foundname = dns_fixedname_initname(&foundfixed);
- dns_name_copy(fname, foundname);
- query_fix_wildcardname(name, fname);
+ dns_name_copy(dns_linkedname_name(fname), foundname);
+ query_fix_wildcardname(name, dns_linkedname_name(fname));
ns_client_keepname(client, fname, dbuf);
/*
@@ -1896,7 +1902,8 @@ found:
*/
mname = NULL;
if (dns_rdataset_isassociated(rdataset) &&
- !query_isduplicate(client, fname, type, &mname))
+ !query_isduplicate(client, dns_linkedname_name(fname), type,
+ &mname))
{
if (mname != NULL) {
INSIST(mname != fname);
@@ -1942,7 +1949,9 @@ found:
} else if (client->inner.wantdnssec) {
sigrdataset = ns_client_newrdataset(client);
}
- if (query_isduplicate(client, fname, dns_rdatatype_a, NULL)) {
+ if (query_isduplicate(client, dns_linkedname_name(fname),
+ dns_rdatatype_a, NULL))
+ {
goto aaaa_lookup;
}
result = dns_db_findrdataset(db, node, version, dns_rdatatype_a,
@@ -1958,8 +1967,9 @@ found:
if (DNS_TRUST_PENDING(rdataset->trust)) {
dns_rdataset_cleanup(rdataset);
dns_rdataset_cleanup(sigrdataset);
- } else if (!query_isduplicate(client, fname,
- dns_rdatatype_a, &mname))
+ } else if (!query_isduplicate(
+ client, dns_linkedname_name(fname),
+ dns_rdatatype_a, &mname))
{
if (mname != fname) {
if (mname != NULL) {
@@ -1987,7 +1997,8 @@ found:
}
}
aaaa_lookup:
- if (query_isduplicate(client, fname, dns_rdatatype_aaaa, NULL))
+ if (query_isduplicate(client, dns_linkedname_name(fname),
+ dns_rdatatype_aaaa, NULL))
{
goto addname;
}
@@ -2001,12 +2012,13 @@ found:
dns_rdataset_cleanup(sigrdataset);
} else if (result == ISC_R_SUCCESS) {
mname = NULL;
+
if (DNS_TRUST_PENDING(rdataset->trust)) {
dns_rdataset_cleanup(rdataset);
dns_rdataset_cleanup(sigrdataset);
- } else if (!query_isduplicate(client, fname,
- dns_rdatatype_aaaa,
- &mname))
+ } else if (!query_isduplicate(
+ client, dns_linkedname_name(fname),
+ dns_rdatatype_aaaa, &mname))
{
if (mname != fname) {
if (mname != NULL) {
@@ -2060,7 +2072,8 @@ addname:
client->inner.view->max_restarts)
{
eresult = dns_rdataset_additionaldata(
- trdataset, fname, query_additional_cb, qctx,
+ trdataset, dns_linkedname_name(fname),
+ query_additional_cb, qctx,
DNS_RDATASET_MAXADDITIONAL);
}
client->inner.additionaldepth--;
@@ -2097,7 +2110,7 @@ cleanup:
* Add 'rdataset' to 'name'.
*/
static void
-query_addtoname(dns_name_t *name, dns_rdataset_t *rdataset) {
+query_addtoname(dns_linkedname_t *name, dns_rdataset_t *rdataset) {
ISC_LIST_APPEND(name->list, rdataset, link);
}
@@ -2182,13 +2195,14 @@ regular:
* Return true if the RRset was added, or false if it was already present.
*/
static bool
-query_add_to_message(query_ctx_t *qctx, dns_name_t **namep,
+query_add_to_message(query_ctx_t *qctx, dns_linkedname_t **namep,
dns_rdataset_t **rdatasetp, dns_rdataset_t **sigrdatasetp,
isc_buffer_t *dbuf, dns_section_t section,
- dns_name_t **mnamep) {
+ dns_linkedname_t **mnamep) {
isc_result_t result;
ns_client_t *client = qctx->client;
- dns_name_t *name = *namep, *mname = NULL;
+ dns_linkedname_t *name = *namep;
+ dns_linkedname_t *mname = NULL;
dns_rdataset_t *rdataset = *rdatasetp, *mrdataset = NULL;
dns_rdataset_t *sigrdataset = NULL;
@@ -2212,9 +2226,9 @@ query_add_to_message(query_ctx_t *qctx, dns_name_t **namep,
* stored in 'dbuf'. In this case, query_add_to_message() guarantees
* that when it returns the name will either have been kept or released.
*/
- result = dns_message_findname(client->message, section, name,
- rdataset->type, rdataset->covers, &mname,
- &mrdataset);
+ result = dns_message_findname(client->message, section,
+ dns_linkedname_name(name), rdataset->type,
+ rdataset->covers, &mname, &mrdataset);
if (result == ISC_R_SUCCESS) {
/*
* We've already got an RRset of the given name and type.
@@ -2257,7 +2271,7 @@ query_add_to_message(query_ctx_t *qctx, dns_name_t **namep,
* Update message name and set rdataset order.
*/
query_addtoname(mname, rdataset);
- query_setorder(qctx, mname, rdataset);
+ query_setorder(qctx, dns_linkedname_name(mname), rdataset);
/*
* Note: we only add SIGs if we've added the type they cover, so
@@ -2279,10 +2293,10 @@ query_add_to_message(query_ctx_t *qctx, dns_name_t **namep,
}
static void
-query_addrrset(query_ctx_t *qctx, dns_name_t **namep,
+query_addrrset(query_ctx_t *qctx, dns_linkedname_t **namep,
dns_rdataset_t **rdatasetp, dns_rdataset_t **sigrdatasetp,
isc_buffer_t *dbuf, dns_section_t section) {
- dns_name_t *mname = NULL;
+ dns_linkedname_t *mname = NULL;
dns_rdataset_t *rdataset = *rdatasetp;
CCTRACE(ISC_LOG_DEBUG(3), "query_addrrset");
@@ -2293,17 +2307,17 @@ query_addrrset(query_ctx_t *qctx, dns_name_t **namep,
return;
}
- query_additional(qctx, mname, rdataset);
+ query_additional(qctx, dns_linkedname_name(mname), rdataset);
CCTRACE(ISC_LOG_DEBUG(3), "query_addrrset: done");
}
static void
-query_zone_delegation_rrset(query_ctx_t *qctx, dns_name_t **namep,
+query_zone_delegation_rrset(query_ctx_t *qctx, dns_linkedname_t **namep,
dns_rdataset_t **rdatasetp,
dns_rdataset_t **sigrdatasetp, isc_buffer_t *dbuf) {
ns_client_t *client = qctx->client;
- dns_name_t *mname = NULL;
+ dns_linkedname_t *mname = NULL;
dns_rdataset_t *rdataset = *rdatasetp;
dns_clientinfomethods_t cm;
dns_clientinfo_t ci;
@@ -2322,8 +2336,8 @@ query_zone_delegation_rrset(query_ctx_t *qctx, dns_name_t **namep,
dns_clientinfomethods_init(&cm, ns_client_sourceip);
dns_clientinfo_init(&ci, client, NULL);
- dns_db_addglue(qctx->db, qctx->version, mname, rdataset,
- client->message, &cm, &ci);
+ dns_db_addglue(qctx->db, qctx->version, dns_linkedname_name(mname),
+ rdataset, client->message, &cm, &ci);
CTRACE(ISC_LOG_DEBUG(3), "query_zone_delegation_rrset: done");
}
@@ -2338,7 +2352,7 @@ fixrdataset(ns_client_t *client, dns_rdataset_t **rdataset) {
}
static void
-fixfname(ns_client_t *client, dns_name_t **fname, isc_buffer_t **dbuf,
+fixfname(ns_client_t *client, dns_linkedname_t **fname, isc_buffer_t **dbuf,
isc_buffer_t *nbuf) {
if (*fname == NULL) {
*dbuf = ns_client_getnamebuf(client);
@@ -2455,7 +2469,8 @@ stale_refresh_aftermath(ns_client_t *client, isc_result_t result) {
case DNS_R_DNAME:
break;
default:
- dns_name_format(client->query.qname, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(client->query.qname),
+ namebuf, sizeof(namebuf));
dns_rdatatype_format(client->query.qtype, typebuf,
sizeof(typebuf));
ns_client_log(client, NS_LOGCATEGORY_SERVE_STALE,
@@ -2487,10 +2502,11 @@ stale_refresh_aftermath(ns_client_t *client, isc_result_t result) {
dboptions |= DNS_DBFIND_STALESTART;
dns_db_attach(qctx.client->inner.view->cachedb, &db);
- (void)dns_db_findext(db, qctx.client->query.qname, NULL,
- qctx.client->query.qtype, dboptions,
- qctx.client->inner.now, qctx.fname, &cm,
- &ci, qctx.rdataset, qctx.sigrdataset);
+ (void)dns_db_findext(
+ db, dns_linkedname_name(qctx.client->query.qname), NULL,
+ qctx.client->query.qtype, dboptions,
+ qctx.client->inner.now, dns_linkedname_name(qctx.fname),
+ &cm, &ci, qctx.rdataset, qctx.sigrdataset);
dns_db_detach(&db);
cleanup:
@@ -2659,9 +2675,9 @@ query_stale_refresh_ncache(ns_client_t *client, dns_rdataset_t *rdataset) {
dns_name_t *qname;
if (client->query.origqname != NULL) {
- qname = client->query.origqname;
+ qname = dns_linkedname_name(client->query.origqname);
} else {
- qname = client->query.qname;
+ qname = dns_linkedname_name(client->query.qname);
}
query_stale_refresh(client, qname, rdataset);
}
@@ -3905,15 +3921,17 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
* There is a first time for each name in a CNAME chain
*/
if ((st->state & DNS_RPZ_DONE_QNAME) == 0) {
- CHECK(rpz_rewrite_name(client, client->query.qname,
- qtype, DNS_RPZ_TYPE_QNAME,
- allowed, &rdataset));
+ CHECK(rpz_rewrite_name(
+ client,
+ dns_linkedname_name(client->query.qname), qtype,
+ DNS_RPZ_TYPE_QNAME, allowed, &rdataset));
/*
* Check IPv4 addresses in A RRs next.
* Reset to the start of the NS names.
*/
- st->r.label = dns_name_countlabels(client->query.qname);
+ st->r.label = dns_name_countlabels(
+ dns_linkedname_name(client->query.qname));
st->state &= ~(DNS_RPZ_DONE_QNAME_IP |
DNS_RPZ_DONE_IPv4);
}
@@ -3952,9 +3970,9 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
qresult_type == qresult_type_done &&
rpz_get_zbits(client, qtype, DNS_RPZ_TYPE_IP) != 0)
{
- CHECK(rpz_rewrite_ip_rrsets(client, client->query.qname, qtype,
- DNS_RPZ_TYPE_IP, &rdataset,
- resuming));
+ CHECK(rpz_rewrite_ip_rrsets(
+ client, dns_linkedname_name(client->query.qname), qtype,
+ DNS_RPZ_TYPE_IP, &rdataset, resuming));
/*
* We are finished checking the IP addresses for the qname.
* Start with IPv4 if we will check NS IP addresses.
@@ -3976,19 +3994,22 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
}
dns_fixedname_init(&nsnamef);
- dns_name_clone(client->query.qname, dns_fixedname_name(&nsnamef));
+ dns_name_clone(dns_linkedname_name(client->query.qname),
+ dns_fixedname_name(&nsnamef));
options = client->query.dboptions | DNS_DBFIND_GLUEOK;
while (st->r.label > st->popt.min_ns_labels) {
bool was_glue = false;
/*
* Get NS rrset for each domain in the current qname.
*/
- if (st->r.label == dns_name_countlabels(client->query.qname)) {
- nsname = client->query.qname;
+ if (st->r.label == dns_name_countlabels(dns_linkedname_name(
+ client->query.qname)))
+ {
+ nsname = dns_linkedname_name(client->query.qname);
} else {
nsname = dns_fixedname_name(&nsnamef);
- dns_name_split(client->query.qname, st->r.label, NULL,
- nsname);
+ dns_name_split(dns_linkedname_name(client->query.qname),
+ st->r.label, NULL, nsname);
}
if (st->r.ns_rdataset == NULL ||
!dns_rdataset_isassociated(st->r.ns_rdataset))
@@ -4495,15 +4516,16 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
/*
* Lookup the requested data in the redirect zone.
*/
- result = dns_db_findext(db, client->query.qname, dbversion->version,
- qtype, DNS_DBFIND_NOZONECUT, client->inner.now,
- found, &cm, &ci, &trdataset, NULL);
+ result = dns_db_findext(db, dns_linkedname_name(client->query.qname),
+ dbversion->version, qtype, DNS_DBFIND_NOZONECUT,
+ client->inner.now, found, &cm, &ci, &trdataset,
+ NULL);
if (result == ISC_R_SUCCESS || result == DNS_R_NXRRSET ||
result == DNS_R_NCACHENXRRSET)
{
dns_name_copy(found, dns_fixedname_name(foundname));
}
- query_fix_wildcardname(client->query.qname, found);
+ query_fix_wildcardname(dns_linkedname_name(client->query.qname), found);
if (result == DNS_R_NXRRSET || result == DNS_R_NCACHENXRRSET) {
dns_rdataset_cleanup(rdataset);
dns_rdataset_cleanup(&trdataset);
@@ -4600,13 +4622,14 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
}
redirectname = dns_fixedname_initname(&fixedredirect);
- labels = dns_name_countlabels(client->query.qname);
+ labels = dns_name_countlabels(dns_linkedname_name(client->query.qname));
if (labels > 1U) {
dns_name_t prefix;
dns_name_init(&prefix);
- dns_name_getlabelsequence(client->query.qname, 0, labels - 1,
- &prefix);
+ dns_name_getlabelsequence(
+ dns_linkedname_name(client->query.qname), 0, labels - 1,
+ &prefix);
result = dns_name_concatenate(&prefix,
client->inner.view->redirectzone,
redirectname);
@@ -4914,8 +4937,9 @@ query_trace(query_ctx_t *qctx) {
char qabuf[sizeof(qctx->client->query.attrs) * 2 + 1] = { 0 };
if (qctx->client->query.origqname != NULL) {
- dns_name_format(qctx->client->query.origqname, qbuf,
- sizeof(qbuf));
+ dns_name_format(
+ dns_linkedname_name(qctx->client->query.origqname),
+ qbuf, sizeof(qbuf));
} else {
snprintf(qbuf, sizeof(qbuf), "<unset>");
}
@@ -5004,10 +5028,12 @@ get_root_key_sentinel_id(query_ctx_t *qctx, const char *ndata) {
*/
static void
root_key_sentinel_detect(query_ctx_t *qctx) {
- const char *ndata = (const char *)qctx->client->query.qname->ndata;
+ const dns_name_t *qname =
+ dns_linkedname_name(qctx->client->query.qname);
+ const char *ndata = (const char *)qname->ndata;
const char *keyid = NULL;
- if (qctx->client->query.qname->length > 30 && ndata[0] == 29 &&
+ if (qname->length > 30 && ndata[0] == 29 &&
(keyid = isc_string_casestripprefix(ndata + 1, "root-key-sentinel-"
"is-ta-")) != NULL)
{
@@ -5023,7 +5049,7 @@ root_key_sentinel_detect(query_ctx_t *qctx) {
ns_client_log(qctx->client, NS_LOGCATEGORY_TAT,
NS_LOGMODULE_QUERY, ISC_LOG_INFO,
"root-key-sentinel-is-ta query label found");
- } else if (qctx->client->query.qname->length > 31 && ndata[0] == 30 &&
+ } else if (qname->length > 31 && ndata[0] == 30 &&
(keyid = isc_string_casestripprefix(
ndata + 1, "root-key-sentinel-not-ta-")) != NULL)
{
@@ -5062,7 +5088,7 @@ qctx_reportquery(query_ctx_t *qctx) {
/* If this isn't an error-report query, there's nothing more to do */
if (client->query.qtype != dns_rdatatype_txt ||
- !dns_name_israd(client->query.qname,
+ !dns_name_israd(dns_linkedname_name(client->query.qname),
dns_zone_getorigin(qctx->zone)))
{
return;
@@ -5084,7 +5110,8 @@ qctx_reportquery(query_ctx_t *qctx) {
char classbuf[DNS_RDATACLASS_FORMATSIZE];
char namebuf[DNS_NAME_FORMATSIZE];
- dns_name_format(client->query.qname, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(client->query.qname),
+ namebuf, sizeof(namebuf));
dns_rdataclass_format(client->inner.view->rdclass, classbuf,
sizeof(classbuf));
@@ -5168,16 +5195,16 @@ ns__query_start(query_ctx_t *qctx) {
}
if (qctx->view->checknames &&
- !dns_rdata_checkowner(qctx->client->query.qname,
- qctx->client->message->rdclass, qctx->qtype,
- false))
+ !dns_rdata_checkowner(
+ dns_linkedname_name(qctx->client->query.qname),
+ qctx->client->message->rdclass, qctx->qtype, false))
{
char namebuf[DNS_NAME_FORMATSIZE];
char typebuf[DNS_RDATATYPE_FORMATSIZE];
char classbuf[DNS_RDATACLASS_FORMATSIZE];
- dns_name_format(qctx->client->query.qname, namebuf,
- sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(qctx->client->query.qname),
+ namebuf, sizeof(namebuf));
dns_rdatatype_format(qctx->qtype, typebuf, sizeof(typebuf));
dns_rdataclass_format(qctx->client->message->rdclass, classbuf,
sizeof(classbuf));
@@ -5206,7 +5233,7 @@ ns__query_start(query_ctx_t *qctx) {
*/
qctx->options = (dns_getdb_options_t){ .nolog = qctx->options.nolog };
if (dns_rdatatype_atparent(qctx->qtype) &&
- !dns_name_isroot(qctx->client->query.qname))
+ !dns_name_isroot(dns_linkedname_name(qctx->client->query.qname)))
{
/*
* If authoritative data for this QTYPE is supposed to live in
@@ -5217,7 +5244,8 @@ ns__query_start(query_ctx_t *qctx) {
qctx->options.noexact = true;
}
- result = query_getdb(qctx->client, qctx->client->query.qname,
+ result = query_getdb(qctx->client,
+ dns_linkedname_name(qctx->client->query.qname),
qctx->qtype, qctx->options, &qctx->zone, &qctx->db,
&qctx->version, &qctx->is_zone);
if ((result != ISC_R_SUCCESS || !qctx->is_zone) &&
@@ -5237,8 +5265,9 @@ ns__query_start(query_ctx_t *qctx) {
dns_getdb_options_t options = { .partial = true };
tresult = query_getzonedb(
- qctx->client, qctx->client->query.qname, qctx->qtype,
- options, &tzone, &tdb, &tversion);
+ qctx->client,
+ dns_linkedname_name(qctx->client->query.qname),
+ qctx->qtype, options, &tzone, &tdb, &tversion);
if (tresult == ISC_R_SUCCESS) {
/*
* We are authoritative for QNAME. Attach the relevant
@@ -5570,7 +5599,7 @@ query_lookup(query_ctx_t *qctx) {
if (qctx->dns64 && qctx->rpz) {
rpzqname = qctx->client->query.rpz_st->p_name;
} else {
- rpzqname = qctx->client->query.qname;
+ rpzqname = dns_linkedname_name(qctx->client->query.qname);
}
qctx->client->query.dboptions &= ~DNS_DBFIND_STALETIMEOUT;
@@ -5615,18 +5644,19 @@ query_lookup(query_ctx_t *qctx) {
* node resolution, such as ANY/RRSIG iteration.
*/
if (qctx->dns64 && qctx->rpz) {
- dns_name_copy(qctx->client->query.qname, qctx->fname);
- qctx->fname->attributes.wildcard = false;
+ dns_name_copy(dns_linkedname_name(qctx->client->query.qname),
+ dns_linkedname_name(qctx->fname));
+ dns_linkedname_name(qctx->fname)->attributes.wildcard = false;
dns_rdataset_cleanup(qctx->sigrdataset);
} else if (found_via_wildcard) {
- dns_name_copy(rpzqname, qctx->fname);
- qctx->fname->attributes.wildcard = true;
+ dns_name_copy(rpzqname, dns_linkedname_name(qctx->fname));
+ dns_linkedname_name(qctx->fname)->attributes.wildcard = true;
} else if (qctx_has_foundname(qctx)) {
- dns_name_copy(foundname, qctx->fname);
- qctx->fname->attributes.wildcard = false;
+ dns_name_copy(foundname, dns_linkedname_name(qctx->fname));
+ dns_linkedname_name(qctx->fname)->attributes.wildcard = false;
} else {
- dns_name_copy(rpzqname, qctx->fname);
- qctx->fname->attributes.wildcard = false;
+ dns_name_copy(rpzqname, dns_linkedname_name(qctx->fname));
+ dns_linkedname_name(qctx->fname)->attributes.wildcard = false;
}
if (!qctx->is_zone) {
@@ -5667,8 +5697,8 @@ query_lookup(query_ctx_t *qctx) {
}
if (dbfind_stale || stale_refresh_window || stale_timeout) {
- dns_name_format(qctx->client->query.qname, namebuf,
- sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(qctx->client->query.qname),
+ namebuf, sizeof(namebuf));
dns_rdatatype_format(qctx->qtype, typebuf, sizeof(typebuf));
inc_stats(qctx->client, ns_statscounter_trystale);
@@ -6204,7 +6234,7 @@ query_resume(query_ctx_t *qctx) {
tname = qctx->fresp->foundname;
}
- dns_name_copy(tname, qctx->fname);
+ dns_name_copy(tname, dns_linkedname_name(qctx->fname));
if (rpz) {
qctx->rpz_st->r.r_result = qctx->fresp->result;
@@ -6451,7 +6481,8 @@ ns__query_sfcache(query_ctx_t *qctx) {
#endif /* ifdef ENABLE_AFL */
{
failcache = dns_badcache_find(
- qctx->view->failcache, qctx->client->query.qname,
+ qctx->view->failcache,
+ dns_linkedname_name(qctx->client->query.qname),
qctx->qtype, &flags,
isc_time_seconds(&qctx->client->inner.tnow));
}
@@ -6467,8 +6498,9 @@ ns__query_sfcache(query_ctx_t *qctx) {
char namebuf[DNS_NAME_FORMATSIZE];
char typebuf[DNS_RDATATYPE_FORMATSIZE];
- dns_name_format(qctx->client->query.qname, namebuf,
- sizeof(namebuf));
+ dns_name_format(
+ dns_linkedname_name(qctx->client->query.qname),
+ namebuf, sizeof(namebuf));
dns_rdatatype_format(qctx->qtype, typebuf,
sizeof(typebuf));
ns_client_log(qctx->client, NS_LOGCATEGORY_CLIENT,
@@ -6503,8 +6535,10 @@ query_trace_rrldrop(query_ctx_t *qctx,
char qnamebuf[DNS_NAME_FORMATSIZE];
char fnamebuf[DNS_NAME_FORMATSIZE];
- dns_name_format(qctx->client->query.qname, qnamebuf, sizeof(qnamebuf));
- dns_name_format(qctx->fname, fnamebuf, sizeof(fnamebuf));
+ dns_name_format(dns_linkedname_name(qctx->client->query.qname),
+ qnamebuf, sizeof(qnamebuf));
+ dns_name_format(dns_linkedname_name(qctx->fname), fnamebuf,
+ sizeof(fnamebuf));
LIBNS_RRL_DROP(peerbuf, qnamebuf, fnamebuf, rrl_result);
}
@@ -6537,7 +6571,9 @@ query_checkrrl(query_ctx_t *qctx, isc_result_t result) {
"query.rpz_st=%p(%u), RRL_CHECKED=%u",
qctx->client->inner.view->rrl, qctx->client->inner.havecookie,
isc_result_toid(result), qctx->fname,
- qctx->fname != NULL ? dns_name_isabsolute(qctx->fname) : 0,
+ qctx->fname != NULL
+ ? dns_name_isabsolute(dns_linkedname_name(qctx->fname))
+ : 0,
qctx->is_zone, qctx->client->query.recursionok,
qctx->client->query.rpz_st,
qctx->client->query.rpz_st != NULL
@@ -6547,7 +6583,8 @@ query_checkrrl(query_ctx_t *qctx, isc_result_t result) {
qctx->client->query.rrl_checked);
if (qctx->view->rrl != NULL && !qctx->client->inner.havecookie &&
- ((qctx->fname != NULL && dns_name_isabsolute(qctx->fname)) ||
+ ((qctx->fname != NULL &&
+ dns_name_isabsolute(dns_linkedname_name(qctx->fname))) ||
(result == ISC_R_NOTFOUND && !qctx->client->query.recursionok)) &&
!(result == ISC_R_NOTFOUND && !qctx->is_zone &&
qctx->client->query.recursionok) &&
@@ -6565,7 +6602,7 @@ query_checkrrl(query_ctx_t *qctx, isc_result_t result) {
qctx->client->query.rrl_checked = true;
wouldlog = isc_log_wouldlog(DNS_RRL_LOG_DROP);
- constname = qctx->fname;
+ constname = dns_linkedname_name(qctx->fname);
if (result == DNS_R_NXDOMAIN) {
/*
* Use the database origin name to rate limit NXDOMAIN
@@ -6729,7 +6766,8 @@ query_checkrpz(query_ctx_t *qctx, isc_result_t result) {
qctx->rpz_st->q.db = MOVE_OWNERSHIP(qctx->db);
qctx->rpz_st->q.rdataset = MOVE_OWNERSHIP(qctx->rdataset);
qctx->rpz_st->q.sigrdataset = MOVE_OWNERSHIP(qctx->sigrdataset);
- dns_name_copy(qctx->fname, qctx->rpz_st->fname);
+ dns_name_copy(dns_linkedname_name(qctx->fname),
+ qctx->rpz_st->fname);
qctx->rpz_st->q.result = result;
fixedname_move(&qctx->foundname, &qctx->rpz_st->q.foundname);
qctx->client->query.recursing = true;
@@ -6755,7 +6793,8 @@ query_checkrpz(query_ctx_t *qctx, isc_result_t result) {
* we looked up even if we were stopped short
* in recursion or for a deferral.
*/
- dns_name_copy(qctx->client->query.qname, qctx->fname);
+ dns_name_copy(dns_linkedname_name(qctx->client->query.qname),
+ dns_linkedname_name(qctx->fname));
rpz_clean(&qctx->zone, &qctx->db, NULL);
dns_fixedname_init(&qctx->foundname);
if (qctx->rpz_st->m.rdataset != NULL) {
@@ -6926,14 +6965,14 @@ query_rpzcname(query_ctx_t *qctx, dns_name_t *cname) {
labels = dns_name_countlabels(cname);
if (labels > 2 && dns_name_iswildcard(cname)) {
dns_fixedname_init(&prefix);
- dns_name_split(client->query.qname, 1,
+ dns_name_split(dns_linkedname_name(client->query.qname), 1,
dns_fixedname_name(&prefix), NULL);
dns_fixedname_init(&suffix);
dns_name_split(cname, labels - 1, NULL,
dns_fixedname_name(&suffix));
result = dns_name_concatenate(dns_fixedname_name(&prefix),
dns_fixedname_name(&suffix),
- qctx->fname);
+ dns_linkedname_name(qctx->fname));
if (result == DNS_R_NAMETOOLONG) {
client->message->rcode = dns_rcode_yxdomain;
}
@@ -6941,7 +6980,7 @@ query_rpzcname(query_ctx_t *qctx, dns_name_t *cname) {
return result;
}
} else {
- dns_name_copy(cname, qctx->fname);
+ dns_name_copy(cname, dns_linkedname_name(qctx->fname));
}
ns_client_keepname(client, qctx->fname, qctx->dbuf);
@@ -6949,7 +6988,7 @@ query_rpzcname(query_ctx_t *qctx, dns_name_t *cname) {
rpz_log_rewrite(client, false, qctx->rpz_st->m.policy,
qctx->rpz_st->m.type, qctx->rpz_st->m.zone,
- qctx->rpz_st->p_name, qctx->fname,
+ qctx->rpz_st->p_name, dns_linkedname_name(qctx->fname),
qctx->rpz_st->m.rpz->num);
ns_client_qnamereplace(client, qctx->fname);
@@ -7088,7 +7127,8 @@ query_usestale(query_ctx_t *qctx) {
qctx_freedata(qctx);
if (dns_view_staleanswerenabled(qctx->client->inner.view)) {
- if (query_getdb(qctx->client, qctx->client->query.qname,
+ if (query_getdb(qctx->client,
+ dns_linkedname_name(qctx->client->query.qname),
qctx->client->query.qtype, qctx->options,
&qctx->zone, &qctx->db, &qctx->version,
&qctx->is_zone) != ISC_R_SUCCESS)
@@ -7137,7 +7177,7 @@ query_gotanswer(query_ctx_t *qctx, isc_result_t result) {
return ns_query_done(qctx);
}
- if (!dns_name_isroot(qctx->client->query.qname)) {
+ if (!dns_name_isroot(dns_linkedname_name(qctx->client->query.qname))) {
result = query_checkrpz(qctx, result);
if (result == ISC_R_NOTFOUND) {
/*
@@ -7256,7 +7296,7 @@ static void
query_addnoqnameproof(query_ctx_t *qctx) {
ns_client_t *client = qctx->client;
isc_buffer_t *dbuf, b;
- dns_name_t *fname = NULL;
+ dns_linkedname_t *fname = NULL;
dns_rdataset_t *neg = NULL, *negsig = NULL;
CTRACE(ISC_LOG_DEBUG(3), "query_addnoqnameproof");
@@ -7270,7 +7310,8 @@ query_addnoqnameproof(query_ctx_t *qctx) {
neg = ns_client_newrdataset(client);
negsig = ns_client_newrdataset(client);
- RUNTIME_CHECK(dns_rdataset_getnoqname(qctx->noqname, fname, neg,
+ RUNTIME_CHECK(dns_rdataset_getnoqname(qctx->noqname,
+ dns_linkedname_name(fname), neg,
negsig) == ISC_R_SUCCESS);
query_addrrset(qctx, &fname, &neg, &negsig, dbuf,
@@ -7291,11 +7332,11 @@ query_savewildcardproof(query_ctx_t *qctx, dns_fixedname_t *fixed) {
dns_name_t *name = NULL;
if (qctx->client->inner.wantdnssec && qctx->fname != NULL &&
- qctx->fname->attributes.wildcard)
+ dns_linkedname_name(qctx->fname)->attributes.wildcard)
{
dns_fixedname_init(fixed);
name = dns_fixedname_name(fixed);
- dns_name_copy(qctx->fname, name);
+ dns_name_copy(dns_linkedname_name(qctx->fname), name);
}
return name;
@@ -7438,8 +7479,10 @@ query_respond_any(query_ctx_t *qctx) {
if (!qctx->is_zone && qctx->client->query.recursionok) {
dns_name_t *name;
- name = (qctx->fname != NULL) ? qctx->fname
- : qctx->tname;
+ name = dns_linkedname_name(qctx->fname);
+ if (name == NULL) {
+ name = dns_linkedname_name(qctx->tname);
+ }
query_prefetch(qctx->client, name,
qctx->rdataset);
}
@@ -7522,8 +7565,9 @@ query_respond_any(query_ctx_t *qctx) {
dns_db_issecure(qctx->db))
{
char namebuf[DNS_NAME_FORMATSIZE];
- dns_name_format(qctx->client->query.qname, namebuf,
- sizeof(namebuf));
+ dns_name_format(
+ dns_linkedname_name(qctx->client->query.qname),
+ namebuf, sizeof(namebuf));
ns_client_log(qctx->client, DNS_LOGCATEGORY_DNSSEC,
NS_LOGMODULE_QUERY, ISC_LOG_WARNING,
"missing signature for %s", namebuf);
@@ -7700,7 +7744,8 @@ query_addanswer(query_ctx_t *qctx) {
qctx->client->query.dns64_aaaaoklen = 0;
} else {
if (!qctx->is_zone && qctx->client->query.recursionok) {
- query_prefetch(qctx->client, qctx->fname,
+ query_prefetch(qctx->client,
+ dns_linkedname_name(qctx->fname),
qctx->rdataset);
}
if (qctx->client->inner.wantdnssec && qctx->sigrdataset != NULL)
@@ -7783,8 +7828,9 @@ query_respond(query_ctx_t *qctx) {
* We've already got an NS, no need to add one in
* the authority section
*/
- if (dns_name_equal(qctx->client->query.qname,
- dns_db_origin(qctx->db)))
+ if (dns_name_equal(
+ dns_linkedname_name(qctx->client->query.qname),
+ dns_db_origin(qctx->db)))
{
qctx->answer_has_ns = true;
}
@@ -7793,7 +7839,9 @@ query_respond(query_ctx_t *qctx) {
* Always add glue for root priming queries, regardless
* of "minimal-responses" setting.
*/
- if (dns_name_isroot(qctx->client->query.qname)) {
+ if (dns_name_isroot(
+ dns_linkedname_name(qctx->client->query.qname)))
+ {
qctx->client->query.noadditional = false;
dns_db_attach(qctx->db, &qctx->client->query.gluedb);
}
@@ -7841,7 +7889,7 @@ static isc_result_t
query_dns64(query_ctx_t *qctx) {
isc_result_t result;
ns_client_t *client = qctx->client;
- dns_name_t *name = NULL, *mname = NULL;
+ dns_linkedname_t *name = NULL, *mname = NULL;
dns_rdataset_t *mrdataset = NULL;
dns_rdataset_t *dns64_rdataset = NULL;
dns_view_t *view = client->inner.view;
@@ -7865,8 +7913,8 @@ query_dns64(query_ctx_t *qctx) {
name = qctx->fname;
result = dns_message_findname(
- client->message, section, name, dns_rdatatype_aaaa,
- qctx->rdataset->covers, &mname, &mrdataset);
+ client->message, section, dns_linkedname_name(name),
+ dns_rdatatype_aaaa, qctx->rdataset->covers, &mname, &mrdataset);
if (result == ISC_R_SUCCESS) {
/*
* We've already got an RRset of the given name and type.
@@ -7919,7 +7967,7 @@ query_dns64(query_ctx_t *qctx) {
client->inner.signer, flags, qctx->rdataset,
&dns64_rdataset));
- dns_rdataset_setownercase(dns64_rdataset, mname);
+ dns_rdataset_setownercase(dns64_rdataset, dns_linkedname_name(mname));
client->query.noadditional = true;
if (client->query.dns64_ttl != UINT32_MAX) {
@@ -7930,7 +7978,7 @@ query_dns64(query_ctx_t *qctx) {
}
query_addtoname(mname, dns64_rdataset);
- query_setorder(qctx, mname, dns64_rdataset);
+ query_setorder(qctx, dns_linkedname_name(mname), dns64_rdataset);
inc_stats(client, ns_statscounter_dns64);
result = ISC_R_SUCCESS;
@@ -7944,7 +7992,7 @@ cleanup:
static void
query_filter64(query_ctx_t *qctx) {
ns_client_t *client = qctx->client;
- dns_name_t *name = NULL, *mname = NULL;
+ dns_linkedname_t *name = NULL, *mname = NULL;
dns_rdatalist_t *myrdatalist = NULL;
dns_rdataset_t *myrdataset = NULL;
isc_buffer_t *buffer = NULL;
@@ -7960,8 +8008,9 @@ query_filter64(query_ctx_t *qctx) {
name = qctx->fname;
result = dns_message_findname(
- client->message, section, name, dns_rdatatype_aaaa,
- qctx->rdataset->covers, &mname, &myrdataset);
+ client->message, section, dns_linkedname_name(name),
+ dns_rdatatype_aaaa, qctx->rdataset->covers, &mname,
+ &myrdataset);
if (result == ISC_R_SUCCESS) {
/*
* We've already got an RRset of the given name and type.
@@ -8018,7 +8067,7 @@ query_filter64(query_ctx_t *qctx) {
}
dns_rdatalist_tordataset(myrdatalist, myrdataset);
- dns_rdataset_setownercase(myrdataset, mname);
+ dns_rdataset_setownercase(myrdataset, dns_linkedname_name(mname));
client->query.noadditional = true;
if (mname == name) {
if (qctx->dbuf != NULL) {
@@ -8030,7 +8079,7 @@ query_filter64(query_ctx_t *qctx) {
myrdataset->trust = qctx->rdataset->trust;
query_addtoname(mname, myrdataset);
- query_setorder(qctx, mname, myrdataset);
+ query_setorder(qctx, dns_linkedname_name(mname), myrdataset);
dns_message_takebuffer(client->message, &buffer);
if (buffer != NULL) {
@@ -8129,7 +8178,8 @@ query_prepare_delegation_response(query_ctx_t *qctx) {
* it here in case we need it.
*/
dns_fixedname_init(&qctx->dsname);
- dns_name_copy(qctx->fname, dns_fixedname_name(&qctx->dsname));
+ dns_name_copy(dns_linkedname_name(qctx->fname),
+ dns_fixedname_name(&qctx->dsname));
/*
* This is the best answer.
@@ -8177,7 +8227,8 @@ query_prepare_zone_delegation_response(query_ctx_t *qctx) {
* save a copy of it here in case we need it.
*/
dns_fixedname_init(&qctx->dsname);
- dns_name_copy(qctx->fname, dns_fixedname_name(&qctx->dsname));
+ dns_name_copy(dns_linkedname_name(qctx->fname),
+ dns_fixedname_name(&qctx->dsname));
/*
* This is the best answer.
@@ -8232,9 +8283,10 @@ query_zone_delegation(query_ctx_t *qctx) {
dns_zone_t *tzone = NULL;
dns_dbversion_t *tversion = NULL;
dns_getdb_options_t options = { .partial = true };
- result = query_getzonedb(qctx->client,
- qctx->client->query.qname, qctx->qtype,
- options, &tzone, &tdb, &tversion);
+ result = query_getzonedb(
+ qctx->client,
+ dns_linkedname_name(qctx->client->query.qname),
+ qctx->qtype, options, &tzone, &tdb, &tversion);
if (result != ISC_R_SUCCESS) {
if (tdb != NULL) {
dns_db_detach(&tdb);
@@ -8330,7 +8382,7 @@ use_zone_delegation(query_ctx_t *qctx) {
* Nothing found in the cache, `qctx->fname` remains in
* its initial state.
*/
- if (!dns_name_isabsolute(qctx->fname)) {
+ if (!dns_name_isabsolute(dns_linkedname_name(qctx->fname))) {
return true;
}
@@ -8338,7 +8390,9 @@ use_zone_delegation(query_ctx_t *qctx) {
* We've already got a delegation from authoritative data, and it is
* better than what we found in the cache.
*/
- if (dns_name_issubdomain(qctx->fname, qctx->zfname)) {
+ if (dns_name_issubdomain(dns_linkedname_name(qctx->fname),
+ dns_linkedname_name(qctx->zfname)))
+ {
return true;
}
@@ -8349,7 +8403,8 @@ use_zone_delegation(query_ctx_t *qctx) {
* nameservers configured in the static-stub zone.
*/
return qctx->is_staticstub_zone &&
- dns_name_equal(qctx->fname, qctx->zfname);
+ dns_name_equal(dns_linkedname_name(qctx->fname),
+ dns_linkedname_name(qctx->zfname));
}
/*%
@@ -8359,6 +8414,7 @@ use_zone_delegation(query_ctx_t *qctx) {
static isc_result_t
query_delegation_recurse(query_ctx_t *qctx) {
isc_result_t result = ISC_R_UNSET;
+ dns_name_t *qname = dns_linkedname_name(qctx->client->query.qname);
CCTRACE(ISC_LOG_DEBUG(3), "query_delegation_recurse");
@@ -8385,8 +8441,7 @@ query_delegation_recurse(query_ctx_t *qctx) {
* DNS64.
*/
dns_rdatatype_t qtype = qctx->dns64 ? dns_rdatatype_a : qctx->qtype;
- result = ns_query_recurse(qctx->client, qtype,
- qctx->client->query.qname, qctx->resuming);
+ result = ns_query_recurse(qctx->client, qtype, qname, qctx->resuming);
if (result == ISC_R_SUCCESS) {
qctx->client->query.recursing = true;
@@ -8421,7 +8476,7 @@ static void
query_addds(query_ctx_t *qctx) {
ns_client_t *client = qctx->client;
dns_fixedname_t fixed, foundfixed;
- dns_name_t *fname = NULL;
+ dns_linkedname_t *fname = NULL;
dns_name_t *foundname = NULL;
dns_name_t *lookupname = NULL;
dns_name_t *name;
@@ -8518,7 +8573,7 @@ addnsec3:
dns_rdataset_cleanup(rdataset);
dns_rdataset_cleanup(sigrdataset);
query_findclosestnsec3(name, qctx->db, qctx->version, client, rdataset,
- sigrdataset, fname, true,
+ sigrdataset, dns_linkedname_name(fname), true,
dns_fixedname_name(&fixed));
if (!dns_rdataset_isassociated(rdataset)) {
goto cleanup;
@@ -8542,7 +8597,8 @@ addnsec3:
}
query_findclosestnsec3(dns_fixedname_name(&fixed), qctx->db,
qctx->version, client, rdataset,
- sigrdataset, fname, false, NULL);
+ sigrdataset, dns_linkedname_name(fname),
+ false, NULL);
if (!dns_rdataset_isassociated(rdataset)) {
goto cleanup;
}
@@ -8597,7 +8653,8 @@ query_nodata(query_ctx_t *qctx, isc_result_t res) {
qctx->fname = ns_client_newname(qctx->client,
qctx->dbuf, &b);
}
- dns_name_copy(qctx->client->query.qname, qctx->fname);
+ dns_name_copy(dns_linkedname_name(qctx->client->query.qname),
+ dns_linkedname_name(qctx->fname));
qctx->dns64 = false;
#ifdef dns64_bis_return_excluded_addresses
/*
@@ -8694,19 +8751,19 @@ query_sign_nodata(query_ctx_t *qctx) {
if (!dns_rdataset_isassociated(qctx->rdataset) &&
qctx->client->inner.wantdnssec)
{
- if (!qctx->fname->attributes.wildcard) {
+ if (!dns_linkedname_name(qctx->fname)->attributes.wildcard) {
dns_name_t *found;
dns_name_t *qname;
dns_fixedname_t fixed;
isc_buffer_t b;
found = dns_fixedname_initname(&fixed);
- qname = qctx->client->query.qname;
+ qname = dns_linkedname_name(qctx->client->query.qname);
- query_findclosestnsec3(qname, qctx->db, qctx->version,
- qctx->client, qctx->rdataset,
- qctx->sigrdataset, qctx->fname,
- true, found);
+ query_findclosestnsec3(
+ qname, qctx->db, qctx->version, qctx->client,
+ qctx->rdataset, qctx->sigrdataset,
+ dns_linkedname_name(qctx->fname), true, found);
/*
* Did we find the closest provable encloser
* instead? If so add the nearest to the
@@ -8750,13 +8807,16 @@ query_sign_nodata(query_ctx_t *qctx) {
query_findclosestnsec3(
found, qctx->db, qctx->version,
qctx->client, qctx->rdataset,
- qctx->sigrdataset, qctx->fname, false,
+ qctx->sigrdataset,
+ dns_linkedname_name(qctx->fname), false,
NULL);
}
} else {
ns_client_releasename(qctx->client, &qctx->fname);
- query_addwildcardproof(qctx, qctx->client->query.qname,
- false, true);
+ query_addwildcardproof(
+ qctx,
+ dns_linkedname_name(qctx->client->query.qname),
+ false, true);
}
}
if (dns_rdataset_isassociated(qctx->rdataset)) {
@@ -8806,12 +8866,12 @@ query_addnxrrsetnsec(query_ctx_t *qctx) {
dns_rdata_rrsig_t sig;
unsigned int labels;
isc_buffer_t *dbuf, b;
- dns_name_t *fname;
+ dns_linkedname_t *fname;
isc_result_t result;
INSIST(qctx->fname != NULL);
- if (!qctx->fname->attributes.wildcard) {
+ if (!dns_linkedname_name(qctx->fname)->attributes.wildcard) {
query_addrrset(qctx, &qctx->fname, &qctx->rdataset,
&qctx->sigrdataset, NULL, DNS_SECTION_AUTHORITY);
return;
@@ -8832,12 +8892,14 @@ query_addnxrrsetnsec(query_ctx_t *qctx) {
result = dns_rdata_tostruct(&sigrdata, &sig);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
- labels = dns_name_countlabels(qctx->fname);
+ labels = dns_name_countlabels(dns_linkedname_name(qctx->fname));
if ((unsigned int)sig.labels + 1 >= labels) {
return;
}
- query_addwildcardproof(qctx, qctx->client->query.qname, true, false);
+ query_addwildcardproof(qctx,
+ dns_linkedname_name(qctx->client->query.qname),
+ true, false);
/*
* We'll need some resources...
@@ -8845,10 +8907,12 @@ query_addnxrrsetnsec(query_ctx_t *qctx) {
dbuf = ns_client_getnamebuf(client);
fname = ns_client_newname(client, dbuf, &b);
- dns_name_split(qctx->fname, sig.labels + 1, NULL, fname);
+ dns_name_split(dns_linkedname_name(qctx->fname), sig.labels + 1, NULL,
+ dns_linkedname_name(fname));
/* This will succeed, since we've stripped labels. */
- RUNTIME_CHECK(dns_name_concatenate(dns_wildcardname, fname, fname) ==
- ISC_R_SUCCESS);
+ RUNTIME_CHECK(dns_name_concatenate(
+ dns_wildcardname, dns_linkedname_name(fname),
+ dns_linkedname_name(fname)) == ISC_R_SUCCESS);
query_addrrset(qctx, &fname, &qctx->rdataset, &qctx->sigrdataset, dbuf,
DNS_SECTION_AUTHORITY);
}
@@ -8925,8 +8989,9 @@ query_nxdomain(query_ctx_t *qctx, isc_result_t result) {
&qctx->sigrdataset, NULL,
DNS_SECTION_AUTHORITY);
}
- query_addwildcardproof(qctx, qctx->client->query.qname, false,
- false);
+ query_addwildcardproof(
+ qctx, dns_linkedname_name(qctx->client->query.qname),
+ false, false);
}
/*
@@ -8968,9 +9033,9 @@ query_redirect(query_ctx_t *qctx, isc_result_t saved_result) {
/* reset foundname */
(void)dns_fixedname_init(&qctx->foundname);
- result = redirect(qctx->client, qctx->fname, qctx->rdataset,
- &qctx->foundname, &qctx->db, &qctx->version,
- qctx->type);
+ result = redirect(qctx->client, dns_linkedname_name(qctx->fname),
+ qctx->rdataset, &qctx->foundname, &qctx->db,
+ &qctx->version, qctx->type);
switch (result) {
case ISC_R_SUCCESS:
inc_stats(qctx->client, ns_statscounter_nxdomainredirect);
@@ -8987,9 +9052,9 @@ query_redirect(query_ctx_t *qctx, isc_result_t saved_result) {
break;
}
- result = redirect2(qctx->client, qctx->fname, qctx->rdataset,
- &qctx->foundname, &qctx->db, &qctx->version,
- qctx->type, &qctx->is_zone);
+ result = redirect2(qctx->client, dns_linkedname_name(qctx->fname),
+ qctx->rdataset, &qctx->foundname, &qctx->db,
+ &qctx->version, qctx->type, &qctx->is_zone);
switch (result) {
case ISC_R_SUCCESS:
inc_stats(qctx->client, ns_statscounter_nxdomainredirect);
@@ -9006,7 +9071,8 @@ query_redirect(query_ctx_t *qctx, isc_result_t saved_result) {
qctx->client->query.redirect.sigrdataset =
MOVE_OWNERSHIP(qctx->sigrdataset);
qctx->client->query.redirect.result = saved_result;
- dns_name_copy(qctx->fname, qctx->client->query.redirect.fname);
+ dns_name_copy(dns_linkedname_name(qctx->fname),
+ qctx->client->query.redirect.fname);
fixedname_move(&qctx->foundname,
&qctx->client->query.redirect.foundname);
qctx->client->query.redirect.authoritative =
@@ -9083,7 +9149,7 @@ static isc_result_t
query_synthnodata(query_ctx_t *qctx, const dns_name_t *signer,
dns_rdataset_t **soardatasetp,
dns_rdataset_t **sigsoardatasetp) {
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_ttl_t ttl;
isc_buffer_t *dbuf, b;
@@ -9106,7 +9172,7 @@ query_synthnodata(query_ctx_t *qctx, const dns_name_t *signer,
dbuf = ns_client_getnamebuf(qctx->client);
name = ns_client_newname(qctx->client, dbuf, &b);
- dns_name_copy(signer, name);
+ dns_name_copy(signer, dns_linkedname_name(name));
/*
* Add SOA record. Omit the RRSIG if DNSSEC was not requested.
@@ -9140,7 +9206,7 @@ query_synthnodata(query_ctx_t *qctx, const dns_name_t *signer,
static isc_result_t
query_synthwildcard(query_ctx_t *qctx, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset) {
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
isc_buffer_t *dbuf, b;
dns_rdataset_t *cloneset = NULL, *clonesigset = NULL;
dns_rdataset_t **sigrdatasetp;
@@ -9159,7 +9225,8 @@ query_synthwildcard(query_ctx_t *qctx, dns_rdataset_t *rdataset,
dbuf = ns_client_getnamebuf(qctx->client);
name = ns_client_newname(qctx->client, dbuf, &b);
- dns_name_copy(qctx->client->query.qname, name);
+ dns_name_copy(dns_linkedname_name(qctx->client->query.qname),
+ dns_linkedname_name(name));
cloneset = ns_client_newrdataset(qctx->client);
dns_rdataset_clone(rdataset, cloneset);
@@ -9209,7 +9276,7 @@ static isc_result_t
query_synthcnamewildcard(query_ctx_t *qctx, dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset) {
isc_result_t result;
- dns_name_t *tname = NULL;
+ dns_linkedname_t *tname = NULL;
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdata_cname_t cname;
@@ -9234,12 +9301,14 @@ query_synthcnamewildcard(query_ctx_t *qctx, dns_rdataset_t *rdataset,
RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_rdata_reset(&rdata);
- if (dns_name_equal(qctx->client->query.qname, &cname.cname)) {
+ if (dns_name_equal(dns_linkedname_name(qctx->client->query.qname),
+ &cname.cname))
+ {
dns_message_puttempname(qctx->client->message, &tname);
return ISC_R_SUCCESS;
}
- dns_name_copy(&cname.cname, tname);
+ dns_name_copy(&cname.cname, dns_linkedname_name(tname));
ns_client_qnamereplace(qctx->client, tname);
qctx->want_restart = true;
@@ -9263,7 +9332,7 @@ query_synthnxdomainnodata(query_ctx_t *qctx, bool nodata, dns_name_t *nowild,
dns_rdataset_t *signowildrdataset, dns_name_t *signer,
dns_rdataset_t **soardatasetp,
dns_rdataset_t **sigsoardatasetp) {
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_ttl_t ttl;
isc_buffer_t *dbuf, b;
dns_rdataset_t *cloneset = NULL, *clonesigset = NULL;
@@ -9290,7 +9359,7 @@ query_synthnxdomainnodata(query_ctx_t *qctx, bool nodata, dns_name_t *nowild,
dbuf = ns_client_getnamebuf(qctx->client);
name = ns_client_newname(qctx->client, dbuf, &b);
- dns_name_copy(signer, name);
+ dns_name_copy(signer, dns_linkedname_name(name));
/*
* Add SOA record. Omit the RRSIG if DNSSEC was not requested.
@@ -9310,7 +9379,7 @@ query_synthnxdomainnodata(query_ctx_t *qctx, bool nodata, dns_name_t *nowild,
dbuf = ns_client_getnamebuf(qctx->client);
name = ns_client_newname(qctx->client, dbuf, &b);
- dns_name_copy(nowild, name);
+ dns_name_copy(nowild, dns_linkedname_name(name));
cloneset = ns_client_newrdataset(qctx->client);
clonesigset = ns_client_newrdataset(qctx->client);
@@ -9359,8 +9428,11 @@ checksignames(dns_name_t *signer, dns_rdataset_t *sigrdataset) {
RUNTIME_CHECK(result == ISC_R_SUCCESS);
if (dns_name_empty(signer)) {
- dns_name_copy(&rrsig.signer, signer);
- } else if (!dns_name_equal(signer, &rrsig.signer)) {
+ dns_name_copy(dns_linkedname_name(&rrsig.signer),
+ signer);
+ } else if (!dns_name_equal(signer,
+ dns_linkedname_name(&rrsig.signer)))
+ {
return ISC_R_FAILURE;
}
}
@@ -9399,7 +9471,7 @@ query_coveringnsec(query_ctx_t *qctx) {
dns_fixedname_t fnowild;
dns_fixedname_t fsigner;
dns_fixedname_t fwild;
- dns_name_t *fname = NULL;
+ dns_name_t *fixedname = dns_fixedname_initname(&fixed);
dns_name_t *namespace = dns_fixedname_initname(&fnamespace);
dns_name_t *nowild = NULL;
dns_name_t *signer = NULL;
@@ -9422,13 +9494,14 @@ query_coveringnsec(query_ctx_t *qctx) {
* For records that belong to the parent zone (i.e. DS),
* remove a label to find the correct namespace.
*/
- dns_name_clone(qctx->client->query.qname, &qname);
+ dns_name_clone(dns_linkedname_name(qctx->client->query.qname), &qname);
labels = dns_name_countlabels(&qname);
if (dns_rdatatype_atparent(qctx->qtype) && labels > 1) {
dns_name_getlabelsequence(&qname, 1, labels - 1, &qname);
}
dns_view_sfd_find(qctx->view, &qname, namespace);
- if (!dns_name_issubdomain(qctx->fname, namespace)) {
+ if (!dns_name_issubdomain(dns_linkedname_name(qctx->fname), namespace))
+ {
goto cleanup;
}
@@ -9440,7 +9513,6 @@ query_coveringnsec(query_ctx_t *qctx) {
}
wild = dns_fixedname_initname(&fwild);
- fname = dns_fixedname_initname(&fixed);
signer = dns_fixedname_initname(&fsigner);
nowild = dns_fixedname_initname(&fnowild);
@@ -9459,7 +9531,9 @@ query_coveringnsec(query_ctx_t *qctx) {
/*
* The query name can't be above the signer of the NSEC.
*/
- if (!dns_name_issubdomain(qctx->client->query.qname, signer)) {
+ if (!dns_name_issubdomain(
+ dns_linkedname_name(qctx->client->query.qname), signer))
+ {
goto cleanup;
}
@@ -9474,9 +9548,10 @@ query_coveringnsec(query_ctx_t *qctx) {
/*
* Check that we have the correct NOQNAME NSEC record.
*/
- CHECK(dns_nsec_noexistnodata(qctx->qtype, qctx->client->query.qname,
- qctx->fname, qctx->rdataset, &exists,
- &data, wild, log_noexistnodata, qctx));
+ CHECK(dns_nsec_noexistnodata(
+ qctx->qtype, dns_linkedname_name(qctx->client->query.qname),
+ dns_linkedname_name(qctx->fname), qctx->rdataset, &exists,
+ &data, wild, log_noexistnodata, qctx));
if (exists) {
/*
* If there's data at the name, or the NSEC isn't
@@ -9511,8 +9586,8 @@ query_coveringnsec(query_ctx_t *qctx) {
dns_db_attach(qctx->db, &db);
CHECK(dns_db_findext(db, signer, qctx->version,
dns_rdatatype_soa, dboptions,
- qctx->client->inner.now, fname, &cm, &ci,
- soardataset, sigsoardataset));
+ qctx->client->inner.now, fixedname, &cm,
+ &ci, soardataset, sigsoardataset));
if (soardataset->trust != dns_trust_secure ||
sigsoardataset->trust != dns_trust_secure)
@@ -9637,7 +9712,7 @@ query_coveringnsec(query_ctx_t *qctx) {
* Look for SOA record to construct NXDOMAIN response.
*/
CHECK(dns_db_findext(db, signer, qctx->version, dns_rdatatype_soa,
- dboptions, qctx->client->inner.now, fname, &cm,
+ dboptions, qctx->client->inner.now, fixedname, &cm,
&ci, soardataset, sigsoardataset));
if (soardataset->trust != dns_trust_secure ||
@@ -9743,8 +9818,9 @@ query_zerottl_refetch(query_ctx_t *qctx) {
INSIST(!qctx->client->query.is_redirect);
- result = ns_query_recurse(qctx->client, qctx->qtype,
- qctx->client->query.qname, qctx->resuming);
+ result = ns_query_recurse(
+ qctx->client, qctx->qtype,
+ dns_linkedname_name(qctx->client->query.qname), qctx->resuming);
if (result == ISC_R_SUCCESS) {
CALL_HOOK(NS_QUERY_ZEROTTL_RECURSE, qctx);
qctx->client->query.recursing = true;
@@ -9775,7 +9851,7 @@ cleanup:
static isc_result_t
query_cname(query_ctx_t *qctx) {
isc_result_t result = ISC_R_UNSET;
- dns_name_t *tname = NULL;
+ dns_linkedname_t *tname = NULL;
dns_rdataset_t *trdataset = NULL;
dns_rdataset_t **sigrdatasetp = NULL;
dns_rdata_t rdata = DNS_RDATA_INIT;
@@ -9819,7 +9895,8 @@ query_cname(query_ctx_t *qctx) {
}
if (!qctx->is_zone && qctx->client->query.recursionok) {
- query_prefetch(qctx->client, qctx->fname, qctx->rdataset);
+ query_prefetch(qctx->client, dns_linkedname_name(qctx->fname),
+ qctx->rdataset);
}
query_addrrset(qctx, &qctx->fname, &qctx->rdataset, sigrdatasetp,
@@ -9851,7 +9928,7 @@ query_cname(query_ctx_t *qctx) {
RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_rdata_reset(&rdata);
- dns_name_copy(&cname.cname, tname);
+ dns_name_copy(&cname.cname, dns_linkedname_name(tname));
ns_client_qnamereplace(qctx->client, tname);
qctx->want_restart = true;
@@ -9870,7 +9947,8 @@ cleanup:
static isc_result_t
query_dname(query_ctx_t *qctx) {
- dns_name_t *tname, *prefix;
+ dns_linkedname_t *tname;
+ dns_name_t *prefix;
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdata_dname_t dname;
dns_fixedname_t fixed;
@@ -9893,8 +9971,9 @@ query_dname(query_ctx_t *qctx) {
* to know how many labels and bits are in common because
* we're going to have to split qname later on.
*/
- namereln = dns_name_fullcompare(qctx->client->query.qname, qctx->fname,
- &order, &nlabels);
+ namereln = dns_name_fullcompare(
+ dns_linkedname_name(qctx->client->query.qname),
+ dns_linkedname_name(qctx->fname), &order, &nlabels);
/*
* Handling DNAME response is valid as soon as the qname is a subname of
@@ -9919,7 +9998,8 @@ query_dname(query_ctx_t *qctx) {
wildcardproof = query_savewildcardproof(qctx, &wildcardfixed);
if (!qctx->is_zone && qctx->client->query.recursionok) {
- query_prefetch(qctx->client, qctx->fname, qctx->rdataset);
+ query_prefetch(qctx->client, dns_linkedname_name(qctx->fname),
+ qctx->rdataset);
}
query_addrrset(qctx, &qctx->fname, &qctx->rdataset, sigrdatasetp,
qctx->dbuf, DNS_SECTION_ANSWER);
@@ -9939,6 +10019,7 @@ query_dname(query_ctx_t *qctx) {
result = dns_rdataset_first(trdataset);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(qctx->client->message, &tname);
+ tname = NULL;
(void)ns_query_done(qctx);
goto cleanup;
}
@@ -9948,19 +10029,22 @@ query_dname(query_ctx_t *qctx) {
RUNTIME_CHECK(result == ISC_R_SUCCESS);
dns_rdata_reset(&rdata);
- dns_name_copy(&dname.dname, tname);
+ dns_name_copy(&dname.dname, dns_linkedname_name(tname));
/*
* Construct the new qname consisting of
* <found name prefix>.<dname target>
*/
prefix = dns_fixedname_initname(&fixed);
- dns_name_split(qctx->client->query.qname, nlabels, prefix, NULL);
+ dns_name_split(dns_linkedname_name(qctx->client->query.qname), nlabels,
+ prefix, NULL);
INSIST(qctx->fname == NULL);
qctx->dbuf = ns_client_getnamebuf(qctx->client);
qctx->fname = ns_client_newname(qctx->client, qctx->dbuf, &b);
- result = dns_name_concatenate(prefix, tname, qctx->fname);
+ result = dns_name_concatenate(prefix, dns_linkedname_name(tname),
+ dns_linkedname_name(qctx->fname));
dns_message_puttempname(qctx->client->message, &tname);
+ tname = NULL;
/*
* RFC2672, section 4.1, subsection 3c says
@@ -9984,18 +10068,22 @@ query_dname(query_ctx_t *qctx) {
dns_fixedname_t fdeniedname;
dns_name_t *deniedname = dns_fixedname_initname(&fdeniedname);
if (qctx->view->denyanswernames != NULL &&
- dns_nametree_covered(qctx->view->denyanswernames, qctx->fname,
- deniedname, 0) &&
- !dns_nametree_covered(qctx->view->answernames_exclude,
- qctx->client->query.qname, NULL, 0) &&
- !dns_name_issubdomain(qctx->client->query.qname, deniedname))
+ dns_nametree_covered(qctx->view->denyanswernames,
+ dns_linkedname_name(qctx->fname), deniedname,
+ 0) &&
+ !dns_nametree_covered(
+ qctx->view->answernames_exclude,
+ dns_linkedname_name(qctx->client->query.qname), NULL, 0) &&
+ !dns_name_issubdomain(
+ dns_linkedname_name(qctx->client->query.qname), deniedname))
{
char qnamebuf[DNS_NAME_FORMATSIZE];
char tnamebuf[DNS_NAME_FORMATSIZE];
- dns_name_format(qctx->client->query.qname, qnamebuf,
- sizeof(qnamebuf));
- dns_name_format(qctx->fname, tnamebuf, sizeof(tnamebuf));
+ dns_name_format(dns_linkedname_name(qctx->client->query.qname),
+ qnamebuf, sizeof(qnamebuf));
+ dns_name_format(dns_linkedname_name(qctx->fname), tnamebuf,
+ sizeof(tnamebuf));
ns_client_log(qctx->client, NS_LOGCATEGORY_QUERIES,
NS_LOGMODULE_QUERY, ISC_LOG_NOTICE,
"DNAME target %s denied for %s (cache)", tnamebuf,
@@ -10061,11 +10149,12 @@ query_addcname(query_ctx_t *qctx, dns_trust_t trust, dns_ttl_t ttl) {
dns_rdatalist_t *rdatalist = NULL;
dns_rdata_t *rdata = NULL;
isc_region_t r;
- dns_name_t *aname = NULL;
+ dns_linkedname_t *aname = NULL;
dns_message_gettempname(client->message, &aname);
- dns_name_copy(client->query.qname, aname);
+ dns_name_copy(dns_linkedname_name(client->query.qname),
+ dns_linkedname_name(aname));
dns_message_gettemprdatalist(client->message, &rdatalist);
@@ -10077,7 +10166,7 @@ query_addcname(query_ctx_t *qctx, dns_trust_t trust, dns_ttl_t ttl) {
rdatalist->rdclass = client->message->rdclass;
rdatalist->ttl = ttl;
- dns_name_toregion(qctx->fname, &r);
+ dns_name_toregion(dns_linkedname_name(qctx->fname), &r);
rdata->data = r.base;
rdata->length = r.length;
rdata->rdclass = client->message->rdclass;
@@ -10086,7 +10175,7 @@ query_addcname(query_ctx_t *qctx, dns_trust_t trust, dns_ttl_t ttl) {
ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
dns_rdatalist_tordataset(rdatalist, rdataset);
rdataset->trust = trust;
- dns_rdataset_setownercase(rdataset, aname);
+ dns_rdataset_setownercase(rdataset, dns_linkedname_name(aname));
query_addrrset(qctx, &aname, &rdataset, NULL, NULL, DNS_SECTION_ANSWER);
if (rdataset != NULL) {
@@ -10135,7 +10224,7 @@ static isc_result_t
query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
dns_section_t section) {
ns_client_t *client = qctx->client;
- dns_name_t *name = NULL;
+ dns_linkedname_t *name = NULL;
dns_dbnode_t *node = NULL;
isc_result_t result, eresult = ISC_R_SUCCESS;
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
@@ -10167,7 +10256,7 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
* We'll be releasing 'name' before returning, so it's safe to
* use clone instead of copying here.
*/
- dns_name_clone(dns_db_origin(qctx->db), name);
+ dns_name_clone(dns_db_origin(qctx->db), dns_linkedname_name(name));
rdataset = ns_client_newrdataset(client);
if (client->inner.wantdnssec && dns_db_issecure(qctx->db)) {
@@ -10188,8 +10277,8 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
fname = dns_fixedname_initname(&foundname);
- result = dns_db_findext(qctx->db, name, qctx->version,
- dns_rdatatype_soa,
+ result = dns_db_findext(qctx->db, dns_linkedname_name(name),
+ qctx->version, dns_rdatatype_soa,
client->query.dboptions, 0, fname, &cm,
&ci, rdataset, sigrdataset);
}
@@ -10240,8 +10329,10 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
if (section == DNS_SECTION_ADDITIONAL) {
rdataset->attributes.required = true;
}
- query_addrrset(qctx, &name, &rdataset, sigrdatasetp, NULL,
- section);
+ {
+ query_addrrset(qctx, &name, &rdataset, sigrdatasetp,
+ NULL, section);
+ }
}
ns_client_putrdataset(client, &rdataset);
@@ -10265,7 +10356,8 @@ static isc_result_t
query_addns(query_ctx_t *qctx) {
ns_client_t *client = qctx->client;
isc_result_t result, eresult;
- dns_name_t *name = NULL, *fname;
+ dns_linkedname_t *name = NULL;
+ dns_name_t *fname;
dns_dbnode_t *node = NULL;
dns_fixedname_t foundname;
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
@@ -10288,7 +10380,7 @@ query_addns(query_ctx_t *qctx) {
* Get resources and make 'name' be the database origin.
*/
dns_message_gettempname(client->message, &name);
- dns_name_clone(dns_db_origin(qctx->db), name);
+ dns_name_clone(dns_db_origin(qctx->db), dns_linkedname_name(name));
rdataset = ns_client_newrdataset(client);
if (client->inner.wantdnssec && dns_db_issecure(qctx->db)) {
@@ -10305,7 +10397,8 @@ query_addns(query_ctx_t *qctx) {
client->inner.now, rdataset, sigrdataset);
} else {
CTRACE(ISC_LOG_DEBUG(3), "query_addns: calling dns_db_find");
- result = dns_db_findext(qctx->db, name, NULL, dns_rdatatype_ns,
+ result = dns_db_findext(qctx->db, dns_linkedname_name(name),
+ NULL, dns_rdatatype_ns,
client->query.dboptions, 0, fname, &cm,
&ci, rdataset, sigrdataset);
CTRACE(ISC_LOG_DEBUG(3), "query_addns: dns_db_find complete");
@@ -10350,7 +10443,7 @@ static void
query_addbestns(query_ctx_t *qctx) {
ns_client_t *client = qctx->client;
dns_db_t *db = NULL, *zdb = NULL;
- dns_name_t *fname = NULL, *zfname = NULL;
+ dns_linkedname_t *fname = NULL, *zfname = NULL;
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
dns_rdataset_t *zrdataset = NULL, *zsigrdataset = NULL;
bool is_zone = false;
@@ -10369,7 +10462,7 @@ query_addbestns(query_ctx_t *qctx) {
dns_clientinfo_init(&ci, client, NULL);
dns_name_init(&qname);
- dns_name_clone(client->query.qname, &qname);
+ dns_name_clone(dns_linkedname_name(client->query.qname), &qname);
/*
* Find the right database.
@@ -10426,9 +10519,10 @@ db_find:
*/
if (is_zone) {
result = dns_db_findext(
- db, client->query.qname, version, dns_rdatatype_ns,
- client->query.dboptions, client->inner.now, fname, &cm,
- &ci, rdataset, sigrdataset);
+ db, dns_linkedname_name(client->query.qname), version,
+ dns_rdatatype_ns, client->query.dboptions,
+ client->inner.now, dns_linkedname_name(fname), &cm, &ci,
+ rdataset, sigrdataset);
if (result != DNS_R_DELEGATION) {
goto cleanup;
}
@@ -10531,7 +10625,7 @@ query_addwildcardproof(query_ctx_t *qctx, dns_name_t *name, bool ispositive,
bool nodata) {
ns_client_t *client = qctx->client;
isc_buffer_t *dbuf, b;
- dns_name_t *fname = NULL;
+ dns_linkedname_t *fname = NULL;
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
dns_fixedname_t wfixed;
dns_name_t *wname;
@@ -10608,9 +10702,9 @@ again:
rdataset = ns_client_newrdataset(client);
sigrdataset = ns_client_newrdataset(client);
- result = dns_db_findext(qctx->db, name, qctx->version,
- dns_rdatatype_nsec, options, 0, fname, &cm, &ci,
- rdataset, sigrdataset);
+ result = dns_db_findext(
+ qctx->db, name, qctx->version, dns_rdatatype_nsec, options, 0,
+ dns_linkedname_name(fname), &cm, &ci, rdataset, sigrdataset);
if (!dns_rdataset_isassociated(rdataset)) {
/*
@@ -10624,7 +10718,8 @@ again:
* minlabels: suffix length of non NXDOMAIN result
*/
unsigned int maxlabels = dns_name_countlabels(name);
- unsigned int minlabels = dns_name_countlabels(fname);
+ unsigned int minlabels =
+ dns_name_countlabels(dns_linkedname_name(fname));
unsigned int namelabels = maxlabels;
bool search = result == DNS_R_NXDOMAIN;
dns_name_copy(name, cname);
@@ -10636,7 +10731,8 @@ again:
}
result = dns_db_findext(qctx->db, cname, qctx->version,
dns_rdatatype_nsec, options, 0,
- fname, &cm, &ci, NULL, NULL);
+ dns_linkedname_name(fname), &cm,
+ &ci, NULL, NULL);
if (result == DNS_R_NXDOMAIN) {
maxlabels = labels;
} else {
@@ -10648,8 +10744,8 @@ again:
* Add closest (provable) encloser NSEC3.
*/
query_findclosestnsec3(cname, qctx->db, qctx->version, client,
- rdataset, sigrdataset, fname, true,
- cname);
+ rdataset, sigrdataset,
+ dns_linkedname_name(fname), true, cname);
if (!dns_rdataset_isassociated(rdataset)) {
goto cleanup;
}
@@ -10697,8 +10793,8 @@ again:
}
query_findclosestnsec3(wname, qctx->db, qctx->version, client,
- rdataset, sigrdataset, fname, false,
- NULL);
+ rdataset, sigrdataset,
+ dns_linkedname_name(fname), false, NULL);
if (!dns_rdataset_isassociated(rdataset)) {
goto cleanup;
}
@@ -10734,9 +10830,9 @@ again:
*/
CHECK(dns_name_concatenate(dns_wildcardname, cname, wname));
- query_findclosestnsec3(wname, qctx->db, qctx->version, client,
- rdataset, sigrdataset, fname, nodata,
- NULL);
+ query_findclosestnsec3(
+ wname, qctx->db, qctx->version, client, rdataset,
+ sigrdataset, dns_linkedname_name(fname), nodata, NULL);
if (!dns_rdataset_isassociated(rdataset)) {
goto cleanup;
}
@@ -10752,8 +10848,9 @@ again:
dns_rdataset_current(rdataset, &rdata);
result = dns_rdata_tostruct(&rdata, &nsec);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
- (void)dns_name_fullcompare(name, fname, &order,
- &olabels);
+ (void)dns_name_fullcompare(name,
+ dns_linkedname_name(fname),
+ &order, &olabels);
(void)dns_name_fullcompare(name, &nsec.next, &order,
&nlabels);
/*
@@ -10865,7 +10962,10 @@ query_glueanswer(query_ctx_t *qctx) {
msg = qctx->client->message;
MSG_SECTION_FOREACH(msg, section, name) {
- if (dns_name_equal(name, qctx->client->query.qname)) {
+ if (dns_name_equal(
+ dns_linkedname_name(name),
+ dns_linkedname_name(qctx->client->query.qname)))
+ {
ISC_LIST_FOREACH(name->list, rdataset, link) {
if (rdataset->type == qctx->qtype) {
ISC_LIST_UNLINK(msg->sections[section],
@@ -11054,7 +11154,7 @@ log_tat(ns_client_t *client) {
}
if ((client->query.qtype != dns_rdatatype_null ||
- !dns_name_istat(client->query.qname)) &&
+ !dns_name_istat(dns_linkedname_name(client->query.qname))) &&
(client->inner.keytag == NULL ||
client->query.qtype != dns_rdatatype_dnskey))
{
@@ -11062,7 +11162,8 @@ log_tat(ns_client_t *client) {
}
isc_netaddr_fromsockaddr(&netaddr, &client->inner.peeraddr);
- dns_name_format(client->query.qname, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(client->query.qname), namebuf,
+ sizeof(namebuf));
isc_netaddr_format(&netaddr, clientbuf, sizeof(clientbuf));
dns_rdataclass_format(client->inner.view->rdclass, classbuf,
sizeof(classbuf));
@@ -11117,7 +11218,8 @@ log_query(ns_client_t *client, unsigned int flags, unsigned int extflags) {
rdataset = ISC_LIST_HEAD(client->query.qname->list);
INSIST(rdataset != NULL);
- dns_name_format(client->query.qname, namebuf, sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(client->query.qname), namebuf,
+ sizeof(namebuf));
dns_rdataclass_format(rdataset->rdclass, classbuf, sizeof(classbuf));
dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
isc_sockaddr_format(&client->inner.destsockaddr, sabuf, sizeof(sabuf));
@@ -11153,8 +11255,8 @@ log_queryerror(ns_client_t *client, isc_result_t result, int line, int level) {
* expect exceptional cases.
*/
if (client->query.origqname != NULL) {
- dns_name_format(client->query.origqname, namebuf,
- sizeof(namebuf));
+ dns_name_format(dns_linkedname_name(client->query.origqname),
+ namebuf, sizeof(namebuf));
namep = namebuf;
sep1 = " for ";
diff --git a/lib/ns/update.c b/lib/ns/update.c
index a33e5a764f..2891144431 100644
--- a/lib/ns/update.c
+++ b/lib/ns/update.c
@@ -1474,8 +1474,9 @@ add_rr_prepare_action(void *data, rr_t *rr) {
* 'rdata', and 'ttl', respectively.
*/
static void
-get_current_rr(dns_name_t *name, dns_rdata_t *rdata, dns_rdatatype_t *covers,
- dns_ttl_t *ttl, dns_rdataclass_t *update_class) {
+get_current_rr(dns_linkedname_t *name, dns_rdata_t *rdata,
+ dns_rdatatype_t *covers, dns_ttl_t *ttl,
+ dns_rdataclass_t *update_class) {
dns_rdataset_t *rdataset;
isc_result_t result;
rdataset = ISC_LIST_HEAD(name->list);
@@ -1649,7 +1650,8 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
INSIST(ssutable == NULL || update < maxbytypelen);
get_current_rr(name, &rdata, &covers, &ttl, &update_class);
- if (!dns_name_issubdomain(name, zonename)) {
+ if (!dns_name_issubdomain(dns_linkedname_name(name), zonename))
+ {
FAILC(DNS_R_NOTZONE, "update RR is outside zone");
}
if (update_class == dns_rdataclass_in) {
@@ -1661,7 +1663,8 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
if (dns_rdatatype_ismeta(rdata.type)) {
FAILC(DNS_R_FORMERR, "meta-RR in update");
}
- result = dns_zone_checknames(zone, name, &rdata);
+ result = dns_zone_checknames(
+ zone, dns_linkedname_name(name), &rdata);
if (result != ISC_R_SUCCESS) {
CLEANUP(DNS_R_REFUSED);
}
@@ -1669,12 +1672,14 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
rdata.rdclass == dns_rdataclass_in &&
rdata.type == dns_rdatatype_svcb)
{
- result = dns_rdata_checksvcb(name, &rdata);
+ result = dns_rdata_checksvcb(
+ dns_linkedname_name(name), &rdata);
if (result != ISC_R_SUCCESS) {
const char *reason =
isc_result_totext(result);
- FAILNT(DNS_R_REFUSED, name, rdata.type,
- reason);
+ FAILNT(DNS_R_REFUSED,
+ dns_linkedname_name(name),
+ rdata.type, reason);
}
}
} else if (update_class == dns_rdataclass_any) {
@@ -1707,7 +1712,7 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
FAILC(DNS_R_REFUSED, "explicit NSEC updates are not "
"allowed in secure zones");
} else if (rdata.type == dns_rdatatype_rrsig &&
- !dns_name_equal(name, zonename))
+ !dns_name_equal(dns_linkedname_name(name), zonename))
{
FAILC(DNS_R_REFUSED,
"explicit RRSIG updates are currently not "
@@ -1754,7 +1759,7 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
{
ssu_check_t ssuinfo;
- ssuinfo.name = name;
+ ssuinfo.name = dns_linkedname_name(name);
ssuinfo.table = ssutable;
ssuinfo.signer = client->inner.signer;
ssuinfo.addr = &netaddr;
@@ -1762,9 +1767,10 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
ssuinfo.tcp = client->inner.tcp;
ssuinfo.key = tsigkey;
- result = foreach_rr(db, ver, name, rdata.type,
- dns_rdatatype_none,
- ssu_checkrr, &ssuinfo);
+ result = foreach_rr(
+ db, ver, dns_linkedname_name(name),
+ rdata.type, dns_rdatatype_none,
+ ssu_checkrr, &ssuinfo);
if (result != ISC_R_SUCCESS) {
FAILC(DNS_R_REFUSED,
"rejected by secure update");
@@ -1773,13 +1779,15 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
update_class == dns_rdataclass_none)
{
bool flag;
- CHECK(rr_exists(db, ver, name, &rdata, &flag));
+ CHECK(rr_exists(db, ver,
+ dns_linkedname_name(name),
+ &rdata, &flag));
if (flag &&
!dns_ssutable_checkrules(
ssutable, client->inner.signer,
- name, &netaddr, client->inner.tcp,
- env, rdata.type, target, tsigkey,
- NULL))
+ dns_linkedname_name(name), &netaddr,
+ client->inner.tcp, env, rdata.type,
+ target, tsigkey, NULL))
{
FAILC(DNS_R_REFUSED,
"rejected by secure update");
@@ -1788,9 +1796,9 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
const dns_ssurule_t *ssurule = NULL;
if (!dns_ssutable_checkrules(
ssutable, client->inner.signer,
- name, &netaddr, client->inner.tcp,
- env, rdata.type, target, tsigkey,
- &ssurule))
+ dns_linkedname_name(name), &netaddr,
+ client->inner.tcp, env, rdata.type,
+ target, tsigkey, &ssurule))
{
FAILC(DNS_R_REFUSED,
"rejected by secure update");
@@ -1798,10 +1806,11 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
maxbytype[update] = dns_ssurule_max(ssurule,
rdata.type);
} else {
- if (!ssu_checkall(db, ver, name, ssutable,
- client->inner.signer,
- &netaddr, env,
- client->inner.tcp, tsigkey))
+ if (!ssu_checkall(
+ db, ver, dns_linkedname_name(name),
+ ssutable, client->inner.signer,
+ &netaddr, env, client->inner.tcp,
+ tsigkey))
{
FAILC(DNS_R_REFUSED,
"rejected by secure update");
@@ -1878,7 +1887,7 @@ ns_update_start(ns_client_t *client, isc_nmhandle_t *handle,
isc_result_t sigresult) {
dns_message_t *request = client->message;
isc_result_t result;
- dns_name_t *zonename;
+ dns_linkedname_t *zonename;
dns_rdataset_t *zone_rdataset;
dns_zone_t *zone = NULL, *raw = NULL;
@@ -1916,10 +1925,11 @@ ns_update_start(ns_client_t *client, isc_nmhandle_t *handle,
"update zone section contains multiple RRs");
}
- result = dns_view_findzone(client->inner.view, zonename,
+ result = dns_view_findzone(client->inner.view,
+ dns_linkedname_name(zonename),
DNS_ZTFIND_EXACT, &zone);
if (result != ISC_R_SUCCESS) {
- FAILN(DNS_R_NOTAUTH, zonename,
+ FAILN(DNS_R_NOTAUTH, dns_linkedname_name(zonename),
"not authoritative for update zone");
}
@@ -2699,8 +2709,9 @@ update_action(void *arg) {
"prerequisite TTL is not zero");
}
- if (!dns_name_issubdomain(name, zonename)) {
- PREREQFAILN(DNS_R_NOTZONE, name,
+ if (!dns_name_issubdomain(dns_linkedname_name(name), zonename))
+ {
+ PREREQFAILN(DNS_R_NOTZONE, dns_linkedname_name(name),
"prerequisite name is out of zone");
}
@@ -2711,20 +2722,26 @@ update_action(void *arg) {
"not empty");
}
if (rdata.type == dns_rdatatype_any) {
- CHECK(name_exists(db, ver, name, &flag));
+ CHECK(name_exists(db, ver,
+ dns_linkedname_name(name),
+ &flag));
if (!flag) {
PREREQFAILN(
- DNS_R_NXDOMAIN, name,
+ DNS_R_NXDOMAIN,
+ dns_linkedname_name(name),
"'name in use' prerequisite "
"not satisfied");
}
} else {
- CHECK(rrset_exists(db, ver, name, rdata.type,
- covers, &flag));
+ CHECK(rrset_exists(db, ver,
+ dns_linkedname_name(name),
+ rdata.type, covers, &flag));
if (!flag) {
/* RRset does not exist. */
PREREQFAILNT(
- DNS_R_NXRRSET, name, rdata.type,
+ DNS_R_NXRRSET,
+ dns_linkedname_name(name),
+ rdata.type,
"'rrset exists (value "
"independent)' prerequisite "
"not satisfied");
@@ -2737,27 +2754,33 @@ update_action(void *arg) {
"not empty");
}
if (rdata.type == dns_rdatatype_any) {
- CHECK(name_exists(db, ver, name, &flag));
+ CHECK(name_exists(db, ver,
+ dns_linkedname_name(name),
+ &flag));
if (flag) {
PREREQFAILN(
- DNS_R_YXDOMAIN, name,
+ DNS_R_YXDOMAIN,
+ dns_linkedname_name(name),
"'name not in use' "
"prerequisite not satisfied");
}
} else {
- CHECK(rrset_exists(db, ver, name, rdata.type,
- covers, &flag));
+ CHECK(rrset_exists(db, ver,
+ dns_linkedname_name(name),
+ rdata.type, covers, &flag));
if (flag) {
/* RRset exists. */
PREREQFAILNT(
- DNS_R_YXRRSET, name, rdata.type,
+ DNS_R_YXRRSET,
+ dns_linkedname_name(name),
+ rdata.type,
"'rrset does not exist' "
"prerequisite not satisfied");
}
}
} else if (update_class == dns_rdataclass_in) {
/* "temp<rr.name, rr.type> += rr;" */
- temp_append(&temp, name, &rdata);
+ temp_append(&temp, dns_linkedname_name(name), &rdata);
} else {
PREREQFAILC(DNS_R_FORMERR, "malformed prerequisite");
}
@@ -2826,7 +2849,7 @@ update_action(void *arg) {
}
if ((rdata.type == dns_rdatatype_ns ||
rdata.type == dns_rdatatype_dname) &&
- dns_name_iswildcard(name))
+ dns_name_iswildcard(dns_linkedname_name(name)))
{
char typebuf[DNS_RDATATYPE_FORMATSIZE];
@@ -2840,7 +2863,8 @@ update_action(void *arg) {
}
if (rdata.type == dns_rdatatype_cname) {
CHECK(cname_incompatible_rrset_exists(
- db, ver, name, &flag));
+ db, ver, dns_linkedname_name(name),
+ &flag));
if (flag) {
update_log(
client, zone, LOGLEVEL_PROTOCOL,
@@ -2849,7 +2873,8 @@ update_action(void *arg) {
continue;
}
} else {
- CHECK(rrset_exists(db, ver, name,
+ CHECK(rrset_exists(db, ver,
+ dns_linkedname_name(name),
dns_rdatatype_cname,
dns_rdatatype_none, &flag));
if (flag && !dns_rdatatype_atcname(rdata.type))
@@ -2863,7 +2888,8 @@ update_action(void *arg) {
}
if (rdata.type == dns_rdatatype_soa) {
bool ok;
- CHECK(rrset_exists(db, ver, name,
+ CHECK(rrset_exists(db, ver,
+ dns_linkedname_name(name),
dns_rdatatype_soa,
dns_rdatatype_none, &flag));
if (!flag) {
@@ -2887,7 +2913,7 @@ update_action(void *arg) {
}
if (dns_rdatatype_atparent(rdata.type) &&
- dns_name_equal(name, zonename))
+ dns_name_equal(dns_linkedname_name(name), zonename))
{
char typebuf[DNS_RDATATYPE_FORMATSIZE];
@@ -2925,10 +2951,12 @@ update_action(void *arg) {
}
if ((options & DNS_ZONEOPT_CHECKWILDCARD) != 0 &&
- dns_name_internalwildcard(name))
+ dns_name_internalwildcard(
+ dns_linkedname_name(name)))
{
char namestr[DNS_NAME_FORMATSIZE];
- dns_name_format(name, namestr, sizeof(namestr));
+ dns_name_format(dns_linkedname_name(name),
+ namestr, sizeof(namestr));
update_log(client, zone, LOGLEVEL_PROTOCOL,
"warning: ownername '%s' contains a "
"non-terminal wildcard",
@@ -2949,8 +2977,10 @@ update_action(void *arg) {
if (maxbytype != NULL && maxbytype[maxidx] != 0) {
unsigned int count = 0;
- CHECK(foreach_rr(db, ver, name, rdata.type,
- covers, count_action, &count));
+ CHECK(foreach_rr(db, ver,
+ dns_linkedname_name(name),
+ rdata.type, covers,
+ count_action, &count));
if (count >= maxbytype[maxidx]) {
update_log(client, zone,
LOGLEVEL_PROTOCOL,
@@ -2970,7 +3000,8 @@ update_action(void *arg) {
int len = 0;
const char *truncated = "";
- dns_name_format(name, namestr, sizeof(namestr));
+ dns_name_format(dns_linkedname_name(name),
+ namestr, sizeof(namestr));
dns_rdatatype_format(rdata.type, typestr,
sizeof(typestr));
isc_buffer_init(&buf, rdstr, sizeof(rdstr));
@@ -3000,16 +3031,17 @@ update_action(void *arg) {
ctx.db = db;
ctx.ver = ver;
ctx.diff = &diff;
- ctx.name = name;
- ctx.oldname = name;
+ ctx.name = dns_linkedname_name(name);
+ ctx.oldname = dns_linkedname_name(name);
ctx.update_rr = &rdata;
ctx.update_rr_ttl = ttl;
ctx.ignore_add = false;
dns_diff_init(mctx, &ctx.del_diff);
dns_diff_init(mctx, &ctx.add_diff);
- CHECK(foreach_rr(db, ver, name, rdata.type,
- covers, add_rr_prepare_action,
- &ctx));
+ CHECK(foreach_rr(db, ver,
+ dns_linkedname_name(name),
+ rdata.type, covers,
+ add_rr_prepare_action, &ctx));
if (ctx.ignore_add) {
dns_diff_clear(&ctx.del_diff);
@@ -3029,7 +3061,8 @@ update_action(void *arg) {
}
result = update_one_rr(
db, ver, &diff, DNS_DIFFOP_ADD,
- name, ttl, &rdata);
+ dns_linkedname_name(name), ttl,
+ &rdata);
if (result != ISC_R_SUCCESS) {
update_log(client, zone,
LOGLEVEL_PROTOCOL,
@@ -3045,39 +3078,48 @@ update_action(void *arg) {
if (rdata.type == dns_rdatatype_any) {
if (isc_log_wouldlog(LOGLEVEL_PROTOCOL)) {
char namestr[DNS_NAME_FORMATSIZE];
- dns_name_format(name, namestr,
- sizeof(namestr));
+ dns_name_format(
+ dns_linkedname_name(name),
+ namestr, sizeof(namestr));
update_log(client, zone,
LOGLEVEL_PROTOCOL,
"delete all rrsets from "
"name '%s'",
namestr);
}
- if (dns_name_equal(name, zonename)) {
+ if (dns_name_equal(dns_linkedname_name(name),
+ zonename))
+ {
CHECK(delete_if(
apex_special_processing_any,
- zone, db, ver, name,
+ zone, db, ver,
+ dns_linkedname_name(name),
dns_rdatatype_any,
dns_rdatatype_none, &rdata,
&diff));
} else {
- CHECK(delete_if(type_not_dnssec, zone,
- db, ver, name,
- dns_rdatatype_any,
- dns_rdatatype_none,
- &rdata, &diff));
+ CHECK(delete_if(
+ type_not_dnssec, zone, db, ver,
+ dns_linkedname_name(name),
+ dns_rdatatype_any,
+ dns_rdatatype_none, &rdata,
+ &diff));
}
- } else if (dns_name_equal(name, zonename)) {
+ } else if (dns_name_equal(dns_linkedname_name(name),
+ zonename))
+ {
CHECK(delete_if(
apex_special_processing, zone, db, ver,
- name, dns_rdatatype_any,
- dns_rdatatype_none, &rdata, &diff));
+ dns_linkedname_name(name),
+ dns_rdatatype_any, dns_rdatatype_none,
+ &rdata, &diff));
} else {
if (isc_log_wouldlog(LOGLEVEL_PROTOCOL)) {
char namestr[DNS_NAME_FORMATSIZE];
char typestr[DNS_RDATATYPE_FORMATSIZE];
- dns_name_format(name, namestr,
- sizeof(namestr));
+ dns_name_format(
+ dns_linkedname_name(name),
+ namestr, sizeof(namestr));
dns_rdatatype_format(rdata.type,
typestr,
sizeof(typestr));
@@ -3086,7 +3128,8 @@ update_action(void *arg) {
"deleting rrset at '%s' %s",
namestr, typestr);
}
- CHECK(delete_if(true_p, zone, db, ver, name,
+ CHECK(delete_if(true_p, zone, db, ver,
+ dns_linkedname_name(name),
rdata.type, covers, &rdata,
&diff));
}
@@ -3098,7 +3141,8 @@ update_action(void *arg) {
* The (name == zonename) condition appears in
* RFC2136 3.4.2.4 but is missing from the pseudocode.
*/
- if (dns_name_equal(name, zonename)) {
+ if (dns_name_equal(dns_linkedname_name(name), zonename))
+ {
if (rdata.type == dns_rdatatype_soa) {
update_log(client, zone,
LOGLEVEL_PROTOCOL,
@@ -3109,7 +3153,9 @@ update_action(void *arg) {
if (rdata.type == dns_rdatatype_ns) {
int count;
CHECK(rr_count(
- db, ver, name, dns_rdatatype_ns,
+ db, ver,
+ dns_linkedname_name(name),
+ dns_rdatatype_ns,
dns_rdatatype_none, &count));
if (count == 1) {
update_log(client, zone,
@@ -3143,13 +3189,15 @@ update_action(void *arg) {
}
}
}
- dns_name_format(name, namestr, sizeof(namestr));
+ dns_name_format(dns_linkedname_name(name), namestr,
+ sizeof(namestr));
dns_rdatatype_format(rdata.type, typestr,
sizeof(typestr));
update_log(client, zone, LOGLEVEL_PROTOCOL,
"deleting an RR at %s %s", namestr, typestr);
- CHECK(delete_if(rr_equal_p, zone, db, ver, name,
- rdata.type, covers, &rdata, &diff));
+ CHECK(delete_if(rr_equal_p, zone, db, ver,
+ dns_linkedname_name(name), rdata.type,
+ covers, &rdata, &diff));
}
}
diff --git a/lib/ns/xfrout.c b/lib/ns/xfrout.c
index bed279b3ec..3676cb1067 100644
--- a/lib/ns/xfrout.c
+++ b/lib/ns/xfrout.c
@@ -90,7 +90,8 @@
char _buf1[DNS_NAME_FORMATSIZE]; \
char _buf2[DNS_RDATACLASS_FORMATSIZE]; \
result = (code); \
- dns_name_format(question, _buf1, sizeof(_buf1)); \
+ dns_name_format(dns_linkedname_name(question), _buf1, \
+ sizeof(_buf1)); \
dns_rdataclass_format(rdclass, _buf2, sizeof(_buf2)); \
ns_client_log(client, DNS_LOGCATEGORY_XFER_OUT, \
NS_LOGMODULE_XFER_OUT, ISC_LOG_INFO, \
@@ -712,7 +713,7 @@ xfrout_delayed_timeout(void *arg, isc_result_t result);
void
ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
isc_result_t result;
- dns_name_t *question_name;
+ dns_linkedname_t *question_name;
dns_rdataset_t *question_rdataset;
dns_zone_t *zone = NULL, *raw = NULL, *mayberaw;
dns_db_t *db = NULL;
@@ -777,7 +778,8 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
FAILC(DNS_R_FORMERR, "multiple questions");
}
- result = dns_view_findzone(client->inner.view, question_name,
+ result = dns_view_findzone(client->inner.view,
+ dns_linkedname_name(question_name),
DNS_ZTFIND_EXACT, &zone);
if (result != ISC_R_SUCCESS || dns_zone_gettype(zone) == dns_zone_dlz) {
/*
@@ -787,7 +789,8 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
*/
if (!ISC_LIST_EMPTY(client->inner.view->dlz_searched)) {
result = dns_dlzallowzonexfr(
- client->inner.view, question_name,
+ client->inner.view,
+ dns_linkedname_name(question_name),
&client->inner.peeraddr, &db);
if (result == ISC_R_DEFAULT) {
useviewacl = true;
@@ -798,8 +801,9 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
char _buf2[DNS_RDATACLASS_FORMATSIZE];
result = DNS_R_REFUSED;
- dns_name_format(question_name, _buf1,
- sizeof(_buf1));
+ dns_name_format(
+ dns_linkedname_name(question_name),
+ _buf1, sizeof(_buf1));
dns_rdataclass_format(question_class, _buf2,
sizeof(_buf2));
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
@@ -841,8 +845,8 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
dns_db_currentversion(db, &ver);
}
- xfrout_log1(client, question_name, question_class, ISC_LOG_DEBUG(6),
- "%s question section OK", mnemonic);
+ xfrout_log1(client, dns_linkedname_name(question_name), question_class,
+ ISC_LOG_DEBUG(6), "%s question section OK", mnemonic);
/*
* Check the authority section. Look for a SOA record with
@@ -852,7 +856,9 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
/*
* Ignore data whose owner name is not the zone apex.
*/
- if (!dns_name_equal(soa_name, question_name)) {
+ if (!dns_name_equal(dns_linkedname_name(soa_name),
+ dns_linkedname_name(question_name)))
+ {
continue;
}
@@ -883,8 +889,8 @@ got_soa:
CHECK(result);
}
- xfrout_log1(client, question_name, question_class, ISC_LOG_DEBUG(6),
- "%s authority section OK", mnemonic);
+ xfrout_log1(client, dns_linkedname_name(question_name), question_class,
+ ISC_LOG_DEBUG(6), "%s authority section OK", mnemonic);
/*
* If not a DLZ zone or we are falling back to the view's transfer
@@ -893,7 +899,8 @@ got_soa:
if (!is_dlz || useviewacl) {
dns_acl_t *acl;
- ns_client_aclmsg("zone transfer", question_name, reqtype,
+ ns_client_aclmsg("zone transfer",
+ dns_linkedname_name(question_name), reqtype,
client->inner.view->rdclass, msg, sizeof(msg));
if (useviewacl) {
acl = client->inner.view->transferacl;
@@ -990,7 +997,8 @@ got_soa:
&provide_ixfr);
}
if (!provide_ixfr) {
- xfrout_log1(client, question_name,
+ xfrout_log1(client,
+ dns_linkedname_name(question_name),
question_class, ISC_LOG_DEBUG(4),
"IXFR delta response disabled due "
"to 'provide-ixfr no;' being set");
@@ -1008,8 +1016,8 @@ got_soa:
result = ISC_R_NOTFOUND;
}
if (result == ISC_R_NOTFOUND || result == ISC_R_RANGE) {
- xfrout_log1(client, question_name, question_class,
- ISC_LOG_INFO,
+ xfrout_log1(client, dns_linkedname_name(question_name),
+ question_class, ISC_LOG_INFO,
"IXFR version not in journal, "
"falling back to AXFR (serial %u)",
begin_serial);
@@ -1024,7 +1032,8 @@ got_soa:
if (ratio != 0 && ((100 * jsize) / dbsize) > ratio) {
data_stream->methods->destroy(&data_stream);
data_stream = NULL;
- xfrout_log1(client, question_name,
+ xfrout_log1(client,
+ dns_linkedname_name(question_name),
question_class, ISC_LOG_INFO,
"IXFR delta size (%zu bytes) "
"exceeds the maximum ratio to "
@@ -1035,7 +1044,8 @@ got_soa:
mnemonic = "AXFR-style IXFR";
goto axfr_fallback;
} else {
- xfrout_log1(client, question_name,
+ xfrout_log1(client,
+ dns_linkedname_name(question_name),
question_class, ISC_LOG_DEBUG(4),
"IXFR delta size (%zu bytes); "
"database size "
@@ -1066,15 +1076,17 @@ have_stream:
*/
if (is_dlz) {
- xfrout_ctx_create(mctx, client, request->id, question_name,
- reqtype, question_class, zone, db, ver,
- stream, dns_message_gettsigkey(request),
- tsigbuf, request->verified_sig, 3600, 3600,
+ xfrout_ctx_create(mctx, client, request->id,
+ dns_linkedname_name(question_name), reqtype,
+ question_class, zone, db, ver, stream,
+ dns_message_gettsigkey(request), tsigbuf,
+ request->verified_sig, 3600, 3600,
(format == dns_many_answers) ? true : false,
&xfr);
} else {
xfrout_ctx_create(
- mctx, client, request->id, question_name, reqtype,
+ mctx, client, request->id,
+ dns_linkedname_name(question_name), reqtype,
question_class, zone, db, ver, stream,
dns_message_gettsigkey(request), tsigbuf,
request->verified_sig, dns_zone_getmaxxfrout(zone),
@@ -1096,16 +1108,19 @@ have_stream:
xfr->poll = is_poll;
if (is_poll) {
xfr->mnemonic = "IXFR poll response";
- xfrout_log1(client, question_name, question_class,
- ISC_LOG_DEBUG(1), "IXFR poll up to date%s%s",
+ xfrout_log1(client, dns_linkedname_name(question_name),
+ question_class, ISC_LOG_DEBUG(1),
+ "IXFR poll up to date%s%s",
(xfr->tsigkey != NULL) ? ": TSIG " : "", keyname);
} else if (is_ixfr) {
- xfrout_log1(client, question_name, question_class, ISC_LOG_INFO,
+ xfrout_log1(client, dns_linkedname_name(question_name),
+ question_class, ISC_LOG_INFO,
"%s started%s%s (serial %u -> %u)", mnemonic,
(xfr->tsigkey != NULL) ? ": TSIG " : "", keyname,
begin_serial, current_serial);
} else {
- xfrout_log1(client, question_name, question_class, ISC_LOG_INFO,
+ xfrout_log1(client, dns_linkedname_name(question_name),
+ question_class, ISC_LOG_INFO,
"%s started%s%s (serial %u)", mnemonic,
(xfr->tsigkey != NULL) ? ": TSIG " : "", keyname,
current_serial);
@@ -1354,7 +1369,7 @@ sendstream(xfrout_ctx_t *xfr) {
dns_message_t *msg = NULL; /* Client message if UDP, tcpmsg if TCP */
isc_result_t result;
dns_rdataset_t *qrdataset;
- dns_name_t *msgname = NULL;
+ dns_linkedname_t *msgname = NULL;
dns_rdata_t *msgrdata = NULL;
dns_rdatalist_t *msgrdl = NULL;
dns_rdataset_t *msgrds = NULL;
@@ -1426,7 +1441,7 @@ sendstream(xfrout_ctx_t *xfr) {
* have a question section.
*/
if (!xfr->question_added) {
- dns_name_t *qname = NULL;
+ dns_linkedname_t *qname = NULL;
isc_region_t r;
/*
@@ -1447,7 +1462,7 @@ sendstream(xfrout_ctx_t *xfr) {
r.length = xfr->qname->length;
isc_buffer_putmem(&xfr->buf, xfr->qname->ndata,
xfr->qname->length);
- dns_name_fromregion(qname, &r);
+ dns_name_fromregion(dns_linkedname_name(qname), &r);
ISC_LIST_INIT(qname->list);
ISC_LIST_APPEND(qname->list, qrdataset, link);
@@ -1515,7 +1530,7 @@ sendstream(xfrout_ctx_t *xfr) {
INSIST(r.length >= name->length);
r.length = name->length;
isc_buffer_putmem(&xfr->buf, name->ndata, name->length);
- dns_name_fromregion(msgname, &r);
+ dns_name_fromregion(dns_linkedname_name(msgname), &r);
/* Reserve space for RR header. */
isc_buffer_add(&xfr->buf, 10);
diff --git a/tests/bench/load-names.c b/tests/bench/load-names.c
index 8c437df575..79296cfeaf 100644
--- a/tests/bench/load-names.c
+++ b/tests/bench/load-names.c
@@ -66,8 +66,9 @@ static size_t
item_makekey(dns_qpkey_t key, void *ctx, void *pval, uint32_t ival) {
UNUSED(ctx);
assert(pval == &item[ival]);
- return dns_qpkey_fromname(key, &item[ival].fixed.name,
- DNS_DBNAMESPACE_NORMAL);
+ return dns_qpkey_fromname(
+ key, dns_linkedname_name(&item[ival].fixed.name_wl),
+ DNS_DBNAMESPACE_NORMAL);
}
static void
@@ -83,16 +84,17 @@ const dns_qpmethods_t qpmethods = {
testname,
};
-#define CHECKN(count, result) \
- do { \
- if (result != ISC_R_SUCCESS) { \
- dns_name_t *name = &item[count].fixed.name; \
- char buf[DNS_NAME_MAXTEXT] = { 0 }; \
- dns_name_format(name, buf, sizeof(buf)); \
- fprintf(stderr, "%s: %s\n", buf, \
- isc_result_totext(result)); \
- exit(EXIT_FAILURE); \
- } \
+#define CHECKN(count, result) \
+ do { \
+ if (result != ISC_R_SUCCESS) { \
+ dns_name_t *name = dns_linkedname_name( \
+ &item[count].fixed.name_wl); \
+ char buf[DNS_NAME_MAXTEXT] = { 0 }; \
+ dns_name_format(name, buf, sizeof(buf)); \
+ fprintf(stderr, "%s: %s\n", buf, \
+ isc_result_totext(result)); \
+ exit(EXIT_FAILURE); \
+ } \
} while (0)
struct fun {
@@ -118,15 +120,18 @@ lfht_match(struct cds_lfht_node *ht_node, const void *_key) {
ht_node);
const dns_name_t *key = _key;
- return dns_name_equal(key, &i->fixed.name);
+ return dns_name_equal(key,
+ dns_linkedname_name_const(&i->fixed.name_wl));
}
static isc_result_t
add_lfht(void *lfht, size_t count) {
- unsigned long hash = dns_name_hash(&item[count].fixed.name);
+ unsigned long hash =
+ dns_name_hash(dns_linkedname_name(&item[count].fixed.name_wl));
struct cds_lfht_node *ht_node = cds_lfht_add_unique(
- lfht, hash, lfht_match, &item[count].fixed.name,
+ lfht, hash, lfht_match,
+ dns_linkedname_name(&item[count].fixed.name_wl),
&item[count].ht_node);
if (ht_node != &item[count].ht_node) {
@@ -138,10 +143,12 @@ add_lfht(void *lfht, size_t count) {
static isc_result_t
get_lfht(void *lfht, size_t count, void **pval) {
- unsigned long hash = dns_name_hash(&item[count].fixed.name);
+ unsigned long hash =
+ dns_name_hash(dns_linkedname_name(&item[count].fixed.name_wl));
struct cds_lfht_iter iter;
- cds_lfht_lookup(lfht, hash, lfht_match, &item[count].fixed.name, &iter);
+ cds_lfht_lookup(lfht, hash, lfht_match,
+ dns_linkedname_name(&item[count].fixed.name_wl), &iter);
struct cds_lfht_node *ht_node = cds_lfht_iter_get_node(&iter);
if (ht_node == NULL) {
@@ -195,22 +202,27 @@ new_hashmap(isc_mem_t *mem) {
static bool
name_match(void *node, const void *key) {
const struct item_s *i = node;
- return dns_name_equal(&i->fixed.name, key);
+ return dns_name_equal(dns_linkedname_name_const(&i->fixed.name_wl),
+ key);
}
static isc_result_t
add_hashmap(void *hashmap, size_t count) {
isc_result_t result = isc_hashmap_add(
- hashmap, dns_name_hash(&item[count].fixed.name), name_match,
- &item[count].fixed.name, &item[count], NULL);
+ hashmap,
+ dns_name_hash(dns_linkedname_name(&item[count].fixed.name_wl)),
+ name_match, dns_linkedname_name(&item[count].fixed.name_wl),
+ &item[count], NULL);
return result;
}
static isc_result_t
get_hashmap(void *hashmap, size_t count, void **pval) {
isc_result_t result = isc_hashmap_find(
- hashmap, dns_name_hash(&item[count].fixed.name), name_match,
- &item[count].fixed.name, pval);
+ hashmap,
+ dns_name_hash(dns_linkedname_name(&item[count].fixed.name_wl)),
+ name_match, dns_linkedname_name(&item[count].fixed.name_wl),
+ pval);
return result;
}
@@ -258,16 +270,16 @@ new_ht(isc_mem_t *mem) {
static isc_result_t
add_ht(void *ht, size_t count) {
- isc_result_t result = isc_ht_add(ht, item[count].fixed.name.ndata,
- item[count].fixed.name.length,
+ dns_name_t *name = dns_fixedname_name(&item[count].fixed);
+ isc_result_t result = isc_ht_add(ht, name->ndata, name->length,
&item[count]);
return result;
}
static isc_result_t
get_ht(void *ht, size_t count, void **pval) {
- isc_result_t result = isc_ht_find(ht, item[count].fixed.name.ndata,
- item[count].fixed.name.length, pval);
+ dns_name_t *name = dns_fixedname_name(&item[count].fixed);
+ isc_result_t result = isc_ht_find(ht, name->ndata, name->length, pval);
return result;
}
@@ -326,7 +338,8 @@ sqz_qp(void *qp) {
static isc_result_t
get_qp(void *qp, size_t count, void **pval) {
- return dns_qp_getname(qp, &item[count].fixed.name,
+ return dns_qp_getname(qp,
+ dns_linkedname_name(&item[count].fixed.name_wl),
DNS_DBNAMESPACE_NORMAL, pval, NULL);
}
diff --git a/tests/dns/qpzone_test.c b/tests/dns/qpzone_test.c
index 89d273a94f..1c8d15288d 100644
--- a/tests/dns/qpzone_test.c
+++ b/tests/dns/qpzone_test.c
@@ -157,7 +157,9 @@ static dns_rdata_rrsig_t rrsig_test_data1 = {
.timeexpire = 1695820800,
.timesigned = 1695744000,
.keyid = 0x1234,
- .signer = DNS_NAME_INITABSOLUTE(example_org_data),
+ .signer = { .name = DNS_NAME_INITABSOLUTE(example_org_data),
+ .link = ISC_LINK_INITIALIZER,
+ .list = ISC_LIST_INITIALIZER },
.siglen = 64,
.signature = rrsig_signature1,
};
@@ -172,7 +174,9 @@ static dns_rdata_rrsig_t rrsig_test_data2 = {
.timeexpire = 1695820800,
.timesigned = 1695744000,
.keyid = 0x5678,
- .signer = DNS_NAME_INITABSOLUTE(example_org_data),
+ .signer = { .name = DNS_NAME_INITABSOLUTE(example_org_data),
+ .link = ISC_LINK_INITIALIZER,
+ .list = ISC_LIST_INITIALIZER },
.siglen = 64,
.signature = rrsig_signature2,
};
diff --git a/tests/libtest/ns.c b/tests/libtest/ns.c
index f93025326a..9df5ecf739 100644
--- a/tests/libtest/ns.c
+++ b/tests/libtest/ns.c
@@ -249,7 +249,7 @@ attach_query_msg_to_client(ns_client_t *client, const char *qnamestr,
dns_rdataset_t *qrdataset = NULL;
dns_message_t *message = NULL;
unsigned char query[65535];
- dns_name_t *qname = NULL;
+ dns_linkedname_t *qname = NULL;
isc_buffer_t querybuf;
dns_compress_t cctx;
isc_result_t result;
@@ -284,8 +284,8 @@ attach_query_msg_to_client(ns_client_t *client, const char *qnamestr,
* class IN and type "qtype", link the two and add the result to the
* QUESTION section of the query.
*/
- result = dns_name_fromstring(qname, qnamestr, dns_rootname, 0,
- isc_g_mctx);
+ result = dns_name_fromstring(dns_linkedname_name(qname), qnamestr,
+ dns_rootname, 0, isc_g_mctx);
if (result != ISC_R_SUCCESS) {
goto put_name;
}