From b09a643ff07d892effe9185281c6f25c0d0ffa3d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 14 Jun 2010 11:18:50 -0400 Subject: [PATCH] Quiet a compiler warning. --- plugins/sudoers/match.c | 61 ++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/plugins/sudoers/match.c b/plugins/sudoers/match.c index 33fdbcb1a..54e85200c 100644 --- a/plugins/sudoers/match.c +++ b/plugins/sudoers/match.c @@ -105,6 +105,13 @@ static int command_matches_normal(char *, char *); */ #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. * Returns ALLOW, DENY or UNSPEC. @@ -581,22 +588,21 @@ static int addr_matches_if(char *n) { int i; - struct in_addr addr; + union sudo_in_addr_un addr; struct interface *ifp; #ifdef HAVE_IN6_ADDR - struct in6_addr addr6; int j; #endif int family; #ifdef HAVE_IN6_ADDR - if (inet_pton(AF_INET6, n, &addr6) > 0) { + if (inet_pton(AF_INET6, n, &addr.ip6) > 0) { family = AF_INET6; } else #endif { family = AF_INET; - addr.s_addr = inet_addr(n); + addr.ip4.s_addr = inet_addr(n); } for (i = 0; i < num_interfaces; i++) { @@ -605,21 +611,21 @@ addr_matches_if(char *n) continue; switch(family) { 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) - == addr.s_addr) + == addr.ip4.s_addr) return(TRUE); break; #ifdef HAVE_IN6_ADDR case AF_INET6: - if (memcmp(ifp->addr.ip6.s6_addr, addr6.s6_addr, - sizeof(addr6.s6_addr)) == 0) + if (memcmp(ifp->addr.ip6.s6_addr, addr.ip6.s6_addr, + sizeof(addr.ip6.s6_addr)) == 0) return(TRUE); - for (j = 0; j < sizeof(addr6.s6_addr); j++) { - if ((ifp->addr.ip6.s6_addr[j] & ifp->netmask.ip6.s6_addr[j]) != 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]) != addr.ip6.s6_addr[j]) break; } - if (j == sizeof(addr6.s6_addr)) + if (j == sizeof(addr.ip6.s6_addr)) return(TRUE); #endif } @@ -632,46 +638,45 @@ static int addr_matches_if_netmask(char *n, char *m) { int i; - struct in_addr addr, mask; + union sudo_in_addr_un addr, mask; struct interface *ifp; #ifdef HAVE_IN6_ADDR - struct in6_addr addr6, mask6; int j; #endif int family; #ifdef HAVE_IN6_ADDR - if (inet_pton(AF_INET6, n, &addr6) > 0) + if (inet_pton(AF_INET6, n, &addr.ip6) > 0) family = AF_INET6; else #endif { family = AF_INET; - addr.s_addr = inet_addr(n); + addr.ip4.s_addr = inet_addr(n); } if (family == AF_INET) { if (strchr(m, '.')) - mask.s_addr = inet_addr(m); + mask.ip4.s_addr = inet_addr(m); else { i = 32 - atoi(m); - mask.s_addr = 0xffffffff; - mask.s_addr >>= i; - mask.s_addr <<= i; - mask.s_addr = htonl(mask.s_addr); + mask.ip4.s_addr = 0xffffffff; + mask.ip4.s_addr >>= i; + mask.ip4.s_addr <<= i; + mask.ip4.s_addr = htonl(mask.ip4.s_addr); } } #ifdef HAVE_IN6_ADDR else { - if (inet_pton(AF_INET6, m, &mask6) <= 0) { + if (inet_pton(AF_INET6, m, &mask.ip6) <= 0) { j = atoi(m); for (i = 0; i < 16; i++) { if (j < i * 8) - mask6.s6_addr[i] = 0; + mask.ip6.s6_addr[i] = 0; else if (i * 8 + 8 <= j) - mask6.s6_addr[i] = 0xff; + mask.ip6.s6_addr[i] = 0xff; 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; switch(family) { 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); #ifdef HAVE_IN6_ADDR case AF_INET6: - for (j = 0; j < sizeof(addr6.s6_addr); j++) { - if ((ifp->addr.ip6.s6_addr[j] & mask6.s6_addr[j]) != addr6.s6_addr[j]) + for (j = 0; j < sizeof(addr.ip6.s6_addr); j++) { + if ((ifp->addr.ip6.s6_addr[j] & mask.ip6.s6_addr[j]) != addr.ip6.s6_addr[j]) break; } - if (j == sizeof(addr6.s6_addr)) + if (j == sizeof(addr.ip6.s6_addr)) return(TRUE); #endif /* HAVE_IN6_ADDR */ } -- 2.50.0