mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-09 04:19:10 -04:00
Merge remote-tracking branch 'origin/patches-2.0'
This commit is contained in:
commit
fc1a2514a1
2
evdns.c
2
evdns.c
@ -1046,7 +1046,7 @@ reply_parse(struct evdns_base *base, u8 *packet, int length) {
|
|||||||
*/
|
*/
|
||||||
TEST_NAME;
|
TEST_NAME;
|
||||||
j += 4;
|
j += 4;
|
||||||
if (j >= length) goto err;
|
if (j > length) goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!name_matches)
|
if (!name_matches)
|
||||||
|
@ -495,6 +495,9 @@ static struct regress_dns_server_table search_table[] = {
|
|||||||
{ "host2.a.example.com", "err", "3", 0 },
|
{ "host2.a.example.com", "err", "3", 0 },
|
||||||
{ "host2.b.example.com", "A", "200.100.0.100", 0 },
|
{ "host2.b.example.com", "A", "200.100.0.100", 0 },
|
||||||
{ "host2.c.example.com", "err", "3", 0 },
|
{ "host2.c.example.com", "err", "3", 0 },
|
||||||
|
{ "hostn.a.example.com", "errsoa", "0", 0 },
|
||||||
|
{ "hostn.b.example.com", "errsoa", "3", 0 },
|
||||||
|
{ "hostn.c.example.com", "err", "0", 0 },
|
||||||
|
|
||||||
{ "host", "err", "3", 0 },
|
{ "host", "err", "3", 0 },
|
||||||
{ "host2", "err", "3", 0 },
|
{ "host2", "err", "3", 0 },
|
||||||
@ -511,7 +514,7 @@ dns_search_test(void *arg)
|
|||||||
ev_uint16_t portnum = 0;
|
ev_uint16_t portnum = 0;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
|
||||||
struct generic_dns_callback_result r1, r2, r3, r4, r5;
|
struct generic_dns_callback_result r[8];
|
||||||
|
|
||||||
tt_assert(regress_dnsserver(base, &portnum, search_table));
|
tt_assert(regress_dnsserver(base, &portnum, search_table));
|
||||||
evutil_snprintf(buf, sizeof(buf), "127.0.0.1:%d", (int)portnum);
|
evutil_snprintf(buf, sizeof(buf), "127.0.0.1:%d", (int)portnum);
|
||||||
@ -523,26 +526,35 @@ dns_search_test(void *arg)
|
|||||||
evdns_base_search_add(dns, "b.example.com");
|
evdns_base_search_add(dns, "b.example.com");
|
||||||
evdns_base_search_add(dns, "c.example.com");
|
evdns_base_search_add(dns, "c.example.com");
|
||||||
|
|
||||||
n_replies_left = 5;
|
n_replies_left = sizeof(r)/sizeof(r[0]);
|
||||||
exit_base = base;
|
exit_base = base;
|
||||||
|
|
||||||
evdns_base_resolve_ipv4(dns, "host", 0, generic_dns_callback, &r1);
|
evdns_base_resolve_ipv4(dns, "host", 0, generic_dns_callback, &r[0]);
|
||||||
evdns_base_resolve_ipv4(dns, "host2", 0, generic_dns_callback, &r2);
|
evdns_base_resolve_ipv4(dns, "host2", 0, generic_dns_callback, &r[1]);
|
||||||
evdns_base_resolve_ipv4(dns, "host", DNS_NO_SEARCH, generic_dns_callback, &r3);
|
evdns_base_resolve_ipv4(dns, "host", DNS_NO_SEARCH, generic_dns_callback, &r[2]);
|
||||||
evdns_base_resolve_ipv4(dns, "host2", DNS_NO_SEARCH, generic_dns_callback, &r4);
|
evdns_base_resolve_ipv4(dns, "host2", DNS_NO_SEARCH, generic_dns_callback, &r[3]);
|
||||||
evdns_base_resolve_ipv4(dns, "host3", 0, generic_dns_callback, &r5);
|
evdns_base_resolve_ipv4(dns, "host3", 0, generic_dns_callback, &r[4]);
|
||||||
|
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]);
|
||||||
|
|
||||||
event_base_dispatch(base);
|
event_base_dispatch(base);
|
||||||
|
|
||||||
tt_int_op(r1.type, ==, DNS_IPv4_A);
|
tt_int_op(r[0].type, ==, DNS_IPv4_A);
|
||||||
tt_int_op(r1.count, ==, 1);
|
tt_int_op(r[0].count, ==, 1);
|
||||||
tt_int_op(((ev_uint32_t*)r1.addrs)[0], ==, htonl(0x0b16212c));
|
tt_int_op(((ev_uint32_t*)r[0].addrs)[0], ==, htonl(0x0b16212c));
|
||||||
tt_int_op(r2.type, ==, DNS_IPv4_A);
|
tt_int_op(r[1].type, ==, DNS_IPv4_A);
|
||||||
tt_int_op(r2.count, ==, 1);
|
tt_int_op(r[1].count, ==, 1);
|
||||||
tt_int_op(((ev_uint32_t*)r2.addrs)[0], ==, htonl(0xc8640064));
|
tt_int_op(((ev_uint32_t*)r[1].addrs)[0], ==, htonl(0xc8640064));
|
||||||
tt_int_op(r3.result, ==, DNS_ERR_NOTEXIST);
|
tt_int_op(r[2].result, ==, DNS_ERR_NOTEXIST);
|
||||||
tt_int_op(r4.result, ==, DNS_ERR_NOTEXIST);
|
tt_int_op(r[3].result, ==, DNS_ERR_NOTEXIST);
|
||||||
tt_int_op(r5.result, ==, DNS_ERR_NOTEXIST);
|
tt_int_op(r[4].result, ==, DNS_ERR_NOTEXIST);
|
||||||
|
tt_int_op(r[5].result, ==, DNS_ERR_NODATA);
|
||||||
|
tt_int_op(r[5].ttl, ==, 42);
|
||||||
|
tt_int_op(r[6].result, ==, DNS_ERR_NOTEXIST);
|
||||||
|
tt_int_op(r[6].ttl, ==, 42);
|
||||||
|
tt_int_op(r[7].result, ==, DNS_ERR_NODATA);
|
||||||
|
tt_int_op(r[7].ttl, ==, 0);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
if (dns)
|
if (dns)
|
||||||
|
@ -159,6 +159,23 @@ regress_dns_server_cb(struct evdns_server_request *req, void *data)
|
|||||||
int err = atoi(tab->ans);
|
int err = atoi(tab->ans);
|
||||||
tt_assert(! evdns_server_request_respond(req, err));
|
tt_assert(! evdns_server_request_respond(req, err));
|
||||||
return;
|
return;
|
||||||
|
} else if (!strcmp(tab->anstype, "errsoa")) {
|
||||||
|
int err = atoi(tab->ans);
|
||||||
|
char soa_record[] =
|
||||||
|
"\x04" "dns1" "\x05" "icann" "\x03" "org" "\0"
|
||||||
|
"\x0a" "hostmaster" "\x05" "icann" "\x03" "org" "\0"
|
||||||
|
"\x77\xde\x5e\xba" /* serial */
|
||||||
|
"\x00\x00\x1c\x20" /* refreshtime = 2h */
|
||||||
|
"\x00\x00\x0e\x10" /* retry = 1h */
|
||||||
|
"\x00\x12\x75\x00" /* expiration = 14d */
|
||||||
|
"\x00\x00\x0e\x10" /* min.ttl = 1h */
|
||||||
|
;
|
||||||
|
evdns_server_request_add_reply(
|
||||||
|
req, EVDNS_AUTHORITY_SECTION,
|
||||||
|
"example.com", EVDNS_TYPE_SOA, EVDNS_CLASS_INET,
|
||||||
|
42, sizeof(soa_record) - 1, 0, soa_record);
|
||||||
|
tt_assert(! evdns_server_request_respond(req, err));
|
||||||
|
return;
|
||||||
} else if (!strcmp(tab->anstype, "A")) {
|
} else if (!strcmp(tab->anstype, "A")) {
|
||||||
struct in_addr in;
|
struct in_addr in;
|
||||||
evutil_inet_pton(AF_INET, tab->ans, &in);
|
evutil_inet_pton(AF_INET, tab->ans, &in);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user