123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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)
|