From 96f6a3277bd6ec649b9e9819a0dcb4e3d022a723 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 27 Mar 2014 16:41:22 +0000 Subject: [PATCH] Add regression test for TLSA. --- test/dns_regress.c | 58 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/test/dns_regress.c b/test/dns_regress.c index d61b8b2..8fff092 100644 --- a/test/dns_regress.c +++ b/test/dns_regress.c @@ -29,10 +29,46 @@ static int remain_tests = 0; + + static void rdns_regress_callback (struct rdns_reply *reply, void *arg) { - printf ("got result for host: %s\n", (const char *)arg); + struct rdns_reply_entry *entry; + + printf ("got result for host: %s, code: %s\n", (const char *)arg, + rdns_strerror (reply->code)); + + if (reply->code == DNS_RC_NOERROR) { + entry = reply->entries; + while (entry != NULL) { + if (entry->type == DNS_REQUEST_A) { + printf ("%s is %s\n", (char *)arg, inet_ntoa (entry->content.a.addr)); + } + else if (entry->type == DNS_REQUEST_TLSA) { + char *hex, *p; + unsigned i; + + hex = malloc (entry->content.tlsa.datalen * 2 + 1); + p = hex; + + for (i = 0; i < entry->content.tlsa.datalen; i ++) { + sprintf (p, "%02x", entry->content.tlsa.data[i]); + p += 2; + } + + printf ("%s has TLSA record (%d %d %d) %s\n", + (char *)arg, + (int)entry->content.tlsa.usage, + (int)entry->content.tlsa.selector, + (int)entry->content.tlsa.match_type, + hex); + + free (hex); + } + entry = entry->next; + } + } if (--remain_tests == 0) { rdns_resolver_release (reply->resolver); @@ -58,6 +94,22 @@ rdns_test_a (struct rdns_resolver *resolver) } } +static void +rdns_test_tlsa (struct rdns_resolver *resolver) +{ + const char *names[] = { + "_25._tcp.mail6.highsecure.ru", + "_25._tcp.open.NLnetLabs.nl", + NULL + }; + const char **cur; + + for (cur = names; *cur != NULL; cur ++) { + rdns_make_request_full (resolver, rdns_regress_callback, *cur, 1.0, 2, *cur, 1, DNS_REQUEST_TLSA); + remain_tests ++; + } +} + int main (int argc, char **argv) { @@ -72,12 +124,12 @@ main (int argc, char **argv) rdns_bind_libev (resolver_ev, loop); rdns_resolver_set_log_level (resolver_ev, RDNS_LOG_DEBUG); rdns_resolver_set_max_io_uses (resolver_ev, 1, 0.1); - /* Google and opendns */ assert (rdns_resolver_parse_resolv_conf (resolver_ev, "/etc/resolv.conf")); resolver_event = rdns_resolver_new (); rdns_bind_libevent (resolver_event, base); rdns_resolver_set_log_level (resolver_event, RDNS_LOG_DEBUG); + /* Google and opendns */ assert (rdns_resolver_add_server (resolver_event, "208.67.222.222", 53, 0, 8)); assert (rdns_resolver_add_server (resolver_event, "8.8.8.8", 53, 0, 1)); @@ -85,10 +137,12 @@ main (int argc, char **argv) assert (rdns_resolver_init (resolver_event)); rdns_test_a (resolver_ev); + rdns_test_tlsa (resolver_ev); ev_loop (loop, 0); ev_loop_destroy (loop); rdns_test_a (resolver_event); + rdns_test_tlsa (resolver_event); event_base_loop (base, 0); event_base_free (base);