--- embedaddon/sudo/plugins/sudoers/match_addr.c 2012/02/21 16:23:02 1.1.1.1 +++ embedaddon/sudo/plugins/sudoers/match_addr.c 2012/05/29 12:26:49 1.1.1.2 @@ -50,21 +50,22 @@ #include "sudoers.h" #include "interfaces.h" -static int +static bool addr_matches_if(char *n) { union sudo_in_addr_un addr; struct interface *ifp; -#ifdef HAVE_IN6_ADDR +#ifdef HAVE_STRUCT_IN6_ADDR int j; #endif int family; + debug_decl(addr_matches_if, SUDO_DEBUG_MATCH) -#ifdef HAVE_IN6_ADDR +#ifdef HAVE_STRUCT_IN6_ADDR if (inet_pton(AF_INET6, n, &addr.ip6) > 0) { family = AF_INET6; } else -#endif +#endif /* HAVE_STRUCT_IN6_ADDR */ { family = AF_INET; addr.ip4.s_addr = inet_addr(n); @@ -73,47 +74,49 @@ addr_matches_if(char *n) for (ifp = interfaces; ifp != NULL; ifp = ifp->next) { if (ifp->family != family) continue; - switch(family) { + switch (family) { case AF_INET: if (ifp->addr.ip4.s_addr == addr.ip4.s_addr || (ifp->addr.ip4.s_addr & ifp->netmask.ip4.s_addr) == addr.ip4.s_addr) - return TRUE; + debug_return_bool(true); break; -#ifdef HAVE_IN6_ADDR +#ifdef HAVE_STRUCT_IN6_ADDR case AF_INET6: if (memcmp(ifp->addr.ip6.s6_addr, addr.ip6.s6_addr, sizeof(addr.ip6.s6_addr)) == 0) - return TRUE; + debug_return_bool(true); 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(addr.ip6.s6_addr)) - return TRUE; -#endif + debug_return_bool(true); + break; +#endif /* HAVE_STRUCT_IN6_ADDR */ } } - return FALSE; + debug_return_bool(false); } -static int +static bool addr_matches_if_netmask(char *n, char *m) { int i; union sudo_in_addr_un addr, mask; struct interface *ifp; -#ifdef HAVE_IN6_ADDR +#ifdef HAVE_STRUCT_IN6_ADDR int j; #endif int family; + debug_decl(addr_matches_if, SUDO_DEBUG_MATCH) -#ifdef HAVE_IN6_ADDR +#ifdef HAVE_STRUCT_IN6_ADDR if (inet_pton(AF_INET6, n, &addr.ip6) > 0) family = AF_INET6; else -#endif +#endif /* HAVE_STRUCT_IN6_ADDR */ { family = AF_INET; addr.ip4.s_addr = inet_addr(n); @@ -134,7 +137,7 @@ addr_matches_if_netmask(char *n, char *m) } addr.ip4.s_addr &= mask.ip4.s_addr; } -#ifdef HAVE_IN6_ADDR +#ifdef HAVE_STRUCT_IN6_ADDR else { if (inet_pton(AF_INET6, m, &mask.ip6) <= 0) { j = atoi(m); @@ -149,39 +152,42 @@ addr_matches_if_netmask(char *n, char *m) } } } -#endif /* HAVE_IN6_ADDR */ +#endif /* HAVE_STRUCT_IN6_ADDR */ for (ifp = interfaces; ifp != NULL; ifp = ifp->next) { if (ifp->family != family) continue; - switch(family) { + switch (family) { case AF_INET: if ((ifp->addr.ip4.s_addr & mask.ip4.s_addr) == addr.ip4.s_addr) - return TRUE; -#ifdef HAVE_IN6_ADDR + debug_return_bool(true); + break; +#ifdef HAVE_STRUCT_IN6_ADDR case AF_INET6: 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(addr.ip6.s6_addr)) - return TRUE; -#endif /* HAVE_IN6_ADDR */ + debug_return_bool(true); + break; +#endif /* HAVE_STRUCT_IN6_ADDR */ } } - return FALSE; + debug_return_bool(false); } /* - * Returns TRUE if "n" is one of our ip addresses or if - * "n" is a network that we are on, else returns FALSE. + * Returns true if "n" is one of our ip addresses or if + * "n" is a network that we are on, else returns false. */ -int +bool addr_matches(char *n) { char *m; - int retval; + bool retval; + debug_decl(addr_matches, SUDO_DEBUG_MATCH) /* If there's an explicit netmask, use it. */ if ((m = strchr(n, '/'))) { @@ -191,5 +197,5 @@ addr_matches(char *n) } else retval = addr_matches_if(n); - return retval; + debug_return_bool(retval); }