diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2015-11-18 14:39:50 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2015-11-18 14:40:52 +0000 |
commit | ef2dec6c3ea0c808bda31401d8db1a429bd7422e (patch) | |
tree | 6dfc3e4e4aff9770a5aba1defd285a19b3e617aa /main/open-vm-tools/0006-Use-configure-to-test-for-feature-instead-of-platfor.patch | |
parent | 276a4314d1785bb036f4dd62f6b22fb32af33b8f (diff) | |
download | aports-ef2dec6c3ea0c808bda31401d8db1a429bd7422e.tar.bz2 aports-ef2dec6c3ea0c808bda31401d8db1a429bd7422e.tar.xz |
main/open-vm-tools: upgrade to 10.0.0_p3000743
Diffstat (limited to 'main/open-vm-tools/0006-Use-configure-to-test-for-feature-instead-of-platfor.patch')
-rw-r--r-- | main/open-vm-tools/0006-Use-configure-to-test-for-feature-instead-of-platfor.patch | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/main/open-vm-tools/0006-Use-configure-to-test-for-feature-instead-of-platfor.patch b/main/open-vm-tools/0006-Use-configure-to-test-for-feature-instead-of-platfor.patch new file mode 100644 index 0000000000..33e720d674 --- /dev/null +++ b/main/open-vm-tools/0006-Use-configure-to-test-for-feature-instead-of-platfor.patch @@ -0,0 +1,192 @@ +From 1a6d86a39e8ac164074ed8e0be116e7c07bb886d Mon Sep 17 00:00:00 2001 +From: Natanael Copa <ncopa@alpinelinux.org> +Date: Wed, 18 Nov 2015 10:05:07 +0000 +Subject: [PATCH 06/11] 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 +- setresuid +- setresgid +- issetugid +- __secure_getenv + +This is needed for musl libc. + +Signed-off-by: Natanael Copa <ncopa@alpinelinux.org> +--- + open-vm-tools/configure.ac | 4 ++++ + open-vm-tools/lib/misc/idLinux.c | 30 ++++++++++++++---------------- + open-vm-tools/lib/nicInfo/nicInfoPosix.c | 8 ++++++-- + open-vm-tools/lib/procMgr/procMgrPosix.c | 9 ++++++--- + 4 files changed, 30 insertions(+), 21 deletions(-) + +diff --git a/open-vm-tools/configure.ac b/open-vm-tools/configure.ac +index 037679d..f474150 100644 +--- a/open-vm-tools/configure.ac ++++ b/open-vm-tools/configure.ac +@@ -644,6 +644,7 @@ AC_CHECK_FUNCS( + + AC_CHECK_FUNCS([ecvt]) + AC_CHECK_FUNCS([fcvt]) ++AC_CHECK_FUNCS([getifaddrs getauxval setresuid setresgid issetugid __secure_getenv]) + + if test "$os" = "freebsd" -a "$osVersion" -ge 600000; then + AC_CHECK_LIB( +@@ -861,10 +862,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 +diff --git a/open-vm-tools/lib/misc/idLinux.c b/open-vm-tools/lib/misc/idLinux.c +index 58bcb53..a7d859f 100644 +--- a/open-vm-tools/lib/misc/idLinux.c ++++ b/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 +diff --git a/open-vm-tools/lib/nicInfo/nicInfoPosix.c b/open-vm-tools/lib/nicInfo/nicInfoPosix.c +index 4324637..e7ff9a2 100644 +--- a/open-vm-tools/lib/nicInfo/nicInfoPosix.c ++++ b/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 +@@ -280,7 +284,7 @@ GuestInfoGetNicInfo(NicInfoV3 *nicInfo) // OUT + * + ****************************************************************************** + */ +-#if defined(__FreeBSD__) || defined(__APPLE__) || defined(USERWORLD) ++#if defined(NO_DNET) && defined(HAVE_GETIFADDRS) + + char * + GuestInfoGetPrimaryIP(void) +diff --git a/open-vm-tools/lib/procMgr/procMgrPosix.c b/open-vm-tools/lib/procMgr/procMgrPosix.c +index d0e78a4..5038b75 100644 +--- a/open-vm-tools/lib/procMgr/procMgrPosix.c ++++ b/open-vm-tools/lib/procMgr/procMgrPosix.c +@@ -137,7 +137,7 @@ static int ProcMgrGetCommandLineArgs(long pid, + #define BASH_PATH "/bin/bash" + #endif + +-#if defined(linux) && !defined(GLIBC_VERSION_23) && !defined(__UCLIBC__) ++#if defined(linux) + /* + * Implements the system calls (they are not wrapped by glibc til 2.3.2). + * +@@ -146,7 +146,7 @@ static int ProcMgrGetCommandLineArgs(long pid, + * + * (In fact, newer Linux kernels don't even define _syscall macros anymore.) + */ +- ++#ifndef HAVE_SETRESUID + static INLINE int + setresuid(uid_t ruid, + uid_t euid, +@@ -154,8 +154,9 @@ setresuid(uid_t ruid, + { + return syscall(__NR_setresuid, ruid, euid, suid); + } ++#endif + +- ++#ifndef HAVE_SETRESGID + static INLINE int + setresgid(gid_t ruid, + gid_t euid, +@@ -165,6 +166,8 @@ setresgid(gid_t ruid, + } + #endif + ++#endif ++ + + /* + *---------------------------------------------------------------------- +-- +2.6.3 + |