--- embedaddon/sudo/src/net_ifs.c 2013/07/22 10:46:13 1.1.1.3 +++ embedaddon/sudo/src/net_ifs.c 2014/06/15 16:12:55 1.1.1.5 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2007-2013 + * Copyright (c) 1996, 1998-2005, 2007-2014 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -55,6 +55,11 @@ struct rtentry; #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ @@ -79,14 +84,15 @@ struct rtentry; # include #endif +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "gettext.h" /* must be included before missing.h */ + #include "missing.h" #include "alloc.h" -#include "error.h" +#include "fatal.h" +#include "sudo_conf.h" #include "sudo_debug.h" -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "gettext.h" - /* Minix apparently lacks IFF_LOOPBACK */ #ifndef IFF_LOOPBACK # define IFF_LOOPBACK 0 @@ -111,11 +117,11 @@ get_net_ifs(char **addrinfo) struct sockaddr_in6 *sin6; char addrbuf[INET6_ADDRSTRLEN]; #endif - int ailen, i, len, num_interfaces = 0; + int ailen, len, num_interfaces = 0; char *cp; debug_decl(get_net_ifs, SUDO_DEBUG_NETIF) - if (getifaddrs(&ifaddrs)) + if (!sudo_conf_probe_interfaces() || getifaddrs(&ifaddrs) != 0) debug_return_int(0); /* Allocate space for the interfaces info string. */ @@ -140,7 +146,7 @@ get_net_ifs(char **addrinfo) *addrinfo = cp = emalloc(ailen); /* Store the IP addr/netmask pairs. */ - for (ifa = ifaddrs, i = 0; ifa != NULL; ifa = ifa -> ifa_next) { + for (ifa = ifaddrs; ifa != NULL; ifa = ifa -> ifa_next) { /* Skip interfaces marked "down" and "loopback". */ if (ifa->ifa_addr == NULL || ifa->ifa_netmask == NULL || !ISSET(ifa->ifa_flags, IFF_UP) || ISSET(ifa->ifa_flags, IFF_LOOPBACK)) @@ -153,7 +159,7 @@ get_net_ifs(char **addrinfo) "%s%s/", cp == *addrinfo ? "" : " ", inet_ntoa(sin->sin_addr)); if (len <= 0 || len >= ailen - (*addrinfo - cp)) { - warningx(_("load_interfaces: overflow detected")); + warningx(U_("load_interfaces: overflow detected")); goto done; } cp += len; @@ -162,7 +168,7 @@ get_net_ifs(char **addrinfo) len = snprintf(cp, ailen - (*addrinfo - cp), "%s", inet_ntoa(sin->sin_addr)); if (len <= 0 || len >= ailen - (*addrinfo - cp)) { - warningx(_("load_interfaces: overflow detected")); + warningx(U_("load_interfaces: overflow detected")); goto done; } cp += len; @@ -174,7 +180,7 @@ get_net_ifs(char **addrinfo) len = snprintf(cp, ailen - (*addrinfo - cp), "%s%s/", cp == *addrinfo ? "" : " ", addrbuf); if (len <= 0 || len >= ailen - (*addrinfo - cp)) { - warningx(_("load_interfaces: overflow detected")); + warningx(U_("load_interfaces: overflow detected")); goto done; } cp += len; @@ -183,7 +189,7 @@ get_net_ifs(char **addrinfo) inet_ntop(AF_INET6, &sin6->sin6_addr, addrbuf, sizeof(addrbuf)); len = snprintf(cp, ailen - (*addrinfo - cp), "%s", addrbuf); if (len <= 0 || len >= ailen - (*addrinfo - cp)) { - warningx(_("load_interfaces: overflow detected")); + warningx(U_("load_interfaces: overflow detected")); goto done; } cp += len; @@ -221,9 +227,12 @@ get_net_ifs(char **addrinfo) #endif /* _ISC */ debug_decl(get_net_ifs, SUDO_DEBUG_NETIF) + if (!sudo_conf_probe_interfaces()) + debug_return_int(0); + sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) - fatal(_("unable to open socket")); + fatal(U_("unable to open socket")); /* * Get interface configuration or return. @@ -294,7 +303,7 @@ get_net_ifs(char **addrinfo) "%s%s/", cp == *addrinfo ? "" : " ", inet_ntoa(sin->sin_addr)); if (len <= 0 || len >= ailen - (*addrinfo - cp)) { - warningx(_("load_interfaces: overflow detected")); + warningx(U_("load_interfaces: overflow detected")); goto done; } cp += len; @@ -318,7 +327,7 @@ get_net_ifs(char **addrinfo) len = snprintf(cp, ailen - (*addrinfo - cp), "%s", inet_ntoa(sin->sin_addr)); if (len <= 0 || len >= ailen - (*addrinfo - cp)) { - warningx(_("load_interfaces: overflow detected")); + warningx(U_("load_interfaces: overflow detected")); goto done; } cp += len;