From 9f309d5b321f28672dfcbe85df605bd9da79dcc2 Mon Sep 17 00:00:00 2001 From: Jan Kadlec <jan.kadlec@nic.cz> Date: Mon, 7 Oct 2013 10:39:17 +0200 Subject: [PATCH] libknot: Fixed wrong dname comparison, small fixes. - DNAMEs in RRSets are now compared using memcmp - Modified DNSSEC dump parameters (no wrap ...) - Removed double rollback Refs #4 --- src/knot/server/zones.c | 5 ----- src/knot/zone/zone-dump.c | 2 +- src/libknot/rrset-dump.c | 11 ----------- src/libknot/rrset.c | 10 +++++++++- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c index f36089636..4e2761e76 100644 --- a/src/knot/server/zones.c +++ b/src/knot/server/zones.c @@ -1002,11 +1002,6 @@ static int zones_journal_apply(knot_zone_t *zone) zd->conf->name, knot_strerror(apply_ret)); ret = KNOT_ERROR; - - // Cleanup old and new contents - xfrin_rollback_update(zone->contents, - &contents, - chsets->changes); } else { /* Switch zone immediately. */ log_server_info("Zone '%s' serial %u -> %u.\n", diff --git a/src/knot/zone/zone-dump.c b/src/knot/zone/zone-dump.c index edda4dfc3..aa630efef 100644 --- a/src/knot/zone/zone-dump.c +++ b/src/knot/zone/zone-dump.c @@ -134,7 +134,7 @@ int zone_dump_text(knot_zone_contents_t *zone, FILE *file) params.buflen = DUMP_BUF_LEN; params.rr_count = 0; params.origin = knot_node_owner(knot_zone_contents_apex(zone)); - params.style = &KNOT_DUMP_STYLE_DNSSEC; + params.style = &KNOT_DUMP_STYLE_DEFAULT; // Dump standard zone records. knot_zone_contents_tree_apply_inorder(zone, node_dump_text, ¶ms); diff --git a/src/libknot/rrset-dump.c b/src/libknot/rrset-dump.c index f7fac8ba4..d350683d3 100644 --- a/src/libknot/rrset-dump.c +++ b/src/libknot/rrset-dump.c @@ -62,17 +62,6 @@ const knot_dump_style_t KNOT_DUMP_STYLE_DEFAULT = { .human_tmstamp = true }; -const knot_dump_style_t KNOT_DUMP_STYLE_DNSSEC = { - .wrap = true, - .show_class = true, - .show_ttl = true, - .verbose = true, - .reduce = true, - .human_ttl = false, - .human_tmstamp = false -}; - - static void dump_string(rrset_dump_params_t *p, const char *str) { size_t in_len = strlen(str); diff --git a/src/libknot/rrset.c b/src/libknot/rrset.c index 65ec5e908..cc3f3981c 100644 --- a/src/libknot/rrset.c +++ b/src/libknot/rrset.c @@ -156,11 +156,19 @@ int rrset_rdata_compare_one(const knot_rrset_t *rrset1, int cmp = 0; size_t offset = 0; + // TODO: this can be much simpler: Get data for memcmp and sizes in ifs + // compare only once for (int i = 0; desc->block_types[i] != KNOT_RDATA_WF_END; i++) { if (descriptor_item_is_dname(desc->block_types[i])) { const knot_dname_t *dname1 = r1 + offset; + int size1 = knot_dname_size(dname1); const knot_dname_t *dname2 = r2 + offset; - cmp = knot_dname_cmp(dname1, dname2); + int size2 = knot_dname_size(dname2); + cmp = memcmp(dname1, dname2, + size1 <= size2 ? size1 : size2); + if (cmp == 0 && size1 == size2) { + cmp = size1 < size2 ? -1 : 1; + } offset += knot_dname_size(dname1); } else if (descriptor_item_is_fixed(desc->block_types[i])) { cmp = memcmp(r1 + offset, r2 + offset, -- GitLab