From d2635084b9949a0725f9135f59ce8b7fb737ab64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20=C5=A0pa=C4=8Dek?= <petr.spacek@nic.cz>
Date: Thu, 16 Nov 2017 17:41:32 +0100
Subject: [PATCH] util: fix policy.QTRACE for QDCOUNT != 1

---
 lib/utils.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/lib/utils.c b/lib/utils.c
index b3c65d2dc..a9061c104 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -722,6 +722,7 @@ void kr_pkt_print(knot_pkt_t *pkt)
 	const knot_lookup_t *rcode = knot_lookup_by_id(knot_rcode_names, pkt_rcode);
 	const knot_lookup_t *opcode = knot_lookup_by_id(knot_opcode_names, pkt_opcode);
 	uint16_t qry_id = knot_wire_get_id(pkt->wire);
+	uint16_t qdcount = knot_wire_get_qdcount(pkt->wire);
 
 	if (rcode != NULL) {
 		rcode_str = rcode->name;
@@ -730,15 +731,13 @@ void kr_pkt_print(knot_pkt_t *pkt)
 		opcode_str = opcode->name;
 	}
 	flags_to_str(flags, pkt, sizeof(flags));
-	knot_dname_to_str(qname, knot_pkt_qname(pkt), KNOT_DNAME_MAXLEN);
-	knot_rrtype_to_string(knot_pkt_qtype(pkt), rrtype, sizeof(rrtype));
 	kr_log_verbose(";; ->>HEADER<<- opcode: %s; status: %s; id: %hu\n",
 		       opcode_str, rcode_str, qry_id);
 
 	kr_log_verbose(";; Flags: %s QUERY: %hu; ANSWER: %hu; "
 		       "AUTHORITY: %hu; ADDITIONAL: %hu\n\n",
 		       flags,
-		       knot_wire_get_qdcount(pkt->wire),
+		       qdcount,
 		       knot_wire_get_ancount(pkt->wire),
 		       knot_wire_get_nscount(pkt->wire),
 		       knot_wire_get_arcount(pkt->wire));
@@ -748,7 +747,13 @@ void kr_pkt_print(knot_pkt_t *pkt)
 		                  knot_wire_get_rcode(pkt->wire));
 	}
 
-	kr_log_verbose(";; QUESTION SECTION\n%s\t\t%s\n\n", qname, rrtype);
+	if (qdcount == 1) {
+		knot_dname_to_str(qname, knot_pkt_qname(pkt), KNOT_DNAME_MAXLEN);
+		knot_rrtype_to_string(knot_pkt_qtype(pkt), rrtype, sizeof(rrtype));
+		kr_log_verbose(";; QUESTION SECTION\n%s\t\t%s\n\n", qname, rrtype);
+	} else if (qdcount > 1) {
+		kr_log_verbose(";; Warning: unsupported QDCOUNT %hu\n", qdcount);
+	}
 	for (knot_section_t i = KNOT_ANSWER; i <= KNOT_AUTHORITY; ++i) {
 		const knot_pktsection_t *sec = knot_pkt_section(pkt, i);
 		if (sec->count == 0) {
-- 
GitLab