From: Daniel Salzman Date: Sun, 26 Apr 2026 18:26:10 +0000 (+0200) Subject: node: replace NODE_FLAGS_DELEG with NODE_FLAGS_DELEG_NS and NODE_FLAGS_DELEG_DELEG X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=ee3a49d97eeeb6cc2b2a53f4fad2baee19e22fe9;p=thirdparty%2Fknot-dns.git node: replace NODE_FLAGS_DELEG with NODE_FLAGS_DELEG_NS and NODE_FLAGS_DELEG_DELEG --- diff --git a/src/knot/nameserver/internet.c b/src/knot/nameserver/internet.c index e7757f81f9..46fd228409 100644 --- a/src/knot/nameserver/internet.c +++ b/src/knot/nameserver/internet.c @@ -44,6 +44,12 @@ static int wildcard_visit(knotd_qdata_t *qdata, const zone_node_t *node, return KNOT_EOK; } +inline static bool node_is_deleg(const knotd_qdata_t *qdata, const zone_node_t *node) +{ + return (node->flags & NODE_FLAGS_DELEG_NS) || + (qdata->deleg_aware && (node->flags & NODE_FLAGS_DELEG_DELEG)); +} + /*! \brief Synthesizes a CNAME RR from a DNAME. */ static int dname_cname_synth(const knot_rrset_t *dname_rr, const knot_dname_t *qname, @@ -177,7 +183,7 @@ static int put_delegation(knot_pkt_t *pkt, knotd_qdata_t *qdata) } uint16_t rr_type = KNOT_RRTYPE_NS; - if (qdata->deleg_aware && node_rrtype_exists(qdata->extra->node, KNOT_RRTYPE_DELEG)) { + if (qdata->deleg_aware && (qdata->extra->node->flags & NODE_FLAGS_DELEG_DELEG)) { rr_type = KNOT_RRTYPE_DELEG; } @@ -366,13 +372,12 @@ static knotd_in_state_t name_found(knot_pkt_t *pkt, knotd_qdata_t *qdata) { uint16_t qtype = knot_pkt_qtype(pkt); - bool at_deleg = (qdata->extra->node->flags & NODE_FLAGS_DELEG); + bool at_deleg = node_is_deleg(qdata, qdata->extra->node); bool below_deleg = (qdata->extra->node->flags & NODE_FLAGS_NONAUTH); bool parent_side = (qtype == KNOT_RRTYPE_DS); if (qdata->deleg_aware) { parent_side = parent_side || (qtype == KNOT_RRTYPE_DELEG); } else { - at_deleg = at_deleg && node_rrtype_exists(qdata->extra->node, KNOT_RRTYPE_NS); below_deleg = below_deleg && !(qdata->extra->node->flags & NODE_FLAGS_NONAUTH_DELEG); } @@ -453,8 +458,7 @@ static knotd_in_state_t name_not_found(knot_pkt_t *pkt, knotd_qdata_t *qdata) } /* Name is below delegation. */ - if ((node->flags & NODE_FLAGS_DELEG) && - (qdata->deleg_aware || node_rrtype_exists(node, KNOT_RRTYPE_NS))) { + if (node_is_deleg(qdata, node)) { qdata->extra->node = node; return KNOTD_IN_STATE_DELEG; } diff --git a/src/knot/nameserver/nsec_proofs.c b/src/knot/nameserver/nsec_proofs.c index 1aae8ef7d3..7fbf8b4600 100644 --- a/src/knot/nameserver/nsec_proofs.c +++ b/src/knot/nameserver/nsec_proofs.c @@ -624,7 +624,7 @@ int nsec_prove_dp_security(knot_pkt_t *pkt, knotd_qdata_t *qdata) // Prove that DS and/or DELEG does not exist. if (knot_rrset_empty(&rrset) || - (qdata->deleg_aware && !node_rrtype_exists(qdata->extra->node, KNOT_RRTYPE_DELEG))) { + (qdata->deleg_aware && !(qdata->extra->node->flags & NODE_FLAGS_DELEG_DELEG))) { ret = put_nodata(qdata->extra->node, qdata->extra->encloser, qdata->extra->previous, qdata->extra->contents, qdata->name, qdata, pkt); } diff --git a/src/knot/zone/adjust.c b/src/knot/zone/adjust.c index 26acfd6ac2..da0f54f387 100644 --- a/src/knot/zone/adjust.c +++ b/src/knot/zone/adjust.c @@ -41,21 +41,24 @@ int adjust_cb_flags(zone_node_t *node, adjust_ctx_t *ctx) if (parent && (parent->flags & NODE_FLAGS_DELEG || parent->flags & NODE_FLAGS_NONAUTH)) { node->flags |= NODE_FLAGS_NONAUTH; - if (parent->flags & NODE_FLAGS_NONAUTH_DELEG || - ((parent->flags & NODE_FLAGS_DELEG) && !node_rrtype_exists(parent, KNOT_RRTYPE_NS))) { + if ((parent->flags & NODE_FLAGS_NONAUTH_DELEG) || + ((parent->flags & NODE_FLAGS_DELEG_DELEG) && !(parent->flags & NODE_FLAGS_DELEG_NS))) { node->flags |= NODE_FLAGS_NONAUTH_DELEG; } - } else if (node_rrtype_exists(node, KNOT_RRTYPE_DELEG) && node != ctx->zone->apex) { - ctx->zone->nodes->flags |= ZONE_TREE_CONTAINS_DELEG; - node->flags |= NODE_FLAGS_DELEG; - set_subt_auth = true; - } else if (node_rrtype_exists(node, KNOT_RRTYPE_NS) && node != ctx->zone->apex) { - node->flags |= NODE_FLAGS_DELEG; - if (node_rrtype_exists(node, KNOT_RRTYPE_DS)) { + } else { + if (node_rrtype_exists(node, KNOT_RRTYPE_DELEG) && node != ctx->zone->apex) { + ctx->zone->nodes->flags |= ZONE_TREE_CONTAINS_DELEG; + node->flags |= NODE_FLAGS_DELEG_DELEG; + set_subt_auth = true; + } + if (node_rrtype_exists(node, KNOT_RRTYPE_NS) && node != ctx->zone->apex) { + node->flags |= NODE_FLAGS_DELEG_NS; + if (node_rrtype_exists(node, KNOT_RRTYPE_DS)) { + set_subt_auth = true; + } + } else if (has_data) { set_subt_auth = true; } - } else if (has_data) { - set_subt_auth = true; } if (set_subt_auth) { diff --git a/src/knot/zone/node.h b/src/knot/zone/node.h index 0ad1514f7e..54940b5379 100644 --- a/src/knot/zone/node.h +++ b/src/knot/zone/node.h @@ -67,14 +67,14 @@ struct rr_data { enum node_flags { /*! \brief Node is authoritative, default. */ NODE_FLAGS_AUTH = 0 << 0, - /*! \brief Node is a delegation point (i.e. marking a zone cut). */ - NODE_FLAGS_DELEG = 1 << 0, + /*! \brief Node is a delegation point using NS (i.e. marking a zone cut). */ + NODE_FLAGS_DELEG_NS = 1 << 0, + /*! \brief Node is a delegation point using DELEG (i.e. marking a zone cut). */ + NODE_FLAGS_DELEG_DELEG = 1 << 1, /*! \brief Node is not authoritative (i.e. below a zone cut). */ - NODE_FLAGS_NONAUTH = 1 << 1, + NODE_FLAGS_NONAUTH = 1 << 2, /*! \brief RRSIGs in node have been cryptographically validated by Knot. */ - NODE_FLAGS_RRSIGS_VALID = 1 << 2, - /*! \brief Node is empty and will be deleted after update. */ - NODE_FLAGS_EMPTY = 1 << 3, + NODE_FLAGS_RRSIGS_VALID = 1 << 3, /*! \brief Node has a wildcard child. */ NODE_FLAGS_WILDCARD_CHILD = 1 << 4, /*! \brief Is this NSEC3 node compatible with zone's NSEC3PARAMS ? */ @@ -99,6 +99,8 @@ enum node_flags { NODE_FLAGS_NONAUTH_DELEG = 1 << 14, }; +#define NODE_FLAGS_DELEG (NODE_FLAGS_DELEG_NS | NODE_FLAGS_DELEG_DELEG) + typedef void (*node_addrem_cb)(zone_node_t *, void *); typedef zone_node_t *(*node_new_cb)(const knot_dname_t *, void *); diff --git a/src/knot/zone/semantic-check.c b/src/knot/zone/semantic-check.c index 68b89a4b14..f60120e223 100644 --- a/src/knot/zone/semantic-check.c +++ b/src/knot/zone/semantic-check.c @@ -153,7 +153,7 @@ static int check_delegation(const zone_node_t *node, semchecks_data_t *data) const knot_rdataset_t *ns_rrs = node_rdataset(node, KNOT_RRTYPE_NS); if (ns_rrs == NULL) { - if (node_rrtype_exists(node, KNOT_RRTYPE_DELEG)) { + if (node->flags & NODE_FLAGS_DELEG_DELEG) { return KNOT_EOK; } assert(data->zone->apex == node);