diff options
-rw-r--r-- | main/acl.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/main/acl.c b/main/acl.c index 7df15019e..810ec80ba 100644 --- a/main/acl.c +++ b/main/acl.c @@ -29,11 +29,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/network.h" +#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__Darwin__) +#include <fcntl.h> +#include <net/route.h> +#endif + #if defined(SOLARIS) #include <sys/sockio.h> #endif -#if defined(__linux__) +#if defined(__Darwin__) || defined(__linux__) #include <ifaddrs.h> #endif @@ -103,23 +108,23 @@ static void score_address(const struct sockaddr_in *sin, struct in_addr *best_ad static int get_local_address(struct in_addr *ourip) { int s, res = -1; -#ifdef _SOLARIS +#ifdef SOLARIS struct lifreq *ifr = NULL; struct lifnum ifn; struct lifconf ifc; struct sockaddr_in *sa; char *buf = NULL; int bufsz, x; -#endif /* _SOLARIS */ -#if defined(_BSD) || defined(__linux__) +#endif /* SOLARIS */ +#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__linux__) || defined(__Darwin__) struct ifaddrs *ifap, *ifaphead; int rtnerr; const struct sockaddr_in *sin; -#endif /* defined(_BSD) || defined(_LINUX) */ +#endif /* BSD_OR_LINUX */ struct in_addr best_addr = { 0, }; int best_score = -100; -#if defined(_BSD) || defined(__linux__) +#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__linux__) || defined(__Darwin__) rtnerr = getifaddrs(&ifaphead); if (rtnerr) { perror(NULL); @@ -130,7 +135,7 @@ static int get_local_address(struct in_addr *ourip) s = socket(AF_INET, SOCK_STREAM, 0); if (s > 0) { -#if defined(_BSD) || defined(__linux__) +#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__linux__) || defined(__Darwin__) for (ifap = ifaphead; ifap; ifap = ifap->ifa_next) { if (ifap->ifa_addr->sa_family == AF_INET) { @@ -142,10 +147,10 @@ static int get_local_address(struct in_addr *ourip) break; } } -#endif /* _BSD */ +#endif /* BSD_OR_LINUX */ /* There is no reason whatsoever that this shouldn't work on Linux or BSD also. */ -#ifdef _SOLARIS +#ifdef SOLARIS /* Get a count of interfaces on the machine */ ifn.lifn_family = AF_INET; ifn.lifn_flags = 0; @@ -183,13 +188,13 @@ static int get_local_address(struct in_addr *ourip) } free(buf); -#endif /* _SOLARIS */ +#endif /* SOLARIS */ close(s); } -#if defined(_BSD) || defined(__linux__) +#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__linux__) || defined(__Darwin__) freeifaddrs(ifaphead); -#endif +#endif /* BSD_OR_LINUX */ if (res == 0 && ourip) memcpy(ourip, &best_addr, sizeof(*ourip)); |