version 1.33, 2020/09/15 11:46:19 |
version 1.34, 2020/09/15 11:47:42 |
|
|
isc_task_t *global_task = NULL; |
isc_task_t *global_task = NULL; |
isc_timermgr_t *timermgr = NULL; |
isc_timermgr_t *timermgr = NULL; |
isc_socketmgr_t *socketmgr = NULL; |
isc_socketmgr_t *socketmgr = NULL; |
isc_sockaddr_t bind_address; |
struct sockaddr_storage bind_address; |
isc_sockaddr_t bind_any; |
struct sockaddr_storage bind_any; |
int sendcount = 0; |
int sendcount = 0; |
int recvcount = 0; |
int recvcount = 0; |
int sockcount = 0; |
int sockcount = 0; |
|
|
static char sitvalue[256]; |
static char sitvalue[256]; |
|
|
isc_socket_t *keep = NULL; |
isc_socket_t *keep = NULL; |
isc_sockaddr_t keepaddr; |
struct sockaddr_storage keepaddr; |
|
|
static const struct { |
static const struct { |
const char *ns; |
const char *ns; |
|
|
int headers); |
int headers); |
|
|
void |
void |
(*dighost_received)(unsigned int bytes, isc_sockaddr_t *from, dig_query_t *query); |
(*dighost_received)(unsigned int bytes, struct sockaddr_storage *from, dig_query_t *query); |
|
|
void |
void |
(*dighost_trying)(char *frm, dig_lookup_t *lookup); |
(*dighost_trying)(char *frm, dig_lookup_t *lookup); |
|
|
/* this used to be bind9_getaddresses from lib/bind9 */ |
/* this used to be bind9_getaddresses from lib/bind9 */ |
static isc_result_t |
static isc_result_t |
get_addresses(const char *hostname, in_port_t dstport, |
get_addresses(const char *hostname, in_port_t dstport, |
isc_sockaddr_t *addrs, int addrsize, int *addrcount) |
struct sockaddr_storage *addrs, int addrsize, int *addrcount) |
{ |
{ |
struct addrinfo *ai = NULL, *tmpai, hints; |
struct addrinfo *ai = NULL, *tmpai, hints; |
int result, i; |
int result, i; |
|
|
isc_result_t |
isc_result_t |
set_nameserver(char *opt) { |
set_nameserver(char *opt) { |
isc_result_t result; |
isc_result_t result; |
isc_sockaddr_t sockaddrs[DIG_MAX_ADDRESSES]; |
struct sockaddr_storage sockaddrs[DIG_MAX_ADDRESSES]; |
int count, i; |
int count, i; |
dig_server_t *srv; |
dig_server_t *srv; |
char tmp[NI_MAXHOST]; |
char tmp[NI_MAXHOST]; |
|
|
|
|
for (i = 0; i < count; i++) { |
for (i = 0; i < count; i++) { |
int error; |
int error; |
error = getnameinfo(&sockaddrs[i].type.sa, |
error = getnameinfo((struct sockaddr *)&sockaddrs[i], |
sockaddrs[i].type.sa.sa_len, tmp, sizeof(tmp), NULL, 0, |
sockaddrs[i].ss_len, tmp, sizeof(tmp), NULL, 0, |
NI_NUMERICHOST | NI_NUMERICSERV); |
NI_NUMERICHOST | NI_NUMERICSERV); |
if (error) |
if (error) |
fatal("%s", gai_strerror(error)); |
fatal("%s", gai_strerror(error)); |
|
|
looknew->eoferr = lookold->eoferr; |
looknew->eoferr = lookold->eoferr; |
|
|
if (lookold->ecs_addr != NULL) { |
if (lookold->ecs_addr != NULL) { |
size_t len = sizeof(isc_sockaddr_t); |
size_t len = sizeof(struct sockaddr_storage); |
looknew->ecs_addr = malloc(len); |
looknew->ecs_addr = malloc(len); |
if (looknew->ecs_addr == NULL) |
if (looknew->ecs_addr == NULL) |
fatal("out of memory"); |
fatal("out of memory"); |
|
|
} |
} |
|
|
isc_result_t |
isc_result_t |
parse_netprefix(isc_sockaddr_t **sap, int *plen, const char *value) { |
parse_netprefix(struct sockaddr_storage **sap, int *plen, const char *value) { |
isc_sockaddr_t *sa = NULL; |
struct sockaddr_storage *sa = NULL; |
struct in_addr in4; |
struct in_addr in4; |
struct in6_addr in6; |
struct in6_addr in6; |
uint32_t prefix_length = 0xffffffff; |
uint32_t prefix_length = 0xffffffff; |
|
|
memset(sa, 0, sizeof(*sa)); |
memset(sa, 0, sizeof(*sa)); |
|
|
if (strcmp(buf, "0") == 0) { |
if (strcmp(buf, "0") == 0) { |
sa->type.sa.sa_family = AF_UNSPEC; |
sa->ss_family = AF_UNSPEC; |
prefix_length = 0; |
prefix_length = 0; |
goto done; |
goto done; |
} |
} |
|
|
struct sockaddr_in6 *sin6; |
struct sockaddr_in6 *sin6; |
size_t addrl; |
size_t addrl; |
|
|
sa = &lookup->ecs_addr->type.sa; |
sa = (struct sockaddr *)lookup->ecs_addr; |
plen = lookup->ecs_plen; |
plen = lookup->ecs_plen; |
|
|
/* Round up prefix len to a multiple of 8 */ |
/* Round up prefix len to a multiple of 8 */ |
|
|
ISC_SOCKADDR_CMPSCOPEZERO)) { |
ISC_SOCKADDR_CMPSCOPEZERO)) { |
char buf1[ISC_SOCKADDR_FORMATSIZE]; |
char buf1[ISC_SOCKADDR_FORMATSIZE]; |
char buf2[ISC_SOCKADDR_FORMATSIZE]; |
char buf2[ISC_SOCKADDR_FORMATSIZE]; |
isc_sockaddr_t any; |
struct sockaddr_storage any; |
|
|
if (isc_sockaddr_pf(&query->sockaddr) == AF_INET) |
if (isc_sockaddr_pf(&query->sockaddr) == AF_INET) |
isc_sockaddr_any(&any); |
isc_sockaddr_any(&any); |
|
|
* routines, since they may be using a non-DNS system for these lookups. |
* routines, since they may be using a non-DNS system for these lookups. |
*/ |
*/ |
isc_result_t |
isc_result_t |
get_address(char *host, in_port_t myport, isc_sockaddr_t *sockaddr) { |
get_address(char *host, in_port_t myport, struct sockaddr_storage *sockaddr) { |
int count; |
int count; |
isc_result_t result; |
isc_result_t result; |
|
|
|
|
int |
int |
getaddresses(dig_lookup_t *lookup, const char *host, isc_result_t *resultp) { |
getaddresses(dig_lookup_t *lookup, const char *host, isc_result_t *resultp) { |
isc_result_t result; |
isc_result_t result; |
isc_sockaddr_t sockaddrs[DIG_MAX_ADDRESSES]; |
struct sockaddr_storage sockaddrs[DIG_MAX_ADDRESSES]; |
int count, i; |
int count, i; |
dig_server_t *srv; |
dig_server_t *srv; |
char tmp[NI_MAXHOST]; |
char tmp[NI_MAXHOST]; |
|
|
|
|
for (i = 0; i < count; i++) { |
for (i = 0; i < count; i++) { |
int error; |
int error; |
error = getnameinfo(&sockaddrs[i].type.sa, |
error = getnameinfo((struct sockaddr *)&sockaddrs[i], |
sockaddrs[i].type.sa.sa_len, tmp, sizeof(tmp), NULL, 0, |
sockaddrs[i].ss_len, tmp, sizeof(tmp), NULL, 0, |
NI_NUMERICHOST | NI_NUMERICSERV); |
NI_NUMERICHOST | NI_NUMERICSERV); |
if (error) |
if (error) |
fatal("%s", gai_strerror(error)); |
fatal("%s", gai_strerror(error)); |