mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Add additional processing to HTTPS and SVBC records
The additional processing method has been expanded to take the owner name of the record, as HTTPS and SVBC need it to process "." in service form. The additional section callback can now return the RRset that was added. We use this when adding CNAMEs. Previously, the recursion would stop if it detected that a record you added already exists. With CNAMEs this rule doesn't work, as you ultimately care about the RRset at the target of the CNAME and not the presence of the CNAME itself. Returning the record allows the caller to restart with the target name. As CNAMEs can form loops, loop protection was added. As HTTPS and SVBC can produce infinite chains, we prevent this by tracking recursion depth and stopping if we go too deep.
This commit is contained in:
parent
baaa5492ee
commit
cd985d96e3
101 changed files with 349 additions and 80 deletions
|
|
@ -13,6 +13,17 @@ $TTL 600
|
|||
@ IN MX 0 mail
|
||||
ns IN A 10.53.0.6
|
||||
mail IN A 10.53.0.6
|
||||
www IN HTTPS 0 http-server
|
||||
http-server IN A 10.53.0.6
|
||||
https-loop IN HTTPS 0 https-next
|
||||
https-loop IN A 10.53.0.6
|
||||
https-next IN HTTPS 0 https-loop
|
||||
https-next IN A 10.53.0.7
|
||||
https-cname IN HTTPS 0 cname-server
|
||||
cname-server IN CNAME cname-next
|
||||
cname-next IN CNAME http-server
|
||||
https-cname-loop IN HTTPS 0 https-cname-loop0
|
||||
https-cname-loop0 IN CNAME https-cname-loop0
|
||||
fetch 10 IN TXT A short ttl
|
||||
non-zero 10 IN TXT A short ttl
|
||||
zero 0 IN TXT A zero ttl
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ options {
|
|||
* has a exclude list.
|
||||
*/
|
||||
root-delegation-only exclude { "a"; };
|
||||
max-udp-size 4096;
|
||||
};
|
||||
|
||||
zone "." {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ options {
|
|||
*/
|
||||
prefetch 0;
|
||||
querylog yes;
|
||||
edns-udp-size 4096;
|
||||
};
|
||||
|
||||
key rndc_key {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ options {
|
|||
*/
|
||||
prefetch 0;
|
||||
querylog yes;
|
||||
edns-udp-size 4096;
|
||||
};
|
||||
|
||||
key rndc_key {
|
||||
|
|
|
|||
|
|
@ -845,5 +845,49 @@ grep "status: NXDOMAIN" dig.ns1.out.${n} > /dev/null || ret=1
|
|||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
n=`expr $n + 1`
|
||||
echo_i "check that the addition section for HTTPS is populated on initial query to a recursive server ($n)"
|
||||
ret=0
|
||||
$DIG $DIGOPTS @10.53.0.7 www.example.net https > dig.out.ns7.${n} || ret=1
|
||||
grep "status: NOERROR" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "flags:[^;]* ra[ ;]" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "ADDITIONAL: 2" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "ANSWER: 1," dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "http-server\.example\.net\..*A.*10\.53\.0\.6" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
n=`expr $n + 1`
|
||||
echo_i "check HTTPS loop is handled properly ($n)"
|
||||
ret=0
|
||||
$DIG $DIGOPTS @10.53.0.7 https-loop.example.net https > dig.out.ns7.${n} || ret=1
|
||||
grep "status: NOERROR" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "ANSWER: 1," dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "ADDITIONAL: 2" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
n=`expr $n + 1`
|
||||
echo_i "check HTTPS -> CNAME loop is handled properly ($n)"
|
||||
ret=0
|
||||
$DIG $DIGOPTS @10.53.0.7 https-cname-loop.example.net https > dig.out.ns7.${n} || ret=1
|
||||
grep "status: NOERROR" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "ADDITIONAL: 2" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "ANSWER: 1," dig.out.ns7.${n} > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
n=`expr $n + 1`
|
||||
echo_i "check HTTPS cname chains are followed ($n)"
|
||||
ret=0
|
||||
$DIG $DIGOPTS @10.53.0.7 https-cname.example.net https > dig.out.ns7.${n} || ret=1
|
||||
grep "status: NOERROR" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep "ADDITIONAL: 4" dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep 'http-server\.example\.net\..*A.10\.53\.0\.6' dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep 'cname-server\.example\.net\..*CNAME.cname-next\.example\.net\.' dig.out.ns7.${n} > /dev/null || ret=1
|
||||
grep 'cname-next\.example\.net\..*CNAME.http-server\.example\.net\.' dig.out.ns7.${n} > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo_i "exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@
|
|||
#define COMPARETYPE "rdata1->type"
|
||||
#define COMPAREDEF "use_default = true"
|
||||
|
||||
#define ADDITIONALDATAARGS "rdata, add, arg"
|
||||
#define ADDITIONALDATAARGS "rdata, owner, add, arg"
|
||||
#define ADDITIONALDATACLASS "rdata->rdclass"
|
||||
#define ADDITIONALDATATYPE "rdata->type"
|
||||
#define ADDITIONALDATADEF "use_default = true"
|
||||
|
|
|
|||
|
|
@ -594,8 +594,8 @@ dns_rdatatype_isknown(dns_rdatatype_t type);
|
|||
*/
|
||||
|
||||
isc_result_t
|
||||
dns_rdata_additionaldata(dns_rdata_t *rdata, dns_additionaldatafunc_t add,
|
||||
void *arg);
|
||||
dns_rdata_additionaldata(dns_rdata_t *rdata, const dns_name_t *owner,
|
||||
dns_additionaldatafunc_t add, void *arg);
|
||||
/*%<
|
||||
* Call 'add' for each name and type from 'rdata' which is subject to
|
||||
* additional section processing.
|
||||
|
|
|
|||
|
|
@ -439,6 +439,7 @@ dns_rdataset_towirepartial(dns_rdataset_t * rdataset,
|
|||
|
||||
isc_result_t
|
||||
dns_rdataset_additionaldata(dns_rdataset_t * rdataset,
|
||||
const dns_name_t * owner_name,
|
||||
dns_additionaldatafunc_t add, void *arg);
|
||||
/*%<
|
||||
* For each rdata in rdataset, call 'add' for each name and type in the
|
||||
|
|
|
|||
|
|
@ -396,7 +396,8 @@ typedef isc_result_t (*dns_addrdatasetfunc_t)(void *, const dns_name_t *,
|
|||
dns_rdataset_t *);
|
||||
|
||||
typedef isc_result_t (*dns_additionaldatafunc_t)(void *, const dns_name_t *,
|
||||
dns_rdatatype_t);
|
||||
dns_rdatatype_t,
|
||||
dns_rdataset_t *);
|
||||
|
||||
typedef isc_result_t (*dns_digestfunc_t)(void *, isc_region_t *);
|
||||
|
||||
|
|
|
|||
|
|
@ -10084,7 +10084,8 @@ maybe_rehash_gluetable(rbtdb_version_t *version) {
|
|||
}
|
||||
|
||||
static isc_result_t
|
||||
glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype) {
|
||||
glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
|
||||
dns_rdataset_t *unused) {
|
||||
rbtdb_glue_additionaldata_ctx_t *ctx;
|
||||
isc_result_t result;
|
||||
dns_fixedname_t fixedname_a;
|
||||
|
|
@ -10098,6 +10099,8 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype) {
|
|||
rbtdb_glue_t *glue = NULL;
|
||||
dns_name_t *gluename = NULL;
|
||||
|
||||
UNUSED(unused);
|
||||
|
||||
/*
|
||||
* NS records want addresses in additional records.
|
||||
*/
|
||||
|
|
@ -10397,7 +10400,8 @@ no_glue:
|
|||
maybe_rehash_gluetable(rbtversion);
|
||||
idx = hash_32(hash, rbtversion->glue_table_bits);
|
||||
|
||||
(void)dns_rdataset_additionaldata(rdataset, glue_nsdname_cb, &ctx);
|
||||
(void)dns_rdataset_additionaldata(rdataset, dns_rootname,
|
||||
glue_nsdname_cb, &ctx);
|
||||
|
||||
cur = isc_mem_get(rbtdb->common.mctx, sizeof(*cur));
|
||||
|
||||
|
|
|
|||
|
|
@ -29,12 +29,14 @@
|
|||
#include <dns/compress.h>
|
||||
#include <dns/dsdigest.h>
|
||||
#include <dns/enumtype.h>
|
||||
#include <dns/fixedname.h>
|
||||
#include <dns/keyflags.h>
|
||||
#include <dns/keyvalues.h>
|
||||
#include <dns/message.h>
|
||||
#include <dns/rcode.h>
|
||||
#include <dns/rdata.h>
|
||||
#include <dns/rdataclass.h>
|
||||
#include <dns/rdataset.h>
|
||||
#include <dns/rdatastruct.h>
|
||||
#include <dns/rdatatype.h>
|
||||
#include <dns/result.h>
|
||||
|
|
@ -118,10 +120,11 @@
|
|||
|
||||
#define CALL_FREESTRUCT source
|
||||
|
||||
#define ARGS_ADDLDATA \
|
||||
dns_rdata_t *rdata, dns_additionaldatafunc_t add, void *arg
|
||||
#define ARGS_ADDLDATA \
|
||||
dns_rdata_t *rdata, const dns_name_t *owner, \
|
||||
dns_additionaldatafunc_t add, void *arg
|
||||
|
||||
#define CALL_ADDLDATA rdata, add, arg
|
||||
#define CALL_ADDLDATA rdata, owner, add, arg
|
||||
|
||||
#define ARGS_DIGEST dns_rdata_t *rdata, dns_digestfunc_t digest, void *arg
|
||||
|
||||
|
|
@ -1265,8 +1268,8 @@ dns_rdata_freestruct(void *source) {
|
|||
}
|
||||
|
||||
isc_result_t
|
||||
dns_rdata_additionaldata(dns_rdata_t *rdata, dns_additionaldatafunc_t add,
|
||||
void *arg) {
|
||||
dns_rdata_additionaldata(dns_rdata_t *rdata, const dns_name_t *owner,
|
||||
dns_additionaldatafunc_t add, void *arg) {
|
||||
isc_result_t result = ISC_R_NOTIMPLEMENTED;
|
||||
bool use_default = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -567,6 +567,7 @@ additionaldata_any_tsig(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_any);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -261,6 +261,7 @@ additionaldata_ch_a(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_ch);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -247,12 +247,14 @@ additionaldata_afsdb(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_afsdb);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return ((add)(arg, &name, dns_rdatatype_a));
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -395,6 +395,7 @@ additionaldata_amtrelay(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_amtrelay);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ additionaldata_avc(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_avc);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -572,6 +572,7 @@ additionaldata_caa(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->length >= 3U);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ additionaldata_cdnskey(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_cdnskey);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ additionaldata_cds(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_cds);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -235,6 +235,7 @@ additionaldata_cert(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_cert);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ freestruct_cname(ARGS_FREESTRUCT) {
|
|||
static inline isc_result_t
|
||||
additionaldata_cname(ARGS_ADDLDATA) {
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -214,6 +214,7 @@ additionaldata_csync(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_csync);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ additionaldata_dlv(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_dlv);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -175,12 +175,13 @@ freestruct_dname(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_dname(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_dname);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_dname);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ additionaldata_dnskey(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_dnskey);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -308,12 +308,13 @@ freestruct_doa(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_doa(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_doa);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_doa);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -335,6 +335,7 @@ additionaldata_ds(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_ds);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ additionaldata_eui48(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->length == 6);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -162,6 +162,7 @@ additionaldata_eui64(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->length == 8);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ additionaldata_gpos(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_gpos);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -169,9 +169,10 @@ static inline isc_result_t
|
|||
additionaldata_hinfo(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_hinfo);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
UNUSED(rdata);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -379,12 +379,13 @@ freestruct_hip(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_hip(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_hip);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_hip);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -440,6 +440,7 @@ additionaldata_ipseckey(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_ipseckey);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@ additionaldata_isdn(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_isdn);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -415,6 +415,7 @@ additionaldata_key(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_key);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -412,6 +412,7 @@ additionaldata_keydata(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_keydata);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ additionaldata_l32(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->length == 6);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -172,6 +172,7 @@ additionaldata_l64(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->length == 10);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -785,6 +785,7 @@ additionaldata_loc(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_loc);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -193,16 +193,18 @@ additionaldata_lp(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_lp);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
result = (add)(arg, &name, dns_rdatatype_l32);
|
||||
result = (add)(arg, &name, dns_rdatatype_l32, NULL);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (result);
|
||||
}
|
||||
return ((add)(arg, &name, dns_rdatatype_l64));
|
||||
return ((add)(arg, &name, dns_rdatatype_l64, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -179,11 +179,13 @@ additionaldata_mb(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_mb);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return ((add)(arg, &name, dns_rdatatype_a));
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -180,11 +180,13 @@ additionaldata_md(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_md);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return ((add)(arg, &name, dns_rdatatype_a));
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -179,11 +179,13 @@ additionaldata_mf(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_mf);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return ((add)(arg, &name, dns_rdatatype_a));
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ additionaldata_mg(ARGS_ADDLDATA) {
|
|||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -253,6 +253,7 @@ additionaldata_minfo(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_minfo);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@ additionaldata_mr(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_mr);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -273,6 +273,8 @@ additionaldata_mx(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_mx);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
|
|
@ -282,7 +284,7 @@ additionaldata_mx(ARGS_ADDLDATA) {
|
|||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
result = (add)(arg, &name, dns_rdatatype_a);
|
||||
result = (add)(arg, &name, dns_rdatatype_a, NULL);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (result);
|
||||
}
|
||||
|
|
@ -294,7 +296,8 @@ additionaldata_mx(ARGS_ADDLDATA) {
|
|||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
return ((add)(arg, dns_fixedname_name(&fixed), dns_rdatatype_tlsa));
|
||||
return ((add)(arg, dns_fixedname_name(&fixed), dns_rdatatype_tlsa,
|
||||
NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -601,6 +601,8 @@ additionaldata_naptr(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_naptr);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
/*
|
||||
* Order, preference.
|
||||
*/
|
||||
|
|
@ -642,7 +644,7 @@ additionaldata_naptr(ARGS_ADDLDATA) {
|
|||
dns_name_fromregion(&name, &sr);
|
||||
|
||||
if (atype != 0) {
|
||||
return ((add)(arg, &name, atype));
|
||||
return ((add)(arg, &name, atype, NULL));
|
||||
}
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
|
|
|
|||
|
|
@ -172,6 +172,7 @@ additionaldata_nid(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->length == 10);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ additionaldata_ninfo(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_ninfo);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -190,11 +190,13 @@ additionaldata_ns(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_ns);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return ((add)(arg, &name, dns_rdatatype_a));
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -362,6 +362,7 @@ additionaldata_nsec3(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_nsec3);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -272,6 +272,7 @@ additionaldata_nsec3param(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_nsec3param);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@ additionaldata_nsec(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_nsec);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -133,12 +133,13 @@ freestruct_null(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_null(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_null);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_null);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@ additionaldata_nxt(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_nxt);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -187,6 +187,7 @@ additionaldata_openpgpkey(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_openpgpkey);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -359,6 +359,7 @@ additionaldata_opt(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_opt);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -103,8 +103,9 @@ static inline isc_result_t additionaldata_ #(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_proforma.c #);
|
||||
REQUIRE(rdata->rdclass == #);
|
||||
|
||||
(void)add;
|
||||
(void)arg;
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ additionaldata_ptr(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_ptr);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ additionaldata_rkey(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_rkey);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -252,6 +252,7 @@ additionaldata_rp(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_rp);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -536,6 +536,7 @@ additionaldata_rrsig(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_rrsig);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -241,20 +241,22 @@ additionaldata_rt(ARGS_ADDLDATA) {
|
|||
|
||||
REQUIRE(rdata->type == dns_rdatatype_rt);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
result = (add)(arg, &name, dns_rdatatype_x25);
|
||||
result = (add)(arg, &name, dns_rdatatype_x25, NULL);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (result);
|
||||
}
|
||||
result = (add)(arg, &name, dns_rdatatype_isdn);
|
||||
result = (add)(arg, &name, dns_rdatatype_isdn, NULL);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (result);
|
||||
}
|
||||
return ((add)(arg, &name, dns_rdatatype_a));
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -528,6 +528,7 @@ additionaldata_sig(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_sig);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -242,6 +242,7 @@ additionaldata_sink(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_sink);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ additionaldata_smimea(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_smimea);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -370,12 +370,13 @@ freestruct_soa(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_soa(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_soa);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_soa);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ additionaldata_spf(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_spf);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -246,6 +246,7 @@ additionaldata_sshfp(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_sshfp);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ additionaldata_ta(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_ta);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -216,12 +216,13 @@ freestruct_talink(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_talink(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_talink);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_talink);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -527,12 +527,13 @@ freestruct_tkey(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_tkey(ARGS_ADDLDATA) {
|
||||
REQUIRE(rdata->type == dns_rdatatype_tkey);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_tkey);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -289,6 +289,7 @@ additionaldata_tlsa(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_tlsa);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@ additionaldata_txt(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_txt);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -268,6 +268,7 @@ additionaldata_uri(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_uri);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@ additionaldata_x25(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_x25);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -300,6 +300,7 @@ additionaldata_zonemd(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_zonemd);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@ additionaldata_hs_a(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_hs);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -401,6 +401,7 @@ additionaldata_in_a6(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -186,6 +186,7 @@ additionaldata_in_a(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -198,6 +198,7 @@ additionaldata_in_aaaa(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -428,8 +428,10 @@ additionaldata_in_apl(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_apl);
|
||||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
(void)add;
|
||||
(void)arg;
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -264,6 +264,7 @@ additionaldata_in_atma(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@ additionaldata_in_dhcid(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -171,6 +171,7 @@ additionaldata_in_eid(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
#ifndef RDATA_IN_1_HTTPS_65_C
|
||||
#define RDATA_IN_1_HTTPS_65_C
|
||||
|
||||
#define RRTYPE_HTTPS_ATTRIBUTES 0
|
||||
#define RRTYPE_HTTPS_ATTRIBUTES (DNS_RDATATYPEATTR_FOLLOWADDITIONAL)
|
||||
|
||||
/*
|
||||
* Most of these functions refer to equivalent functions for SVCB,
|
||||
|
|
|
|||
|
|
@ -228,12 +228,14 @@ additionaldata_in_kx(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_kx);
|
||||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
isc_region_consume(®ion, 2);
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
return ((add)(arg, &name, dns_rdatatype_a));
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -171,6 +171,7 @@ additionaldata_in_nimloc(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -187,6 +187,7 @@ additionaldata_in_nsap_ptr(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -206,6 +206,7 @@ additionaldata_in_nsap(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -308,6 +308,7 @@ additionaldata_in_px(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
|
|
|
|||
|
|
@ -313,6 +313,8 @@ additionaldata_in_srv(ARGS_ADDLDATA) {
|
|||
REQUIRE(rdata->type == dns_rdatatype_srv);
|
||||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(owner);
|
||||
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
isc_region_consume(®ion, 4);
|
||||
|
|
@ -324,7 +326,7 @@ additionaldata_in_srv(ARGS_ADDLDATA) {
|
|||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
result = (add)(arg, &name, dns_rdatatype_a);
|
||||
result = (add)(arg, &name, dns_rdatatype_a, NULL);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (result);
|
||||
}
|
||||
|
|
@ -343,7 +345,8 @@ additionaldata_in_srv(ARGS_ADDLDATA) {
|
|||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
return ((add)(arg, dns_fixedname_name(&fixed), dns_rdatatype_tlsa));
|
||||
return ((add)(arg, dns_fixedname_name(&fixed), dns_rdatatype_tlsa,
|
||||
NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -14,11 +14,12 @@
|
|||
#ifndef RDATA_IN_1_SVCB_64_C
|
||||
#define RDATA_IN_1_SVCB_64_C
|
||||
|
||||
#define RRTYPE_SVCB_ATTRIBUTES 0
|
||||
#define RRTYPE_SVCB_ATTRIBUTES (DNS_RDATATYPEATTR_FOLLOWADDITIONAL)
|
||||
|
||||
#define SVCB_MAN_KEY 0
|
||||
#define SVCB_ALPN_KEY 1
|
||||
#define SVCB_NO_DEFAULT_ALPN_KEY 2
|
||||
#define MAX_CNAMES 16 /* See ns/query.c MAX_RESTARTS */
|
||||
|
||||
/*
|
||||
* Service Binding Parameter Registry
|
||||
|
|
@ -1064,11 +1065,85 @@ freestruct_in_svcb(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
generic_additionaldata_in_svcb(ARGS_ADDLDATA) {
|
||||
UNUSED(rdata);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
bool alias, done = false;
|
||||
dns_fixedname_t fixed;
|
||||
dns_name_t name, *fname = NULL;
|
||||
dns_offsets_t offsets;
|
||||
dns_rdataset_t rdataset;
|
||||
isc_region_t region;
|
||||
unsigned int cnames = 0;
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
dns_name_init(&name, offsets);
|
||||
dns_rdata_toregion(rdata, ®ion);
|
||||
alias = uint16_fromregion(®ion) == 0;
|
||||
isc_region_consume(®ion, 2);
|
||||
|
||||
dns_name_fromregion(&name, ®ion);
|
||||
|
||||
if (dns_name_equal(&name, dns_rootname)) {
|
||||
/*
|
||||
* "." only means owner name in service form.
|
||||
*/
|
||||
if (alias || dns_name_equal(owner, dns_rootname) ||
|
||||
!dns_name_ishostname(owner, false))
|
||||
{
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
/* Only lookup address records */
|
||||
return ((add)(arg, owner, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
/*
|
||||
* Follow CNAME chains when processing HTTPS and SVCB records.
|
||||
*/
|
||||
dns_rdataset_init(&rdataset);
|
||||
fname = dns_fixedname_initname(&fixed);
|
||||
do {
|
||||
RETERR((add)(arg, &name, dns_rdatatype_cname, &rdataset));
|
||||
if (dns_rdataset_isassociated(&rdataset)) {
|
||||
isc_result_t result;
|
||||
result = dns_rdataset_first(&rdataset);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
dns_rdata_t current = DNS_RDATA_INIT;
|
||||
dns_rdata_cname_t cname;
|
||||
|
||||
dns_rdataset_current(&rdataset, ¤t);
|
||||
|
||||
result = dns_rdata_tostruct(¤t, &cname,
|
||||
NULL);
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
dns_name_copy(&cname.cname, fname);
|
||||
dns_name_clone(fname, &name);
|
||||
} else {
|
||||
done = true;
|
||||
}
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
} else {
|
||||
done = true;
|
||||
}
|
||||
/*
|
||||
* Stop following a potentially infinite CNAME chain.
|
||||
*/
|
||||
if (!done && cnames++ > MAX_CNAMES) {
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
} while (!done);
|
||||
|
||||
/*
|
||||
* Look up HTTPS/SVCB records when processing the alias form.
|
||||
*/
|
||||
if (alias) {
|
||||
RETERR((add)(arg, &name, rdata->type, &rdataset));
|
||||
/*
|
||||
* Don't return A or AAAA if this is not the last element
|
||||
* in the HTTP / SVCB chain.
|
||||
*/
|
||||
if (dns_rdataset_isassociated(&rdataset)) {
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
}
|
||||
return ((add)(arg, &name, dns_rdatatype_a, NULL));
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
|
|
|
|||
|
|
@ -360,13 +360,14 @@ freestruct_in_wks(ARGS_FREESTRUCT) {
|
|||
|
||||
static inline isc_result_t
|
||||
additionaldata_in_wks(ARGS_ADDLDATA) {
|
||||
UNUSED(rdata);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
REQUIRE(rdata->type == dns_rdatatype_wks);
|
||||
REQUIRE(rdata->rdclass == dns_rdataclass_in);
|
||||
|
||||
UNUSED(rdata);
|
||||
UNUSED(owner);
|
||||
UNUSED(add);
|
||||
UNUSED(arg);
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -576,6 +576,7 @@ dns_rdataset_towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
|||
|
||||
isc_result_t
|
||||
dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
|
||||
const dns_name_t *owner_name,
|
||||
dns_additionaldatafunc_t add, void *arg) {
|
||||
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||
isc_result_t result;
|
||||
|
|
@ -595,7 +596,7 @@ dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
|
|||
|
||||
do {
|
||||
dns_rdataset_current(rdataset, &rdata);
|
||||
result = dns_rdata_additionaldata(&rdata, add, arg);
|
||||
result = dns_rdata_additionaldata(&rdata, owner_name, add, arg);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
result = dns_rdataset_next(rdataset);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7026,7 +7026,7 @@ mark_related(dns_name_t *name, dns_rdataset_t *rdataset, bool external,
|
|||
|
||||
static isc_result_t
|
||||
check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
|
||||
dns_section_t section) {
|
||||
dns_rdataset_t *found, dns_section_t section) {
|
||||
respctx_t *rctx = arg;
|
||||
fetchctx_t *fctx = rctx->fctx;
|
||||
isc_result_t result;
|
||||
|
|
@ -7071,6 +7071,9 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
|
|||
result = dns_message_findtype(name, type, 0, &rdataset);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
mark_related(name, rdataset, external, gluing);
|
||||
if (found != NULL) {
|
||||
dns_rdataset_clone(rdataset, found);
|
||||
}
|
||||
/*
|
||||
* Do we have its SIG too?
|
||||
*/
|
||||
|
|
@ -7090,8 +7093,10 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
|
|||
}
|
||||
|
||||
static isc_result_t
|
||||
check_related(void *arg, const dns_name_t *addname, dns_rdatatype_t type) {
|
||||
return (check_section(arg, addname, type, DNS_SECTION_ADDITIONAL));
|
||||
check_related(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
|
||||
dns_rdataset_t *found) {
|
||||
return (check_section(arg, addname, type, found,
|
||||
DNS_SECTION_ADDITIONAL));
|
||||
}
|
||||
|
||||
#ifndef CHECK_FOR_GLUE_IN_ANSWER
|
||||
|
|
@ -7100,8 +7105,9 @@ check_related(void *arg, const dns_name_t *addname, dns_rdatatype_t type) {
|
|||
|
||||
#if CHECK_FOR_GLUE_IN_ANSWER
|
||||
static isc_result_t
|
||||
check_answer(void *arg, const dns_name_t *addname, dns_rdatatype_t type) {
|
||||
return (check_section(arg, addname, type, DNS_SECTION_ANSWER));
|
||||
check_answer(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
|
||||
dns_rdataset_t *found) {
|
||||
return (check_section(arg, addname, type, found, DNS_SECTION_ANSWER));
|
||||
}
|
||||
#endif /* if CHECK_FOR_GLUE_IN_ANSWER */
|
||||
|
||||
|
|
@ -8774,8 +8780,8 @@ rctx_answer_any(respctx_t *rctx) {
|
|||
rdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rdataset->trust = rctx->trust;
|
||||
|
||||
(void)dns_rdataset_additionaldata(rdataset, check_related,
|
||||
rctx);
|
||||
(void)dns_rdataset_additionaldata(rdataset, rctx->aname,
|
||||
check_related, rctx);
|
||||
}
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
|
|
@ -8822,7 +8828,8 @@ rctx_answer_match(respctx_t *rctx) {
|
|||
rctx->ardataset->attributes |= DNS_RDATASETATTR_ANSWER;
|
||||
rctx->ardataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rctx->ardataset->trust = rctx->trust;
|
||||
(void)dns_rdataset_additionaldata(rctx->ardataset, check_related, rctx);
|
||||
(void)dns_rdataset_additionaldata(rctx->ardataset, rctx->aname,
|
||||
check_related, rctx);
|
||||
|
||||
for (sigrdataset = ISC_LIST_HEAD(rctx->aname->list);
|
||||
sigrdataset != NULL;
|
||||
|
|
@ -9030,7 +9037,8 @@ rctx_authority_positive(respctx_t *rctx) {
|
|||
* to this rdataset.
|
||||
*/
|
||||
(void)dns_rdataset_additionaldata(
|
||||
rdataset, check_related, rctx);
|
||||
rdataset, name, check_related,
|
||||
rctx);
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -9531,8 +9539,8 @@ rctx_referral(respctx_t *rctx) {
|
|||
*/
|
||||
INSIST(rctx->ns_rdataset != NULL);
|
||||
FCTX_ATTR_SET(fctx, FCTX_ATTR_GLUING);
|
||||
(void)dns_rdataset_additionaldata(rctx->ns_rdataset, check_related,
|
||||
rctx);
|
||||
(void)dns_rdataset_additionaldata(rctx->ns_rdataset, rctx->ns_name,
|
||||
check_related, rctx);
|
||||
#if CHECK_FOR_GLUE_IN_ANSWER
|
||||
/*
|
||||
* Look in the answer section for "glue" that is incorrectly
|
||||
|
|
@ -9544,8 +9552,8 @@ rctx_referral(respctx_t *rctx) {
|
|||
if (rctx->glue_in_answer &&
|
||||
(fctx->type == dns_rdatatype_aaaa || fctx->type == dns_rdatatype_a))
|
||||
{
|
||||
(void)dns_rdataset_additionaldata(rctx->ns_rdataset,
|
||||
check_answer, fctx);
|
||||
(void)dns_rdataset_additionaldata(
|
||||
rctx->ns_rdataset, rctx->ns_name, check_answer, fctx);
|
||||
}
|
||||
#endif /* if CHECK_FOR_GLUE_IN_ANSWER */
|
||||
FCTX_ATTR_CLR(fctx, FCTX_ATTR_GLUING);
|
||||
|
|
@ -9655,7 +9663,7 @@ again:
|
|||
if (CHASE(rdataset)) {
|
||||
rdataset->attributes &= ~DNS_RDATASETATTR_CHASE;
|
||||
(void)dns_rdataset_additionaldata(
|
||||
rdataset, check_related, rctx);
|
||||
rdataset, name, check_related, rctx);
|
||||
rescan = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -207,10 +207,12 @@ rdata_towire(dns_rdata_t *rdata, unsigned char *dst, size_t dstlen,
|
|||
}
|
||||
|
||||
static isc_result_t
|
||||
additionaldata_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype) {
|
||||
additionaldata_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
|
||||
dns_rdataset_t *found) {
|
||||
UNUSED(arg);
|
||||
UNUSED(name);
|
||||
UNUSED(qtype);
|
||||
UNUSED(found);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
@ -219,7 +221,8 @@ additionaldata_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype) {
|
|||
*/
|
||||
static isc_result_t
|
||||
rdata_additionadata(dns_rdata_t *rdata) {
|
||||
return (dns_rdata_additionaldata(rdata, additionaldata_cb, NULL));
|
||||
return (dns_rdata_additionaldata(rdata, dns_rootname, additionaldata_cb,
|
||||
NULL));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -203,6 +203,7 @@ ns_client_endrequest(ns_client_t *client) {
|
|||
client->udpsize = 512;
|
||||
client->extflags = 0;
|
||||
client->ednsversion = -1;
|
||||
client->additionaldepth = 0;
|
||||
dns_ecs_init(&client->ecs);
|
||||
dns_message_reset(client->message, DNS_MESSAGE_INTENTPARSE);
|
||||
|
||||
|
|
|
|||
|
|
@ -195,6 +195,7 @@ struct ns_client {
|
|||
uint16_t udpsize;
|
||||
uint16_t extflags;
|
||||
int16_t ednsversion; /* -1 noedns */
|
||||
uint16_t additionaldepth;
|
||||
void (*cleanup)(ns_client_t *);
|
||||
void (*shutdown)(void *arg, isc_result_t result);
|
||||
void * shutdown_arg;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue