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, &params);
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