mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-22 01:59:26 +00:00
chg: dev: Migrate rdataset attributes to struct of bools and enum
Merge branch 'pspacek/rdataset-attrs-enum' into 'main' See merge request isc-projects/bind9!10721
This commit is contained in:
commit
08814b10a1
@ -369,7 +369,7 @@ print_status(dns_rdataset_t *rdataset) {
|
||||
|
||||
buf[0] = '\0';
|
||||
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
if (rdataset->attributes.negative) {
|
||||
strlcat(buf, "negative response", sizeof(buf));
|
||||
strlcat(buf, yaml ? "_" : ", ", sizeof(buf));
|
||||
}
|
||||
@ -474,9 +474,7 @@ printdata(dns_rdataset_t *rdataset, dns_name_t *owner) {
|
||||
DNS_RDATASET_FOREACH (rdataset) {
|
||||
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||
|
||||
if ((rdataset->attributes &
|
||||
DNS_RDATASETATTR_NEGATIVE) != 0)
|
||||
{
|
||||
if (rdataset->attributes.negative) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -497,9 +495,7 @@ printdata(dns_rdataset_t *rdataset, dns_name_t *owner) {
|
||||
}
|
||||
} else {
|
||||
dns_indent_t indent = { " ", 2 };
|
||||
if (!yaml && (rdataset->attributes &
|
||||
DNS_RDATASETATTR_NEGATIVE) != 0)
|
||||
{
|
||||
if (!yaml && rdataset->attributes.negative) {
|
||||
isc_buffer_putstr(&target, "; ");
|
||||
}
|
||||
result = dns_master_rdatasettotext(
|
||||
|
@ -1325,7 +1325,7 @@ configure_order(dns_order_t *order, const cfg_obj_t *ent) {
|
||||
dns_rdatatype_t rdtype;
|
||||
const cfg_obj_t *obj;
|
||||
dns_fixedname_t fixed;
|
||||
unsigned int mode = 0;
|
||||
dns_orderopt_t mode = dns_order_none;
|
||||
const char *str;
|
||||
isc_buffer_t b;
|
||||
isc_result_t result;
|
||||
@ -1363,11 +1363,11 @@ configure_order(dns_order_t *order, const cfg_obj_t *ent) {
|
||||
INSIST(cfg_obj_isstring(obj));
|
||||
str = cfg_obj_asstring(obj);
|
||||
if (!strcasecmp(str, "random")) {
|
||||
mode = DNS_RDATASETATTR_RANDOMIZE;
|
||||
mode = dns_order_randomize;
|
||||
} else if (!strcasecmp(str, "cyclic")) {
|
||||
mode = DNS_RDATASETATTR_CYCLIC;
|
||||
mode = dns_order_cyclic;
|
||||
} else if (!strcasecmp(str, "none")) {
|
||||
mode = DNS_RDATASETATTR_NONE;
|
||||
mode = dns_order_none;
|
||||
} else {
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
@ -518,10 +518,10 @@ client_state_destroy(const query_ctx_t *qctx, filter_instance_t *inst) {
|
||||
static void
|
||||
mark_as_rendered(dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
|
||||
if (rdataset != NULL && dns_rdataset_isassociated(rdataset)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
rdataset->attributes.rendered = true;
|
||||
}
|
||||
if (sigrdataset != NULL && dns_rdataset_isassociated(sigrdataset)) {
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
sigrdataset->attributes.rendered = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -522,10 +522,10 @@ client_state_destroy(const query_ctx_t *qctx, filter_instance_t *inst) {
|
||||
static void
|
||||
mark_as_rendered(dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
|
||||
if (rdataset != NULL && dns_rdataset_isassociated(rdataset)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
rdataset->attributes.rendered = true;
|
||||
}
|
||||
if (sigrdataset != NULL && dns_rdataset_isassociated(sigrdataset)) {
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
sigrdataset->attributes.rendered = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,7 @@ dns_ncache_addoptout(dns_message_t *message, dns_db_t *cache,
|
||||
* The 'covers' argument is the RR type whose nonexistence we are caching,
|
||||
* or dns_rdatatype_any when caching a NXDOMAIN response.
|
||||
*
|
||||
* 'optout' indicates a DNS_RDATASETATTR_OPTOUT should be set.
|
||||
* 'optout' parameter indicates if 'optout' attribute should be set.
|
||||
*
|
||||
* Note:
|
||||
*\li If 'addedrdataset' is not NULL, then it will be attached to the added
|
||||
|
@ -32,18 +32,16 @@ dns_order_create(isc_mem_t *mctx, dns_order_t **orderp);
|
||||
void
|
||||
dns_order_add(dns_order_t *order, const dns_name_t *name,
|
||||
dns_rdatatype_t rdtype, dns_rdataclass_t rdclass,
|
||||
unsigned int mode);
|
||||
dns_orderopt_t mode);
|
||||
/*%<
|
||||
* Add a entry to the end of the order list.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'order' to be valid.
|
||||
*\li 'name' to be valid.
|
||||
*\li 'mode' to be one of #DNS_RDATASETATTR_RANDOMIZE,
|
||||
* #DNS_RDATASETATTR_FIXEDORDER or zero (#DNS_RDATASETATTR_CYCLIC).
|
||||
*/
|
||||
|
||||
unsigned int
|
||||
dns_orderopt_t
|
||||
dns_order_find(dns_order_t *order, const dns_name_t *name,
|
||||
dns_rdatatype_t rdtype, dns_rdataclass_t rdclass);
|
||||
/*%<
|
||||
|
@ -55,18 +55,7 @@
|
||||
#include <dns/types.h>
|
||||
|
||||
#define DNS_RDATASET_MAXADDITIONAL 13
|
||||
|
||||
/* Fixed RRSet helper macros */
|
||||
|
||||
#define DNS_RDATASET_LENGTH 2;
|
||||
|
||||
#if DNS_RDATASET_FIXED
|
||||
#define DNS_RDATASET_ORDER 2
|
||||
#define DNS_RDATASET_COUNT (count * 4)
|
||||
#else /* !DNS_RDATASET_FIXED */
|
||||
#define DNS_RDATASET_ORDER 0
|
||||
#define DNS_RDATASET_COUNT 0
|
||||
#endif /* DNS_RDATASET_FIXED */
|
||||
#define DNS_RDATASET_LENGTH 2;
|
||||
|
||||
typedef enum {
|
||||
dns_rdatasetadditional_fromauth,
|
||||
@ -128,10 +117,40 @@ struct dns_rdataset {
|
||||
dns_trust_t trust;
|
||||
dns_rdatatype_t covers;
|
||||
|
||||
/*
|
||||
* attributes
|
||||
*/
|
||||
unsigned int attributes;
|
||||
struct {
|
||||
bool question : 1;
|
||||
bool rendered : 1; /*%< message.c: was rendered */
|
||||
bool answered : 1; /*%< server. */
|
||||
bool cache : 1; /*%< resolver. */
|
||||
bool answer : 1; /*%< resolver. */
|
||||
bool answersig : 1; /*%< resolver. */
|
||||
bool external : 1; /*%< resolver. */
|
||||
bool ncache : 1; /*%< resolver. */
|
||||
bool chaining : 1; /*%< resolver. */
|
||||
bool ttladjusted : 1; /*%< message.c: data had differing TTL
|
||||
values, and the rdataset->ttl holds the smallest */
|
||||
bool chase : 1; /*%< Used by resolver. */
|
||||
bool nxdomain : 1;
|
||||
bool noqname : 1;
|
||||
bool checknames : 1; /*%< Used by resolver. */
|
||||
bool required : 1;
|
||||
bool resign : 1;
|
||||
bool closest : 1;
|
||||
bool optout : 1; /*%< OPTOUT proof */
|
||||
bool negative : 1;
|
||||
bool prefetch : 1;
|
||||
bool stale : 1;
|
||||
bool ancient : 1;
|
||||
bool stale_window : 1;
|
||||
bool stale_added : 1; /*%< Added during a
|
||||
stale-answer-client-timeout lookup. In other words, the
|
||||
RRset was added during a lookup of stale data and does
|
||||
not necessarily mean that the rdataset itself is stale.
|
||||
*/
|
||||
bool keepcase : 1;
|
||||
bool staticstub : 1;
|
||||
dns_orderopt_t order : 2;
|
||||
} attributes;
|
||||
|
||||
/*%
|
||||
* the counter provides the starting point in the "cyclic" order.
|
||||
@ -143,7 +162,7 @@ struct dns_rdataset {
|
||||
|
||||
/*
|
||||
* This RRSIG RRset should be re-generated around this time.
|
||||
* Only valid if DNS_RDATASETATTR_RESIGN is set in attributes.
|
||||
* Only valid if 'resign' attribute is set.
|
||||
*/
|
||||
union {
|
||||
isc_stdtime_t resign;
|
||||
@ -237,56 +256,6 @@ struct dns_rdataset {
|
||||
DNS_RDATASET_FOREACH_RES(rds, DNS__RDATASET_CONCAT(x, __LINE__))
|
||||
/* clang-format on */
|
||||
|
||||
/*!
|
||||
* \def DNS_RDATASETATTR_RENDERED
|
||||
* Used by message.c to indicate that the rdataset was rendered.
|
||||
*
|
||||
* \def DNS_RDATASETATTR_TTLADJUSTED
|
||||
* Used by message.c to indicate that the rdataset's rdata had differing
|
||||
* TTL values, and the rdataset->ttl holds the smallest.
|
||||
*
|
||||
* \def DNS_RDATASETATTR_LOADORDER
|
||||
* Output the RRset in load order.
|
||||
*
|
||||
* \def DNS_RDATASETATTR_STALE_ADDED
|
||||
* Set on rdatasets that were added during a stale-answer-client-timeout
|
||||
* lookup. In other words, the RRset was added during a lookup of stale
|
||||
* data and does not necessarily mean that the rdataset itself is stale.
|
||||
*/
|
||||
|
||||
#define DNS_RDATASETATTR_NONE 0x00000000 /*%< No ordering. */
|
||||
#define DNS_RDATASETATTR_QUESTION 0x00000001
|
||||
#define DNS_RDATASETATTR_RENDERED 0x00000002 /*%< Used by message.c */
|
||||
#define DNS_RDATASETATTR_ANSWERED 0x00000004 /*%< Used by server. */
|
||||
#define DNS_RDATASETATTR_CACHE 0x00000008 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_ANSWER 0x00000010 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_ANSWERSIG 0x00000020 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_EXTERNAL 0x00000040 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_NCACHE 0x00000080 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_CHAINING 0x00000100 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_TTLADJUSTED 0x00000200 /*%< Used by message.c */
|
||||
#define DNS_RDATASETATTR_FIXEDORDER 0x00000400 /*%< Fixed ordering. */
|
||||
#define DNS_RDATASETATTR_RANDOMIZE 0x00000800 /*%< Random ordering. */
|
||||
#define DNS_RDATASETATTR_CHASE 0x00001000 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_NXDOMAIN 0x00002000
|
||||
#define DNS_RDATASETATTR_NOQNAME 0x00004000
|
||||
#define DNS_RDATASETATTR_CHECKNAMES 0x00008000 /*%< Used by resolver. */
|
||||
#define DNS_RDATASETATTR_REQUIRED 0x00010000
|
||||
#define DNS_RDATASETATTR_REQUIREDGLUE DNS_RDATASETATTR_REQUIRED
|
||||
#define DNS_RDATASETATTR_UNUSED1 0x00020000
|
||||
#define DNS_RDATASETATTR_RESIGN 0x00040000
|
||||
#define DNS_RDATASETATTR_CLOSEST 0x00080000
|
||||
#define DNS_RDATASETATTR_OPTOUT 0x00100000 /*%< OPTOUT proof */
|
||||
#define DNS_RDATASETATTR_NEGATIVE 0x00200000
|
||||
#define DNS_RDATASETATTR_PREFETCH 0x00400000
|
||||
#define DNS_RDATASETATTR_CYCLIC 0x00800000 /*%< Cyclic ordering. */
|
||||
#define DNS_RDATASETATTR_STALE 0x01000000
|
||||
#define DNS_RDATASETATTR_ANCIENT 0x02000000
|
||||
#define DNS_RDATASETATTR_STALE_WINDOW 0x04000000
|
||||
#define DNS_RDATASETATTR_STALE_ADDED 0x08000000
|
||||
#define DNS_RDATASETATTR_KEEPCASE 0x10000000
|
||||
#define DNS_RDATASETATTR_STATICSTUB 0x20000000
|
||||
|
||||
/*%
|
||||
* _OMITDNSSEC:
|
||||
* Omit DNSSEC records when rendering ncache records.
|
||||
@ -574,7 +543,7 @@ dns__rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
* Return the noqname proof for this record.
|
||||
*
|
||||
* Requires:
|
||||
*\li 'rdataset' to be valid and #DNS_RDATASETATTR_NOQNAME to be set.
|
||||
*\li 'rdataset' to be valid and 'noqname' attribute to be set.
|
||||
*\li 'name' to be valid.
|
||||
*\li 'neg' and 'negsig' to be valid and not associated.
|
||||
*/
|
||||
@ -583,12 +552,12 @@ isc_result_t
|
||||
dns_rdataset_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
/*%<
|
||||
* Associate a noqname proof with this record.
|
||||
* Sets #DNS_RDATASETATTR_NOQNAME if successful.
|
||||
* Sets 'noqname' attribute if successful.
|
||||
* Adjusts the 'rdataset->ttl' to minimum of the 'rdataset->ttl' and
|
||||
* the 'nsec'/'nsec3' and 'rrsig(nsec)'/'rrsig(nsec3)' ttl.
|
||||
*
|
||||
* Requires:
|
||||
*\li 'rdataset' to be valid and #DNS_RDATASETATTR_NOQNAME to be set.
|
||||
*\li 'rdataset' to be valid and 'noqname' attribute to be set.
|
||||
*\li 'name' to be valid and have NSEC or NSEC3 and associated RRSIG
|
||||
* rdatasets.
|
||||
*/
|
||||
@ -603,7 +572,7 @@ dns__rdataset_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
* Return the closest encloser for this record.
|
||||
*
|
||||
* Requires:
|
||||
*\li 'rdataset' to be valid and #DNS_RDATASETATTR_CLOSEST to be set.
|
||||
*\li 'rdataset' to be valid and 'closest' attribute to be set.
|
||||
*\li 'name' to be valid.
|
||||
*\li 'nsec' and 'nsecsig' to be valid and not associated.
|
||||
*/
|
||||
@ -612,12 +581,12 @@ isc_result_t
|
||||
dns_rdataset_addclosest(dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
/*%<
|
||||
* Associate a closest encloset proof with this record.
|
||||
* Sets #DNS_RDATASETATTR_CLOSEST if successful.
|
||||
* Sets 'closest' attribute if successful.
|
||||
* Adjusts the 'rdataset->ttl' to minimum of the 'rdataset->ttl' and
|
||||
* the 'nsec' and 'rrsig(nsec)' ttl.
|
||||
*
|
||||
* Requires:
|
||||
*\li 'rdataset' to be valid and #DNS_RDATASETATTR_CLOSEST to be set.
|
||||
*\li 'rdataset' to be valid and 'closest' attribute to be set.
|
||||
*\li 'name' to be valid and have NSEC3 and RRSIG(NSEC3) rdatasets.
|
||||
*/
|
||||
|
||||
|
@ -236,6 +236,12 @@ typedef enum {
|
||||
dns_masterformat_raw = 2,
|
||||
} dns_masterformat_t;
|
||||
|
||||
typedef enum {
|
||||
dns_order_none,
|
||||
dns_order_cyclic,
|
||||
dns_order_randomize
|
||||
} dns_orderopt_t;
|
||||
|
||||
typedef enum {
|
||||
dns_expire_lru = 0,
|
||||
dns_expire_ttl = 1,
|
||||
|
@ -2898,7 +2898,7 @@ commit(dns_rdatacallbacks_t *callbacks, dns_loadctx_t *lctx,
|
||||
if (dataset.type == dns_rdatatype_rrsig &&
|
||||
(lctx->options & DNS_MASTER_RESIGN) != 0)
|
||||
{
|
||||
dataset.attributes |= DNS_RDATASETATTR_RESIGN;
|
||||
dataset.attributes.resign = true;
|
||||
dataset.resign = resign_fromlist(this, lctx);
|
||||
}
|
||||
result = callbacks->add(callbacks->add_private, owner,
|
||||
|
@ -83,9 +83,9 @@ struct dns_master_style {
|
||||
#define DNS_TOTEXT_LINEBREAK_MAXLEN 100
|
||||
|
||||
/*% Does the rdataset 'r' contain a stale answer? */
|
||||
#define STALE(r) (((r)->attributes & DNS_RDATASETATTR_STALE) != 0)
|
||||
#define STALE(r) (((r)->attributes.stale))
|
||||
/*% Does the rdataset 'r' contain an expired answer? */
|
||||
#define ANCIENT(r) (((r)->attributes & DNS_RDATASETATTR_ANCIENT) != 0)
|
||||
#define ANCIENT(r) (((r)->attributes.ancient))
|
||||
|
||||
/*%
|
||||
* Context structure for a masterfile dump in progress.
|
||||
@ -271,7 +271,7 @@ struct dns_dumpctx {
|
||||
FILE *f);
|
||||
};
|
||||
|
||||
#define NXDOMAIN(x) (((x)->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
|
||||
#define NXDOMAIN(x) (((x)->attributes.nxdomain))
|
||||
|
||||
static const dns_indent_t default_indent = { "\t", 1 };
|
||||
static const dns_indent_t default_yamlindent = { " ", 1 };
|
||||
@ -717,7 +717,7 @@ rdataset_totext(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
||||
* Type.
|
||||
*/
|
||||
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
if (rdataset->attributes.negative) {
|
||||
type = rdataset->covers;
|
||||
} else {
|
||||
type = rdataset->type;
|
||||
@ -725,7 +725,7 @@ rdataset_totext(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
||||
|
||||
INDENT_TO(type_column);
|
||||
type_start = target->used;
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
if (rdataset->attributes.negative) {
|
||||
RETERR(str_totext("\\-", target));
|
||||
}
|
||||
switch (type) {
|
||||
@ -760,7 +760,7 @@ rdataset_totext(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
||||
* Rdata.
|
||||
*/
|
||||
INDENT_TO(rdata_column);
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
if (rdataset->attributes.negative) {
|
||||
if (NXDOMAIN(rdataset)) {
|
||||
RETERR(str_totext(";-$NXDOMAIN", target));
|
||||
} else {
|
||||
@ -1143,7 +1143,7 @@ again:
|
||||
}
|
||||
fprintf(f, "; %s\n", dns_trust_totext(rds->trust));
|
||||
}
|
||||
if (((rds->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) &&
|
||||
if ((rds->attributes.negative) &&
|
||||
(ctx->style.flags & DNS_STYLEFLAG_NCACHE) == 0)
|
||||
{
|
||||
/* Omit negative cache entries */
|
||||
@ -1169,7 +1169,7 @@ again:
|
||||
}
|
||||
}
|
||||
if (((ctx->style.flags & DNS_STYLEFLAG_RESIGN) != 0) &&
|
||||
((rds->attributes & DNS_RDATASETATTR_RESIGN) != 0))
|
||||
(rds->attributes.resign))
|
||||
{
|
||||
isc_buffer_t b;
|
||||
char buf[sizeof("YYYYMMDDHHMMSS")];
|
||||
@ -1323,7 +1323,7 @@ dump_rdatasets_raw(isc_mem_t *mctx, const dns_name_t *owner_name,
|
||||
|
||||
dns_rdataset_getownercase(&rdataset, name);
|
||||
|
||||
if (((rdataset.attributes & DNS_RDATASETATTR_NEGATIVE) != 0) &&
|
||||
if (rdataset.attributes.negative &&
|
||||
(ctx->style.flags & DNS_STYLEFLAG_NCACHE) == 0)
|
||||
{
|
||||
/* Omit negative cache entries */
|
||||
|
@ -114,7 +114,7 @@ hexdump(const char *msg, const char *msg2, void *base, size_t len) {
|
||||
#define VALID_PSEUDOSECTION(s) \
|
||||
(((s) >= DNS_PSEUDOSECTION_ANY) && ((s) < DNS_PSEUDOSECTION_MAX))
|
||||
|
||||
#define OPTOUT(x) (((x)->attributes & DNS_RDATASETATTR_OPTOUT) != 0)
|
||||
#define OPTOUT(x) (((x)->attributes.optout))
|
||||
|
||||
/*%
|
||||
* This is the size of each individual scratchpad buffer, and the numbers
|
||||
@ -998,7 +998,7 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t dctx,
|
||||
dns_message_gettemprdataset(msg, &rdataset);
|
||||
dns_rdatalist_tordataset(rdatalist, rdataset);
|
||||
|
||||
rdataset->attributes |= DNS_RDATASETATTR_QUESTION;
|
||||
rdataset->attributes.question = true;
|
||||
|
||||
ISC_LIST_APPEND(name->list, rdataset, link);
|
||||
|
||||
@ -1452,7 +1452,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t dctx,
|
||||
* minimize them.
|
||||
*/
|
||||
if (ttl != rdataset->ttl) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_TTLADJUSTED;
|
||||
rdataset->attributes.ttladjusted = true;
|
||||
if (ttl < rdataset->ttl) {
|
||||
rdataset->ttl = ttl;
|
||||
}
|
||||
@ -1927,10 +1927,8 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
|
||||
name = ISC_LIST_HEAD(*section);
|
||||
if (name != NULL) {
|
||||
rdataset = ISC_LIST_HEAD(name->list);
|
||||
if (rdataset != NULL &&
|
||||
(rdataset->attributes & DNS_RDATASETATTR_REQUIREDGLUE) !=
|
||||
0 &&
|
||||
(rdataset->attributes & DNS_RDATASETATTR_RENDERED) == 0)
|
||||
if (rdataset != NULL && rdataset->attributes.required &&
|
||||
!rdataset->attributes.rendered)
|
||||
{
|
||||
st = *(msg->buffer);
|
||||
count = 0;
|
||||
@ -1963,7 +1961,7 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
|
||||
|
||||
update_min_section_ttl(msg, sectionid, rdataset);
|
||||
|
||||
rdataset->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
rdataset->attributes.rendered = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1977,9 +1975,7 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
|
||||
|
||||
ISC_LIST_FOREACH (*section, n, link) {
|
||||
ISC_LIST_FOREACH (n->list, rds, link) {
|
||||
if ((rds->attributes &
|
||||
DNS_RDATASETATTR_RENDERED) != 0)
|
||||
{
|
||||
if (rds->attributes.rendered) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -2051,7 +2047,7 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
|
||||
|
||||
update_min_section_ttl(msg, sectionid, rds);
|
||||
|
||||
rds->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
rds->attributes.rendered = true;
|
||||
}
|
||||
}
|
||||
} while (--pass != 0);
|
||||
@ -2282,7 +2278,7 @@ dns_message_renderreset(dns_message_t *msg) {
|
||||
msg->counts[i] = 0;
|
||||
MSG_SECTION_FOREACH (msg, i, name) {
|
||||
ISC_LIST_FOREACH (name->list, rds, link) {
|
||||
rds->attributes &= ~DNS_RDATASETATTR_RENDERED;
|
||||
rds->attributes.rendered = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5027,8 +5023,7 @@ message_authority_soa_min(dns_message_t *msg, dns_ttl_t *ttlp) {
|
||||
|
||||
MSG_SECTION_FOREACH (msg, DNS_SECTION_AUTHORITY, name) {
|
||||
ISC_LIST_FOREACH (name->list, rds, link) {
|
||||
if ((rds->attributes & DNS_RDATASETATTR_RENDERED) == 0)
|
||||
{
|
||||
if (!rds->attributes.rendered) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -164,9 +164,7 @@ addoptout(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
|
||||
|
||||
if (name->attributes.ncache) {
|
||||
ISC_LIST_FOREACH (name->list, rdataset, link) {
|
||||
if ((rdataset->attributes &
|
||||
DNS_RDATASETATTR_NCACHE) == 0)
|
||||
{
|
||||
if (!rdataset->attributes.ncache) {
|
||||
continue;
|
||||
}
|
||||
type = rdataset->type;
|
||||
@ -261,12 +259,12 @@ addoptout(dns_message_t *message, dns_db_t *cache, dns_dbnode_t *node,
|
||||
trust = dns_trust_answer;
|
||||
}
|
||||
ncrdataset.trust = trust;
|
||||
ncrdataset.attributes |= DNS_RDATASETATTR_NEGATIVE;
|
||||
ncrdataset.attributes.negative = true;
|
||||
if (message->rcode == dns_rcode_nxdomain) {
|
||||
ncrdataset.attributes |= DNS_RDATASETATTR_NXDOMAIN;
|
||||
ncrdataset.attributes.nxdomain = true;
|
||||
}
|
||||
if (optout) {
|
||||
ncrdataset.attributes |= DNS_RDATASETATTR_OPTOUT;
|
||||
ncrdataset.attributes.optout = true;
|
||||
}
|
||||
|
||||
return dns_db_addrdataset(cache, node, NULL, now, &ncrdataset, 0,
|
||||
@ -292,7 +290,7 @@ dns_ncache_towire(dns_rdataset_t *rdataset, dns_compress_t *cctx,
|
||||
|
||||
REQUIRE(rdataset != NULL);
|
||||
REQUIRE(rdataset->type == 0);
|
||||
REQUIRE((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0);
|
||||
REQUIRE(rdataset->attributes.negative);
|
||||
|
||||
savedbuffer = *target;
|
||||
count = 0;
|
||||
@ -508,7 +506,7 @@ dns_ncache_getrdataset(dns_rdataset_t *ncacherdataset, dns_name_t *name,
|
||||
REQUIRE(ncacherdataset != NULL);
|
||||
REQUIRE(DNS_RDATASET_VALID(ncacherdataset));
|
||||
REQUIRE(ncacherdataset->type == 0);
|
||||
REQUIRE((ncacherdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0);
|
||||
REQUIRE(ncacherdataset->attributes.negative);
|
||||
REQUIRE(name != NULL);
|
||||
REQUIRE(!dns_rdataset_isassociated(rdataset));
|
||||
REQUIRE(type != dns_rdatatype_rrsig);
|
||||
@ -574,7 +572,7 @@ dns_ncache_getsigrdataset(dns_rdataset_t *ncacherdataset, dns_name_t *name,
|
||||
|
||||
REQUIRE(ncacherdataset != NULL);
|
||||
REQUIRE(ncacherdataset->type == 0);
|
||||
REQUIRE((ncacherdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0);
|
||||
REQUIRE(ncacherdataset->attributes.negative);
|
||||
REQUIRE(name != NULL);
|
||||
REQUIRE(!dns_rdataset_isassociated(rdataset));
|
||||
|
||||
@ -659,7 +657,7 @@ dns_ncache_current(dns_rdataset_t *ncacherdataset, dns_name_t *found,
|
||||
|
||||
REQUIRE(ncacherdataset != NULL);
|
||||
REQUIRE(ncacherdataset->type == 0);
|
||||
REQUIRE((ncacherdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0);
|
||||
REQUIRE(ncacherdataset->attributes.negative);
|
||||
REQUIRE(found != NULL);
|
||||
REQUIRE(!dns_rdataset_isassociated(rdataset));
|
||||
|
||||
|
@ -32,7 +32,7 @@ struct dns_order_ent {
|
||||
dns_fixedname_t name;
|
||||
dns_rdataclass_t rdclass;
|
||||
dns_rdatatype_t rdtype;
|
||||
unsigned int mode;
|
||||
dns_orderopt_t mode;
|
||||
ISC_LINK(dns_order_ent_t) link;
|
||||
};
|
||||
|
||||
@ -66,14 +66,10 @@ dns_order_create(isc_mem_t *mctx, dns_order_t **orderp) {
|
||||
void
|
||||
dns_order_add(dns_order_t *order, const dns_name_t *name,
|
||||
dns_rdatatype_t rdtype, dns_rdataclass_t rdclass,
|
||||
unsigned int mode) {
|
||||
dns_orderopt_t mode) {
|
||||
dns_order_ent_t *ent = NULL;
|
||||
|
||||
REQUIRE(DNS_ORDER_VALID(order));
|
||||
REQUIRE(mode == DNS_RDATASETATTR_RANDOMIZE ||
|
||||
mode == DNS_RDATASETATTR_FIXEDORDER ||
|
||||
mode == DNS_RDATASETATTR_CYCLIC ||
|
||||
mode == DNS_RDATASETATTR_NONE);
|
||||
|
||||
ent = isc_mem_get(order->mctx, sizeof(*ent));
|
||||
*ent = (dns_order_ent_t){
|
||||
@ -97,7 +93,7 @@ match(const dns_name_t *name1, const dns_name_t *name2) {
|
||||
return dns_name_equal(name1, name2);
|
||||
}
|
||||
|
||||
unsigned int
|
||||
dns_orderopt_t
|
||||
dns_order_find(dns_order_t *order, const dns_name_t *name,
|
||||
dns_rdatatype_t rdtype, dns_rdataclass_t rdclass) {
|
||||
REQUIRE(DNS_ORDER_VALID(order));
|
||||
@ -115,7 +111,7 @@ dns_order_find(dns_order_t *order, const dns_name_t *name,
|
||||
return ent->mode;
|
||||
}
|
||||
}
|
||||
return DNS_RDATASETATTR_NONE;
|
||||
return dns_order_none;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1013,16 +1013,16 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header,
|
||||
rdataset->resign = 0;
|
||||
|
||||
if (NEGATIVE(header)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_NEGATIVE;
|
||||
rdataset->attributes.negative = true;
|
||||
}
|
||||
if (NXDOMAIN(header)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_NXDOMAIN;
|
||||
rdataset->attributes.nxdomain = true;
|
||||
}
|
||||
if (OPTOUT(header)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_OPTOUT;
|
||||
rdataset->attributes.optout = true;
|
||||
}
|
||||
if (PREFETCH(header)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_PREFETCH;
|
||||
rdataset->attributes.prefetch = true;
|
||||
}
|
||||
|
||||
if (stale && !ancient) {
|
||||
@ -1033,12 +1033,12 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header,
|
||||
rdataset->ttl = 0;
|
||||
}
|
||||
if (STALE_WINDOW(header)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_STALE_WINDOW;
|
||||
rdataset->attributes.stale_window = true;
|
||||
}
|
||||
rdataset->attributes |= DNS_RDATASETATTR_STALE;
|
||||
rdataset->attributes.stale = true;
|
||||
rdataset->expire = header->expire;
|
||||
} else if (!ACTIVE(header, now)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_ANCIENT;
|
||||
rdataset->attributes.ancient = true;
|
||||
rdataset->ttl = 0;
|
||||
}
|
||||
|
||||
@ -1055,11 +1055,11 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header,
|
||||
*/
|
||||
rdataset->slab.noqname = header->noqname;
|
||||
if (header->noqname != NULL) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_NOQNAME;
|
||||
rdataset->attributes.noqname = true;
|
||||
}
|
||||
rdataset->slab.closest = header->closest;
|
||||
if (header->closest != NULL) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CLOSEST;
|
||||
rdataset->attributes.closest = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2962,19 +2962,19 @@ qpcache_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
|
||||
atomic_init(&newheader->count,
|
||||
atomic_fetch_add_relaxed(&init_count, 1));
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_PREFETCH) != 0) {
|
||||
if (rdataset->attributes.prefetch) {
|
||||
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_PREFETCH);
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
if (rdataset->attributes.negative) {
|
||||
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_NEGATIVE);
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0) {
|
||||
if (rdataset->attributes.nxdomain) {
|
||||
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_NXDOMAIN);
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_OPTOUT) != 0) {
|
||||
if (rdataset->attributes.optout) {
|
||||
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_OPTOUT);
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0) {
|
||||
if (rdataset->attributes.noqname) {
|
||||
result = addnoqname(qpdb->common.mctx, newheader,
|
||||
qpdb->maxrrperset, rdataset);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
@ -2982,7 +2982,7 @@ qpcache_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
return result;
|
||||
}
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_CLOSEST) != 0) {
|
||||
if (rdataset->attributes.closest) {
|
||||
result = addclosest(qpdb->common.mctx, newheader,
|
||||
qpdb->maxrrperset, rdataset);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
|
@ -1058,7 +1058,7 @@ bindrdataset(qpzonedb_t *qpdb, qpznode_t *node, dns_slabheader_t *header,
|
||||
rdataset->trust = header->trust;
|
||||
|
||||
if (OPTOUT(header)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_OPTOUT;
|
||||
rdataset->attributes.optout = true;
|
||||
}
|
||||
|
||||
rdataset->count = atomic_fetch_add_relaxed(&header->count, 1);
|
||||
@ -1074,18 +1074,18 @@ bindrdataset(qpzonedb_t *qpdb, qpznode_t *node, dns_slabheader_t *header,
|
||||
*/
|
||||
rdataset->slab.noqname = header->noqname;
|
||||
if (header->noqname != NULL) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_NOQNAME;
|
||||
rdataset->attributes.noqname = true;
|
||||
}
|
||||
rdataset->slab.closest = header->closest;
|
||||
if (header->closest != NULL) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CLOSEST;
|
||||
rdataset->attributes.closest = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy out re-signing information.
|
||||
*/
|
||||
if (RESIGN(header)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_RESIGN;
|
||||
rdataset->attributes.resign = true;
|
||||
rdataset->resign = (header->resign << 1) | header->resign_lsb;
|
||||
} else {
|
||||
rdataset->resign = 0;
|
||||
@ -1133,10 +1133,10 @@ setnsec3parameters(dns_db_t *db, qpz_version_t *version) {
|
||||
*/
|
||||
raw = dns_slabheader_raw(header);
|
||||
count = raw[0] * 256 + raw[1]; /* count */
|
||||
raw += DNS_RDATASET_COUNT + DNS_RDATASET_LENGTH;
|
||||
raw += DNS_RDATASET_LENGTH;
|
||||
while (count-- > 0U) {
|
||||
length = raw[0] * 256 + raw[1];
|
||||
raw += DNS_RDATASET_ORDER + DNS_RDATASET_LENGTH;
|
||||
raw += DNS_RDATASET_LENGTH;
|
||||
region.base = raw;
|
||||
region.length = length;
|
||||
raw += length;
|
||||
@ -2228,7 +2228,7 @@ loading_addrdataset(void *arg, const dns_name_t *name,
|
||||
|
||||
dns_slabheader_setownercase(newheader, name);
|
||||
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_RESIGN) != 0) {
|
||||
if (rdataset->attributes.resign) {
|
||||
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_RESIGN);
|
||||
newheader->resign =
|
||||
(isc_stdtime_t)(dns_time64_from32(rdataset->resign) >>
|
||||
@ -2635,11 +2635,11 @@ matchparams(dns_slabheader_t *header, qpz_search_t *search) {
|
||||
|
||||
raw = (unsigned char *)header + sizeof(*header);
|
||||
count = raw[0] * 256 + raw[1]; /* count */
|
||||
raw += DNS_RDATASET_COUNT + DNS_RDATASET_LENGTH;
|
||||
raw += DNS_RDATASET_LENGTH;
|
||||
|
||||
while (count-- > 0) {
|
||||
rdlen = raw[0] * 256 + raw[1];
|
||||
raw += DNS_RDATASET_ORDER + DNS_RDATASET_LENGTH;
|
||||
raw += DNS_RDATASET_LENGTH;
|
||||
region.base = raw;
|
||||
region.length = rdlen;
|
||||
dns_rdata_fromregion(&rdata, search->qpdb->common.rdclass,
|
||||
@ -4745,7 +4745,7 @@ qpzone_addrdataset(dns_db_t *db, dns_dbnode_t *dbnode,
|
||||
atomic_fetch_add_relaxed(&init_count, 1));
|
||||
|
||||
newheader->serial = version->serial;
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_RESIGN) != 0) {
|
||||
if (rdataset->attributes.resign) {
|
||||
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_RESIGN);
|
||||
newheader->resign =
|
||||
(isc_stdtime_t)(dns_time64_from32(rdataset->resign) >>
|
||||
@ -4857,7 +4857,7 @@ qpzone_subtractrdataset(dns_db_t *db, dns_dbnode_t *dbnode,
|
||||
newheader->serial = version->serial;
|
||||
atomic_init(&newheader->count,
|
||||
atomic_fetch_add_relaxed(&init_count, 1));
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_RESIGN) != 0) {
|
||||
if (rdataset->attributes.resign) {
|
||||
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_RESIGN);
|
||||
newheader->resign =
|
||||
(isc_stdtime_t)(dns_time64_from32(rdataset->resign) >>
|
||||
@ -5161,7 +5161,7 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
|
||||
|
||||
/*
|
||||
* If the currently processed NS record is in-bailiwick, mark any glue
|
||||
* RRsets found for it with DNS_RDATASETATTR_REQUIRED. Note that for
|
||||
* RRsets found for it with 'required' attribute. Note that for
|
||||
* simplicity, glue RRsets for all in-bailiwick NS records are marked
|
||||
* this way, even though dns_message_rendersection() only checks the
|
||||
* attributes for the first rdataset associated with the first name
|
||||
@ -5169,12 +5169,10 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
|
||||
*/
|
||||
if (glue != NULL && dns_name_issubdomain(name, &node->name)) {
|
||||
if (dns_rdataset_isassociated(&glue->rdataset_a)) {
|
||||
glue->rdataset_a.attributes |=
|
||||
DNS_RDATASETATTR_REQUIRED;
|
||||
glue->rdataset_a.attributes.required = true;
|
||||
}
|
||||
if (dns_rdataset_isassociated(&glue->rdataset_aaaa)) {
|
||||
glue->rdataset_aaaa.attributes |=
|
||||
DNS_RDATASETATTR_REQUIRED;
|
||||
glue->rdataset_aaaa.attributes.required = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5212,7 +5210,7 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
|
||||
return result;
|
||||
}
|
||||
|
||||
#define IS_REQUIRED_GLUE(r) (((r)->attributes & DNS_RDATASETATTR_REQUIRED) != 0)
|
||||
#define IS_REQUIRED_GLUE(r) (((r)->attributes.required))
|
||||
|
||||
static void
|
||||
addglue_to_message(dns_glue_t *ge, dns_message_t *msg) {
|
||||
|
@ -215,7 +215,7 @@ dns_rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
ttl = negsig->ttl;
|
||||
}
|
||||
rdataset->ttl = neg->ttl = negsig->ttl = ttl;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_NOQNAME;
|
||||
rdataset->attributes.noqname = true;
|
||||
rdataset->rdlist.noqname = name;
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
@ -230,7 +230,7 @@ dns_rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_name_t *noqname = NULL;
|
||||
|
||||
REQUIRE(rdataset != NULL);
|
||||
REQUIRE((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0);
|
||||
REQUIRE(rdataset->attributes.noqname);
|
||||
|
||||
rdclass = rdataset->rdclass;
|
||||
noqname = rdataset->rdlist.noqname;
|
||||
@ -312,7 +312,7 @@ dns_rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
ttl = negsig->ttl;
|
||||
}
|
||||
rdataset->ttl = neg->ttl = negsig->ttl = ttl;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CLOSEST;
|
||||
rdataset->attributes.closest = true;
|
||||
rdataset->rdlist.closest = name;
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
@ -327,7 +327,7 @@ dns_rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
dns_name_t *closest = NULL;
|
||||
|
||||
REQUIRE(rdataset != NULL);
|
||||
REQUIRE((rdataset->attributes & DNS_RDATASETATTR_CLOSEST) != 0);
|
||||
REQUIRE(rdataset->attributes.closest);
|
||||
|
||||
rdclass = rdataset->rdclass;
|
||||
closest = rdataset->rdlist.closest;
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <dns/ncache.h>
|
||||
#include <dns/rdata.h>
|
||||
#include <dns/rdataset.h>
|
||||
#include <dns/types.h>
|
||||
|
||||
static const char *trustnames[] = {
|
||||
"none", "pending-additional",
|
||||
@ -141,7 +142,7 @@ dns_rdataset_makequestion(dns_rdataset_t *rdataset, dns_rdataclass_t rdclass,
|
||||
rdataset->methods = &question_methods;
|
||||
rdataset->rdclass = rdclass;
|
||||
rdataset->type = type;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_QUESTION;
|
||||
rdataset->attributes.question = true;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
@ -208,9 +209,8 @@ dns_rdataset_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) {
|
||||
}
|
||||
|
||||
#define MAX_SHUFFLE 32
|
||||
#define WANT_FIXED(r) (((r)->attributes & DNS_RDATASETATTR_FIXEDORDER) != 0)
|
||||
#define WANT_RANDOM(r) (((r)->attributes & DNS_RDATASETATTR_RANDOMIZE) != 0)
|
||||
#define WANT_CYCLIC(r) (((r)->attributes & DNS_RDATASETATTR_CYCLIC) != 0)
|
||||
#define WANT_RANDOM(r) (((r)->attributes.order == dns_order_randomize))
|
||||
#define WANT_CYCLIC(r) (((r)->attributes.order == dns_order_cyclic))
|
||||
|
||||
struct towire_sort {
|
||||
int key;
|
||||
@ -257,12 +257,12 @@ towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
||||
want_random = WANT_RANDOM(rdataset);
|
||||
want_cyclic = WANT_CYCLIC(rdataset);
|
||||
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_QUESTION) != 0) {
|
||||
if (rdataset->attributes.question) {
|
||||
question = true;
|
||||
count = 1;
|
||||
result = dns_rdataset_first(rdataset);
|
||||
INSIST(result == ISC_R_NOMORE);
|
||||
} else if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
} else if (rdataset->attributes.negative) {
|
||||
/*
|
||||
* This is a negative caching rdataset.
|
||||
*/
|
||||
@ -481,7 +481,7 @@ dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
|
||||
*/
|
||||
|
||||
REQUIRE(DNS_RDATASET_VALID(rdataset));
|
||||
REQUIRE((rdataset->attributes & DNS_RDATASETATTR_QUESTION) == 0);
|
||||
REQUIRE(!rdataset->attributes.question);
|
||||
|
||||
if (limit != 0 && dns_rdataset_count(rdataset) > limit) {
|
||||
return DNS_R_TOOMANYRECORDS;
|
||||
@ -586,7 +586,7 @@ dns_rdataset_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
|
||||
REQUIRE(rdataset->methods != NULL);
|
||||
|
||||
if (rdataset->methods->setownercase != NULL &&
|
||||
(rdataset->attributes & DNS_RDATASETATTR_KEEPCASE) == 0)
|
||||
!rdataset->attributes.keepcase)
|
||||
{
|
||||
(rdataset->methods->setownercase)(rdataset, name);
|
||||
}
|
||||
@ -598,7 +598,7 @@ dns_rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
REQUIRE(rdataset->methods != NULL);
|
||||
|
||||
if (rdataset->methods->getownercase != NULL &&
|
||||
(rdataset->attributes & DNS_RDATASETATTR_KEEPCASE) == 0)
|
||||
!rdataset->attributes.keepcase)
|
||||
{
|
||||
(rdataset->methods->getownercase)(rdataset, name);
|
||||
}
|
||||
|
@ -1099,9 +1099,10 @@ rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
.slab.raw = noqname->neg,
|
||||
.link = nsec->link,
|
||||
.count = nsec->count,
|
||||
.attributes = nsec->attributes | DNS_RDATASETATTR_KEEPCASE,
|
||||
.attributes = nsec->attributes,
|
||||
.magic = nsec->magic,
|
||||
};
|
||||
nsec->attributes.keepcase = true;
|
||||
|
||||
dns__db_attachnode(db, node,
|
||||
&(dns_dbnode_t *){ NULL } DNS__DB_FLARG_PASS);
|
||||
@ -1117,9 +1118,10 @@ rdataset_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
.slab.raw = noqname->negsig,
|
||||
.link = nsecsig->link,
|
||||
.count = nsecsig->count,
|
||||
.attributes = nsecsig->attributes | DNS_RDATASETATTR_KEEPCASE,
|
||||
.attributes = nsecsig->attributes,
|
||||
.magic = nsecsig->magic,
|
||||
};
|
||||
nsecsig->attributes.keepcase = true;
|
||||
|
||||
dns_name_clone(&noqname->name, name);
|
||||
|
||||
@ -1152,9 +1154,10 @@ rdataset_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
.slab.raw = closest->neg,
|
||||
.link = nsec->link,
|
||||
.count = nsec->count,
|
||||
.attributes = nsec->attributes | DNS_RDATASETATTR_KEEPCASE,
|
||||
.attributes = nsec->attributes,
|
||||
.magic = nsec->magic,
|
||||
};
|
||||
nsec->attributes.keepcase = true;
|
||||
|
||||
dns__db_attachnode(db, node,
|
||||
&(dns_dbnode_t *){ NULL } DNS__DB_FLARG_PASS);
|
||||
@ -1170,9 +1173,10 @@ rdataset_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
||||
.slab.raw = closest->negsig,
|
||||
.link = nsecsig->link,
|
||||
.count = nsecsig->count,
|
||||
.attributes = nsecsig->attributes | DNS_RDATASETATTR_KEEPCASE,
|
||||
.attributes = nsecsig->attributes,
|
||||
.magic = nsecsig->magic,
|
||||
};
|
||||
nsecsig->attributes.keepcase = true;
|
||||
|
||||
dns_name_clone(&closest->name, name);
|
||||
|
||||
|
@ -629,9 +629,9 @@ enum {
|
||||
#define BADCOOKIE(a) (((a)->flags & FCTX_ADDRINFO_BADCOOKIE) != 0)
|
||||
#define ISDUALSTACK(a) (((a)->flags & FCTX_ADDRINFO_DUALSTACK) != 0)
|
||||
|
||||
#define NXDOMAIN(r) (((r)->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
|
||||
#define NEGATIVE(r) (((r)->attributes & DNS_RDATASETATTR_NEGATIVE) != 0)
|
||||
#define STATICSTUB(r) (((r)->attributes & DNS_RDATASETATTR_STATICSTUB) != 0)
|
||||
#define NXDOMAIN(r) (((r)->attributes.nxdomain))
|
||||
#define NEGATIVE(r) (((r)->attributes.negative))
|
||||
#define STATICSTUB(r) (((r)->attributes.staticstub))
|
||||
|
||||
#ifdef ENABLE_AFL
|
||||
bool dns_fuzzing_resolver = false;
|
||||
@ -5052,13 +5052,13 @@ clone_results(fetchctx_t *fctx) {
|
||||
}
|
||||
}
|
||||
|
||||
#define CACHE(r) (((r)->attributes & DNS_RDATASETATTR_CACHE) != 0)
|
||||
#define ANSWER(r) (((r)->attributes & DNS_RDATASETATTR_ANSWER) != 0)
|
||||
#define ANSWERSIG(r) (((r)->attributes & DNS_RDATASETATTR_ANSWERSIG) != 0)
|
||||
#define EXTERNAL(r) (((r)->attributes & DNS_RDATASETATTR_EXTERNAL) != 0)
|
||||
#define CHAINING(r) (((r)->attributes & DNS_RDATASETATTR_CHAINING) != 0)
|
||||
#define CHASE(r) (((r)->attributes & DNS_RDATASETATTR_CHASE) != 0)
|
||||
#define CHECKNAMES(r) (((r)->attributes & DNS_RDATASETATTR_CHECKNAMES) != 0)
|
||||
#define CACHE(r) (((r)->attributes.cache))
|
||||
#define ANSWER(r) (((r)->attributes.answer))
|
||||
#define ANSWERSIG(r) (((r)->attributes.answersig))
|
||||
#define EXTERNAL(r) (((r)->attributes.external))
|
||||
#define CHAINING(r) (((r)->attributes.chaining))
|
||||
#define CHASE(r) (((r)->attributes.chase))
|
||||
#define CHECKNAMES(r) (((r)->attributes.checknames))
|
||||
|
||||
/*
|
||||
* Cancel validators associated with '*fctx' if it is ready to be
|
||||
@ -5953,7 +5953,7 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_message_t *message,
|
||||
* Mark the rdataset as being prefetch eligible.
|
||||
*/
|
||||
if (rdataset->ttl >= fctx->res->view->prefetch_eligible) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_PREFETCH;
|
||||
rdataset->attributes.prefetch = true;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -6016,8 +6016,7 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_message_t *message,
|
||||
*/
|
||||
if (rdataset->ttl >= fctx->res->view->prefetch_eligible)
|
||||
{
|
||||
rdataset->attributes |=
|
||||
DNS_RDATASETATTR_PREFETCH;
|
||||
rdataset->attributes.prefetch = true;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -6584,11 +6583,11 @@ mark_related(dns_name_t *name, dns_rdataset_t *rdataset, bool external,
|
||||
*/
|
||||
if (!CACHE(rdataset)) {
|
||||
name->attributes.chase = true;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CHASE;
|
||||
rdataset->attributes.chase = true;
|
||||
}
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rdataset->attributes.cache = true;
|
||||
if (external) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_EXTERNAL;
|
||||
rdataset->attributes.external = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7154,8 +7153,7 @@ checknamessection(dns_message_t *message, dns_section_t section) {
|
||||
rdata.type, false) ||
|
||||
!dns_rdata_checknames(&rdata, name, NULL))
|
||||
{
|
||||
rdataset->attributes |=
|
||||
DNS_RDATASETATTR_CHECKNAMES;
|
||||
rdataset->attributes.checknames = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -8489,8 +8487,8 @@ rctx_answer_any(respctx_t *rctx) {
|
||||
|
||||
rctx->aname->attributes.cache = true;
|
||||
rctx->aname->attributes.answer = true;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_ANSWER;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rdataset->attributes.answer = true;
|
||||
rdataset->attributes.cache = true;
|
||||
rdataset->trust = rctx->trust;
|
||||
}
|
||||
|
||||
@ -8532,8 +8530,8 @@ rctx_answer_match(respctx_t *rctx) {
|
||||
|
||||
rctx->aname->attributes.cache = true;
|
||||
rctx->aname->attributes.answer = true;
|
||||
rctx->ardataset->attributes |= DNS_RDATASETATTR_ANSWER;
|
||||
rctx->ardataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
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,
|
||||
@ -8551,8 +8549,8 @@ rctx_answer_match(respctx_t *rctx) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_ANSWERSIG;
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
sigrdataset->attributes.answersig = true;
|
||||
sigrdataset->attributes.cache = true;
|
||||
sigrdataset->trust = rctx->trust;
|
||||
break;
|
||||
}
|
||||
@ -8594,9 +8592,9 @@ rctx_answer_cname(respctx_t *rctx) {
|
||||
rctx->cname->attributes.cache = true;
|
||||
rctx->cname->attributes.answer = true;
|
||||
rctx->cname->attributes.chaining = true;
|
||||
rctx->crdataset->attributes |= DNS_RDATASETATTR_ANSWER;
|
||||
rctx->crdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rctx->crdataset->attributes |= DNS_RDATASETATTR_CHAINING;
|
||||
rctx->crdataset->attributes.answer = true;
|
||||
rctx->crdataset->attributes.cache = true;
|
||||
rctx->crdataset->attributes.chaining = true;
|
||||
rctx->crdataset->trust = rctx->trust;
|
||||
|
||||
ISC_LIST_FOREACH (rctx->cname->list, sigrdataset, link) {
|
||||
@ -8611,8 +8609,8 @@ rctx_answer_cname(respctx_t *rctx) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_ANSWERSIG;
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
sigrdataset->attributes.answersig = true;
|
||||
sigrdataset->attributes.cache = true;
|
||||
sigrdataset->trust = rctx->trust;
|
||||
break;
|
||||
}
|
||||
@ -8644,9 +8642,9 @@ rctx_answer_dname(respctx_t *rctx) {
|
||||
rctx->dname->attributes.cache = true;
|
||||
rctx->dname->attributes.answer = true;
|
||||
rctx->dname->attributes.chaining = true;
|
||||
rctx->drdataset->attributes |= DNS_RDATASETATTR_ANSWER;
|
||||
rctx->drdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rctx->drdataset->attributes |= DNS_RDATASETATTR_CHAINING;
|
||||
rctx->drdataset->attributes.answer = true;
|
||||
rctx->drdataset->attributes.cache = true;
|
||||
rctx->drdataset->attributes.chaining = true;
|
||||
rctx->drdataset->trust = rctx->trust;
|
||||
|
||||
ISC_LIST_FOREACH (rctx->dname->list, sigrdataset, link) {
|
||||
@ -8661,8 +8659,8 @@ rctx_answer_dname(respctx_t *rctx) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_ANSWERSIG;
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
sigrdataset->attributes.answersig = true;
|
||||
sigrdataset->attributes.cache = true;
|
||||
sigrdataset->trust = rctx->trust;
|
||||
break;
|
||||
}
|
||||
@ -8698,8 +8696,7 @@ rctx_authority_positive(respctx_t *rctx) {
|
||||
rdataset->covers == dns_rdatatype_ns))
|
||||
{
|
||||
name->attributes.cache = true;
|
||||
rdataset->attributes |=
|
||||
DNS_RDATASETATTR_CACHE;
|
||||
rdataset->attributes.cache = true;
|
||||
|
||||
if (rctx->aa) {
|
||||
rdataset->trust =
|
||||
@ -8933,7 +8930,7 @@ rctx_authority_negative(respctx_t *rctx) {
|
||||
rctx->ns_rdataset = rdataset;
|
||||
}
|
||||
name->attributes.cache = true;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rdataset->attributes.cache = true;
|
||||
rdataset->trust = dns_trust_glue;
|
||||
break;
|
||||
case dns_rdatatype_soa:
|
||||
@ -8957,7 +8954,7 @@ rctx_authority_negative(respctx_t *rctx) {
|
||||
rctx->soa_name = name;
|
||||
}
|
||||
name->attributes.ncache = true;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_NCACHE;
|
||||
rdataset->attributes.ncache = true;
|
||||
if (rctx->aa) {
|
||||
rdataset->trust =
|
||||
dns_trust_authauthority;
|
||||
@ -9049,12 +9046,10 @@ rctx_authority_dnssec(respctx_t *rctx) {
|
||||
case dns_rdatatype_nsec3:
|
||||
if (rctx->negative) {
|
||||
name->attributes.ncache = true;
|
||||
rdataset->attributes |=
|
||||
DNS_RDATASETATTR_NCACHE;
|
||||
rdataset->attributes.ncache = true;
|
||||
} else if (type == dns_rdatatype_nsec) {
|
||||
name->attributes.cache = true;
|
||||
rdataset->attributes |=
|
||||
DNS_RDATASETATTR_CACHE;
|
||||
rdataset->attributes.cache = true;
|
||||
}
|
||||
|
||||
if (rctx->aa) {
|
||||
@ -9100,7 +9095,7 @@ rctx_authority_dnssec(respctx_t *rctx) {
|
||||
}
|
||||
|
||||
name->attributes.cache = true;
|
||||
rdataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||
rdataset->attributes.cache = true;
|
||||
|
||||
if ((fctx->options & DNS_FETCHOPT_NONTA) != 0) {
|
||||
checknta = false;
|
||||
@ -9286,7 +9281,7 @@ again:
|
||||
name->attributes.chase = false;
|
||||
ISC_LIST_FOREACH (name->list, rdataset, link) {
|
||||
if (CHASE(rdataset)) {
|
||||
rdataset->attributes &= ~DNS_RDATASETATTR_CHASE;
|
||||
rdataset->attributes.chase = false;
|
||||
(void)dns_rdataset_additionaldata(
|
||||
rdataset, name, check_related, rctx,
|
||||
DNS_RDATASET_MAXADDITIONAL);
|
||||
|
@ -115,8 +115,8 @@ enum valattr {
|
||||
#define OFFLOADED(v) (((v)->attributes & VALATTR_OFFLOADED) != 0)
|
||||
#define COMPLETE(v) (((v)->attributes & VALATTR_COMPLETE) != 0)
|
||||
|
||||
#define NEGATIVE(r) (((r)->attributes & DNS_RDATASETATTR_NEGATIVE) != 0)
|
||||
#define NXDOMAIN(r) (((r)->attributes & DNS_RDATASETATTR_NXDOMAIN) != 0)
|
||||
#define NEGATIVE(r) (((r)->attributes.negative))
|
||||
#define NXDOMAIN(r) (((r)->attributes.nxdomain))
|
||||
|
||||
#define MAXVALIDATIONS(r) (((r)->attributes & VALATTR_MAXVALIDATIONS) != 0)
|
||||
#define MAXVALIDATIONFAILS(r) \
|
||||
|
@ -1110,7 +1110,7 @@ db_find:
|
||||
* addresses we use the configured server addresses.
|
||||
*/
|
||||
if (dns_zone_gettype(zone) == dns_zone_staticstub) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_STATICSTUB;
|
||||
rdataset->attributes.staticstub = true;
|
||||
}
|
||||
|
||||
if (use_cache && view->cachedb != NULL && db != view->hints) {
|
||||
|
@ -148,13 +148,13 @@
|
||||
#define QUERY_STALETIMEOUT(q) (((q)->dboptions & DNS_DBFIND_STALETIMEOUT) != 0)
|
||||
|
||||
/*% Does the rdataset 'r' have an attached 'No QNAME Proof'? */
|
||||
#define NOQNAME(r) (((r)->attributes & DNS_RDATASETATTR_NOQNAME) != 0)
|
||||
#define NOQNAME(r) (((r)->attributes.noqname))
|
||||
|
||||
/*% Does the rdataset 'r' contain a stale answer? */
|
||||
#define STALE(r) (((r)->attributes & DNS_RDATASETATTR_STALE) != 0)
|
||||
#define STALE(r) (((r)->attributes.stale))
|
||||
|
||||
/*% Does the rdataset 'r' is stale and within stale-refresh-time? */
|
||||
#define STALE_WINDOW(r) (((r)->attributes & DNS_RDATASETATTR_STALE_WINDOW) != 0)
|
||||
#define STALE_WINDOW(r) (((r)->attributes.stale_window))
|
||||
|
||||
#ifdef WANT_QUERYTRACE
|
||||
static void
|
||||
@ -511,9 +511,6 @@ query_addwildcardproof(query_ctx_t *qctx, bool ispositive, bool nodata);
|
||||
static void
|
||||
query_addauth(query_ctx_t *qctx);
|
||||
|
||||
static void
|
||||
query_clear_stale(ns_client_t *client);
|
||||
|
||||
/*
|
||||
* Increment query statistics counters.
|
||||
*/
|
||||
@ -2179,7 +2176,7 @@ query_setorder(query_ctx_t *qctx, dns_name_t *name, dns_rdataset_t *rdataset) {
|
||||
UNUSED(client);
|
||||
|
||||
if (order != NULL) {
|
||||
rdataset->attributes |= dns_order_find(
|
||||
rdataset->attributes.order = dns_order_find(
|
||||
order, name, rdataset->type, rdataset->rdclass);
|
||||
}
|
||||
}
|
||||
@ -2269,12 +2266,11 @@ query_addrrset(query_ctx_t *qctx, dns_name_t **namep,
|
||||
if (dbuf != NULL) {
|
||||
ns_client_releasename(client, namep);
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_REQUIRED) != 0) {
|
||||
mrdataset->attributes |= DNS_RDATASETATTR_REQUIRED;
|
||||
if (rdataset->attributes.required) {
|
||||
mrdataset->attributes.required = true;
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_STALE_ADDED) != 0)
|
||||
{
|
||||
mrdataset->attributes |= DNS_RDATASETATTR_STALE_ADDED;
|
||||
if (rdataset->attributes.stale_added) {
|
||||
mrdataset->attributes.stale_added = true;
|
||||
}
|
||||
return;
|
||||
} else if (result == DNS_R_NXDOMAIN) {
|
||||
@ -2826,7 +2822,7 @@ query_prefetch(ns_client_t *client, dns_name_t *qname,
|
||||
if (FETCH_RECTYPE_PREFETCH(client) != NULL ||
|
||||
client->inner.view->prefetch_trigger == 0U ||
|
||||
rdataset->ttl > client->inner.view->prefetch_trigger ||
|
||||
(rdataset->attributes & DNS_RDATASETATTR_PREFETCH) == 0)
|
||||
!rdataset->attributes.prefetch)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -4364,7 +4360,7 @@ rpz_ck_dnssec(ns_client_t *client, isc_result_t qresult,
|
||||
/*
|
||||
* Look for a signature in a negative cache rdataset.
|
||||
*/
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) == 0) {
|
||||
if (!rdataset->attributes.negative) {
|
||||
return true;
|
||||
}
|
||||
found = dns_fixedname_initname(&fixed);
|
||||
@ -4715,7 +4711,7 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
|
||||
{
|
||||
return ISC_R_NOTFOUND;
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
if (rdataset->attributes.negative) {
|
||||
DNS_RDATASET_FOREACH (rdataset) {
|
||||
dns_ncache_current(rdataset, found, &trdataset);
|
||||
type = trdataset.type;
|
||||
@ -4849,7 +4845,7 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
|
||||
{
|
||||
return ISC_R_NOTFOUND;
|
||||
}
|
||||
if ((rdataset->attributes & DNS_RDATASETATTR_NEGATIVE) != 0) {
|
||||
if (rdataset->attributes.negative) {
|
||||
DNS_RDATASET_FOREACH (rdataset) {
|
||||
dns_ncache_current(rdataset, found, &trdataset);
|
||||
type = trdataset.type;
|
||||
@ -5987,7 +5983,7 @@ query_lookup(query_ctx_t *qctx) {
|
||||
* clean it up if needed when we resume from recursion.
|
||||
*/
|
||||
qctx->client->query.attributes |= NS_QUERYATTR_STALEOK;
|
||||
qctx->rdataset->attributes |= DNS_RDATASETATTR_STALE_ADDED;
|
||||
qctx->rdataset->attributes.stale_added = true;
|
||||
}
|
||||
|
||||
result = query_gotanswer(qctx, result);
|
||||
@ -5997,11 +5993,11 @@ cleanup:
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear all rdatasets from the message that are in the given section and
|
||||
* that have the 'attr' attribute set.
|
||||
* Clear all rdatasets from the message, or only those with stale_added
|
||||
* attribute set.
|
||||
*/
|
||||
static void
|
||||
message_clearrdataset(dns_message_t *msg, unsigned int attr) {
|
||||
message_clearrdataset(dns_message_t *msg, bool stale_only) {
|
||||
unsigned int i;
|
||||
|
||||
/*
|
||||
@ -6010,7 +6006,8 @@ message_clearrdataset(dns_message_t *msg, unsigned int attr) {
|
||||
for (i = DNS_SECTION_ANSWER; i < DNS_SECTION_MAX; i++) {
|
||||
ISC_LIST_FOREACH (msg->sections[i], name, link) {
|
||||
ISC_LIST_FOREACH (name->list, rds, link) {
|
||||
if ((rds->attributes & attr) != attr) {
|
||||
if (stale_only && !rds->attributes.stale_added)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ISC_LIST_UNLINK(name->list, rds, link);
|
||||
@ -6030,15 +6027,6 @@ message_clearrdataset(dns_message_t *msg, unsigned int attr) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear any rdatasets from the client's message that were added on a lookup
|
||||
* due to a client timeout.
|
||||
*/
|
||||
static void
|
||||
query_clear_stale(ns_client_t *client) {
|
||||
message_clearrdataset(client->message, DNS_RDATASETATTR_STALE_ADDED);
|
||||
}
|
||||
|
||||
/*
|
||||
* Event handler to resume processing a query after recursion, or when a
|
||||
* client timeout is triggered. If the query has timed out or been cancelled
|
||||
@ -6900,8 +6888,7 @@ query_checkrrl(query_ctx_t *qctx, isc_result_t result) {
|
||||
} else if (result == DNS_R_NCACHENXDOMAIN &&
|
||||
qctx->rdataset != NULL &&
|
||||
dns_rdataset_isassociated(qctx->rdataset) &&
|
||||
(qctx->rdataset->attributes &
|
||||
DNS_RDATASETATTR_NEGATIVE) != 0)
|
||||
qctx->rdataset->attributes.negative)
|
||||
{
|
||||
/*
|
||||
* Try to use owner name in the negative cache SOA.
|
||||
@ -7590,7 +7577,7 @@ query_addnoqnameproof(query_ctx_t *qctx) {
|
||||
query_addrrset(qctx, &fname, &neg, &negsig, dbuf,
|
||||
DNS_SECTION_AUTHORITY);
|
||||
|
||||
if ((qctx->noqname->attributes & DNS_RDATASETATTR_CLOSEST) == 0) {
|
||||
if (!qctx->noqname->attributes.closest) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -7967,7 +7954,11 @@ query_addanswer(query_ctx_t *qctx) {
|
||||
!QUERY_STALETIMEOUT(&qctx->client->query) && !qctx->refresh_rrset)
|
||||
{
|
||||
CCTRACE(ISC_LOG_DEBUG(3), "query_clear_stale");
|
||||
query_clear_stale(qctx->client);
|
||||
/*
|
||||
* Clear any rdatasets from the client's message that were added
|
||||
* on a lookup due to a client timeout.
|
||||
*/
|
||||
message_clearrdataset(qctx->client->message, true);
|
||||
/*
|
||||
* We can clear the attribute to prevent redundant clearing
|
||||
* in subsequent lookups.
|
||||
@ -10544,7 +10535,7 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
|
||||
}
|
||||
|
||||
if (section == DNS_SECTION_ADDITIONAL) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_REQUIRED;
|
||||
rdataset->attributes.required = true;
|
||||
}
|
||||
query_addrrset(qctx, &name, &rdataset, sigrdatasetp, NULL,
|
||||
section);
|
||||
@ -11240,8 +11231,7 @@ query_glueanswer(query_ctx_t *qctx) {
|
||||
link);
|
||||
ISC_LIST_PREPEND(name->list, rdataset,
|
||||
link);
|
||||
rdataset->attributes |=
|
||||
DNS_RDATASETATTR_REQUIRED;
|
||||
rdataset->attributes.required = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -11402,7 +11392,7 @@ ns_query_done(query_ctx_t *qctx) {
|
||||
* RRsets, clear the RRsets from the message before doing the
|
||||
* refresh.
|
||||
*/
|
||||
message_clearrdataset(qctx->client->message, 0);
|
||||
message_clearrdataset(qctx->client->message, false);
|
||||
query_stale_refresh(qctx->client);
|
||||
}
|
||||
|
||||
|
@ -179,9 +179,7 @@ ISC_LOOP_TEST_IMPL(dns_dbfind_staleok) {
|
||||
do {
|
||||
count++;
|
||||
assert_in_range(count, 1, 21); /* loop sanity */
|
||||
assert_int_equal(rdataset.attributes &
|
||||
DNS_RDATASETATTR_STALE,
|
||||
0);
|
||||
assert_int_equal(rdataset.attributes.stale, false);
|
||||
assert_true(rdataset.ttl > 0);
|
||||
dns_db_detachnode(db, &node);
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
@ -215,9 +213,8 @@ ISC_LOOP_TEST_IMPL(dns_dbfind_staleok) {
|
||||
count++;
|
||||
assert_in_range(count, 0, 49); /* loop sanity */
|
||||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
assert_int_equal(rdataset.attributes &
|
||||
DNS_RDATASETATTR_STALE,
|
||||
DNS_RDATASETATTR_STALE);
|
||||
assert_int_equal(rdataset.attributes.stale,
|
||||
true);
|
||||
dns_db_detachnode(db, &node);
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user