summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2010-04-24 19:02:22 +0200
committerKarolin Seeger <kseeger@samba.org>2010-05-17 09:50:19 +0200
commit1f0f830dce26e31232c9d2abb08ceb743e914251 (patch)
tree02a8e2ae724ead3223e9e7967c5e03eecc1da031
parentfa773cde00d0bf24f78fee1ffc508b0f7c81bbd9 (diff)
downloadsamba-1f0f830dce26e31232c9d2abb08ceb743e914251.tar.gz
lib/replace: add replacement for IPV6_V6ONLY on linux systems with broken headers
This is needed on SLES8. See bug 7196. metze (cherry picked from commit e06cf3950252a46486aa046a4552ed6ebff175b3) Signed-off-by: Stefan Metzmacher <metze@samba.org> (cherry picked from commit 15b509b4b03a2c19caf4abfe475666f0720b4441)
-rw-r--r--lib/replace/libreplace_network.m444
-rw-r--r--lib/replace/system/network.h7
2 files changed, 51 insertions, 0 deletions
diff --git a/lib/replace/libreplace_network.m4 b/lib/replace/libreplace_network.m4
index b7d15eaddbd..6554a59d386 100644
--- a/lib/replace/libreplace_network.m4
+++ b/lib/replace/libreplace_network.m4
@@ -350,6 +350,50 @@ if test x"$libreplace_cv_HAVE_IFACE_IFREQ" = x"yes"; then
fi
fi
+dnl Some old Linux systems have broken header files and
+dnl miss the IPV6_V6ONLY define in netinet/in.h,
+dnl but have it in linux/in6.h.
+dnl We can't include both files so we just check if the value
+dnl if defined and do the replacement in system/network.h
+AC_CACHE_CHECK([for IPV6_V6ONLY support],libreplace_cv_HAVE_IPV6_V6ONLY,[
+ AC_TRY_COMPILE([
+#include <stdlib.h> /* for NULL */
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netdb.h>
+#include <netinet/in.h>
+ ],
+ [
+#ifndef IPV6_V6ONLY
+#error no IPV6_V6ONLY
+#endif
+ ],[
+ libreplace_cv_HAVE_IPV6_V6ONLY=yes
+ ],[
+ libreplace_cv_HAVE_IPV6_V6ONLY=no
+ ])
+])
+if test x"$libreplace_cv_HAVE_IPV6_V6ONLY" != x"yes"; then
+ dnl test for IPV6_V6ONLY
+ AC_CACHE_CHECK([for IPV6_V6ONLY in linux/in6.h],libreplace_cv_HAVE_LINUX_IPV6_V6ONLY_26,[
+ AC_TRY_COMPILE([
+ #include <linux/in6.h>
+ ],
+ [
+ #if (IPV6_V6ONLY != 26)
+ #error no linux IPV6_V6ONLY
+ #endif
+ ],[
+ libreplace_cv_HAVE_LINUX_IPV6_V6ONLY_26=yes
+ ],[
+ libreplace_cv_HAVE_LINUX_IPV6_V6ONLY_26=no
+ ])
+ ])
+ if test x"$libreplace_cv_HAVE_LINUX_IPV6_V6ONLY_26" = x"yes"; then
+ AC_DEFINE(HAVE_LINUX_IPV6_V6ONLY_26,1,[Whether the system has IPV6_V6ONLY in linux/in6.h])
+ fi
+fi
+
dnl test for ipv6
AC_CACHE_CHECK([for ipv6 support],libreplace_cv_HAVE_IPV6,[
AC_TRY_LINK([
diff --git a/lib/replace/system/network.h b/lib/replace/system/network.h
index 1f510350bd9..93d533c9b97 100644
--- a/lib/replace/system/network.h
+++ b/lib/replace/system/network.h
@@ -360,6 +360,13 @@ struct addrinfo {
#define ifr_netmask ifr_addr
#endif
+/* Some old Linux systems have broken header files */
+#ifdef HAVE_IPV6
+#ifdef HAVE_LINUX_IPV6_V6ONLY_26
+#define IPV6_V6ONLY 26
+#endif /* HAVE_LINUX_IPV6_V6ONLY_26 */
+#endif /* HAVE_IPV6 */
+
#ifdef SOCKET_WRAPPER
#ifndef SOCKET_WRAPPER_DISABLE
#ifndef SOCKET_WRAPPER_NOT_REPLACE