]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Print ednsdata on mismatch at verbosity 3
authorYuri Schaeffer <yuri@nlnetlabs.nl>
Fri, 14 Sep 2012 12:20:58 +0000 (12:20 +0000)
committerYuri Schaeffer <yuri@nlnetlabs.nl>
Fri, 14 Sep 2012 12:20:58 +0000 (12:20 +0000)
git-svn-id: file:///svn/unbound/branches/edns-subnet@2759 be551aaa-1e26-0410-a405-d3ace91eadb9

testcode/ldns-testpkts.c
testdata/subnet_format_ip4.rpl

index e09fe4f23d1fbc6c54fa4cc20469a562a7059f6b..632b289e59f53f2f4d3287a14d259b08c32131a3 100644 (file)
@@ -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 */
index 9e0e8163997ec9231ce83f671976e123bc20f38c..d09e3e5d01192e9052acd4ee1359ed7a8e714765 100644 (file)
@@ -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: "."