1*4882a593SmuzhiyunFrom 6cc1c22cc30320f56da552a76bd956db8f255b6a Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Natanael Copa <ncopa@alpinelinux.org> 3*4882a593SmuzhiyunDate: Wed, 18 Nov 2015 10:05:07 +0000 4*4882a593SmuzhiyunSubject: [PATCH] Use configure to test for feature instead of platform 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunTest for various functions instead of trying to keep track of what 7*4882a593Smuzhiyunplatform and what version of the given platform has support for what. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunThis should make it easier to port to currently unknown platforms and 10*4882a593Smuzhiyunwill solve the issue if a platform add support for a missing feature in 11*4882a593Smuzhiyunthe future. 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunThe features we test for are: 14*4882a593Smuzhiyun- getifaddrs 15*4882a593Smuzhiyun- getauxval 16*4882a593Smuzhiyun- issetugid 17*4882a593Smuzhiyun- __secure_getenv 18*4882a593Smuzhiyun 19*4882a593SmuzhiyunThis is needed for musl libc. 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunSigned-off-by: Natanael Copa <ncopa@alpinelinux.org> 22*4882a593Smuzhiyun[Retrieved (and slightly updated) from: 23*4882a593Smuzhiyunhttp://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] 24*4882a593SmuzhiyunSigned-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> 25*4882a593Smuzhiyun--- 26*4882a593Smuzhiyun open-vm-tools/configure.ac | 4 ++++ 27*4882a593Smuzhiyun open-vm-tools/lib/misc/idLinux.c | 30 ++++++++++++++---------------- 28*4882a593Smuzhiyun open-vm-tools/lib/nicInfo/nicInfoPosix.c | 8 ++++++-- 29*4882a593Smuzhiyun 3 files changed, 24 insertions(+), 18 deletions(-) 30*4882a593Smuzhiyun 31*4882a593SmuzhiyunIndex: open-vm-tools/configure.ac 32*4882a593Smuzhiyun=================================================================== 33*4882a593Smuzhiyun--- open-vm-tools.orig/configure.ac 34*4882a593Smuzhiyun+++ open-vm-tools/configure.ac 35*4882a593Smuzhiyun@@ -798,6 +798,7 @@ AC_CHECK_FUNCS( 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun AC_CHECK_FUNCS([ecvt]) 38*4882a593Smuzhiyun AC_CHECK_FUNCS([fcvt]) 39*4882a593Smuzhiyun+AC_CHECK_FUNCS([getifaddrs getauxval issetugid __secure_getenv]) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun AC_CHECK_FUNC([mkdtemp], [have_mkdtemp=yes]) 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun@@ -1063,10 +1064,13 @@ AC_PATH_PROG( 44*4882a593Smuzhiyun ### 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun AC_CHECK_HEADERS([crypt.h]) 47*4882a593Smuzhiyun+AC_CHECK_HEADERS([ifaddrs.h]) 48*4882a593Smuzhiyun AC_CHECK_HEADERS([inttypes.h]) 49*4882a593Smuzhiyun AC_CHECK_HEADERS([stdint.h]) 50*4882a593Smuzhiyun AC_CHECK_HEADERS([stdlib.h]) 51*4882a593Smuzhiyun AC_CHECK_HEADERS([wchar.h]) 52*4882a593Smuzhiyun+AC_CHECK_HEADERS([net/if.h]) 53*4882a593Smuzhiyun+AC_CHECK_HEADERS([sys/auxv.h]) 54*4882a593Smuzhiyun AC_CHECK_HEADERS([sys/inttypes.h]) 55*4882a593Smuzhiyun AC_CHECK_HEADERS([sys/io.h]) 56*4882a593Smuzhiyun AC_CHECK_HEADERS([sys/param.h]) # Required to make the sys/user.h check work correctly on FreeBSD 57*4882a593SmuzhiyunIndex: open-vm-tools/lib/misc/idLinux.c 58*4882a593Smuzhiyun=================================================================== 59*4882a593Smuzhiyun--- open-vm-tools.orig/lib/misc/idLinux.c 60*4882a593Smuzhiyun+++ open-vm-tools/lib/misc/idLinux.c 61*4882a593Smuzhiyun@@ -27,12 +27,9 @@ 62*4882a593Smuzhiyun #include <sys/syscall.h> 63*4882a593Smuzhiyun #include <string.h> 64*4882a593Smuzhiyun #include <unistd.h> 65*4882a593Smuzhiyun-#ifdef __linux__ 66*4882a593Smuzhiyun-#if defined(__GLIBC__) && \ 67*4882a593Smuzhiyun- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) 68*4882a593Smuzhiyun+#ifdef HAVE_SYS_AUXV_H 69*4882a593Smuzhiyun #include <sys/auxv.h> 70*4882a593Smuzhiyun #endif 71*4882a593Smuzhiyun-#endif 72*4882a593Smuzhiyun #ifdef __APPLE__ 73*4882a593Smuzhiyun #include <sys/socket.h> 74*4882a593Smuzhiyun #include <TargetConditionals.h> 75*4882a593Smuzhiyun@@ -997,31 +994,32 @@ Id_EndSuperUser(uid_t uid) // IN: 76*4882a593Smuzhiyun static Bool 77*4882a593Smuzhiyun IdIsSetUGid(void) 78*4882a593Smuzhiyun { 79*4882a593Smuzhiyun-#if defined(__ANDROID__) 80*4882a593Smuzhiyun- /* Android does not have a secure_getenv, so be conservative. */ 81*4882a593Smuzhiyun- return TRUE; 82*4882a593Smuzhiyun-#else 83*4882a593Smuzhiyun /* 84*4882a593Smuzhiyun * We use __secure_getenv, which returns NULL if the binary is 85*4882a593Smuzhiyun- * setuid or setgid. Alternatives include, 86*4882a593Smuzhiyun+ * setuid or setgid, when issetugid or getauxval(AT_SECURE) is not 87*4882a593Smuzhiyun+ * available. Alternatives include, 88*4882a593Smuzhiyun * 89*4882a593Smuzhiyun- * a) getauxval(AT_SECURE); not available until glibc 2.16. 90*4882a593Smuzhiyun- * b) __libc_enable_secure; may not be exported. 91*4882a593Smuzhiyun+ * a) issetugid(); not (yet?) available in glibc. 92*4882a593Smuzhiyun+ * b) getauxval(AT_SECURE); not available until glibc 2.16. 93*4882a593Smuzhiyun+ * c) __libc_enable_secure; may not be exported. 94*4882a593Smuzhiyun * 95*4882a593Smuzhiyun- * Use (a) when we are based on glibc 2.16, or newer. 96*4882a593Smuzhiyun+ * Use (b) when we are based on glibc 2.16, or newer. 97*4882a593Smuzhiyun */ 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun-#if defined(__GLIBC__) && \ 100*4882a593Smuzhiyun- (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) 101*4882a593Smuzhiyun+#if HAVE_ISSETUGID 102*4882a593Smuzhiyun+ return issetugid(); 103*4882a593Smuzhiyun+#elif HAVE_GETAUXVAL 104*4882a593Smuzhiyun return getauxval(AT_SECURE) != 0; 105*4882a593Smuzhiyun-#else 106*4882a593Smuzhiyun+#elif HAVE___SECURE_GETENV 107*4882a593Smuzhiyun static const char envName[] = "VMW_SETUGID_TEST"; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun if (setenv(envName, "1", TRUE) == -1) { 110*4882a593Smuzhiyun return TRUE; /* Conservative */ 111*4882a593Smuzhiyun } 112*4882a593Smuzhiyun return __secure_getenv(envName) == NULL; 113*4882a593Smuzhiyun-#endif 114*4882a593Smuzhiyun+#else 115*4882a593Smuzhiyun+ /* Android does not have a secure_getenv, so be conservative. */ 116*4882a593Smuzhiyun+ return TRUE; 117*4882a593Smuzhiyun #endif 118*4882a593Smuzhiyun } 119*4882a593Smuzhiyun #endif 120*4882a593SmuzhiyunIndex: open-vm-tools/lib/nicInfo/nicInfoPosix.c 121*4882a593Smuzhiyun=================================================================== 122*4882a593Smuzhiyun--- open-vm-tools.orig/lib/nicInfo/nicInfoPosix.c 123*4882a593Smuzhiyun+++ open-vm-tools/lib/nicInfo/nicInfoPosix.c 124*4882a593Smuzhiyun@@ -34,9 +34,13 @@ 125*4882a593Smuzhiyun #include <sys/socket.h> 126*4882a593Smuzhiyun #include <sys/stat.h> 127*4882a593Smuzhiyun #include <errno.h> 128*4882a593Smuzhiyun-#if defined(__FreeBSD__) || defined(__APPLE__) 129*4882a593Smuzhiyun+#if HAVE_SYS_SYSCTL_H 130*4882a593Smuzhiyun # include <sys/sysctl.h> 131*4882a593Smuzhiyun+#endif 132*4882a593Smuzhiyun+#if HAVE_IFADDRS_H 133*4882a593Smuzhiyun # include <ifaddrs.h> 134*4882a593Smuzhiyun+#endif 135*4882a593Smuzhiyun+#if HAVE_NET_IF_H 136*4882a593Smuzhiyun # include <net/if.h> 137*4882a593Smuzhiyun #endif 138*4882a593Smuzhiyun #ifndef NO_DNET 139*4882a593Smuzhiyun@@ -348,10 +352,7 @@ GuestInfoGetNicInfo(NicInfoV3 *nicInfo) 140*4882a593Smuzhiyun * 141*4882a593Smuzhiyun ****************************************************************************** 142*4882a593Smuzhiyun */ 143*4882a593Smuzhiyun-#if defined(__FreeBSD__) || \ 144*4882a593Smuzhiyun- defined(__APPLE__) || \ 145*4882a593Smuzhiyun- defined(USERWORLD) || \ 146*4882a593Smuzhiyun- (defined(__linux__) && defined(NO_DNET)) 147*4882a593Smuzhiyun+#if defined(NO_DNET) && defined(HAVE_GETIFADDRS) 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun char * 150*4882a593Smuzhiyun GuestInfoGetPrimaryIP(void) 151