18 #ifdef HAVE_NETINET_IN_H
19 # include <netinet/in.h>
24 #ifdef HAVE_ARPA_INET_H
25 # include <arpa/inet.h>
44 char **question_hostname,
47 unsigned int qdcount, ancount;
48 int status,
i, rr_type, rr_class, rr_len, rr_ttl;
49 int got_a = 0, got_aaaa = 0, got_cname = 0;
51 const unsigned char *aptr;
52 char *hostname, *rr_name = NULL, *rr_data;
55 struct sockaddr_in *sin;
58 *question_hostname = NULL;
81 hostname = *question_hostname;
86 for (
i = 0;
i < (
int)ancount;
i++)
107 if (aptr + rr_len > abuf + alen)
113 if (rr_class ==
C_IN && rr_type ==
T_A
114 && rr_len ==
sizeof(
struct in_addr)
118 if (aptr +
sizeof(
struct in_addr) > abuf + alen)
137 memset(sin, 0,
sizeof(
struct sockaddr_in));
138 memcpy(&sin->sin_addr.s_addr, aptr,
sizeof(
struct in_addr));
139 sin->sin_family = AF_INET;
141 node->
ai_addr = (
struct sockaddr *)sin;
143 node->
ai_addrlen =
sizeof(
struct sockaddr_in);
149 else if (rr_class ==
C_IN && rr_type ==
T_AAAA
178 node->
ai_addr = (
struct sockaddr *)sin6;
209 cname->
alias = rr_name;
210 cname->
name = rr_data;
219 if (aptr > abuf + alen)
234 else if (got_a == 0 && got_aaaa == 0)
256 char *question_hostname;