151 lines
4.8 KiB
Diff
151 lines
4.8 KiB
Diff
|
From 6cc1c22cc30320f56da552a76bd956db8f255b6a Mon Sep 17 00:00:00 2001
|
||
|
From: Natanael Copa <ncopa@alpinelinux.org>
|
||
|
Date: Wed, 18 Nov 2015 10:05:07 +0000
|
||
|
Subject: [PATCH] Use configure to test for feature instead of platform
|
||
|
|
||
|
Test for various functions instead of trying to keep track of what
|
||
|
platform and what version of the given platform has support for what.
|
||
|
|
||
|
This should make it easier to port to currently unknown platforms and
|
||
|
will solve the issue if a platform add support for a missing feature in
|
||
|
the future.
|
||
|
|
||
|
The features we test for are:
|
||
|
- getifaddrs
|
||
|
- getauxval
|
||
|
- issetugid
|
||
|
- __secure_getenv
|
||
|
|
||
|
This is needed for musl libc.
|
||
|
|
||
|
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
|
||
|
[Retrieved (and slightly updated) from:
|
||
|
http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0007-Use-configure-to-test-for-feature-instead-of-platfor.patch?h=sumo]
|
||
|
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||
|
---
|
||
|
open-vm-tools/configure.ac | 4 ++++
|
||
|
open-vm-tools/lib/misc/idLinux.c | 30 ++++++++++++++----------------
|
||
|
open-vm-tools/lib/nicInfo/nicInfoPosix.c | 8 ++++++--
|
||
|
3 files changed, 24 insertions(+), 18 deletions(-)
|
||
|
|
||
|
Index: open-vm-tools/configure.ac
|
||
|
===================================================================
|
||
|
--- open-vm-tools.orig/configure.ac
|
||
|
+++ open-vm-tools/configure.ac
|
||
|
@@ -798,6 +798,7 @@ AC_CHECK_FUNCS(
|
||
|
|
||
|
AC_CHECK_FUNCS([ecvt])
|
||
|
AC_CHECK_FUNCS([fcvt])
|
||
|
+AC_CHECK_FUNCS([getifaddrs getauxval issetugid __secure_getenv])
|
||
|
|
||
|
AC_CHECK_FUNC([mkdtemp], [have_mkdtemp=yes])
|
||
|
|
||
|
@@ -1063,10 +1064,13 @@ AC_PATH_PROG(
|
||
|
###
|
||
|
|
||
|
AC_CHECK_HEADERS([crypt.h])
|
||
|
+AC_CHECK_HEADERS([ifaddrs.h])
|
||
|
AC_CHECK_HEADERS([inttypes.h])
|
||
|
AC_CHECK_HEADERS([stdint.h])
|
||
|
AC_CHECK_HEADERS([stdlib.h])
|
||
|
AC_CHECK_HEADERS([wchar.h])
|
||
|
+AC_CHECK_HEADERS([net/if.h])
|
||
|
+AC_CHECK_HEADERS([sys/auxv.h])
|
||
|
AC_CHECK_HEADERS([sys/inttypes.h])
|
||
|
AC_CHECK_HEADERS([sys/io.h])
|
||
|
AC_CHECK_HEADERS([sys/param.h]) # Required to make the sys/user.h check work correctly on FreeBSD
|
||
|
Index: open-vm-tools/lib/misc/idLinux.c
|
||
|
===================================================================
|
||
|
--- open-vm-tools.orig/lib/misc/idLinux.c
|
||
|
+++ open-vm-tools/lib/misc/idLinux.c
|
||
|
@@ -27,12 +27,9 @@
|
||
|
#include <sys/syscall.h>
|
||
|
#include <string.h>
|
||
|
#include <unistd.h>
|
||
|
-#ifdef __linux__
|
||
|
-#if defined(__GLIBC__) && \
|
||
|
- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16))
|
||
|
+#ifdef HAVE_SYS_AUXV_H
|
||
|
#include <sys/auxv.h>
|
||
|
#endif
|
||
|
-#endif
|
||
|
#ifdef __APPLE__
|
||
|
#include <sys/socket.h>
|
||
|
#include <TargetConditionals.h>
|
||
|
@@ -997,31 +994,32 @@ Id_EndSuperUser(uid_t uid) // IN:
|
||
|
static Bool
|
||
|
IdIsSetUGid(void)
|
||
|
{
|
||
|
-#if defined(__ANDROID__)
|
||
|
- /* Android does not have a secure_getenv, so be conservative. */
|
||
|
- return TRUE;
|
||
|
-#else
|
||
|
/*
|
||
|
* We use __secure_getenv, which returns NULL if the binary is
|
||
|
- * setuid or setgid. Alternatives include,
|
||
|
+ * setuid or setgid, when issetugid or getauxval(AT_SECURE) is not
|
||
|
+ * available. Alternatives include,
|
||
|
*
|
||
|
- * a) getauxval(AT_SECURE); not available until glibc 2.16.
|
||
|
- * b) __libc_enable_secure; may not be exported.
|
||
|
+ * a) issetugid(); not (yet?) available in glibc.
|
||
|
+ * b) getauxval(AT_SECURE); not available until glibc 2.16.
|
||
|
+ * c) __libc_enable_secure; may not be exported.
|
||
|
*
|
||
|
- * Use (a) when we are based on glibc 2.16, or newer.
|
||
|
+ * Use (b) when we are based on glibc 2.16, or newer.
|
||
|
*/
|
||
|
|
||
|
-#if defined(__GLIBC__) && \
|
||
|
- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16))
|
||
|
+#if HAVE_ISSETUGID
|
||
|
+ return issetugid();
|
||
|
+#elif HAVE_GETAUXVAL
|
||
|
return getauxval(AT_SECURE) != 0;
|
||
|
-#else
|
||
|
+#elif HAVE___SECURE_GETENV
|
||
|
static const char envName[] = "VMW_SETUGID_TEST";
|
||
|
|
||
|
if (setenv(envName, "1", TRUE) == -1) {
|
||
|
return TRUE; /* Conservative */
|
||
|
}
|
||
|
return __secure_getenv(envName) == NULL;
|
||
|
-#endif
|
||
|
+#else
|
||
|
+ /* Android does not have a secure_getenv, so be conservative. */
|
||
|
+ return TRUE;
|
||
|
#endif
|
||
|
}
|
||
|
#endif
|
||
|
Index: open-vm-tools/lib/nicInfo/nicInfoPosix.c
|
||
|
===================================================================
|
||
|
--- open-vm-tools.orig/lib/nicInfo/nicInfoPosix.c
|
||
|
+++ open-vm-tools/lib/nicInfo/nicInfoPosix.c
|
||
|
@@ -34,9 +34,13 @@
|
||
|
#include <sys/socket.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <errno.h>
|
||
|
-#if defined(__FreeBSD__) || defined(__APPLE__)
|
||
|
+#if HAVE_SYS_SYSCTL_H
|
||
|
# include <sys/sysctl.h>
|
||
|
+#endif
|
||
|
+#if HAVE_IFADDRS_H
|
||
|
# include <ifaddrs.h>
|
||
|
+#endif
|
||
|
+#if HAVE_NET_IF_H
|
||
|
# include <net/if.h>
|
||
|
#endif
|
||
|
#ifndef NO_DNET
|
||
|
@@ -348,10 +352,7 @@ GuestInfoGetNicInfo(NicInfoV3 *nicInfo)
|
||
|
*
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
-#if defined(__FreeBSD__) || \
|
||
|
- defined(__APPLE__) || \
|
||
|
- defined(USERWORLD) || \
|
||
|
- (defined(__linux__) && defined(NO_DNET))
|
||
|
+#if defined(NO_DNET) && defined(HAVE_GETIFADDRS)
|
||
|
|
||
|
char *
|
||
|
GuestInfoGetPrimaryIP(void)
|