From 8d957acd210afb99a6faf1faa83a7952113d6a6d Mon Sep 17 00:00:00 2001 From: Yuri Schaeffer Date: Fri, 14 Sep 2012 12:20:58 +0000 Subject: [PATCH] Print ednsdata on mismatch at verbosity 3 git-svn-id: file:///svn/unbound/branches/edns-subnet@2759 be551aaa-1e26-0410-a405-d3ace91eadb9 --- testcode/ldns-testpkts.c | 36 ++++++++++++++++++++++------------ testdata/subnet_format_ip4.rpl | 1 + 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/testcode/ldns-testpkts.c b/testcode/ldns-testpkts.c index e09fe4f23..632b289e5 100644 --- a/testcode/ldns-testpkts.c +++ b/testcode/ldns-testpkts.c @@ -674,26 +674,38 @@ match_all(ldns_pkt* q, ldns_pkt* p, bool mttl) return 1; } +/** Convert to hexstring and call verbose(), prepend with header */ +void +verbose_hex(int lvl, uint8_t *data, size_t datalen, char *header) +{ + size_t i; + char errmsg[strlen(header) + datalen*3]; + strcpy(errmsg, header); + for(i = 0; i < datalen; i++) + sprintf(errmsg + strlen(header) + i*3, "%02x ", data[i]); + errmsg[strlen(header) + datalen*3 - 1] = 0; + verbose(lvl, errmsg); +} + /** Match q edns data to p raw edns data */ static int match_ednsdata(ldns_pkt* q, struct reply_packet* p) { - size_t qdlen; - ldns_rdf *edns_data; + size_t qdlen, pdlen; + uint8_t *qd, *pd; if(!ldns_pkt_edns(q) || !ldns_pkt_edns_data(q)) { verbose(3, "No EDNS data\n"); return 0; } - edns_data = ldns_pkt_edns_data(q); - qdlen = ldns_rdf_size(edns_data); - if( qdlen != ldns_buffer_limit(p->raw_ednsdata) || - 0 != memcmp(ldns_rdf_data(edns_data), - ldns_buffer_begin(p->raw_ednsdata), - qdlen) ) { - verbose(3, "EDNS data does not match.\n"); - return 0; - } - return 1; + qdlen = ldns_rdf_size(ldns_pkt_edns_data(q)); + pdlen = ldns_buffer_limit(p->raw_ednsdata); + qd = ldns_rdf_data(ldns_pkt_edns_data(q)); + pd = ldns_buffer_begin(p->raw_ednsdata); + if( qdlen == pdlen && 0 == memcmp(qd, pd, qdlen) ) return 1; + verbose(3, "EDNS data does not match.\n"); + verbose_hex(3, qd, qdlen, "q: "); + verbose_hex(3, pd, pdlen, "p: "); + return 0; } /* finds entry in list, or returns NULL */ diff --git a/testdata/subnet_format_ip4.rpl b/testdata/subnet_format_ip4.rpl index 9e0e81639..d09e3e5d0 100644 --- a/testdata/subnet_format_ip4.rpl +++ b/testdata/subnet_format_ip4.rpl @@ -2,6 +2,7 @@ server: send-client-subnet: 5.0.15.10 client-subnet-opc: 20730 max-client-subnet-ipv4: 21 + verbosity: 3 stub-zone: name: "." -- 2.47.2