#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);
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);
+#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);
}
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);
}
}
}
-#endif /* HAVE_IN6_ADDR */
+#endif /* HAVE_STRUCT_IN6_ADDR */
for (ifp = interfaces; ifp != NULL; ifp = ifp->next) {
if (ifp->family != 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);
+#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);
+#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, '/'))) {
} else
retval = addr_matches_if(n);
- return retval;
+ debug_return_bool(retval);
}