Remove ability to compile without IPv6 support.

This was the source of a large number of #ifdefs, originally
included for use with old embedded libc versions. I'm
sure no-one wants or needs IPv6-free code these days, so this
is a move towards more maintainable code.
This commit is contained in:
Simon Kelley committed 2018-10-23 22:10:17 +01:00
1 parent a220545c42
commit ee8750451b
22 files changed
+56 -418

No files matched your search

-13
View File
@@ -44,11 +44,6 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
if (maclen > DHCP_CHADDR_MAX) if (maclen > DHCP_CHADDR_MAX)
return 1; return 1;
#ifndef HAVE_IPV6
if (family != AF_INET)
return 1;
#endif
/* Look for existing entry */ /* Look for existing entry */
for (arp = arps; arp; arp = arp->next) for (arp = arps; arp; arp = arp->next)
{ {
@@ -60,13 +55,11 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
if (arp->addr.addr.addr4.s_addr != ((struct in_addr *)addrp)->s_addr) if (arp->addr.addr.addr4.s_addr != ((struct in_addr *)addrp)->s_addr)
continue; continue;
} }
#ifdef HAVE_IPV6
else else
{ {
if (!IN6_ARE_ADDR_EQUAL(&arp->addr.addr.addr6, (struct in6_addr *)addrp)) if (!IN6_ARE_ADDR_EQUAL(&arp->addr.addr.addr6, (struct in6_addr *)addrp))
continue; continue;
} }
#endif
if (arp->status == ARP_EMPTY) if (arp->status == ARP_EMPTY)
{ {
@@ -103,10 +96,8 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
memcpy(arp->hwaddr, mac, maclen); memcpy(arp->hwaddr, mac, maclen);
if (family == AF_INET) if (family == AF_INET)
arp->addr.addr.addr4.s_addr = ((struct in_addr *)addrp)->s_addr; arp->addr.addr.addr4.s_addr = ((struct in_addr *)addrp)->s_addr;
#ifdef HAVE_IPV6
else else
memcpy(&arp->addr.addr.addr6, addrp, IN6ADDRSZ); memcpy(&arp->addr.addr.addr6, addrp, IN6ADDRSZ);
#endif
} }
return 1; return 1;
@@ -136,11 +127,9 @@ int find_mac(union mysockaddr *addr, unsigned char *mac, int lazy, time_t now)
arp->addr.addr.addr4.s_addr != addr->in.sin_addr.s_addr) arp->addr.addr.addr4.s_addr != addr->in.sin_addr.s_addr)
continue; continue;
#ifdef HAVE_IPV6
if (arp->family == AF_INET6 && if (arp->family == AF_INET6 &&
!IN6_ARE_ADDR_EQUAL(&arp->addr.addr.addr6, &addr->in6.sin6_addr)) !IN6_ARE_ADDR_EQUAL(&arp->addr.addr.addr6, &addr->in6.sin6_addr))
continue; continue;
#endif
/* Only accept positive entries unless in lazy mode. */ /* Only accept positive entries unless in lazy mode. */
if (arp->status != ARP_EMPTY || lazy || updated) if (arp->status != ARP_EMPTY || lazy || updated)
@@ -203,10 +192,8 @@ int find_mac(union mysockaddr *addr, unsigned char *mac, int lazy, time_t now)
if (addr->sa.sa_family == AF_INET) if (addr->sa.sa_family == AF_INET)
arp->addr.addr.addr4.s_addr = addr->in.sin_addr.s_addr; arp->addr.addr.addr4.s_addr = addr->in.sin_addr.s_addr;
#ifdef HAVE_IPV6
else else
memcpy(&arp->addr.addr.addr6, &addr->in6.sin6_addr, IN6ADDRSZ); memcpy(&arp->addr.addr.addr6, &addr->in6.sin6_addr, IN6ADDRSZ);
#endif
} }
return 0; return 0;
+12 -39
View File
@@ -33,10 +33,8 @@ static struct addrlist *find_addrlist(struct addrlist *list, int flag, struct al
if (is_same_net(addr, list->addr.addr.addr4, netmask)) if (is_same_net(addr, list->addr.addr.addr4, netmask))
return list; return list;
} }
#ifdef HAVE_IPV6
else if (is_same_net6(&(addr_u->addr.addr6), &list->addr.addr.addr6, list->prefixlen)) else if (is_same_net6(&(addr_u->addr.addr6), &list->addr.addr.addr6, list->prefixlen))
return list; return list;
#endif
} while ((list = list->next)); } while ((list = list->next));
@@ -189,7 +187,6 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
while (intr->next && strcmp(intr->intr, intr->next->intr) == 0) while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
intr = intr->next; intr = intr->next;
} }
#ifdef HAVE_IPV6
else if (flag == F_IPV6) else if (flag == F_IPV6)
for (intr = daemon->int_names; intr; intr = intr->next) for (intr = daemon->int_names; intr; intr = intr->next)
{ {
@@ -205,7 +202,6 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
while (intr->next && strcmp(intr->intr, intr->next->intr) == 0) while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
intr = intr->next; intr = intr->next;
} }
#endif
if (intr) if (intr)
{ {
@@ -378,10 +374,8 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
if (qtype == T_A) if (qtype == T_A)
flag = F_IPV4; flag = F_IPV4;
#ifdef HAVE_IPV6
if (qtype == T_AAAA) if (qtype == T_AAAA)
flag = F_IPV6; flag = F_IPV6;
#endif
for (intr = daemon->int_names; intr; intr = intr->next) for (intr = daemon->int_names; intr; intr = intr->next)
if ((rc = hostname_issubdomain(name, intr->name))) if ((rc = hostname_issubdomain(name, intr->name)))
@@ -395,10 +389,9 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == qtype && if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == qtype &&
(local_query || filter_zone(zone, flag, &addrlist->addr))) (local_query || filter_zone(zone, flag, &addrlist->addr)))
{ {
#ifdef HAVE_IPV6
if (addrlist->flags & ADDRLIST_REVONLY) if (addrlist->flags & ADDRLIST_REVONLY)
continue; continue;
#endif
found = 1; found = 1;
log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL); log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
@@ -424,13 +417,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
if (peer_addr->sa.sa_family == AF_INET) if (peer_addr->sa.sa_family == AF_INET)
peer_addr->in.sin_port = 0; peer_addr->in.sin_port = 0;
#ifdef HAVE_IPV6
else else
{ {
peer_addr->in6.sin6_port = 0; peer_addr->in6.sin6_port = 0;
peer_addr->in6.sin6_scope_id = 0; peer_addr->in6.sin6_scope_id = 0;
} }
#endif
for (peers = daemon->auth_peers; peers; peers = peers->next) for (peers = daemon->auth_peers; peers; peers = peers->next)
if (sockaddr_isequal(peer_addr, &peers->addr)) if (sockaddr_isequal(peer_addr, &peers->addr))
@@ -442,10 +433,8 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
{ {
if (peer_addr->sa.sa_family == AF_INET) if (peer_addr->sa.sa_family == AF_INET)
inet_ntop(AF_INET, &peer_addr->in.sin_addr, daemon->addrbuff, ADDRSTRLEN); inet_ntop(AF_INET, &peer_addr->in.sin_addr, daemon->addrbuff, ADDRSTRLEN);
#ifdef HAVE_IPV6
else else
inet_ntop(AF_INET6, &peer_addr->in6.sin6_addr, daemon->addrbuff, ADDRSTRLEN); inet_ntop(AF_INET6, &peer_addr->in6.sin6_addr, daemon->addrbuff, ADDRSTRLEN);
#endif
my_syslog(LOG_WARNING, _("ignoring zone transfer request from %s"), daemon->addrbuff); my_syslog(LOG_WARNING, _("ignoring zone transfer request from %s"), daemon->addrbuff);
return 0; return 0;
@@ -603,7 +592,6 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
p += sprintf(p, "%u.in-addr.arpa", a & 0xff); p += sprintf(p, "%u.in-addr.arpa", a & 0xff);
} }
#ifdef HAVE_IPV6
else else
{ {
char *p = name; char *p = name;
@@ -617,7 +605,6 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
p += sprintf(p, "ip6.arpa"); p += sprintf(p, "ip6.arpa");
} }
#endif
} }
/* handle NS and SOA in auth section or for explicit queries */ /* handle NS and SOA in auth section or for explicit queries */
@@ -754,14 +741,12 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
daemon->auth_ttl, NULL, T_A, C_IN, "4", cut ? intr->name : NULL, &addrlist->addr)) daemon->auth_ttl, NULL, T_A, C_IN, "4", cut ? intr->name : NULL, &addrlist->addr))
anscount++; anscount++;
#ifdef HAVE_IPV6
for (addrlist = intr->addr; addrlist; addrlist = addrlist->next) for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
if ((addrlist->flags & ADDRLIST_IPV6) && if ((addrlist->flags & ADDRLIST_IPV6) &&
(local_query || filter_zone(zone, F_IPV6, &addrlist->addr)) && (local_query || filter_zone(zone, F_IPV6, &addrlist->addr)) &&
add_resource_record(header, limit, &trunc, -axfroffset, &ansp, add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
daemon->auth_ttl, NULL, T_AAAA, C_IN, "6", cut ? intr->name : NULL, &addrlist->addr)) daemon->auth_ttl, NULL, T_AAAA, C_IN, "6", cut ? intr->name : NULL, &addrlist->addr))
anscount++; anscount++;
#endif
/* restore config data */ /* restore config data */
if (cut) if (cut)
@@ -798,18 +783,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
{ {
char *cache_name = cache_get_name(crecp); char *cache_name = cache_get_name(crecp);
if (!strchr(cache_name, '.') && if (!strchr(cache_name, '.') &&
(local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr)))) (local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))) &&
{ add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
qtype = T_A; daemon->auth_ttl, NULL, (crecp->flags & F_IPV6) ? T_AAAA : T_A, C_IN,
#ifdef HAVE_IPV6 (crecp->flags & F_IPV4) ? "4" : "6", cache_name, &crecp->addr))
if (crecp->flags & F_IPV6) anscount++;
qtype = T_AAAA;
#endif
if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
daemon->auth_ttl, NULL, qtype, C_IN,
(crecp->flags & F_IPV4) ? "4" : "6", cache_name, &crecp->addr))
anscount++;
}
} }
if ((crecp->flags & F_HOSTS) || (((crecp->flags & F_DHCP) && option_bool(OPT_DHCP_FQDN)))) if ((crecp->flags & F_HOSTS) || (((crecp->flags & F_DHCP) && option_bool(OPT_DHCP_FQDN))))
@@ -818,18 +796,13 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
if (in_zone(zone, name, &cut) && if (in_zone(zone, name, &cut) &&
(local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr)))) (local_query || filter_zone(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))))
{ {
qtype = T_A; if (cut)
#ifdef HAVE_IPV6 *cut = 0;
if (crecp->flags & F_IPV6)
qtype = T_AAAA;
#endif
if (cut)
*cut = 0;
if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp, if (add_resource_record(header, limit, &trunc, -axfroffset, &ansp,
daemon->auth_ttl, NULL, qtype, C_IN, daemon->auth_ttl, NULL, (crecp->flags & F_IPV6) ? T_AAAA : T_A, C_IN,
(crecp->flags & F_IPV4) ? "4" : "6", cut ? name : NULL, &crecp->addr)) (crecp->flags & F_IPV4) ? "4" : "6", cut ? name : NULL, &crecp->addr))
anscount++; anscount++;
} }
} }
} }
+2 -8
View File
@@ -31,9 +31,7 @@
# include <net/if_var.h> # include <net/if_var.h>
#endif #endif
#include <netinet/in_var.h> #include <netinet/in_var.h>
#ifdef HAVE_IPV6 #include <netinet6/in6_var.h>
# include <netinet6/in6_var.h>
#endif
#ifndef SA_SIZE #ifndef SA_SIZE
#define SA_SIZE(sa) \ #define SA_SIZE(sa) \
@@ -121,7 +119,7 @@ int iface_enumerate(int family, void *parm, int (*callback)())
if (getifaddrs(&head) == -1) if (getifaddrs(&head) == -1)
return 0; return 0;
#if defined(HAVE_BSD_NETWORK) && defined(HAVE_IPV6) #if defined(HAVE_BSD_NETWORK)
if (family == AF_INET6) if (family == AF_INET6)
fd = socket(PF_INET6, SOCK_DGRAM, 0); fd = socket(PF_INET6, SOCK_DGRAM, 0);
#endif #endif
@@ -152,7 +150,6 @@ int iface_enumerate(int family, void *parm, int (*callback)())
if (!((*callback)(addr, iface_index, NULL, netmask, broadcast, parm))) if (!((*callback)(addr, iface_index, NULL, netmask, broadcast, parm)))
goto err; goto err;
} }
#ifdef HAVE_IPV6
else if (family == AF_INET6) else if (family == AF_INET6)
{ {
struct in6_addr *addr = &((struct sockaddr_in6 *) addrs->ifa_addr)->sin6_addr; struct in6_addr *addr = &((struct sockaddr_in6 *) addrs->ifa_addr)->sin6_addr;
@@ -219,7 +216,6 @@ int iface_enumerate(int family, void *parm, int (*callback)())
(int) preferred, (int)valid, parm))) (int) preferred, (int)valid, parm)))
goto err; goto err;
} }
#endif /* HAVE_IPV6 */
#ifdef HAVE_DHCP6 #ifdef HAVE_DHCP6
else if (family == AF_LINK) else if (family == AF_LINK)
@@ -427,10 +423,8 @@ void route_sock(void)
del_family = sa->sa_family; del_family = sa->sa_family;
if (del_family == AF_INET) if (del_family == AF_INET)
del_addr.addr.addr4 = ((struct sockaddr_in *)sa)->sin_addr; del_addr.addr.addr4 = ((struct sockaddr_in *)sa)->sin_addr;
#ifdef HAVE_IPV6
else if (del_family == AF_INET6) else if (del_family == AF_INET6)
del_addr.addr.addr6 = ((struct sockaddr_in6 *)sa)->sin6_addr; del_addr.addr.addr6 = ((struct sockaddr_in6 *)sa)->sin6_addr;
#endif
else else
del_family = 0; del_family = 0;
} }
+5 -26
View File
@@ -410,11 +410,8 @@ static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t no
else else
{ {
int i; int i;
#ifdef HAVE_IPV6
int addrlen = (flags & F_IPV6) ? IN6ADDRSZ : INADDRSZ; int addrlen = (flags & F_IPV6) ? IN6ADDRSZ : INADDRSZ;
#else
int addrlen = INADDRSZ;
#endif
for (i = 0; i < hash_size; i++) for (i = 0; i < hash_size; i++)
for (crecp = hash_table[i], up = &hash_table[i]; for (crecp = hash_table[i], up = &hash_table[i];
crecp && ((crecp->flags & F_REVERSE) || !(crecp->flags & F_IMMORTAL)); crecp && ((crecp->flags & F_REVERSE) || !(crecp->flags & F_IMMORTAL));
@@ -512,11 +509,9 @@ static struct crec *really_insert(char *name, struct all_addr *addr,
if ((flags & F_IPV4) && (new->flags & F_IPV4) && if ((flags & F_IPV4) && (new->flags & F_IPV4) &&
new->addr.addr.addr.addr4.s_addr == addr->addr.addr4.s_addr) new->addr.addr.addr.addr4.s_addr == addr->addr.addr4.s_addr)
return new; return new;
#ifdef HAVE_IPV6
else if ((flags & F_IPV6) && (new->flags & F_IPV6) && else if ((flags & F_IPV6) && (new->flags & F_IPV6) &&
IN6_ARE_ADDR_EQUAL(&new->addr.addr.addr.addr6, &addr->addr.addr6)) IN6_ARE_ADDR_EQUAL(&new->addr.addr.addr.addr6, &addr->addr.addr6))
return new; return new;
#endif
} }
insert_error = 1; insert_error = 1;
@@ -938,11 +933,7 @@ struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr,
time_t now, unsigned int prot) time_t now, unsigned int prot)
{ {
struct crec *ans; struct crec *ans;
#ifdef HAVE_IPV6
int addrlen = (prot == F_IPV6) ? IN6ADDRSZ : INADDRSZ; int addrlen = (prot == F_IPV6) ? IN6ADDRSZ : INADDRSZ;
#else
int addrlen = INADDRSZ;
#endif
if (crecp) /* iterating */ if (crecp) /* iterating */
ans = crecp->next; ans = crecp->next;
@@ -1171,14 +1162,12 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
addrlen = INADDRSZ; addrlen = INADDRSZ;
domain_suffix = get_domain(addr.addr.addr4); domain_suffix = get_domain(addr.addr.addr4);
} }
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, token, &addr) > 0) else if (inet_pton(AF_INET6, token, &addr) > 0)
{ {
flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV6; flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV6;
addrlen = IN6ADDRSZ; addrlen = IN6ADDRSZ;
domain_suffix = get_domain6(&addr.addr.addr6); domain_suffix = get_domain6(&addr.addr.addr6);
} }
#endif
else else
{ {
my_syslog(LOG_ERR, _("bad address at %s line %d"), filename, lineno); my_syslog(LOG_ERR, _("bad address at %s line %d"), filename, lineno);
@@ -1343,7 +1332,7 @@ void cache_reload(void)
cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV4 | F_NAMEP | F_CONFIG; cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV4 | F_NAMEP | F_CONFIG;
add_hosts_entry(cache, (struct all_addr *)&hr->addr, INADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz); add_hosts_entry(cache, (struct all_addr *)&hr->addr, INADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz);
} }
#ifdef HAVE_IPV6
if (!IN6_IS_ADDR_UNSPECIFIED(&hr->addr6) && if (!IN6_IS_ADDR_UNSPECIFIED(&hr->addr6) &&
(cache = whine_malloc(SIZEOF_POINTER_CREC))) (cache = whine_malloc(SIZEOF_POINTER_CREC)))
{ {
@@ -1352,7 +1341,6 @@ void cache_reload(void)
cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV6 | F_NAMEP | F_CONFIG; cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | F_REVERSE | F_IPV6 | F_NAMEP | F_CONFIG;
add_hosts_entry(cache, (struct all_addr *)&hr->addr6, IN6ADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz); add_hosts_entry(cache, (struct all_addr *)&hr->addr6, IN6ADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz);
} }
#endif
} }
if (option_bool(OPT_NO_HOSTS) && !daemon->addn_hosts) if (option_bool(OPT_NO_HOSTS) && !daemon->addn_hosts)
@@ -1451,13 +1439,11 @@ void cache_add_dhcp_entry(char *host_name, int prot,
int in_hosts = 0; int in_hosts = 0;
size_t addrlen = sizeof(struct in_addr); size_t addrlen = sizeof(struct in_addr);
#ifdef HAVE_IPV6
if (prot == AF_INET6) if (prot == AF_INET6)
{ {
flags = F_IPV6; flags = F_IPV6;
addrlen = sizeof(struct in6_addr); addrlen = sizeof(struct in6_addr);
} }
#endif
inet_ntop(prot, host_address, daemon->addrbuff, ADDRSTRLEN); inet_ntop(prot, host_address, daemon->addrbuff, ADDRSTRLEN);
@@ -1810,10 +1796,8 @@ void dump_cache(time_t now)
a = daemon->addrbuff; a = daemon->addrbuff;
if (cache->flags & F_IPV4) if (cache->flags & F_IPV4)
inet_ntop(AF_INET, &cache->addr.addr, a, ADDRSTRLEN); inet_ntop(AF_INET, &cache->addr.addr, a, ADDRSTRLEN);
#ifdef HAVE_IPV6
else if (cache->flags & F_IPV6) else if (cache->flags & F_IPV6)
inet_ntop(AF_INET6, &cache->addr.addr, a, ADDRSTRLEN); inet_ntop(AF_INET6, &cache->addr.addr, a, ADDRSTRLEN);
#endif
} }
if (cache->flags & F_IPV4) if (cache->flags & F_IPV4)
@@ -1954,14 +1938,9 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
sprintf(daemon->addrbuff, "%u", rcode); sprintf(daemon->addrbuff, "%u", rcode);
} }
else else
{ inet_ntop(flags & F_IPV4 ? AF_INET : AF_INET6,
#ifdef HAVE_IPV6 addr, daemon->addrbuff, ADDRSTRLEN);
inet_ntop(flags & F_IPV4 ? AF_INET : AF_INET6,
addr, daemon->addrbuff, ADDRSTRLEN);
#else
strncpy(daemon->addrbuff, inet_ntoa(addr->addr.addr4), ADDRSTRLEN);
#endif
}
} }
else else
dest = arg; dest = arg;
+3 -27
View File
@@ -131,7 +131,6 @@ HAVE_INOTIFY
NO_ID NO_ID
Don't report *.bind CHAOS info to clients, forward such requests upstream instead. Don't report *.bind CHAOS info to clients, forward such requests upstream instead.
NO_IPV6
NO_TFTP NO_TFTP
NO_DHCP NO_DHCP
NO_DHCP6 NO_DHCP6
@@ -141,8 +140,8 @@ NO_AUTH
NO_DUMPFILE NO_DUMPFILE
NO_INOTIFY NO_INOTIFY
these are available to explicitly disable compile time options which would these are available to explicitly disable compile time options which would
otherwise be enabled automatically (HAVE_IPV6, >2Gb file sizes) or otherwise be enabled automatically or which are enabled by default
which are enabled by default in the distributed source tree. Building dnsmasq in the distributed source tree. Building dnsmasq
with something like "make COPTS=-DNO_SCRIPT" will do the trick. with something like "make COPTS=-DNO_SCRIPT" will do the trick.
NO_GMP NO_GMP
Don't use and link against libgmp, Useful if nettle is built with --enable-mini-gmp. Don't use and link against libgmp, Useful if nettle is built with --enable-mini-gmp.
@@ -308,29 +307,9 @@ HAVE_SOCKADDR_SA_LEN
#endif #endif
/* Decide if we're going to support IPv6 */
/* We assume that systems which don't have IPv6
headers don't have ntop and pton either */
#if defined(INET6_ADDRSTRLEN) && defined(IPV6_V6ONLY)
# define HAVE_IPV6
# define ADDRSTRLEN INET6_ADDRSTRLEN
#else
# if !defined(INET_ADDRSTRLEN)
# define INET_ADDRSTRLEN 16 /* 4*3 + 3 dots + NULL */
# endif
# undef HAVE_IPV6
# define ADDRSTRLEN INET_ADDRSTRLEN
#endif
/* rules to implement compile-time option dependencies and /* rules to implement compile-time option dependencies and
the NO_XXX flags */ the NO_XXX flags */
#ifdef NO_IPV6
#undef HAVE_IPV6
#endif
#ifdef NO_TFTP #ifdef NO_TFTP
#undef HAVE_TFTP #undef HAVE_TFTP
#endif #endif
@@ -340,7 +319,7 @@ HAVE_SOCKADDR_SA_LEN
#undef HAVE_DHCP6 #undef HAVE_DHCP6
#endif #endif
#if defined(NO_DHCP6) || !defined(HAVE_IPV6) #if defined(NO_DHCP6)
#undef HAVE_DHCP6 #undef HAVE_DHCP6
#endif #endif
@@ -385,9 +364,6 @@ HAVE_SOCKADDR_SA_LEN
#ifdef DNSMASQ_COMPILE_OPTS #ifdef DNSMASQ_COMPILE_OPTS
static char *compile_opts = static char *compile_opts =
#ifndef HAVE_IPV6
"no-"
#endif
"IPv6 " "IPv6 "
#ifndef HAVE_GETOPT_LONG #ifndef HAVE_GETOPT_LONG
"no-" "no-"
-2
View File
@@ -36,7 +36,6 @@ int get_incoming_mark(union mysockaddr *peer_addr, struct all_addr *local_addr,
nfct_set_attr_u8(ct, ATTR_L4PROTO, istcp ? IPPROTO_TCP : IPPROTO_UDP); nfct_set_attr_u8(ct, ATTR_L4PROTO, istcp ? IPPROTO_TCP : IPPROTO_UDP);
nfct_set_attr_u16(ct, ATTR_PORT_DST, htons(daemon->port)); nfct_set_attr_u16(ct, ATTR_PORT_DST, htons(daemon->port));
#ifdef HAVE_IPV6
if (peer_addr->sa.sa_family == AF_INET6) if (peer_addr->sa.sa_family == AF_INET6)
{ {
nfct_set_attr_u8(ct, ATTR_L3PROTO, AF_INET6); nfct_set_attr_u8(ct, ATTR_L3PROTO, AF_INET6);
@@ -45,7 +44,6 @@ int get_incoming_mark(union mysockaddr *peer_addr, struct all_addr *local_addr,
nfct_set_attr(ct, ATTR_IPV6_DST, local_addr->addr.addr6.s6_addr); nfct_set_attr(ct, ATTR_IPV6_DST, local_addr->addr.addr6.s6_addr);
} }
else else
#endif
{ {
nfct_set_attr_u8(ct, ATTR_L3PROTO, AF_INET); nfct_set_attr_u8(ct, ATTR_L3PROTO, AF_INET);
nfct_set_attr_u32(ct, ATTR_IPV4_SRC, peer_addr->in.sin_addr.s_addr); nfct_set_attr_u32(ct, ATTR_IPV4_SRC, peer_addr->in.sin_addr.s_addr);
-4
View File
@@ -185,9 +185,6 @@ static void dbus_read_servers(DBusMessage *message)
} }
} }
#ifndef HAVE_IPV6
my_syslog(LOG_WARNING, _("attempt to set an IPv6 server address via DBus - no IPv6 support"));
#else
if (i == sizeof(struct in6_addr)) if (i == sizeof(struct in6_addr))
{ {
memcpy(&addr.in6.sin6_addr, p, sizeof(struct in6_addr)); memcpy(&addr.in6.sin6_addr, p, sizeof(struct in6_addr));
@@ -202,7 +199,6 @@ static void dbus_read_servers(DBusMessage *message)
source_addr.in6.sin6_port = htons(daemon->query_port); source_addr.in6.sin6_port = htons(daemon->query_port);
skip = 0; skip = 0;
} }
#endif
} }
else else
/* At the end */ /* At the end */
+3 -3
View File
@@ -1730,11 +1730,11 @@ static void check_dns_listeners(time_t now)
indextoname(listener->tcpfd, if_index, intr_name)) indextoname(listener->tcpfd, if_index, intr_name))
{ {
struct all_addr addr; struct all_addr addr;
addr.addr.addr4 = tcp_addr.in.sin_addr;
#ifdef HAVE_IPV6
if (tcp_addr.sa.sa_family == AF_INET6) if (tcp_addr.sa.sa_family == AF_INET6)
addr.addr.addr6 = tcp_addr.in6.sin6_addr; addr.addr.addr6 = tcp_addr.in6.sin6_addr;
#endif else
addr.addr.addr4 = tcp_addr.in.sin_addr;
for (iface = daemon->interfaces; iface; iface = iface->next) for (iface = daemon->interfaces; iface; iface = iface->next)
if (iface->index == if_index) if (iface->index == if_index)
+2 -18
View File
@@ -126,9 +126,7 @@ typedef unsigned long long u64;
#include <net/if_arp.h> #include <net/if_arp.h>
#include <netinet/in_systm.h> #include <netinet/in_systm.h>
#include <netinet/ip.h> #include <netinet/ip.h>
#ifdef HAVE_IPV6
#include <netinet/ip6.h> #include <netinet/ip6.h>
#endif
#include <netinet/ip_icmp.h> #include <netinet/ip_icmp.h>
#include <sys/uio.h> #include <sys/uio.h>
#include <syslog.h> #include <syslog.h>
@@ -159,6 +157,8 @@ extern int capget(cap_user_header_t header, cap_user_data_t data);
/* daemon is function in the C library.... */ /* daemon is function in the C library.... */
#define daemon dnsmasq_daemon #define daemon dnsmasq_daemon
#define ADDRSTRLEN INET6_ADDRSTRLEN
/* Async event queue */ /* Async event queue */
struct event_desc { struct event_desc {
int event, data, msg_sz; int event, data, msg_sz;
@@ -273,9 +273,7 @@ struct event_desc {
struct all_addr { struct all_addr {
union { union {
struct in_addr addr4; struct in_addr addr4;
#ifdef HAVE_IPV6
struct in6_addr addr6; struct in6_addr addr6;
#endif
/* for log_query */ /* for log_query */
struct { struct {
unsigned short keytag, algo, digest; unsigned short keytag, algo, digest;
@@ -383,9 +381,7 @@ struct host_record {
struct name_list *next; struct name_list *next;
} *names; } *names;
struct in_addr addr; struct in_addr addr;
#ifdef HAVE_IPV6
struct in6_addr addr6; struct in6_addr addr6;
#endif
struct host_record *next; struct host_record *next;
}; };
@@ -496,9 +492,7 @@ struct crec {
union mysockaddr { union mysockaddr {
struct sockaddr sa; struct sockaddr sa;
struct sockaddr_in in; struct sockaddr_in in;
#if defined(HAVE_IPV6)
struct sockaddr_in6 in6; struct sockaddr_in6 in6;
#endif
}; };
/* bits in flag param to IPv6 callbacks from iface_enumerate() */ /* bits in flag param to IPv6 callbacks from iface_enumerate() */
@@ -660,9 +654,7 @@ struct frec {
struct all_addr dest; struct all_addr dest;
struct server *sentto; /* NULL means free */ struct server *sentto; /* NULL means free */
struct randfd *rfd4; struct randfd *rfd4;
#ifdef HAVE_IPV6
struct randfd *rfd6; struct randfd *rfd6;
#endif
unsigned int iface; unsigned int iface;
unsigned short orig_id, new_id; unsigned short orig_id, new_id;
int log_id, fd, forwardall, flags; int log_id, fd, forwardall, flags;
@@ -877,9 +869,7 @@ struct dhcp_bridge {
struct cond_domain { struct cond_domain {
char *domain, *prefix; char *domain, *prefix;
struct in_addr start, end; struct in_addr start, end;
#ifdef HAVE_IPV6
struct in6_addr start6, end6; struct in6_addr start6, end6;
#endif
int is6, indexed; int is6, indexed;
struct cond_domain *next; struct cond_domain *next;
}; };
@@ -1184,9 +1174,7 @@ void blockdata_free(struct blockdata *blocks);
/* domain.c */ /* domain.c */
char *get_domain(struct in_addr addr); char *get_domain(struct in_addr addr);
#ifdef HAVE_IPV6
char *get_domain6(struct in6_addr *addr); char *get_domain6(struct in6_addr *addr);
#endif
int is_name_synthetic(int flags, char *name, struct all_addr *addr); int is_name_synthetic(int flags, char *name, struct all_addr *addr);
int is_rev_synth(int flag, struct all_addr *addr, char *name); int is_rev_synth(int flag, struct all_addr *addr, char *name);
@@ -1270,11 +1258,9 @@ int hostname_issubdomain(char *a, char *b);
time_t dnsmasq_time(void); time_t dnsmasq_time(void);
int netmask_length(struct in_addr mask); int netmask_length(struct in_addr mask);
int is_same_net(struct in_addr a, struct in_addr b, struct in_addr mask); int is_same_net(struct in_addr a, struct in_addr b, struct in_addr mask);
#ifdef HAVE_IPV6
int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen); int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen);
u64 addr6part(struct in6_addr *addr); u64 addr6part(struct in6_addr *addr);
void setaddr6part(struct in6_addr *addr, u64 host); void setaddr6part(struct in6_addr *addr, u64 host);
#endif
int retry_send(ssize_t rc); int retry_send(ssize_t rc);
void prettyprint_time(char *buf, unsigned int t); void prettyprint_time(char *buf, unsigned int t);
int prettyprint_addr(union mysockaddr *addr, char *buf); int prettyprint_addr(union mysockaddr *addr, char *buf);
@@ -1353,9 +1339,7 @@ int loopback_exception(int fd, int family, struct all_addr *addr, char *name);
int label_exception(int index, int family, struct all_addr *addr); int label_exception(int index, int family, struct all_addr *addr);
int fix_fd(int fd); int fix_fd(int fd);
int tcp_interface(int fd, int af); int tcp_interface(int fd, int af);
#ifdef HAVE_IPV6
int set_ipv6pktinfo(int fd); int set_ipv6pktinfo(int fd);
#endif
#ifdef HAVE_DHCP6 #ifdef HAVE_DHCP6
void join_multicast(int dienow); void join_multicast(int dienow);
#endif #endif
+4 -24
View File
@@ -18,21 +18,14 @@
static struct cond_domain *search_domain(struct in_addr addr, struct cond_domain *c); static struct cond_domain *search_domain(struct in_addr addr, struct cond_domain *c);
#ifdef HAVE_IPV6
static struct cond_domain *search_domain6(struct in6_addr *addr, struct cond_domain *c); static struct cond_domain *search_domain6(struct in6_addr *addr, struct cond_domain *c);
#endif
int is_name_synthetic(int flags, char *name, struct all_addr *addr) int is_name_synthetic(int flags, char *name, struct all_addr *addr)
{ {
char *p; char *p;
struct cond_domain *c = NULL; struct cond_domain *c = NULL;
int prot = AF_INET; int prot = (flags & F_IPV6) ? AF_INET6 : AF_INET;
#ifdef HAVE_IPV6
if (flags & F_IPV6)
prot = AF_INET6;
#endif
for (c = daemon->synth_domains; c; c = c->next) for (c = daemon->synth_domains; c; c = c->next)
{ {
@@ -83,8 +76,7 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
addr->addr.addr4.s_addr = htonl(ntohl(c->start.s_addr) + index); addr->addr.addr4.s_addr = htonl(ntohl(c->start.s_addr) + index);
found = 1; found = 1;
} }
} }
#ifdef HAVE_IPV6
else else
{ {
u64 index = atoll(tail); u64 index = atoll(tail);
@@ -98,7 +90,6 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
found = 1; found = 1;
} }
} }
#endif
} }
} }
else else
@@ -111,10 +102,8 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
if ((c >='0' && c <= '9') || c == '-') if ((c >='0' && c <= '9') || c == '-')
continue; continue;
#ifdef HAVE_IPV6
if (prot == AF_INET6 && ((c >='A' && c <= 'F') || (c >='a' && c <= 'f'))) if (prot == AF_INET6 && ((c >='A' && c <= 'F') || (c >='a' && c <= 'f')))
continue; continue;
#endif
break; break;
} }
@@ -124,7 +113,6 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
*p = 0; *p = 0;
#ifdef HAVE_IPV6
if (prot == AF_INET6 && strstr(tail, "--ffff-") == tail) if (prot == AF_INET6 && strstr(tail, "--ffff-") == tail)
{ {
/* special hack for v4-mapped. */ /* special hack for v4-mapped. */
@@ -134,7 +122,6 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
*p = '.'; *p = '.';
} }
else else
#endif
{ {
/* swap . or : for - */ /* swap . or : for - */
for (p = tail; *p; p++) for (p = tail; *p; p++)
@@ -142,10 +129,8 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
{ {
if (prot == AF_INET) if (prot == AF_INET)
*p = '.'; *p = '.';
#ifdef HAVE_IPV6
else else
*p = ':'; *p = ':';
#endif
} }
} }
@@ -158,7 +143,6 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
ntohl(addr->addr.addr4.s_addr) <= ntohl(c->end.s_addr)) ntohl(addr->addr.addr4.s_addr) <= ntohl(c->end.s_addr))
found = 1; found = 1;
} }
#ifdef HAVE_IPV6
else else
{ {
u64 addrpart = addr6part(&addr->addr.addr6); u64 addrpart = addr6part(&addr->addr.addr6);
@@ -169,7 +153,6 @@ int is_name_synthetic(int flags, char *name, struct all_addr *addr)
addrpart <= addr6part(&c->end6)) addrpart <= addr6part(&c->end6))
found = 1; found = 1;
} }
#endif
} }
} }
@@ -221,8 +204,7 @@ int is_rev_synth(int flag, struct all_addr *addr, char *name)
return 1; return 1;
} }
#ifdef HAVE_IPV6 if ((flag & F_IPV6) && (c = search_domain6(&addr->addr.addr6, daemon->synth_domains)))
if (flag & F_IPV6 && (c = search_domain6(&addr->addr.addr6, daemon->synth_domains)))
{ {
char *p; char *p;
@@ -259,7 +241,6 @@ int is_rev_synth(int flag, struct all_addr *addr, char *name)
return 1; return 1;
} }
#endif
return 0; return 0;
} }
@@ -286,7 +267,7 @@ char *get_domain(struct in_addr addr)
return daemon->domain_suffix; return daemon->domain_suffix;
} }
#ifdef HAVE_IPV6
static struct cond_domain *search_domain6(struct in6_addr *addr, struct cond_domain *c) static struct cond_domain *search_domain6(struct in6_addr *addr, struct cond_domain *c)
{ {
u64 addrpart = addr6part(addr); u64 addrpart = addr6part(addr);
@@ -310,4 +291,3 @@ char *get_domain6(struct in6_addr *addr)
return daemon->domain_suffix; return daemon->domain_suffix;
} }
#endif
-4
View File
@@ -82,10 +82,8 @@ void dump_init(void)
void dump_packet(int mask, void *packet, size_t len, union mysockaddr *src, union mysockaddr *dst) void dump_packet(int mask, void *packet, size_t len, union mysockaddr *src, union mysockaddr *dst)
{ {
struct ip ip; struct ip ip;
#ifdef HAVE_IPV6
struct ip6_hdr ip6; struct ip6_hdr ip6;
int family; int family;
#endif
struct udphdr { struct udphdr {
u16 uh_sport; /* source port */ u16 uh_sport; /* source port */
u16 uh_dport; /* destination port */ u16 uh_dport; /* destination port */
@@ -105,7 +103,6 @@ void dump_packet(int mask, void *packet, size_t len, union mysockaddr *src, unio
/* So wireshark can Id the packet. */ /* So wireshark can Id the packet. */
udp.uh_sport = udp.uh_dport = htons(NAMESERVER_PORT); udp.uh_sport = udp.uh_dport = htons(NAMESERVER_PORT);
#ifdef HAVE_IPV6
if (src) if (src)
family = src->sa.sa_family; family = src->sa.sa_family;
else else
@@ -139,7 +136,6 @@ void dump_packet(int mask, void *packet, size_t len, union mysockaddr *src, unio
sum += ((u16 *)&ip6.ip6_src)[i]; sum += ((u16 *)&ip6.ip6_src)[i];
} }
else else
#endif
{ {
iphdr = &ip; iphdr = &ip;
ipsz = sizeof(ip); ipsz = sizeof(ip);
+1 -13
View File
@@ -301,20 +301,14 @@ static size_t add_mac(struct dns_header *header, size_t plen, unsigned char *lim
struct subnet_opt { struct subnet_opt {
u16 family; u16 family;
u8 source_netmask, scope_netmask; u8 source_netmask, scope_netmask;
#ifdef HAVE_IPV6
u8 addr[IN6ADDRSZ]; u8 addr[IN6ADDRSZ];
#else
u8 addr[INADDRSZ];
#endif
}; };
static void *get_addrp(union mysockaddr *addr, const short family) static void *get_addrp(union mysockaddr *addr, const short family)
{ {
#ifdef HAVE_IPV6
if (family == AF_INET6) if (family == AF_INET6)
return &addr->in6.sin6_addr; return &addr->in6.sin6_addr;
#endif
return &addr->in.sin_addr; return &addr->in.sin_addr;
} }
@@ -330,7 +324,6 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
opt->source_netmask = 0; opt->source_netmask = 0;
opt->scope_netmask = 0; opt->scope_netmask = 0;
#ifdef HAVE_IPV6
if (source->sa.sa_family == AF_INET6 && daemon->add_subnet6) if (source->sa.sa_family == AF_INET6 && daemon->add_subnet6)
{ {
opt->source_netmask = daemon->add_subnet6->mask; opt->source_netmask = daemon->add_subnet6->mask;
@@ -342,7 +335,6 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
else else
addrp = &source->in6.sin6_addr; addrp = &source->in6.sin6_addr;
} }
#endif
if (source->sa.sa_family == AF_INET && daemon->add_subnet4) if (source->sa.sa_family == AF_INET && daemon->add_subnet4)
{ {
@@ -356,11 +348,7 @@ static size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source)
addrp = &source->in.sin_addr; addrp = &source->in.sin_addr;
} }
#ifdef HAVE_IPV6
opt->family = htons(sa_family == AF_INET6 ? 2 : 1); opt->family = htons(sa_family == AF_INET6 ? 2 : 1);
#else
opt->family = htons(1);
#endif
len = 0; len = 0;
+5 -63
View File
@@ -38,9 +38,7 @@ int send_from(int fd, int nowild, char *packet, size_t len,
#elif defined(IP_SENDSRCADDR) #elif defined(IP_SENDSRCADDR)
char control[CMSG_SPACE(sizeof(struct in_addr))]; char control[CMSG_SPACE(sizeof(struct in_addr))];
#endif #endif
#ifdef HAVE_IPV6
char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))]; char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
#endif
} control_u; } control_u;
iov[0].iov_base = packet; iov[0].iov_base = packet;
@@ -79,7 +77,6 @@ int send_from(int fd, int nowild, char *packet, size_t len,
#endif #endif
} }
else else
#ifdef HAVE_IPV6
{ {
struct in6_pktinfo p; struct in6_pktinfo p;
p.ipi6_ifindex = iface; /* Need iface for IPv6 to handle link-local addrs */ p.ipi6_ifindex = iface; /* Need iface for IPv6 to handle link-local addrs */
@@ -89,9 +86,6 @@ int send_from(int fd, int nowild, char *packet, size_t len,
cmptr->cmsg_type = daemon->v6pktinfo; cmptr->cmsg_type = daemon->v6pktinfo;
cmptr->cmsg_level = IPPROTO_IPV6; cmptr->cmsg_level = IPPROTO_IPV6;
} }
#else
(void)iface; /* eliminate warning */
#endif
} }
while (retry_send(sendmsg(fd, &msg, 0))); while (retry_send(sendmsg(fd, &msg, 0)));
@@ -144,10 +138,8 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
flags = sflag; flags = sflag;
if (serv->addr.sa.sa_family == AF_INET) if (serv->addr.sa.sa_family == AF_INET)
*addrpp = (struct all_addr *)&serv->addr.in.sin_addr; *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
#ifdef HAVE_IPV6
else else
*addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr; *addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
#endif
} }
else if (!flags || (flags & F_NXDOMAIN)) else if (!flags || (flags & F_NXDOMAIN))
flags = F_NOERR; flags = F_NOERR;
@@ -204,10 +196,8 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
flags = sflag; flags = sflag;
if (serv->addr.sa.sa_family == AF_INET) if (serv->addr.sa.sa_family == AF_INET)
*addrpp = (struct all_addr *)&serv->addr.in.sin_addr; *addrpp = (struct all_addr *)&serv->addr.in.sin_addr;
#ifdef HAVE_IPV6
else else
*addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr; *addrpp = (struct all_addr *)&serv->addr.in6.sin6_addr;
#endif
} }
else if (!flags || (flags & F_NXDOMAIN)) else if (!flags || (flags & F_NXDOMAIN))
flags = F_NOERR; flags = F_NOERR;
@@ -236,10 +226,8 @@ static unsigned int search_servers(time_t now, struct all_addr **addrpp, unsigne
/* handle F_IPV4 and F_IPV6 set on ANY query to 0.0.0.0/:: domain. */ /* handle F_IPV4 and F_IPV6 set on ANY query to 0.0.0.0/:: domain. */
if (flags & F_IPV4) if (flags & F_IPV4)
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, qdomain, *addrpp, NULL); log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, qdomain, *addrpp, NULL);
#ifdef HAVE_IPV6
if (flags & F_IPV6) if (flags & F_IPV6)
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, qdomain, *addrpp, NULL); log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, qdomain, *addrpp, NULL);
#endif
} }
} }
else if ((*type) & SERV_USE_RESOLV) else if ((*type) & SERV_USE_RESOLV)
@@ -302,20 +290,17 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
if (forward->sentto->addr.sa.sa_family == AF_INET) if (forward->sentto->addr.sa.sa_family == AF_INET)
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec"); log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
#ifdef HAVE_IPV6
else else
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec"); log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
#endif
if (forward->sentto->sfd) if (forward->sentto->sfd)
fd = forward->sentto->sfd->fd; fd = forward->sentto->sfd->fd;
else else
{ {
#ifdef HAVE_IPV6
if (forward->sentto->addr.sa.sa_family == AF_INET6) if (forward->sentto->addr.sa.sa_family == AF_INET6)
fd = forward->rfd6->fd; fd = forward->rfd6->fd;
else else
#endif
fd = forward->rfd4->fd; fd = forward->rfd4->fd;
} }
@@ -475,7 +460,6 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
fd = start->sfd->fd; fd = start->sfd->fd;
else else
{ {
#ifdef HAVE_IPV6
if (start->addr.sa.sa_family == AF_INET6) if (start->addr.sa.sa_family == AF_INET6)
{ {
if (!forward->rfd6 && if (!forward->rfd6 &&
@@ -485,7 +469,6 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
fd = forward->rfd6->fd; fd = forward->rfd6->fd;
} }
else else
#endif
{ {
if (!forward->rfd4 && if (!forward->rfd4 &&
!(forward->rfd4 = allocate_rfd(AF_INET))) !(forward->rfd4 = allocate_rfd(AF_INET)))
@@ -541,11 +524,9 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
if (start->addr.sa.sa_family == AF_INET) if (start->addr.sa.sa_family == AF_INET)
log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff, log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&start->addr.in.sin_addr, NULL); (struct all_addr *)&start->addr.in.sin_addr, NULL);
#ifdef HAVE_IPV6
else else
log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff, log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&start->addr.in6.sin6_addr, NULL); (struct all_addr *)&start->addr.in6.sin6_addr, NULL);
#endif
start->queries++; start->queries++;
forwarded = 1; forwarded = 1;
forward->sentto = start; forward->sentto = start;
@@ -788,11 +769,8 @@ void reply_query(int fd, int family, time_t now)
daemon->srv_save = NULL; daemon->srv_save = NULL;
/* Determine the address of the server replying so that we can mark that as good */ /* Determine the address of the server replying so that we can mark that as good */
serveraddr.sa.sa_family = family; if ((serveraddr.sa.sa_family = family) == AF_INET6)
#ifdef HAVE_IPV6
if (serveraddr.sa.sa_family == AF_INET6)
serveraddr.in6.sin6_flowinfo = 0; serveraddr.in6.sin6_flowinfo = 0;
#endif
header = (struct dns_header *)daemon->packet; header = (struct dns_header *)daemon->packet;
@@ -878,7 +856,6 @@ void reply_query(int fd, int family, time_t now)
fd = start->sfd->fd; fd = start->sfd->fd;
else else
{ {
#ifdef HAVE_IPV6
if (start->addr.sa.sa_family == AF_INET6) if (start->addr.sa.sa_family == AF_INET6)
{ {
/* may have changed family */ /* may have changed family */
@@ -887,7 +864,6 @@ void reply_query(int fd, int family, time_t now)
fd = forward->rfd6->fd; fd = forward->rfd6->fd;
} }
else else
#endif
{ {
/* may have changed family */ /* may have changed family */
if (!forward->rfd4) if (!forward->rfd4)
@@ -902,10 +878,8 @@ void reply_query(int fd, int family, time_t now)
if (start->addr.sa.sa_family == AF_INET) if (start->addr.sa.sa_family == AF_INET)
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&start->addr.in.sin_addr, "dnssec"); log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&start->addr.in.sin_addr, "dnssec");
#ifdef HAVE_IPV6
else else
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&start->addr.in6.sin6_addr, "dnssec"); log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&start->addr.in6.sin6_addr, "dnssec");
#endif
return; return;
} }
@@ -1099,9 +1073,7 @@ void reply_query(int fd, int family, time_t now)
new->sentto = server; new->sentto = server;
new->rfd4 = NULL; new->rfd4 = NULL;
#ifdef HAVE_IPV6
new->rfd6 = NULL; new->rfd6 = NULL;
#endif
new->flags &= ~(FREC_DNSKEY_QUERY | FREC_DS_QUERY | FREC_HAS_EXTRADATA); new->flags &= ~(FREC_DNSKEY_QUERY | FREC_DS_QUERY | FREC_HAS_EXTRADATA);
new->forwardall = 0; new->forwardall = 0;
@@ -1125,11 +1097,9 @@ void reply_query(int fd, int family, time_t now)
if (server->addr.sa.sa_family == AF_INET) if (server->addr.sa.sa_family == AF_INET)
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, daemon->keyname, (struct all_addr *)&(server->addr.in.sin_addr), log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, daemon->keyname, (struct all_addr *)&(server->addr.in.sin_addr),
querystr("dnssec-query", querytype)); querystr("dnssec-query", querytype));
#ifdef HAVE_IPV6
else else
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, daemon->keyname, (struct all_addr *)&(server->addr.in6.sin6_addr), log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, daemon->keyname, (struct all_addr *)&(server->addr.in6.sin6_addr),
querystr("dnssec-query", querytype)); querystr("dnssec-query", querytype));
#endif
if ((hash = hash_questions(header, nn, daemon->namebuff))) if ((hash = hash_questions(header, nn, daemon->namebuff)))
memcpy(new->hash, hash, HASH_SIZE); memcpy(new->hash, hash, HASH_SIZE);
@@ -1147,14 +1117,12 @@ void reply_query(int fd, int family, time_t now)
else else
{ {
fd = -1; fd = -1;
#ifdef HAVE_IPV6
if (server->addr.sa.sa_family == AF_INET6) if (server->addr.sa.sa_family == AF_INET6)
{ {
if (new->rfd6 || (new->rfd6 = allocate_rfd(AF_INET6))) if (new->rfd6 || (new->rfd6 = allocate_rfd(AF_INET6)))
fd = new->rfd6->fd; fd = new->rfd6->fd;
} }
else else
#endif
{ {
if (new->rfd4 || (new->rfd4 = allocate_rfd(AF_INET))) if (new->rfd4 || (new->rfd4 = allocate_rfd(AF_INET)))
fd = new->rfd4->fd; fd = new->rfd4->fd;
@@ -1290,9 +1258,7 @@ void receive_query(struct listener *listen, time_t now)
struct cmsghdr *cmptr; struct cmsghdr *cmptr;
union { union {
struct cmsghdr align; /* this ensures alignment */ struct cmsghdr align; /* this ensures alignment */
#ifdef HAVE_IPV6
char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))]; char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
#endif
#if defined(HAVE_LINUX_NETWORK) #if defined(HAVE_LINUX_NETWORK)
char control[CMSG_SPACE(sizeof(struct in_pktinfo))]; char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
#elif defined(IP_RECVDSTADDR) && defined(HAVE_SOLARIS_NETWORK) #elif defined(IP_RECVDSTADDR) && defined(HAVE_SOLARIS_NETWORK)
@@ -1303,12 +1269,8 @@ void receive_query(struct listener *listen, time_t now)
CMSG_SPACE(sizeof(struct sockaddr_dl))]; CMSG_SPACE(sizeof(struct sockaddr_dl))];
#endif #endif
} control_u; } control_u;
#ifdef HAVE_IPV6
/* Can always get recvd interface for IPv6 */ /* Can always get recvd interface for IPv6 */
int check_dst = !option_bool(OPT_NOWILD) || listen->family == AF_INET6; int check_dst = !option_bool(OPT_NOWILD) || listen->family == AF_INET6;
#else
int check_dst = !option_bool(OPT_NOWILD);
#endif
/* packet buffer overwritten */ /* packet buffer overwritten */
daemon->srv_save = NULL; daemon->srv_save = NULL;
@@ -1359,7 +1321,6 @@ void receive_query(struct listener *listen, time_t now)
if (source_addr.in.sin_port == 0) if (source_addr.in.sin_port == 0)
return; return;
} }
#ifdef HAVE_IPV6
else else
{ {
/* Source-port == 0 is an error, we can't send back to that. */ /* Source-port == 0 is an error, we can't send back to that. */
@@ -1367,13 +1328,12 @@ void receive_query(struct listener *listen, time_t now)
return; return;
source_addr.in6.sin6_flowinfo = 0; source_addr.in6.sin6_flowinfo = 0;
} }
#endif
/* We can be configured to only accept queries from at-most-one-hop-away addresses. */ /* We can be configured to only accept queries from at-most-one-hop-away addresses. */
if (option_bool(OPT_LOCAL_SERVICE)) if (option_bool(OPT_LOCAL_SERVICE))
{ {
struct addrlist *addr; struct addrlist *addr;
#ifdef HAVE_IPV6
if (listen->family == AF_INET6) if (listen->family == AF_INET6)
{ {
for (addr = daemon->interface_addrs; addr; addr = addr->next) for (addr = daemon->interface_addrs; addr; addr = addr->next)
@@ -1382,7 +1342,6 @@ void receive_query(struct listener *listen, time_t now)
break; break;
} }
else else
#endif
{ {
struct in_addr netmask; struct in_addr netmask;
for (addr = daemon->interface_addrs; addr; addr = addr->next) for (addr = daemon->interface_addrs; addr; addr = addr->next)
@@ -1451,7 +1410,6 @@ void receive_query(struct listener *listen, time_t now)
} }
#endif #endif
#ifdef HAVE_IPV6
if (listen->family == AF_INET6) if (listen->family == AF_INET6)
{ {
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr)) for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
@@ -1467,7 +1425,6 @@ void receive_query(struct listener *listen, time_t now)
if_index = p.p->ipi6_ifindex; if_index = p.p->ipi6_ifindex;
} }
} }
#endif
/* enforce available interface configuration */ /* enforce available interface configuration */
@@ -1531,11 +1488,9 @@ void receive_query(struct listener *listen, time_t now)
if (listen->family == AF_INET) if (listen->family == AF_INET)
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff, log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&source_addr.in.sin_addr, types); (struct all_addr *)&source_addr.in.sin_addr, types);
#ifdef HAVE_IPV6
else else
log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&source_addr.in6.sin6_addr, types); (struct all_addr *)&source_addr.in6.sin6_addr, types);
#endif
#ifdef HAVE_AUTH #ifdef HAVE_AUTH
/* find queries for zones we're authoritative for, and answer them directly */ /* find queries for zones we're authoritative for, and answer them directly */
@@ -1744,11 +1699,9 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
if (server->addr.sa.sa_family == AF_INET) if (server->addr.sa.sa_family == AF_INET)
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, keyname, (struct all_addr *)&(server->addr.in.sin_addr), log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, keyname, (struct all_addr *)&(server->addr.in.sin_addr),
querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS)); querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS));
#ifdef HAVE_IPV6
else else
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, keyname, (struct all_addr *)&(server->addr.in6.sin6_addr), log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, keyname, (struct all_addr *)&(server->addr.in6.sin6_addr),
querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS)); querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS));
#endif
server->flags |= SERV_GOT_TCP; server->flags |= SERV_GOT_TCP;
@@ -1813,11 +1766,10 @@ unsigned char *tcp_request(int confd, time_t now,
if (option_bool(OPT_CONNTRACK)) if (option_bool(OPT_CONNTRACK))
{ {
struct all_addr local; struct all_addr local;
#ifdef HAVE_IPV6
if (local_addr->sa.sa_family == AF_INET6) if (local_addr->sa.sa_family == AF_INET6)
local.addr.addr6 = local_addr->in6.sin6_addr; local.addr.addr6 = local_addr->in6.sin6_addr;
else else
#endif
local.addr.addr4 = local_addr->in.sin_addr; local.addr.addr4 = local_addr->in.sin_addr;
have_mark = get_incoming_mark(&peer_addr, &local, 1, &mark); have_mark = get_incoming_mark(&peer_addr, &local, 1, &mark);
@@ -1828,7 +1780,7 @@ unsigned char *tcp_request(int confd, time_t now,
if (option_bool(OPT_LOCAL_SERVICE)) if (option_bool(OPT_LOCAL_SERVICE))
{ {
struct addrlist *addr; struct addrlist *addr;
#ifdef HAVE_IPV6
if (peer_addr.sa.sa_family == AF_INET6) if (peer_addr.sa.sa_family == AF_INET6)
{ {
for (addr = daemon->interface_addrs; addr; addr = addr->next) for (addr = daemon->interface_addrs; addr; addr = addr->next)
@@ -1837,7 +1789,6 @@ unsigned char *tcp_request(int confd, time_t now,
break; break;
} }
else else
#endif
{ {
struct in_addr netmask; struct in_addr netmask;
for (addr = daemon->interface_addrs; addr; addr = addr->next) for (addr = daemon->interface_addrs; addr; addr = addr->next)
@@ -1892,11 +1843,9 @@ unsigned char *tcp_request(int confd, time_t now,
if (peer_addr.sa.sa_family == AF_INET) if (peer_addr.sa.sa_family == AF_INET)
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff, log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&peer_addr.in.sin_addr, types); (struct all_addr *)&peer_addr.in.sin_addr, types);
#ifdef HAVE_IPV6
else else
log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&peer_addr.in6.sin6_addr, types); (struct all_addr *)&peer_addr.in6.sin6_addr, types);
#endif
#ifdef HAVE_AUTH #ifdef HAVE_AUTH
/* find queries for zones we're authoritative for, and answer them directly */ /* find queries for zones we're authoritative for, and answer them directly */
@@ -2072,11 +2021,9 @@ unsigned char *tcp_request(int confd, time_t now,
if (last_server->addr.sa.sa_family == AF_INET) if (last_server->addr.sa.sa_family == AF_INET)
log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff, log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&last_server->addr.in.sin_addr, NULL); (struct all_addr *)&last_server->addr.in.sin_addr, NULL);
#ifdef HAVE_IPV6
else else
log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff, log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff,
(struct all_addr *)&last_server->addr.in6.sin6_addr, NULL); (struct all_addr *)&last_server->addr.in6.sin6_addr, NULL);
#endif
#ifdef HAVE_DNSSEC #ifdef HAVE_DNSSEC
if (option_bool(OPT_DNSSEC_VALID) && !checking_disabled && (last_server->flags & SERV_DO_DNSSEC)) if (option_bool(OPT_DNSSEC_VALID) && !checking_disabled && (last_server->flags & SERV_DO_DNSSEC))
@@ -2175,9 +2122,7 @@ static struct frec *allocate_frec(time_t now)
f->sentto = NULL; f->sentto = NULL;
f->rfd4 = NULL; f->rfd4 = NULL;
f->flags = 0; f->flags = 0;
#ifdef HAVE_IPV6
f->rfd6 = NULL; f->rfd6 = NULL;
#endif
#ifdef HAVE_DNSSEC #ifdef HAVE_DNSSEC
f->dependent = NULL; f->dependent = NULL;
f->blocking_query = NULL; f->blocking_query = NULL;
@@ -2237,11 +2182,8 @@ static void free_frec(struct frec *f)
f->rfd4 = NULL; f->rfd4 = NULL;
f->sentto = NULL; f->sentto = NULL;
f->flags = 0; f->flags = 0;
#ifdef HAVE_IPV6
free_rfd(f->rfd6); free_rfd(f->rfd6);
f->rfd6 = NULL; f->rfd6 = NULL;
#endif
#ifdef HAVE_DNSSEC #ifdef HAVE_DNSSEC
if (f->stash) if (f->stash)
-8
View File
@@ -64,9 +64,7 @@ struct script_data
#ifdef HAVE_TFTP #ifdef HAVE_TFTP
off_t file_len; off_t file_len;
#endif #endif
#ifdef HAVE_IPV6
struct in6_addr addr6; struct in6_addr addr6;
#endif
#ifdef HAVE_DHCP6 #ifdef HAVE_DHCP6
int iaid, vendorclass_count; int iaid, vendorclass_count;
#endif #endif
@@ -302,10 +300,8 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
if (!is6) if (!is6)
inet_ntop(AF_INET, &data.addr, daemon->addrbuff, ADDRSTRLEN); inet_ntop(AF_INET, &data.addr, daemon->addrbuff, ADDRSTRLEN);
#ifdef HAVE_IPV6
else else
inet_ntop(AF_INET6, &data.addr6, daemon->addrbuff, ADDRSTRLEN); inet_ntop(AF_INET6, &data.addr6, daemon->addrbuff, ADDRSTRLEN);
#endif
#ifdef HAVE_TFTP #ifdef HAVE_TFTP
/* file length */ /* file length */
@@ -826,10 +822,8 @@ void queue_tftp(off_t file_len, char *filename, union mysockaddr *peer)
if ((buf->flags = peer->sa.sa_family) == AF_INET) if ((buf->flags = peer->sa.sa_family) == AF_INET)
buf->addr = peer->in.sin_addr; buf->addr = peer->in.sin_addr;
#ifdef HAVE_IPV6
else else
buf->addr6 = peer->in6.sin6_addr; buf->addr6 = peer->in6.sin6_addr;
#endif
memcpy((unsigned char *)(buf+1), filename, filename_len); memcpy((unsigned char *)(buf+1), filename, filename_len);
@@ -851,10 +845,8 @@ void queue_arp(int action, unsigned char *mac, int maclen, int family, struct al
buf->hwaddr_type = ARPHRD_ETHER; buf->hwaddr_type = ARPHRD_ETHER;
if ((buf->flags = family) == AF_INET) if ((buf->flags = family) == AF_INET)
buf->addr = addr->addr.addr4; buf->addr = addr->addr.addr4;
#ifdef HAVE_IPV6
else else
buf->addr6 = addr->addr.addr6; buf->addr6 = addr->addr.addr6;
#endif
memcpy(buf->hwaddr, mac, maclen); memcpy(buf->hwaddr, mac, maclen);
+1 -8
View File
@@ -120,13 +120,8 @@ static int new_add_to_ipset(const char *setname, const struct all_addr *ipaddr,
struct my_nfgenmsg *nfg; struct my_nfgenmsg *nfg;
struct my_nlattr *nested[2]; struct my_nlattr *nested[2];
uint8_t proto; uint8_t proto;
int addrsz = INADDRSZ; int addrsz = (af == AF_INET6) ? INADDRSZ : IN6ADDRSZ;
#ifdef HAVE_IPV6
if (af == AF_INET6)
addrsz = IN6ADDRSZ;
#endif
if (strlen(setname) >= IPSET_MAXNAMELEN) if (strlen(setname) >= IPSET_MAXNAMELEN)
{ {
errno = ENAMETOOLONG; errno = ENAMETOOLONG;
@@ -213,7 +208,6 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr, int flags,
{ {
int ret = 0, af = AF_INET; int ret = 0, af = AF_INET;
#ifdef HAVE_IPV6
if (flags & F_IPV6) if (flags & F_IPV6)
{ {
af = AF_INET6; af = AF_INET6;
@@ -224,7 +218,6 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr, int flags,
ret = -1; ret = -1;
} }
} }
#endif
if (ret != -1) if (ret != -1)
ret = old_kernel ? old_add_to_ipset(setname, ipaddr, remove) : new_add_to_ipset(setname, ipaddr, af, remove); ret = old_kernel ? old_add_to_ipset(setname, ipaddr, remove) : new_add_to_ipset(setname, ipaddr, af, remove);
+1 -4
View File
@@ -51,11 +51,10 @@ void netlink_init(void)
addr.nl_groups = RTMGRP_IPV4_ROUTE; addr.nl_groups = RTMGRP_IPV4_ROUTE;
if (option_bool(OPT_CLEVERBIND)) if (option_bool(OPT_CLEVERBIND))
addr.nl_groups |= RTMGRP_IPV4_IFADDR; addr.nl_groups |= RTMGRP_IPV4_IFADDR;
#ifdef HAVE_IPV6
addr.nl_groups |= RTMGRP_IPV6_ROUTE; addr.nl_groups |= RTMGRP_IPV6_ROUTE;
if (option_bool(OPT_CLEVERBIND)) if (option_bool(OPT_CLEVERBIND))
addr.nl_groups |= RTMGRP_IPV6_IFADDR; addr.nl_groups |= RTMGRP_IPV6_IFADDR;
#endif
#ifdef HAVE_DHCP6 #ifdef HAVE_DHCP6
if (daemon->doing_ra || daemon->doing_dhcp6) if (daemon->doing_ra || daemon->doing_dhcp6)
addr.nl_groups |= RTMGRP_IPV6_IFADDR; addr.nl_groups |= RTMGRP_IPV6_IFADDR;
@@ -235,7 +234,6 @@ int iface_enumerate(int family, void *parm, int (*callback)())
if (!((*callback)(addr, ifa->ifa_index, label, netmask, broadcast, parm))) if (!((*callback)(addr, ifa->ifa_index, label, netmask, broadcast, parm)))
callback_ok = 0; callback_ok = 0;
} }
#ifdef HAVE_IPV6
else if (ifa->ifa_family == AF_INET6) else if (ifa->ifa_family == AF_INET6)
{ {
struct in6_addr *addrp = NULL; struct in6_addr *addrp = NULL;
@@ -270,7 +268,6 @@ int iface_enumerate(int family, void *parm, int (*callback)())
(int) preferred, (int)valid, parm))) (int) preferred, (int)valid, parm)))
callback_ok = 0; callback_ok = 0;
} }
#endif
} }
} }
else if (h->nlmsg_type == RTM_NEWNEIGH && family == AF_UNSPEC) else if (h->nlmsg_type == RTM_NEWNEIGH && family == AF_UNSPEC)
+4 -50
View File
@@ -137,12 +137,10 @@ int iface_check(int family, struct all_addr *addr, char *name, int *auth)
if (family == AF_INET && if (family == AF_INET &&
tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr) tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
ret = match_addr = tmp->used = 1; ret = match_addr = tmp->used = 1;
#ifdef HAVE_IPV6
else if (family == AF_INET6 && else if (family == AF_INET6 &&
IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr,
&addr->addr.addr6)) &addr->addr.addr6))
ret = match_addr = tmp->used = 1; ret = match_addr = tmp->used = 1;
#endif
} }
} }
@@ -162,11 +160,9 @@ int iface_check(int family, struct all_addr *addr, char *name, int *auth)
else if (addr && tmp->addr.sa.sa_family == AF_INET && family == AF_INET && else if (addr && tmp->addr.sa.sa_family == AF_INET && family == AF_INET &&
tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr) tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
break; break;
#ifdef HAVE_IPV6
else if (addr && tmp->addr.sa.sa_family == AF_INET6 && family == AF_INET6 && else if (addr && tmp->addr.sa.sa_family == AF_INET6 && family == AF_INET6 &&
IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, &addr->addr.addr6)) IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, &addr->addr.addr6))
break; break;
#endif
if (tmp && auth) if (tmp && auth)
{ {
@@ -200,11 +196,8 @@ int loopback_exception(int fd, int family, struct all_addr *addr, char *name)
if (iface->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr) if (iface->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr)
return 1; return 1;
} }
#ifdef HAVE_IPV6
else if (IN6_ARE_ADDR_EQUAL(&iface->addr.in6.sin6_addr, &addr->addr.addr6)) else if (IN6_ARE_ADDR_EQUAL(&iface->addr.in6.sin6_addr, &addr->addr.addr6))
return 1; return 1;
#endif
} }
} }
return 0; return 0;
@@ -292,19 +285,15 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
al->addr.addr.addr4 = addr->in.sin_addr; al->addr.addr.addr4 = addr->in.sin_addr;
al->flags = 0; al->flags = 0;
} }
#ifdef HAVE_IPV6
else else
{ {
al->addr.addr.addr6 = addr->in6.sin6_addr; al->addr.addr.addr6 = addr->in6.sin6_addr;
al->flags = ADDRLIST_IPV6; al->flags = ADDRLIST_IPV6;
} }
#endif
} }
} }
#ifdef HAVE_IPV6
if (addr->sa.sa_family != AF_INET6 || !IN6_IS_ADDR_LINKLOCAL(&addr->in6.sin6_addr)) if (addr->sa.sa_family != AF_INET6 || !IN6_IS_ADDR_LINKLOCAL(&addr->in6.sin6_addr))
#endif
{ {
struct interface_name *int_name; struct interface_name *int_name;
struct addrlist *al; struct addrlist *al;
@@ -337,7 +326,6 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
} }
} }
#ifdef HAVE_IPV6
if (addr->sa.sa_family == AF_INET6 && (name->flags & AUTH6)) if (addr->sa.sa_family == AF_INET6 && (name->flags & AUTH6))
{ {
if (param->spare) if (param->spare)
@@ -357,8 +345,6 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
al->flags = ADDRLIST_IPV6; al->flags = ADDRLIST_IPV6;
} }
} }
#endif
} }
#endif #endif
@@ -386,7 +372,6 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
al->addr.addr.addr4 = addr->in.sin_addr; al->addr.addr.addr4 = addr->in.sin_addr;
al->flags = 0; al->flags = 0;
} }
#ifdef HAVE_IPV6
else else
{ {
al->addr.addr.addr6 = addr->in6.sin6_addr; al->addr.addr.addr6 = addr->in6.sin6_addr;
@@ -396,7 +381,6 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
if (!(iface_flags & IFACE_PERMANENT) || (iface_flags & (IFACE_DEPRECATED | IFACE_TENTATIVE))) if (!(iface_flags & IFACE_PERMANENT) || (iface_flags & (IFACE_DEPRECATED | IFACE_TENTATIVE)))
al->flags |= ADDRLIST_REVONLY; al->flags |= ADDRLIST_REVONLY;
} }
#endif
} }
} }
} }
@@ -438,11 +422,9 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
!iface_check(AF_INET, (struct all_addr *)&addr->in.sin_addr, label, &auth_dns)) !iface_check(AF_INET, (struct all_addr *)&addr->in.sin_addr, label, &auth_dns))
return 1; return 1;
#ifdef HAVE_IPV6
if (addr->sa.sa_family == AF_INET6 && if (addr->sa.sa_family == AF_INET6 &&
!iface_check(AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, label, &auth_dns)) !iface_check(AF_INET6, (struct all_addr *)&addr->in6.sin6_addr, label, &auth_dns))
return 1; return 1;
#endif
#ifdef HAVE_DHCP #ifdef HAVE_DHCP
/* No DHCP where we're doing auth DNS. */ /* No DHCP where we're doing auth DNS. */
@@ -501,7 +483,6 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
return 0; return 0;
} }
#ifdef HAVE_IPV6
static int iface_allowed_v6(struct in6_addr *local, int prefix, static int iface_allowed_v6(struct in6_addr *local, int prefix,
int scope, int if_index, int flags, int scope, int if_index, int flags,
int preferred, int valid, void *vparam) int preferred, int valid, void *vparam)
@@ -529,7 +510,6 @@ static int iface_allowed_v6(struct in6_addr *local, int prefix,
return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, flags); return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, flags);
} }
#endif
static int iface_allowed_v4(struct in_addr local, int if_index, char *label, static int iface_allowed_v4(struct in_addr local, int if_index, char *label,
struct in_addr netmask, struct in_addr broadcast, void *vparam) struct in_addr netmask, struct in_addr broadcast, void *vparam)
@@ -633,9 +613,7 @@ int enumerate_interfaces(int reset)
param.spare = spare; param.spare = spare;
#ifdef HAVE_IPV6
ret = iface_enumerate(AF_INET6, &param, iface_allowed_v6); ret = iface_enumerate(AF_INET6, &param, iface_allowed_v6);
#endif
if (ret) if (ret)
ret = iface_enumerate(AF_INET, &param, iface_allowed_v4); ret = iface_enumerate(AF_INET, &param, iface_allowed_v4);
@@ -740,10 +718,8 @@ static int make_sock(union mysockaddr *addr, int type, int dienow)
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || !fix_fd(fd)) if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || !fix_fd(fd))
goto err; goto err;
#ifdef HAVE_IPV6
if (family == AF_INET6 && setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)) == -1) if (family == AF_INET6 && setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt)) == -1)
goto err; goto err;
#endif
if ((rc = bind(fd, (struct sockaddr *)addr, sa_len(addr))) == -1) if ((rc = bind(fd, (struct sockaddr *)addr, sa_len(addr))) == -1)
goto err; goto err;
@@ -767,15 +743,12 @@ static int make_sock(union mysockaddr *addr, int type, int dienow)
#endif #endif
} }
} }
#ifdef HAVE_IPV6
else if (!set_ipv6pktinfo(fd)) else if (!set_ipv6pktinfo(fd))
goto err; goto err;
#endif
return fd; return fd;
} }
#ifdef HAVE_IPV6
int set_ipv6pktinfo(int fd) int set_ipv6pktinfo(int fd)
{ {
int opt = 1; int opt = 1;
@@ -802,7 +775,6 @@ int set_ipv6pktinfo(int fd)
return 0; return 0;
} }
#endif
/* Find the interface on which a TCP connection arrived, if possible, or zero otherwise. */ /* Find the interface on which a TCP connection arrived, if possible, or zero otherwise. */
@@ -842,7 +814,6 @@ int tcp_interface(int fd, int af)
} }
} }
} }
#ifdef HAVE_IPV6
else else
{ {
/* Only the RFC-2292 API has the ability to find the interface for TCP connections, /* Only the RFC-2292 API has the ability to find the interface for TCP connections,
@@ -874,7 +845,6 @@ int tcp_interface(int fd, int af)
} }
} }
} }
#endif /* IPV6 */
#endif /* Linux */ #endif /* Linux */
return if_index; return if_index;
@@ -904,7 +874,6 @@ static struct listener *create_listeners(union mysockaddr *addr, int do_tftp, in
tftpfd = make_sock(addr, SOCK_DGRAM, dienow); tftpfd = make_sock(addr, SOCK_DGRAM, dienow);
addr->in.sin_port = save; addr->in.sin_port = save;
} }
# ifdef HAVE_IPV6
else else
{ {
short save = addr->in6.sin6_port; short save = addr->in6.sin6_port;
@@ -912,7 +881,6 @@ static struct listener *create_listeners(union mysockaddr *addr, int do_tftp, in
tftpfd = make_sock(addr, SOCK_DGRAM, dienow); tftpfd = make_sock(addr, SOCK_DGRAM, dienow);
addr->in6.sin6_port = save; addr->in6.sin6_port = save;
} }
# endif
} }
#endif #endif
@@ -945,11 +913,10 @@ void create_wildcard_listeners(void)
l = create_listeners(&addr, !!option_bool(OPT_TFTP), 1); l = create_listeners(&addr, !!option_bool(OPT_TFTP), 1);
#ifdef HAVE_IPV6
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
# ifdef HAVE_SOCKADDR_SA_LEN #ifdef HAVE_SOCKADDR_SA_LEN
addr.in6.sin6_len = sizeof(addr.in6); addr.in6.sin6_len = sizeof(addr.in6);
# endif #endif
addr.in6.sin6_family = AF_INET6; addr.in6.sin6_family = AF_INET6;
addr.in6.sin6_addr = in6addr_any; addr.in6.sin6_addr = in6addr_any;
addr.in6.sin6_port = htons(daemon->port); addr.in6.sin6_port = htons(daemon->port);
@@ -959,7 +926,6 @@ void create_wildcard_listeners(void)
l->next = l6; l->next = l6;
else else
l = l6; l = l6;
#endif
daemon->listeners = l; daemon->listeners = l;
} }
@@ -1159,7 +1125,6 @@ int random_sock(int family)
addr.in.sin_len = sizeof(struct sockaddr_in); addr.in.sin_len = sizeof(struct sockaddr_in);
#endif #endif
} }
#ifdef HAVE_IPV6
else else
{ {
addr.in6.sin6_addr = in6addr_any; addr.in6.sin6_addr = in6addr_any;
@@ -1168,7 +1133,6 @@ int random_sock(int family)
addr.in6.sin6_len = sizeof(struct sockaddr_in6); addr.in6.sin6_len = sizeof(struct sockaddr_in6);
#endif #endif
} }
#endif
if (bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == 0) if (bind(fd, (struct sockaddr *)&addr, sa_len(&addr)) == 0)
return fd; return fd;
@@ -1193,10 +1157,8 @@ int local_bind(int fd, union mysockaddr *addr, char *intname, unsigned int ifind
{ {
if (addr_copy.sa.sa_family == AF_INET) if (addr_copy.sa.sa_family == AF_INET)
addr_copy.in.sin_port = 0; addr_copy.in.sin_port = 0;
#ifdef HAVE_IPV6
else else
addr_copy.in6.sin6_port = 0; addr_copy.in6.sin6_port = 0;
#endif
} }
if (bind(fd, (struct sockaddr *)&addr_copy, sa_len(&addr_copy)) == -1) if (bind(fd, (struct sockaddr *)&addr_copy, sa_len(&addr_copy)) == -1)
@@ -1211,7 +1173,7 @@ int local_bind(int fd, union mysockaddr *addr, char *intname, unsigned int ifind
return setsockopt(fd, IPPROTO_IP, IP_UNICAST_IF, &ifindex_opt, sizeof(ifindex_opt)) == 0; return setsockopt(fd, IPPROTO_IP, IP_UNICAST_IF, &ifindex_opt, sizeof(ifindex_opt)) == 0;
} }
#endif #endif
#if defined(HAVE_IPV6) && defined (IPV6_UNICAST_IF) #if defined (IPV6_UNICAST_IF)
if (addr_copy.sa.sa_family == AF_INET6) if (addr_copy.sa.sa_family == AF_INET6)
{ {
uint32_t ifindex_opt = htonl(ifindex); uint32_t ifindex_opt = htonl(ifindex);
@@ -1247,12 +1209,10 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname)
addr->in.sin_port == htons(0)) addr->in.sin_port == htons(0))
return NULL; return NULL;
#ifdef HAVE_IPV6
if (addr->sa.sa_family == AF_INET6 && if (addr->sa.sa_family == AF_INET6 &&
memcmp(&addr->in6.sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0 && memcmp(&addr->in6.sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0 &&
addr->in6.sin6_port == htons(0)) addr->in6.sin6_port == htons(0))
return NULL; return NULL;
#endif
} }
if (intname && strlen(intname) != 0) if (intname && strlen(intname) != 0)
@@ -1315,7 +1275,7 @@ void pre_allocate_sfds(void)
#endif #endif
if ((sfd = allocate_sfd(&addr, ""))) if ((sfd = allocate_sfd(&addr, "")))
sfd->preallocated = 1; sfd->preallocated = 1;
#ifdef HAVE_IPV6
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.in6.sin6_family = AF_INET6; addr.in6.sin6_family = AF_INET6;
addr.in6.sin6_addr = in6addr_any; addr.in6.sin6_addr = in6addr_any;
@@ -1325,7 +1285,6 @@ void pre_allocate_sfds(void)
#endif #endif
if ((sfd = allocate_sfd(&addr, ""))) if ((sfd = allocate_sfd(&addr, "")))
sfd->preallocated = 1; sfd->preallocated = 1;
#endif
} }
for (srv = daemon->servers; srv; srv = srv->next) for (srv = daemon->servers; srv; srv = srv->next)
@@ -1658,7 +1617,6 @@ int reload_servers(char *fname)
source_addr.in.sin_addr.s_addr = INADDR_ANY; source_addr.in.sin_addr.s_addr = INADDR_ANY;
source_addr.in.sin_port = htons(daemon->query_port); source_addr.in.sin_port = htons(daemon->query_port);
} }
#ifdef HAVE_IPV6
else else
{ {
int scope_index = 0; int scope_index = 0;
@@ -1686,10 +1644,6 @@ int reload_servers(char *fname)
else else
continue; continue;
} }
#else /* IPV6 */
else
continue;
#endif
add_update_server(SERV_FROM_RESOLV, &addr, &source_addr, NULL, NULL); add_update_server(SERV_FROM_RESOLV, &addr, &source_addr, NULL, NULL);
gotone = 1; gotone = 1;
-34
View File
@@ -764,10 +764,8 @@ static char *parse_mysockaddr(char *arg, union mysockaddr *addr)
{ {
if (inet_pton(AF_INET, arg, &addr->in.sin_addr) > 0) if (inet_pton(AF_INET, arg, &addr->in.sin_addr) > 0)
addr->sa.sa_family = AF_INET; addr->sa.sa_family = AF_INET;
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, arg, &addr->in6.sin6_addr) > 0) else if (inet_pton(AF_INET6, arg, &addr->in6.sin6_addr) > 0)
addr->sa.sa_family = AF_INET6; addr->sa.sa_family = AF_INET6;
#endif
else else
return _("bad address"); return _("bad address");
@@ -779,10 +777,8 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
int source_port = 0, serv_port = NAMESERVER_PORT; int source_port = 0, serv_port = NAMESERVER_PORT;
char *portno, *source; char *portno, *source;
char *interface_opt = NULL; char *interface_opt = NULL;
#ifdef HAVE_IPV6
int scope_index = 0; int scope_index = 0;
char *scope_id; char *scope_id;
#endif
if (!arg || strlen(arg) == 0) if (!arg || strlen(arg) == 0)
{ {
@@ -800,9 +796,7 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
!atoi_check16(portno, &serv_port)) !atoi_check16(portno, &serv_port))
return _("bad port"); return _("bad port");
#ifdef HAVE_IPV6
scope_id = split_chr(arg, '%'); scope_id = split_chr(arg, '%');
#endif
if (source) { if (source) {
interface_opt = split_chr(source, '@'); interface_opt = split_chr(source, '@');
@@ -846,7 +840,6 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
} }
} }
} }
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, arg, &addr->in6.sin6_addr) > 0) else if (inet_pton(AF_INET6, arg, &addr->in6.sin6_addr) > 0)
{ {
if (scope_id && (scope_index = if_nametoindex(scope_id)) == 0) if (scope_id && (scope_index = if_nametoindex(scope_id)) == 0)
@@ -881,7 +874,6 @@ char *parse_server(char *arg, union mysockaddr *addr, union mysockaddr *source_a
} }
} }
} }
#endif
else else
return _("bad address"); return _("bad address");
@@ -1914,10 +1906,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
unhide_metas(arg); unhide_metas(arg);
if (inet_pton(AF_INET, arg, &new->addr.in.sin_addr) > 0) if (inet_pton(AF_INET, arg, &new->addr.in.sin_addr) > 0)
new->addr.sa.sa_family = AF_INET; new->addr.sa.sa_family = AF_INET;
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, arg, &new->addr.in6.sin6_addr) > 0) else if (inet_pton(AF_INET6, arg, &new->addr.in6.sin6_addr) > 0)
new->addr.sa.sa_family = AF_INET6; new->addr.sa.sa_family = AF_INET6;
#endif
else else
{ {
char *fam = split_chr(arg, '/'); char *fam = split_chr(arg, '/');
@@ -1927,10 +1917,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
{ {
if (strcmp(fam, "4") == 0) if (strcmp(fam, "4") == 0)
new->addr.sa.sa_family = AF_INET; new->addr.sa.sa_family = AF_INET;
#ifdef HAVE_IPV6
else if (strcmp(fam, "6") == 0) else if (strcmp(fam, "6") == 0)
new->addr.sa.sa_family = AF_INET6; new->addr.sa.sa_family = AF_INET6;
#endif
else else
ret_err(gen_err); ret_err(gen_err);
} }
@@ -1996,14 +1984,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
subnet->prefixlen = (prefixlen == 0) ? 24 : prefixlen; subnet->prefixlen = (prefixlen == 0) ? 24 : prefixlen;
subnet->flags = ADDRLIST_LITERAL; subnet->flags = ADDRLIST_LITERAL;
} }
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, arg, &addr.addr.addr6)) else if (inet_pton(AF_INET6, arg, &addr.addr.addr6))
{ {
subnet = opt_malloc(sizeof(struct addrlist)); subnet = opt_malloc(sizeof(struct addrlist));
subnet->prefixlen = (prefixlen == 0) ? 64 : prefixlen; subnet->prefixlen = (prefixlen == 0) ? 64 : prefixlen;
subnet->flags = ADDRLIST_LITERAL | ADDRLIST_IPV6; subnet->flags = ADDRLIST_LITERAL | ADDRLIST_IPV6;
} }
#endif
else else
{ {
struct auth_name_list *name = opt_malloc(sizeof(struct auth_name_list)); struct auth_name_list *name = opt_malloc(sizeof(struct auth_name_list));
@@ -2015,10 +2001,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
{ {
if (prefixlen == 4) if (prefixlen == 4)
name->flags &= ~AUTH6; name->flags &= ~AUTH6;
#ifdef HAVE_IPV6
else if (prefixlen == 6) else if (prefixlen == 6)
name->flags &= ~AUTH4; name->flags &= ~AUTH4;
#endif
else else
ret_err(gen_err); ret_err(gen_err);
} }
@@ -2139,7 +2123,6 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
} }
} }
} }
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, comma, &new->start6)) else if (inet_pton(AF_INET6, comma, &new->start6))
{ {
u64 mask = (1LLU << (128 - msize)) - 1LLU; u64 mask = (1LLU << (128 - msize)) - 1LLU;
@@ -2183,7 +2166,6 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
} }
} }
} }
#endif
else else
ret_err(gen_err); ret_err(gen_err);
} }
@@ -2201,7 +2183,6 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
else if (!inet_pton(AF_INET, arg, &new->end)) else if (!inet_pton(AF_INET, arg, &new->end))
ret_err(gen_err); ret_err(gen_err);
} }
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, comma, &new->start6)) else if (inet_pton(AF_INET6, comma, &new->start6))
{ {
new->is6 = 1; new->is6 = 1;
@@ -2210,7 +2191,6 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
else if (!inet_pton(AF_INET6, arg, &new->end6)) else if (!inet_pton(AF_INET6, arg, &new->end6))
ret_err(gen_err); ret_err(gen_err);
} }
#endif
else else
ret_err(gen_err); ret_err(gen_err);
@@ -2369,7 +2349,6 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
new->addr.in.sin_len = sizeof(new->addr.in); new->addr.in.sin_len = sizeof(new->addr.in);
#endif #endif
} }
#ifdef HAVE_IPV6
else if (arg && inet_pton(AF_INET6, arg, &new->addr.in6.sin6_addr) > 0) else if (arg && inet_pton(AF_INET6, arg, &new->addr.in6.sin6_addr) > 0)
{ {
new->addr.sa.sa_family = AF_INET6; new->addr.sa.sa_family = AF_INET6;
@@ -2380,7 +2359,6 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
new->addr.in6.sin6_len = sizeof(new->addr.in6); new->addr.in6.sin6_len = sizeof(new->addr.in6);
#endif #endif
} }
#endif
else else
ret_err(gen_err); ret_err(gen_err);
@@ -2493,9 +2471,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
int size; int size;
struct server *serv; struct server *serv;
struct in_addr addr4; struct in_addr addr4;
#ifdef HAVE_IPV6
struct in6_addr addr6; struct in6_addr addr6;
#endif
unhide_metas(arg); unhide_metas(arg);
if (!arg || !(comma=split(arg)) || !(string = split_chr(arg, '/')) || !atoi_check(string, &size)) if (!arg || !(comma=split(arg)) || !(string = split_chr(arg, '/')) || !atoi_check(string, &size))
@@ -2507,10 +2483,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
if (!serv) if (!serv)
ret_err(_("bad prefix")); ret_err(_("bad prefix"));
} }
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, arg, &addr6)) else if (inet_pton(AF_INET6, arg, &addr6))
serv = add_rev6(&addr6, size); serv = add_rev6(&addr6, size);
#endif
else else
ret_err(gen_err); ret_err(gen_err);
@@ -3863,10 +3837,8 @@ err:
{ {
if (strcmp(arg, "4") == 0) if (strcmp(arg, "4") == 0)
new->family = AF_INET; new->family = AF_INET;
#ifdef HAVE_IPV6
else if (strcmp(arg, "6") == 0) else if (strcmp(arg, "6") == 0)
new->family = AF_INET6; new->family = AF_INET6;
#endif
else else
ret_err(gen_err); ret_err(gen_err);
} }
@@ -4156,10 +4128,8 @@ err:
new->ttl = atoi(arg); new->ttl = atoi(arg);
else if (inet_pton(AF_INET, arg, &addr)) else if (inet_pton(AF_INET, arg, &addr))
new->addr = addr.addr.addr4; new->addr = addr.addr.addr4;
#ifdef HAVE_IPV6
else if (inet_pton(AF_INET6, arg, &addr)) else if (inet_pton(AF_INET6, arg, &addr))
new->addr6 = addr.addr.addr6; new->addr6 = addr.addr.addr6;
#endif
else else
{ {
int nomem; int nomem;
@@ -4866,10 +4836,8 @@ void read_opts(int argc, char **argv, char *compile_opts)
{ {
if (tmp->source_addr.sa.sa_family == AF_INET) if (tmp->source_addr.sa.sa_family == AF_INET)
tmp->source_addr.in.sin_port = htons(daemon->query_port); tmp->source_addr.in.sin_port = htons(daemon->query_port);
#ifdef HAVE_IPV6
else if (tmp->source_addr.sa.sa_family == AF_INET6) else if (tmp->source_addr.sa.sa_family == AF_INET6)
tmp->source_addr.in6.sin6_port = htons(daemon->query_port); tmp->source_addr.in6.sin6_port = htons(daemon->query_port);
#endif
} }
} }
@@ -4930,10 +4898,8 @@ void read_opts(int argc, char **argv, char *compile_opts)
for(tmp = daemon->if_addrs; tmp; tmp = tmp->next) for(tmp = daemon->if_addrs; tmp; tmp = tmp->next)
if (tmp->addr.sa.sa_family == AF_INET) if (tmp->addr.sa.sa_family == AF_INET)
tmp->addr.in.sin_port = htons(daemon->port); tmp->addr.in.sin_port = htons(daemon->port);
#ifdef HAVE_IPV6
else if (tmp->addr.sa.sa_family == AF_INET6) else if (tmp->addr.sa.sa_family == AF_INET6)
tmp->addr.in6.sin6_port = htons(daemon->port); tmp->addr.in6.sin6_port = htons(daemon->port);
#endif /* IPv6 */
} }
/* create default, if not specified */ /* create default, if not specified */
+9 -41
View File
@@ -198,7 +198,6 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
return F_IPV4; return F_IPV4;
} }
#ifdef HAVE_IPV6
else if (hostname_isequal(penchunk, "ip6") && else if (hostname_isequal(penchunk, "ip6") &&
(hostname_isequal(lastchunk, "int") || hostname_isequal(lastchunk, "arpa"))) (hostname_isequal(lastchunk, "int") || hostname_isequal(lastchunk, "arpa")))
{ {
@@ -243,7 +242,6 @@ int in_arpa_name_2_addr(char *namein, struct all_addr *addrp)
return F_IPV6; return F_IPV6;
} }
} }
#endif
return 0; return 0;
} }
@@ -426,7 +424,6 @@ int private_net(struct in_addr addr, int ban_localhost)
((ip_addr & 0xFFFFFFFF) == 0xFFFFFFFF) /* 255.255.255.255/32 (broadcast)*/ ; ((ip_addr & 0xFFFFFFFF) == 0xFFFFFFFF) /* 255.255.255.255/32 (broadcast)*/ ;
} }
#ifdef HAVE_IPV6
static int private_net6(struct in6_addr *a) static int private_net6(struct in6_addr *a)
{ {
return return
@@ -436,8 +433,6 @@ static int private_net6(struct in6_addr *a)
((unsigned char *)a)[0] == 0xfd || /* RFC 6303 4.4 */ ((unsigned char *)a)[0] == 0xfd || /* RFC 6303 4.4 */
((u32 *)a)[0] == htonl(0x20010db8); /* RFC 6303 4.6 */ ((u32 *)a)[0] == htonl(0x20010db8); /* RFC 6303 4.6 */
} }
#endif
static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *header, size_t qlen, char *name, int *doctored) static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *header, size_t qlen, char *name, int *doctored)
{ {
@@ -738,13 +733,11 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
addrlen = INADDRSZ; addrlen = INADDRSZ;
flags |= F_IPV4; flags |= F_IPV4;
} }
#ifdef HAVE_IPV6
else if (qtype == T_AAAA) else if (qtype == T_AAAA)
{ {
addrlen = IN6ADDRSZ; addrlen = IN6ADDRSZ;
flags |= F_IPV6; flags |= F_IPV6;
} }
#endif
else else
continue; continue;
@@ -818,7 +811,6 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND))) private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
return 1; return 1;
#ifdef HAVE_IPV6
if ((flags & F_IPV6) && if ((flags & F_IPV6) &&
IN6_IS_ADDR_V4MAPPED(&addr.addr.addr6)) IN6_IS_ADDR_V4MAPPED(&addr.addr.addr6))
{ {
@@ -827,7 +819,6 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
if (private_net(v4, !option_bool(OPT_LOCAL_REBIND))) if (private_net(v4, !option_bool(OPT_LOCAL_REBIND)))
return 1; return 1;
} }
#endif
} }
#ifdef HAVE_IPSET #ifdef HAVE_IPSET
@@ -966,7 +957,6 @@ size_t setup_reply(struct dns_header *header, size_t qlen,
add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_A, C_IN, "4", addrp); add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_A, C_IN, "4", addrp);
} }
#ifdef HAVE_IPV6
if (flags & F_IPV6) if (flags & F_IPV6)
{ {
SET_RCODE(header, NOERROR); SET_RCODE(header, NOERROR);
@@ -974,7 +964,6 @@ size_t setup_reply(struct dns_header *header, size_t qlen,
header->hb3 |= HB3_AA; header->hb3 |= HB3_AA;
add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_AAAA, C_IN, "6", addrp); add_resource_record(header, NULL, NULL, sizeof(struct dns_header), &p, ttl, NULL, T_AAAA, C_IN, "6", addrp);
} }
#endif
} }
else /* nowhere to forward to */ else /* nowhere to forward to */
{ {
@@ -1164,14 +1153,12 @@ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int
for (; *format; format++) for (; *format; format++)
switch (*format) switch (*format)
{ {
#ifdef HAVE_IPV6
case '6': case '6':
CHECK_LIMIT(IN6ADDRSZ); CHECK_LIMIT(IN6ADDRSZ);
sval = va_arg(ap, char *); sval = va_arg(ap, char *);
memcpy(p, sval, IN6ADDRSZ); memcpy(p, sval, IN6ADDRSZ);
p += IN6ADDRSZ; p += IN6ADDRSZ;
break; break;
#endif
case '4': case '4':
CHECK_LIMIT(INADDRSZ); CHECK_LIMIT(INADDRSZ);
@@ -1413,7 +1400,6 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
while (intr->next && strcmp(intr->intr, intr->next->intr) == 0) while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
intr = intr->next; intr = intr->next;
} }
#ifdef HAVE_IPV6
else if (is_arpa == F_IPV6) else if (is_arpa == F_IPV6)
for (intr = daemon->int_names; intr; intr = intr->next) for (intr = daemon->int_names; intr; intr = intr->next)
{ {
@@ -1429,7 +1415,6 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
while (intr->next && strcmp(intr->intr, intr->next->intr) == 0) while (intr->next && strcmp(intr->intr, intr->next->intr) == 0)
intr = intr->next; intr = intr->next;
} }
#endif
if (intr) if (intr)
{ {
@@ -1521,9 +1506,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
} }
} }
else if (option_bool(OPT_BOGUSPRIV) && ( else if (option_bool(OPT_BOGUSPRIV) && (
#ifdef HAVE_IPV6
(is_arpa == F_IPV6 && private_net6(&addr.addr.addr6)) || (is_arpa == F_IPV6 && private_net6(&addr.addr.addr6)) ||
#endif
(is_arpa == F_IPV4 && private_net(addr.addr.addr4, 1)))) (is_arpa == F_IPV4 && private_net(addr.addr.addr4, 1))))
{ {
struct server *serv; struct server *serv;
@@ -1564,16 +1547,9 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
for (flag = F_IPV4; flag; flag = (flag == F_IPV4) ? F_IPV6 : 0) for (flag = F_IPV4; flag; flag = (flag == F_IPV4) ? F_IPV6 : 0)
{ {
unsigned short type = T_A; unsigned short type = (flag == F_IPV6) ? T_AAAA : T_A;
struct interface_name *intr; struct interface_name *intr;
if (flag == F_IPV6)
#ifdef HAVE_IPV6
type = T_AAAA;
#else
break;
#endif
if (qtype != type && qtype != T_ANY) if (qtype != type && qtype != T_ANY)
continue; continue;
@@ -1596,31 +1572,26 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
for (intr = daemon->int_names; intr; intr = intr->next) for (intr = daemon->int_names; intr; intr = intr->next)
if (hostname_isequal(name, intr->name)) if (hostname_isequal(name, intr->name))
for (addrlist = intr->addr; addrlist; addrlist = addrlist->next) for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
#ifdef HAVE_IPV6 if (!(addrlist->flags & ADDRLIST_IPV6) &&
if (!(addrlist->flags & ADDRLIST_IPV6)) is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
#endif {
if (is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask)) localise = 1;
{ break;
localise = 1; }
break;
}
for (intr = daemon->int_names; intr; intr = intr->next) for (intr = daemon->int_names; intr; intr = intr->next)
if (hostname_isequal(name, intr->name)) if (hostname_isequal(name, intr->name))
{ {
for (addrlist = intr->addr; addrlist; addrlist = addrlist->next) for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
#ifdef HAVE_IPV6
if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type) if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
#endif
{ {
if (localise && if (localise &&
!is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask)) !is_same_net(*((struct in_addr *)&addrlist->addr), local_addr, local_netmask))
continue; continue;
#ifdef HAVE_IPV6
if (addrlist->flags & ADDRLIST_REVONLY) if (addrlist->flags & ADDRLIST_REVONLY)
continue; continue;
#endif
ans = 1; ans = 1;
sec_data = 0; sec_data = 0;
if (!dryrun) if (!dryrun)
@@ -1904,11 +1875,8 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
crecp = NULL; crecp = NULL;
while ((crecp = cache_find_by_name(crecp, rec->target, now, F_IPV4 | F_IPV6))) while ((crecp = cache_find_by_name(crecp, rec->target, now, F_IPV4 | F_IPV6)))
{ {
#ifdef HAVE_IPV6
int type = crecp->flags & F_IPV4 ? T_A : T_AAAA; int type = crecp->flags & F_IPV4 ? T_A : T_AAAA;
#else
int type = T_A;
#endif
if (crecp->flags & F_NEG) if (crecp->flags & F_NEG)
continue; continue;
+1 -2
View File
@@ -108,7 +108,7 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
my_syslog(LOG_INFO, _("info: table created")); my_syslog(LOG_INFO, _("info: table created"));
bzero(&addr, sizeof(addr)); bzero(&addr, sizeof(addr));
#ifdef HAVE_IPV6
if (flags & F_IPV6) if (flags & F_IPV6)
{ {
addr.pfra_af = AF_INET6; addr.pfra_af = AF_INET6;
@@ -116,7 +116,6 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
memcpy(&(addr.pfra_ip6addr), &(ipaddr->addr), sizeof(struct in6_addr)); memcpy(&(addr.pfra_ip6addr), &(ipaddr->addr), sizeof(struct in6_addr));
} }
else else
#endif
{ {
addr.pfra_af = AF_INET; addr.pfra_af = AF_INET;
addr.pfra_net = 0x20; addr.pfra_net = 0x20;
+2 -15
View File
@@ -60,17 +60,11 @@ void tftp_request(struct listener *listen, time_t now)
char *prefix = daemon->tftp_prefix; char *prefix = daemon->tftp_prefix;
struct tftp_prefix *pref; struct tftp_prefix *pref;
struct all_addr addra; struct all_addr addra;
#ifdef HAVE_IPV6
/* Can always get recvd interface for IPv6 */ /* Can always get recvd interface for IPv6 */
int check_dest = !option_bool(OPT_NOWILD) || listen->family == AF_INET6; int check_dest = !option_bool(OPT_NOWILD) || listen->family == AF_INET6;
#else
int check_dest = !option_bool(OPT_NOWILD);
#endif
union { union {
struct cmsghdr align; /* this ensures alignment */ struct cmsghdr align; /* this ensures alignment */
#ifdef HAVE_IPV6
char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))]; char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
#endif
#if defined(HAVE_LINUX_NETWORK) #if defined(HAVE_LINUX_NETWORK)
char control[CMSG_SPACE(sizeof(struct in_pktinfo))]; char control[CMSG_SPACE(sizeof(struct in_pktinfo))];
#elif defined(HAVE_SOLARIS_NETWORK) #elif defined(HAVE_SOLARIS_NETWORK)
@@ -174,7 +168,6 @@ void tftp_request(struct listener *listen, time_t now)
#endif #endif
#ifdef HAVE_IPV6
if (listen->family == AF_INET6) if (listen->family == AF_INET6)
{ {
for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr)) for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr))
@@ -190,7 +183,6 @@ void tftp_request(struct listener *listen, time_t now)
if_index = p.p->ipi6_ifindex; if_index = p.p->ipi6_ifindex;
} }
} }
#endif
if (!indextoname(listen->tftpfd, if_index, namebuff)) if (!indextoname(listen->tftpfd, if_index, namebuff))
return; return;
@@ -199,10 +191,8 @@ void tftp_request(struct listener *listen, time_t now)
addra.addr.addr4 = addr.in.sin_addr; addra.addr.addr4 = addr.in.sin_addr;
#ifdef HAVE_IPV6
if (listen->family == AF_INET6) if (listen->family == AF_INET6)
addra.addr.addr6 = addr.in6.sin6_addr; addra.addr.addr6 = addr.in6.sin6_addr;
#endif
if (daemon->tftp_interfaces) if (daemon->tftp_interfaces)
{ {
@@ -262,7 +252,6 @@ void tftp_request(struct listener *listen, time_t now)
addr.in.sin_len = sizeof(addr.in); addr.in.sin_len = sizeof(addr.in);
#endif #endif
} }
#ifdef HAVE_IPV6
else else
{ {
addr.in6.sin6_port = htons(port); addr.in6.sin6_port = htons(port);
@@ -272,7 +261,6 @@ void tftp_request(struct listener *listen, time_t now)
addr.in6.sin6_len = sizeof(addr.in6); addr.in6.sin6_len = sizeof(addr.in6);
#endif #endif
} }
#endif
if (!(transfer = whine_malloc(sizeof(struct tftp_transfer)))) if (!(transfer = whine_malloc(sizeof(struct tftp_transfer))))
return; return;
@@ -310,10 +298,9 @@ void tftp_request(struct listener *listen, time_t now)
{ {
if (listen->family == AF_INET) if (listen->family == AF_INET)
addr.in.sin_port = htons(port); addr.in.sin_port = htons(port);
#ifdef HAVE_IPV6
else else
addr.in6.sin6_port = htons(port); addr.in6.sin6_port = htons(port);
#endif
continue; continue;
} }
my_syslog(MS_TFTP | LOG_ERR, _("unable to get free port for TFTP")); my_syslog(MS_TFTP | LOG_ERR, _("unable to get free port for TFTP"));
+1 -12
View File
@@ -320,13 +320,12 @@ int sockaddr_isequal(union mysockaddr *s1, union mysockaddr *s2)
s1->in.sin_port == s2->in.sin_port && s1->in.sin_port == s2->in.sin_port &&
s1->in.sin_addr.s_addr == s2->in.sin_addr.s_addr) s1->in.sin_addr.s_addr == s2->in.sin_addr.s_addr)
return 1; return 1;
#ifdef HAVE_IPV6
if (s1->sa.sa_family == AF_INET6 && if (s1->sa.sa_family == AF_INET6 &&
s1->in6.sin6_port == s2->in6.sin6_port && s1->in6.sin6_port == s2->in6.sin6_port &&
s1->in6.sin6_scope_id == s2->in6.sin6_scope_id && s1->in6.sin6_scope_id == s2->in6.sin6_scope_id &&
IN6_ARE_ADDR_EQUAL(&s1->in6.sin6_addr, &s2->in6.sin6_addr)) IN6_ARE_ADDR_EQUAL(&s1->in6.sin6_addr, &s2->in6.sin6_addr))
return 1; return 1;
#endif
} }
return 0; return 0;
} }
@@ -336,11 +335,9 @@ int sa_len(union mysockaddr *addr)
#ifdef HAVE_SOCKADDR_SA_LEN #ifdef HAVE_SOCKADDR_SA_LEN
return addr->sa.sa_len; return addr->sa.sa_len;
#else #else
#ifdef HAVE_IPV6
if (addr->sa.sa_family == AF_INET6) if (addr->sa.sa_family == AF_INET6)
return sizeof(addr->in6); return sizeof(addr->in6);
else else
#endif
return sizeof(addr->in); return sizeof(addr->in);
#endif #endif
} }
@@ -437,7 +434,6 @@ int is_same_net(struct in_addr a, struct in_addr b, struct in_addr mask)
return (a.s_addr & mask.s_addr) == (b.s_addr & mask.s_addr); return (a.s_addr & mask.s_addr) == (b.s_addr & mask.s_addr);
} }
#ifdef HAVE_IPV6
int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen) int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen)
{ {
int pfbytes = prefixlen >> 3; int pfbytes = prefixlen >> 3;
@@ -476,15 +472,12 @@ void setaddr6part(struct in6_addr *addr, u64 host)
} }
} }
#endif
/* returns port number from address */ /* returns port number from address */
int prettyprint_addr(union mysockaddr *addr, char *buf) int prettyprint_addr(union mysockaddr *addr, char *buf)
{ {
int port = 0; int port = 0;
#ifdef HAVE_IPV6
if (addr->sa.sa_family == AF_INET) if (addr->sa.sa_family == AF_INET)
{ {
inet_ntop(AF_INET, &addr->in.sin_addr, buf, ADDRSTRLEN); inet_ntop(AF_INET, &addr->in.sin_addr, buf, ADDRSTRLEN);
@@ -503,10 +496,6 @@ int prettyprint_addr(union mysockaddr *addr, char *buf)
} }
port = ntohs(addr->in6.sin6_port); port = ntohs(addr->in6.sin6_port);
} }
#else
strcpy(buf, inet_ntoa(addr->in.sin_addr));
port = ntohs(addr->in.sin_port);
#endif
return port; return port;
} }