2
0
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:
Petr Špaček 2025-07-10 09:18:07 +00:00
commit 08814b10a1
23 changed files with 218 additions and 276 deletions

View File

@ -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(

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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

View File

@ -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);
/*%<

View File

@ -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.
*/

View File

@ -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,

View File

@ -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,

View File

@ -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 */

View File

@ -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;
}

View File

@ -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));

View File

@ -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

View File

@ -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) {

View File

@ -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) {

View File

@ -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;

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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) \

View File

@ -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) {

View File

@ -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);
}

View File

@ -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);