From ffe98a08e3867b3e567386ac991981e93d906b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavru=C5=A1a?= <marek.vavrusa@nic.cz> Date: Wed, 19 Mar 2014 16:58:21 +0100 Subject: [PATCH] zone_creator: do not cache last used node This makes NSEC3 nodes disappear if it is preceded by a RR with the same owner and any other record type. --- src/knot/updates/xfr-in.c | 3 +-- src/knot/zone/zone-create.c | 19 +++++-------------- src/knot/zone/zone-create.h | 1 - 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/knot/updates/xfr-in.c b/src/knot/updates/xfr-in.c index 705790997..584a77c75 100644 --- a/src/knot/updates/xfr-in.c +++ b/src/knot/updates/xfr-in.c @@ -311,8 +311,7 @@ int xfrin_process_axfr_packet(knot_ns_xfr_t *xfr, knot_zone_contents_t **zone) } // Init zone creator - zcreator_t zc = {.z = *zone, - .last_node = NULL, .ret = KNOT_EOK }; + zcreator_t zc = {.z = *zone, .ret = KNOT_EOK }; while (ret == KNOT_EOK && rr) { diff --git a/src/knot/zone/zone-create.c b/src/knot/zone/zone-create.c index 9e11e0e7f..68d89c310 100644 --- a/src/knot/zone/zone-create.c +++ b/src/knot/zone/zone-create.c @@ -88,17 +88,9 @@ int zcreator_step(zcreator_t *zc, knot_rrset_t *rr) return KNOT_EOK; } - knot_node_t *n; - if (zc->last_node && - knot_dname_is_equal(zc->last_node->owner, rr->owner)) { - // Reuse hint from last addition. - n = zc->last_node; - } else { - // Search for node or create a new one - n = NULL; - } + knot_node_t *node = NULL; knot_rrset_t *zone_rrset = NULL; - int ret = knot_zone_contents_add_rr(zc->z, rr, &n, &zone_rrset); + int ret = knot_zone_contents_add_rr(zc->z, rr, &node, &zone_rrset); if (ret < 0) { if (!handle_err(zc, rr, ret)) { // Fatal error @@ -110,19 +102,18 @@ int zcreator_step(zcreator_t *zc, knot_rrset_t *rr) } else if (ret > 0) { knot_rrset_free(&rr, NULL); } - assert(n); + assert(node); assert(zone_rrset); - zc->last_node = n; // Do RRSet and node semantic checks bool sem_fatal_error = false; err_handler_t err_handler; err_handler_init(&err_handler); - ret = sem_check_rrset(n, zone_rrset, &err_handler); + ret = sem_check_rrset(node, zone_rrset, &err_handler); if (ret != KNOT_EOK) { return ret; } - ret = sem_check_node_plain(zc->z, n, + ret = sem_check_node_plain(zc->z, node, &err_handler, true, &sem_fatal_error); if (ret != KNOT_EOK) { diff --git a/src/knot/zone/zone-create.h b/src/knot/zone/zone-create.h index 65d643658..c100b1a64 100644 --- a/src/knot/zone/zone-create.h +++ b/src/knot/zone/zone-create.h @@ -37,7 +37,6 @@ */ typedef struct zcreator { knot_zone_contents_t *z; /*!< Created zone. */ - knot_node_t *last_node; /*!< Last used node, use to save zone lookup. */ int ret; /*!< Return value. */ } zcreator_t; -- GitLab