}
void dns_open(
- sa_family_t family)
+ void)
{
int pid;
buf[strlen(buf) - 1] = 0; /* chomp newline. */
- longipstr(buf, &host, family);
+ sa_family_t family = (buf[0] == '4') ? AF_INET : AF_INET6;
+ longipstr(buf +1, &host, family);
set_sockaddr_ip(family, &sa, &host);
salen = (family == AF_INET) ? sizeof(struct sockaddr_in) :
sizeof(struct sockaddr_in6);
ip_t * ip)
{
struct dns_results *r;
- char buf[INET6_ADDRSTRLEN + 1];
+ char buf[INET6_ADDRSTRLEN + 2]; // af_byte + addr + null
int rv;
r = findip(ctl, ip);
r->name = NULL;
r->next = results;
results = r;
- snprintf(buf, sizeof(buf), "%s\n", strlongip(ctl->af, ip));
+ char ip4or6 = (ctl->af == AF_INET) ? '4' : '6';
+ snprintf(buf, sizeof(buf), "%c%s\n", ip4or6, strlongip(ctl->af, ip));
rv = write(todns[1], buf, strlen(buf));
if (rv < 0)
error(0, errno, "couldn't write to resolver process");