diff options
author | Sergey Matveychuk <sem33@yandex-team.ru> | 2021-04-07 20:39:18 +0300 |
---|---|---|
committer | Azat Khuzhin <azat@libevent.org> | 2021-05-24 21:03:45 +0300 |
commit | 19b3fd0bf03c94e694ac25ad95fe43ac10df73b5 (patch) | |
tree | 1efe5d81b55a16c67d93e161a8638680393ead90 /test | |
parent | 087bbc572c48d9304d8b6b911e6b0cf966ba3c28 (diff) | |
download | libevent-19b3fd0bf03c94e694ac25ad95fe43ac10df73b5.tar.gz |
evdns: add ability to get CNAME
Add new flag (DNS_CNAME_CALLBACK) for
evdns_base_resolve_ipv4()/evdns_base_resolve_ipv6().
If set, you will get one more callback with type == DNS_CNAME and CNAME
in addrs argument.
Diffstat (limited to 'test')
-rw-r--r-- | test/regress_dns.c | 12 | ||||
-rw-r--r-- | test/regress_testutils.c | 5 |
2 files changed, 14 insertions, 3 deletions
diff --git a/test/regress_dns.c b/test/regress_dns.c index fff111a8..8cbb2e6d 100644 --- a/test/regress_dns.c +++ b/test/regress_dns.c @@ -512,7 +512,7 @@ generic_dns_callback(int result, char type, int count, int ttl, void *addresses, len = count * 4; else if (type == DNS_IPv6_AAAA) len = count * 16; - else if (type == DNS_PTR) + else if (type == DNS_PTR || type == DNS_CNAME) len = strlen(addresses)+1; else { res->addrs_len = len = 0; @@ -551,6 +551,7 @@ static struct regress_dns_server_table search_table[] = { { "hostn.a.example.com", "errsoa", "0", 0, 0 }, { "hostn.b.example.com", "errsoa", "3", 0, 0 }, { "hostn.c.example.com", "err", "0", 0, 0 }, + { "hostc.c.example.com", "CNAME", "cname.c.example.com", 0, 0 }, { "host", "err", "3", 0, 0 }, { "host2", "err", "3", 0, 0 }, { "*", "err", "3", 0, 0 }, @@ -586,7 +587,7 @@ dns_search_test_impl(void *arg, int lower) ev_uint16_t portnum = 0; char buf[64]; - struct generic_dns_callback_result r[8]; + struct generic_dns_callback_result r[9]; size_t i; for (i = 0; i < ARRAY_SIZE(table); ++i) { @@ -604,7 +605,7 @@ dns_search_test_impl(void *arg, int lower) evdns_base_search_add(dns, "b.example.com"); evdns_base_search_add(dns, "c.example.com"); - n_replies_left = ARRAY_SIZE(r); + n_replies_left = ARRAY_SIZE(r)+1; /* CNAME gives us 2 callbacks for 1 request */ exit_base = base; evdns_base_resolve_ipv4(dns, "host", 0, generic_dns_callback, &r[0]); @@ -615,6 +616,8 @@ dns_search_test_impl(void *arg, int lower) evdns_base_resolve_ipv4(dns, "hostn.a.example.com", DNS_NO_SEARCH, generic_dns_callback, &r[5]); evdns_base_resolve_ipv4(dns, "hostn.b.example.com", DNS_NO_SEARCH, generic_dns_callback, &r[6]); evdns_base_resolve_ipv4(dns, "hostn.c.example.com", DNS_NO_SEARCH, generic_dns_callback, &r[7]); + evdns_base_resolve_ipv4(dns, "hostc.c.example.com", DNS_NO_SEARCH | DNS_CNAME_CALLBACK, + generic_dns_callback, &r[8]); event_base_dispatch(base); @@ -633,6 +636,9 @@ dns_search_test_impl(void *arg, int lower) tt_int_op(r[6].ttl, ==, 42); tt_int_op(r[7].result, ==, DNS_ERR_NODATA); tt_int_op(r[7].ttl, ==, 0); + tt_int_op(r[8].type, ==, DNS_CNAME); + tt_int_op(r[8].count, ==, 1); + tt_str_op(r[8].addrs, ==, "cname.c.example.com"); end: if (dns) diff --git a/test/regress_testutils.c b/test/regress_testutils.c index ece3733b..5a3f6c1e 100644 --- a/test/regress_testutils.c +++ b/test/regress_testutils.c @@ -257,6 +257,11 @@ regress_dns_server_cb(struct evdns_server_request *req, void *data) } evdns_server_request_add_aaaa_reply(req, question, 1, &in6.s6_addr, 100); + } else if (!strcmp(tab->anstype, "CNAME")) { + struct in_addr in; + evutil_inet_pton(AF_INET, "11.22.33.44", &in); + evdns_server_request_add_a_reply(req, question, 1, &in, 100); + evdns_server_request_add_cname_reply(req, question, tab->ans, 100); } else { TT_DIE(("Weird table entry with type '%s'", tab->anstype)); } |