diff options
-rw-r--r-- | source3/configure.in | 13 | ||||
-rw-r--r-- | source3/lib/interfaces.c | 48 |
2 files changed, 35 insertions, 26 deletions
diff --git a/source3/configure.in b/source3/configure.in index bc5ad59c00..81ccbb4722 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2757,24 +2757,29 @@ fi # look for a method of finding the list of network interfaces iface=no; AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[ +SAVE_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}" AC_TRY_RUN([ #define HAVE_IFACE_AIX 1 #define AUTOCONF_TEST 1 -#include "confdefs.h" +#undef _XOPEN_SOURCE_EXTENDED #include "${srcdir-.}/lib/interfaces.c"], samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)]) +CPPFLAGS="$SAVE_CPPFLAGS" if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available]) fi if test $iface = no; then AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[ +SAVE_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}" AC_TRY_RUN([ #define HAVE_IFACE_IFCONF 1 #define AUTOCONF_TEST 1 -#include "confdefs.h" #include "${srcdir-.}/lib/interfaces.c"], samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)]) +CPPFLAGS="$SAVE_CPPFLAGS" if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available]) fi @@ -2782,12 +2787,14 @@ fi if test $iface = no; then AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[ +SAVE_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}" AC_TRY_RUN([ #define HAVE_IFACE_IFREQ 1 #define AUTOCONF_TEST 1 -#include "confdefs.h" #include "${srcdir-.}/lib/interfaces.c"], samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)]) +CPPFLAGS="$SAVE_CPPFLAGS" if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available]) fi diff --git a/source3/lib/interfaces.c b/source3/lib/interfaces.c index dc30bdce47..c48a8d4d36 100644 --- a/source3/lib/interfaces.c +++ b/source3/lib/interfaces.c @@ -30,27 +30,21 @@ */ +#ifndef AUTOCONF_TEST +#include "config.h" +#endif + #include <unistd.h> #include <stdio.h> #include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> +#include <netdb.h> +#include <sys/ioctl.h> #include <netdb.h> #include <sys/ioctl.h> #include <sys/time.h> -#include <net/if.h> - -#ifdef AUTOCONF_TEST -struct iface_struct { - char name[16]; - struct in_addr ip; - struct in_addr netmask; -}; -#else -#include "config.h" -#include "interfaces.h" -#endif +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> #ifdef HAVE_SYS_TIME_H #include <sys/time.h> @@ -82,6 +76,12 @@ struct iface_struct { #define QSORT_CAST (int (*)(const void *, const void *)) #endif +#ifdef HAVE_NET_IF_H +#include <net/if.h> +#endif + +#include "interfaces.h" + #if HAVE_IFACE_IFCONF /* this works for Linux 2.2, Solaris 2.5, SunOS4, HPUX 10.20, OSF1 @@ -154,7 +154,9 @@ static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces) return total; } -#elif HAVE_IFACE_IFREQ +#define _FOUND_IFACE_ANY +#endif /* HAVE_IFACE_IFCONF */ +#ifdef HAVE_IFACE_IFREQ #ifndef I_STR #include <sys/stropts.h> @@ -249,7 +251,9 @@ static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces) return total; } -#elif HAVE_IFACE_AIX +#define _FOUND_IFACE_ANY +#endif /* HAVE_IFACE_IFREQ */ +#ifdef HAVE_IFACE_AIX /**************************************************************************** this one is for AIX (tested on 4.2) @@ -284,7 +288,7 @@ static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces) i = ifc.ifc_len; while (i > 0 && total < max_interfaces) { - unsigned inc; + uint_t inc; inc = ifr->ifr_addr.sa_len; @@ -337,7 +341,9 @@ static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces) return total; } -#else /* a dummy version */ +#define _FOUND_IFACE_ANY +#endif /* HAVE_IFACE_AIX */ +#ifndef _FOUND_IFACE_ANY static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces) { return -1; @@ -358,8 +364,6 @@ static int iface_comp(struct iface_struct *i1, struct iface_struct *i2) /* this wrapper is used to remove duplicates from the interface list generated above */ -int get_interfaces(struct iface_struct *ifaces, int max_interfaces); - int get_interfaces(struct iface_struct *ifaces, int max_interfaces) { int total, i, j; @@ -388,8 +392,6 @@ int get_interfaces(struct iface_struct *ifaces, int max_interfaces) #ifdef AUTOCONF_TEST /* this is the autoconf driver to test get_interfaces() */ -#define MAX_INTERFACES 128 - int main() { struct iface_struct ifaces[MAX_INTERFACES]; |