Skip to content
Snippets Groups Projects
Commit 0324916a authored by Libor Peltan's avatar Libor Peltan
Browse files

additionals tree: using pre-computed NSEC3 name

parent 5ebc0f0b
No related branches found
No related tags found
1 merge request!1017adjust: using additionals_tree for adjusting point_to_nsec3
Pipeline #49270 passed
......@@ -145,21 +145,21 @@ int additionals_tree_update_node(additionals_tree_t *a_t, const knot_dname_t *zo
return ret;
}
int additionals_tree_update_nsec3(additionals_tree_t *a_t, const knot_dname_t *zone_apex,
const dnssec_nsec3_params_t *params,
int additionals_tree_update_nsec3(additionals_tree_t *a_t, const zone_contents_t *zone,
zone_node_t *old_node, zone_node_t *new_node)
{
if (!knot_is_nsec3_enabled(zone)) {
return KNOT_EOK;
}
bool oldex = (old_node != NULL && !(old_node->flags & NODE_FLAGS_DELETED));
bool newex = (new_node != NULL && !(new_node->flags & NODE_FLAGS_DELETED));
bool addn = (!oldex && newex), remn = (oldex && !newex);
if (!addn && !remn) {
return KNOT_EOK;
}
const knot_dname_t *owner = addn ? new_node->owner : old_node->owner;
uint8_t nsec3_name[KNOT_DNAME_MAXLEN];
int ret = knot_create_nsec3_owner(nsec3_name, sizeof(nsec3_name), owner, zone_apex, params);
if (ret != KNOT_EOK) {
return ret;
const knot_dname_t *nsec3_name = node_nsec3_hash(addn ? new_node : old_node, zone);
if (nsec3_name == NULL) {
return KNOT_ENOMEM;
}
a_t_node_ctx_t ctx = { a_t, addn ? binode_node(new_node, false) : binode_node(old_node, false) };
return (addn ? add_node_to_a_t : remove_node_from_a_t)(nsec3_name, &ctx);
......@@ -179,7 +179,7 @@ int additionals_tree_from_zone(additionals_tree_t **a_t, const zone_contents_t *
while (!zone_tree_it_finished(&it) && ret == KNOT_EOK) {
ret = additionals_tree_update_node(*a_t, zone->apex->owner, NULL, zone_tree_it_val(&it));
if (do_nsec3 && ret == KNOT_EOK) {
ret = additionals_tree_update_nsec3(*a_t, zone->apex->owner, &zone->nsec3_params,
ret = additionals_tree_update_nsec3(*a_t, zone,
NULL, zone_tree_it_val(&it));
}
zone_tree_it_next(&it);
......@@ -194,15 +194,15 @@ int additionals_tree_from_zone(additionals_tree_t **a_t, const zone_contents_t *
}
int additionals_tree_update_from_binodes(additionals_tree_t *a_t, const zone_tree_t *tree,
const knot_dname_t *zone_apex, const dnssec_nsec3_params_t *params)
const zone_contents_t *zone)
{
zone_tree_it_t it = { 0 };
int ret = zone_tree_it_begin((zone_tree_t *)tree, &it);
while (!zone_tree_it_finished(&it) && ret == KNOT_EOK) {
zone_node_t *node = zone_tree_it_val(&it), *counter = binode_counterpart(node);
ret = additionals_tree_update_node(a_t, zone_apex, counter, node);
if (params != NULL && ret == KNOT_EOK) {
ret = additionals_tree_update_nsec3(a_t, zone_apex, params, counter, node);
ret = additionals_tree_update_node(a_t, zone->apex->owner, counter, node);
if (ret == KNOT_EOK) {
ret = additionals_tree_update_nsec3(a_t, zone, counter, node);
}
zone_tree_it_next(&it);
}
......
......@@ -45,18 +45,26 @@ int zone_node_additionals_foreach(const zone_node_t *node, const knot_dname_t *z
* \brief Update additionals tree according to changed RRsets in a zone node.
*
* \param a_t Additionals tree to be updated.
* \param zone_apex Name of the zone.
* \param zone_apex Zone apex owner.
* \param old_node Old state of the node (additionals will be removed).
* \param new_node New state of the node (additionals will be added)d
* \param new_node New state of the node (additionals will be added).
*
* \return KNOT_E*
*/
int additionals_tree_update_node(additionals_tree_t *a_t, const knot_dname_t *zone_apex,
zone_node_t *old_node, zone_node_t *new_node);
int additionals_tree_update_nsec3(additionals_tree_t *a_t, const knot_dname_t *zone_apex,
const dnssec_nsec3_params_t *params,
/*!
* \brief Update additionals tree with NSEC3 according to changed normal nodes.
*
* \param a_t Additionals tree to be updated.
* \param zone Zone contents with NSEC3PARAMS etc.
* \param old_node Old state of the node.
* \param new_node New state of the node.
*
* \return KNOT_E*
*/
int additionals_tree_update_nsec3(additionals_tree_t *a_t, const zone_contents_t *zone,
zone_node_t *old_node, zone_node_t *new_node);
/*!
......@@ -74,12 +82,12 @@ int additionals_tree_from_zone(additionals_tree_t **a_t, const zone_contents_t *
*
* \param a_t Additionals tree to be updated.
* \param tree Zone tree containing updated nodes as bi-nodes.
* \param zone_apex Name of the zone.
* \param zone Whole zone with some additional info.
*
* \return KNOT_E*
*/
int additionals_tree_update_from_binodes(additionals_tree_t *a_t, const zone_tree_t *tree,
const knot_dname_t *zone_apex, const dnssec_nsec3_params_t *params);
const zone_contents_t *zone);
/*!
* \brief Foreach node that has specified name in its additionals, do sth.
......
......@@ -388,13 +388,11 @@ int zone_adjust_incremental_update(zone_update_t *update)
if (ret == KNOT_EOK) {
ret = zone_adjust_update(update, adjust_cb_wildcard_nsec3, adjust_cb_void, true);
}
dnssec_nsec3_params_t *params = knot_is_nsec3_enabled(update->new_cont) ? &update->new_cont->nsec3_params : NULL;
if (ret == KNOT_EOK) {
ret = additionals_tree_update_from_binodes(
update->new_cont->adds_tree,
update->a_ctx->node_ptrs,
update->new_cont->apex->owner,
params
update->new_cont
);
}
if (ret == KNOT_EOK) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment