Quiet a compiler warning.

This commit is contained in:
Todd C. Miller
2010-06-14 11:18:50 -04:00
parent 848b636f24
commit b09a643ff0

View File

@@ -105,6 +105,13 @@ static int command_matches_normal(char *, char *);
*/ */
#define has_meta(s) (strpbrk(s, "\\?*[]") != NULL) #define has_meta(s) (strpbrk(s, "\\?*[]") != NULL)
union sudo_in_addr_un {
struct in_addr ip4;
#ifdef HAVE_IN6_ADDR
struct in6_addr ip6;
#endif
};
/* /*
* Check for user described by pw in a list of members. * Check for user described by pw in a list of members.
* Returns ALLOW, DENY or UNSPEC. * Returns ALLOW, DENY or UNSPEC.
@@ -581,22 +588,21 @@ static int
addr_matches_if(char *n) addr_matches_if(char *n)
{ {
int i; int i;
struct in_addr addr; union sudo_in_addr_un addr;
struct interface *ifp; struct interface *ifp;
#ifdef HAVE_IN6_ADDR #ifdef HAVE_IN6_ADDR
struct in6_addr addr6;
int j; int j;
#endif #endif
int family; int family;
#ifdef HAVE_IN6_ADDR #ifdef HAVE_IN6_ADDR
if (inet_pton(AF_INET6, n, &addr6) > 0) { if (inet_pton(AF_INET6, n, &addr.ip6) > 0) {
family = AF_INET6; family = AF_INET6;
} else } else
#endif #endif
{ {
family = AF_INET; family = AF_INET;
addr.s_addr = inet_addr(n); addr.ip4.s_addr = inet_addr(n);
} }
for (i = 0; i < num_interfaces; i++) { for (i = 0; i < num_interfaces; i++) {
@@ -605,21 +611,21 @@ addr_matches_if(char *n)
continue; continue;
switch(family) { switch(family) {
case AF_INET: case AF_INET:
if (ifp->addr.ip4.s_addr == addr.s_addr || if (ifp->addr.ip4.s_addr == addr.ip4.s_addr ||
(ifp->addr.ip4.s_addr & ifp->netmask.ip4.s_addr) (ifp->addr.ip4.s_addr & ifp->netmask.ip4.s_addr)
== addr.s_addr) == addr.ip4.s_addr)
return(TRUE); return(TRUE);
break; break;
#ifdef HAVE_IN6_ADDR #ifdef HAVE_IN6_ADDR
case AF_INET6: case AF_INET6:
if (memcmp(ifp->addr.ip6.s6_addr, addr6.s6_addr, if (memcmp(ifp->addr.ip6.s6_addr, addr.ip6.s6_addr,
sizeof(addr6.s6_addr)) == 0) sizeof(addr.ip6.s6_addr)) == 0)
return(TRUE); return(TRUE);
for (j = 0; j < sizeof(addr6.s6_addr); j++) { for (j = 0; j < sizeof(addr.ip6.s6_addr); j++) {
if ((ifp->addr.ip6.s6_addr[j] & ifp->netmask.ip6.s6_addr[j]) != addr6.s6_addr[j]) if ((ifp->addr.ip6.s6_addr[j] & ifp->netmask.ip6.s6_addr[j]) != addr.ip6.s6_addr[j])
break; break;
} }
if (j == sizeof(addr6.s6_addr)) if (j == sizeof(addr.ip6.s6_addr))
return(TRUE); return(TRUE);
#endif #endif
} }
@@ -632,46 +638,45 @@ static int
addr_matches_if_netmask(char *n, char *m) addr_matches_if_netmask(char *n, char *m)
{ {
int i; int i;
struct in_addr addr, mask; union sudo_in_addr_un addr, mask;
struct interface *ifp; struct interface *ifp;
#ifdef HAVE_IN6_ADDR #ifdef HAVE_IN6_ADDR
struct in6_addr addr6, mask6;
int j; int j;
#endif #endif
int family; int family;
#ifdef HAVE_IN6_ADDR #ifdef HAVE_IN6_ADDR
if (inet_pton(AF_INET6, n, &addr6) > 0) if (inet_pton(AF_INET6, n, &addr.ip6) > 0)
family = AF_INET6; family = AF_INET6;
else else
#endif #endif
{ {
family = AF_INET; family = AF_INET;
addr.s_addr = inet_addr(n); addr.ip4.s_addr = inet_addr(n);
} }
if (family == AF_INET) { if (family == AF_INET) {
if (strchr(m, '.')) if (strchr(m, '.'))
mask.s_addr = inet_addr(m); mask.ip4.s_addr = inet_addr(m);
else { else {
i = 32 - atoi(m); i = 32 - atoi(m);
mask.s_addr = 0xffffffff; mask.ip4.s_addr = 0xffffffff;
mask.s_addr >>= i; mask.ip4.s_addr >>= i;
mask.s_addr <<= i; mask.ip4.s_addr <<= i;
mask.s_addr = htonl(mask.s_addr); mask.ip4.s_addr = htonl(mask.ip4.s_addr);
} }
} }
#ifdef HAVE_IN6_ADDR #ifdef HAVE_IN6_ADDR
else { else {
if (inet_pton(AF_INET6, m, &mask6) <= 0) { if (inet_pton(AF_INET6, m, &mask.ip6) <= 0) {
j = atoi(m); j = atoi(m);
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
if (j < i * 8) if (j < i * 8)
mask6.s6_addr[i] = 0; mask.ip6.s6_addr[i] = 0;
else if (i * 8 + 8 <= j) else if (i * 8 + 8 <= j)
mask6.s6_addr[i] = 0xff; mask.ip6.s6_addr[i] = 0xff;
else else
mask6.s6_addr[i] = 0xff00 >> (j - i * 8); mask.ip6.s6_addr[i] = 0xff00 >> (j - i * 8);
} }
} }
} }
@@ -683,15 +688,15 @@ addr_matches_if_netmask(char *n, char *m)
continue; continue;
switch(family) { switch(family) {
case AF_INET: case AF_INET:
if ((ifp->addr.ip4.s_addr & mask.s_addr) == addr.s_addr) if ((ifp->addr.ip4.s_addr & mask.ip4.s_addr) == addr.ip4.s_addr)
return(TRUE); return(TRUE);
#ifdef HAVE_IN6_ADDR #ifdef HAVE_IN6_ADDR
case AF_INET6: case AF_INET6:
for (j = 0; j < sizeof(addr6.s6_addr); j++) { for (j = 0; j < sizeof(addr.ip6.s6_addr); j++) {
if ((ifp->addr.ip6.s6_addr[j] & mask6.s6_addr[j]) != addr6.s6_addr[j]) if ((ifp->addr.ip6.s6_addr[j] & mask.ip6.s6_addr[j]) != addr.ip6.s6_addr[j])
break; break;
} }
if (j == sizeof(addr6.s6_addr)) if (j == sizeof(addr.ip6.s6_addr))
return(TRUE); return(TRUE);
#endif /* HAVE_IN6_ADDR */ #endif /* HAVE_IN6_ADDR */
} }