}
uint16_t qtype = knot_pkt_qtype(qdata->query);
- bool is_apex = qdata->extra->zone
- && qdata->extra->zone->contents
- && qdata->extra->node == qdata->extra->zone->contents->apex;
+ bool is_apex = (qdata->extra->contents != NULL &&
+ qdata->extra->node == qdata->extra->contents->apex);
bitmap_add_synth(map, is_apex);
}
}
if (ret == KNOT_EOK || knot_time_cmp(ctx->event_rollover, mod->dnssec->now) <= 0) {
- update_policy_from_zone(mod->dnssec->policy, qdata->extra->zone->contents);
+ update_policy_from_zone(mod->dnssec->policy, qdata->extra->contents);
ret = knot_dnssec_key_rollover(mod->dnssec, KEY_ROLL_ALLOW_KSK_ROLL | KEY_ROLL_ALLOW_ZSK_ROLL, &resch);
}
if (ret == KNOT_EOK) {
/* Put data to process. */
xfr_stats_begin(&axfr->proc.stats);
- zone_contents_t *contents = qdata->extra->zone->contents;
+ const zone_contents_t *contents = qdata->extra->contents;
/* Must be non-NULL for the first message. */
assert(contents);
ptrlist_add(&axfr->proc.nodes, contents->nodes, mm);
switch (ret) {
case KNOT_EOK: /* OK */
AXFROUT_LOG(LOG_INFO, qdata, "started, serial %u",
- zone_contents_serial(qdata->extra->zone->contents));
+ zone_contents_serial(qdata->extra->contents));
break;
case KNOT_EDENIED: /* Not authorized, already logged. */
return KNOT_STATE_FAIL;
static bool have_dnssec(knotd_qdata_t *qdata)
{
return knot_pkt_has_dnssec(qdata->query) &&
- qdata->extra->zone->contents->dnssec;
+ qdata->extra->contents->dnssec;
}
/*! \brief This is a wildcard-covered or any other terminal node for QNAME.
/* Find wildcard child in the zone. */
const zone_node_t *wildcard_node =
zone_contents_find_wildcard_child(
- qdata->extra->zone->contents, qdata->extra->encloser);
+ qdata->extra->contents, qdata->extra->encloser);
qdata->extra->node = wildcard_node;
assert(qdata->extra->node != NULL);
static int solve_name(int state, knot_pkt_t *pkt, knotd_qdata_t *qdata)
{
- int ret = zone_contents_find_dname(qdata->extra->zone->contents, qdata->name,
+ int ret = zone_contents_find_dname(qdata->extra->contents, qdata->name,
&qdata->extra->node, &qdata->extra->encloser,
&qdata->extra->previous);
static int solve_authority(int state, knot_pkt_t *pkt, knotd_qdata_t *qdata, void *ctx)
{
int ret = KNOT_ERROR;
- const zone_contents_t *zone_contents = qdata->extra->zone->contents;
+ const zone_contents_t *zone_contents = qdata->extra->contents;
switch (state) {
case KNOTD_IN_STATE_HIT: /* Positive response. */
#undef IXFR_SAFE_PUT
static int ixfr_load_chsets(journal_read_t **journal_read, zone_t *zone,
- const knot_rrset_t *their_soa)
+ const zone_contents_t *contents, const knot_rrset_t *their_soa)
{
assert(journal_read);
assert(zone);
/* Compare serials. */
- uint32_t serial_to = zone_contents_serial(zone->contents), j_serial_to;
+ uint32_t serial_to = zone_contents_serial(contents), j_serial_to;
uint32_t serial_from = knot_soa_serial(their_soa->rrs.rdata);
if (serial_compare(serial_to, serial_from) & SERIAL_MASK_LEQ) { /* We have older/same age zone. */
return KNOT_EUPTODATE;
}
memset(xfer, 0, sizeof(struct ixfr_proc));
- int ret = ixfr_load_chsets(&xfer->journal_ctx, (zone_t *)qdata->extra->zone, their_soa);
+ int ret = ixfr_load_chsets(&xfer->journal_ctx, (zone_t *)qdata->extra->zone,
+ qdata->extra->contents, their_soa);
if (ret != KNOT_EOK) {
mm_free(mm, xfer);
return ret;
ptrlist_add(&xfer->proc.nodes, xfer->journal_ctx, mm);
xfer->soa_from = knot_soa_serial(their_soa->rrs.rdata);
- xfer->soa_to = zone_contents_serial(qdata->extra->zone->contents);
+ xfer->soa_to = zone_contents_serial(qdata->extra->contents);
qdata->extra->ext = xfer;
qdata->extra->ext_cleanup = &ixfr_answer_cleanup;
}
/* Guaranteed to have zone contents. */
- const zone_node_t *apex = qdata->extra->zone->contents->apex;
+ const zone_node_t *apex = qdata->extra->contents->apex;
knot_rrset_t soa_rr = node_rrset(apex, KNOT_RRTYPE_SOA);
if (knot_rrset_empty(&soa_rr)) {
return KNOT_STATE_FAIL;
int nsec_prove_wildcards(knot_pkt_t *pkt, knotd_qdata_t *qdata)
{
- if (qdata->extra->zone->contents == NULL) {
+ if (qdata->extra->contents == NULL) {
return KNOT_EINVAL;
}
return KNOT_EINVAL;
}
ret = put_wildcard_answer(item->node, item->prev,
- qdata->extra->zone->contents,
+ qdata->extra->contents,
item->sname, qdata, pkt);
if (ret != KNOT_EOK) {
break;
int nsec_prove_nodata(knot_pkt_t *pkt, knotd_qdata_t *qdata)
{
- if (qdata->extra->zone->contents == NULL || qdata->extra->node == NULL) {
+ if (qdata->extra->contents == NULL || qdata->extra->node == NULL) {
return KNOT_EINVAL;
}
return put_nodata(qdata->extra->node, qdata->extra->encloser, qdata->extra->previous,
- qdata->extra->zone->contents, qdata->name, qdata, pkt);
+ qdata->extra->contents, qdata->name, qdata, pkt);
}
int nsec_prove_nxdomain(knot_pkt_t *pkt, knotd_qdata_t *qdata)
{
- if (qdata->extra->zone->contents == NULL) {
+ if (qdata->extra->contents == NULL) {
return KNOT_EINVAL;
}
- return put_nxdomain(qdata->extra->zone->contents,
+ return put_nxdomain(qdata->extra->contents,
qdata->extra->previous, qdata->extra->encloser,
qdata->name, qdata, pkt);
}
int nsec_prove_dp_security(knot_pkt_t *pkt, knotd_qdata_t *qdata)
{
if (qdata->extra->node == NULL || qdata->extra->encloser == NULL ||
- qdata->extra->zone->contents == NULL) {
+ qdata->extra->contents == NULL) {
return KNOT_EINVAL;
}
// Alternatively prove that DS doesn't exist.
return put_nodata(qdata->extra->node, qdata->extra->encloser, qdata->extra->previous,
- qdata->extra->zone->contents, qdata->name, qdata, pkt);
+ qdata->extra->contents, qdata->name, qdata, pkt);
}
int nsec_append_rrsigs(knot_pkt_t *pkt, knotd_qdata_t *qdata, bool optional)
/* Find zone for QNAME. */
qdata->extra->zone = answer_zone_find(query, server->zone_db);
+ if (qdata->extra->zone != NULL) {
+ qdata->extra->contents = qdata->extra->zone->contents;
+ }
return KNOT_EOK;
}
/*! \brief Query processing intermediate data. */
typedef struct knotd_qdata_extra {
const zone_t *zone; /*!< Zone from which is answered. */
+ const zone_contents_t *contents; /*!< Zone contents from which is answered. */
list_t wildcards; /*!< Visited wildcards. */
list_t rrsigs; /*!< Section RRSIGs. */
uint8_t *opt_rr_pos; /*!< Place of the OPT RR in wire. */
_public_
knot_rrset_t knotd_qdata_zone_apex_rrset(knotd_qdata_t *qdata, uint16_t type)
{
- if (qdata == NULL || qdata->extra->zone == NULL ||
- qdata->extra->zone->contents == NULL) {
+ if (qdata == NULL || qdata->extra->contents == NULL) {
return node_rrset(NULL, type);
}
- return node_rrset(qdata->extra->zone->contents->apex, type);
+ return node_rrset(qdata->extra->contents->apex, type);
}
_public_
struct xfr_proc *xfer = qdata->extra->ext;
/* Check if the zone wasn't expired during multi-message transfer. */
- zone_contents_t *contents = qdata->extra->zone->contents;
+ const zone_contents_t *contents = qdata->extra->contents;
if (contents == NULL) {
return KNOT_ENOZONE;
}