Source: open-vm-tools Version: 2:8.8.0+2011.10.26-514583-1 Followup-For: Bug #612498
Hello, I managed to add preliminary support for kfreebsd to open-vm-tools. Placing attached patch '02-kfreebsd.patch' in debian/patches, adding the filename to debian/patches/series and adding 'libkvm-dev' to Build-Depends makes open-vm-tools build .deb files. What works: - vmtoolsd runs - virtual center recognizes the vm's hostname What does not work: - virtual center does not recognize the vm's ip address ('Failed to get nic info.' in /var/log/messages) - probably everything else Hopefully this patch can be used as a starter for full open-vm-tools support on kfreebsd. Robin -- System Information: Debian Release: wheezy/sid APT prefers testing APT policy: (500, 'testing') Architecture: kfreebsd-amd64 (x86_64) Kernel: kFreeBSD 8.2-1-amd64 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash
diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/configure.ac open-vm-tools-8.8.0+2011.10.26-514583/configure.ac --- open-vm-tools-8.8.0+2011.10.26-514583.orig/configure.ac 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/configure.ac 2011-11-18 08:38:14.000000000 +0000 @@ -130,6 +130,9 @@ [freebsd*]) os="freebsd" ;; + [kfreebsd*-gnu]) + os="kfreebsd-gnu" + ;; [solaris*]) os="solaris" ;; @@ -970,6 +973,23 @@ fi fi +if test "$os" = "kfreebsd-gnu"; then + LIBVMTOOLS_LIBADD="$LIBVMTOOLS_LIBADD -lkvm" + MODULES_DIR="$LINUXDIR/" + + MODULES="$MODULES vmmemctl" + MODULES="$MODULES vmxnet" + MODULES="$MODULES vmblock vmhgfs" + buildHgfsmounter=yes + + if test "$with_kernel_modules" = "yes"; then + echo "****************************************************************" + echo " You are building FreeBSD kernel modules. Make sure you use " + echo " 'make' to build open-vm-tools, and not GNU make ('gmake'). " + echo "****************************************************************" + fi +fi + if test "$os" = "solaris"; then LIB_IMPERSONATE_CPPFLAGS="$LIB_IMPERSONATE_CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" LIB_USER_CPPFLAGS="$LIB_USER_CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" @@ -1018,6 +1038,7 @@ AM_CONDITIONAL(SOLARIS, test "$os" = "solaris") AM_CONDITIONAL(FREEBSD, test "$os" = "freebsd") AM_CONDITIONAL(FREEBSD_CUSTOM_SYSDIR, test "$os" = "freebsd" -a -n "$SYSDIR") +AM_CONDITIONAL(KFREEBSD, test "$os" = "kfreebsd-gnu") AM_CONDITIONAL(THIRTY_TWO_BIT_USERSPACE, test "$userSpaceBitness" = "32") AM_CONDITIONAL(HAVE_X11, test "$have_x" = "yes") AM_CONDITIONAL(HAVE_ICU, test "$with_icu" = "yes") diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/hgfsmounter/hgfsmounter.c open-vm-tools-8.8.0+2011.10.26-514583/hgfsmounter/hgfsmounter.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/hgfsmounter/hgfsmounter.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/hgfsmounter/hgfsmounter.c 2011-11-18 08:38:10.000000000 +0000 @@ -36,7 +36,7 @@ # include <mntent.h> #endif -#if defined(__FreeBSD__) || defined(__APPLE__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) # include <sys/uio.h> # include <sys/param.h> @@ -64,7 +64,7 @@ # define MS_NOCLUSTERW MNT_NOCLUSTERW # define MS_REMOUNT MNT_RELOAD -# if defined(__FreeBSD__) +# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # define MS_NOATIME MNT_NOATIME # elif defined(__APPLE__) /* @@ -101,7 +101,7 @@ #include "hgfsmounter_version.h" /* XXX embed_version.h does not currently support Mach-O binaries (OS X). */ -#if defined(linux) || defined(__FreeBSD__) +#if defined(linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # include "embed_version.h" VM_EMBED_VERSION(HGFSMOUNTER_VERSION_STRING); #endif @@ -1114,7 +1114,7 @@ /* Go! */ #if defined(linux) mntRes = mount(shareName, mountPoint, HGFS_NAME, flags, &mountInfo); -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) { struct iovec iov[] = {{"fstype", sizeof("fstype")}, {HGFS_NAME, sizeof(HGFS_NAME)}, diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/file/fileIO.c open-vm-tools-8.8.0+2011.10.26-514583/lib/file/fileIO.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/file/fileIO.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/file/fileIO.c 2011-11-18 08:38:03.000000000 +0000 @@ -270,7 +270,7 @@ ASSERT(file); -#if !defined(__FreeBSD__) && !defined(sun) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) if (access & FILEIO_OPEN_LOCKED) { int err = 0; @@ -340,7 +340,7 @@ ASSERT(file); -#if !defined(__FreeBSD__) && !defined(sun) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) if (file->lockToken != NULL) { int err = 0; diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/file/fileLockPosix.c open-vm-tools-8.8.0+2011.10.26-514583/lib/file/fileLockPosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/file/fileLockPosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/file/fileLockPosix.c 2011-11-18 08:38:03.000000000 +0000 @@ -77,7 +77,7 @@ * into the log file. */ -#if !defined(__FreeBSD__) && !defined(sun) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) /* *---------------------------------------------------------------------- * diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/file/filePosix.c open-vm-tools-8.8.0+2011.10.26-514583/lib/file/filePosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/file/filePosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/file/filePosix.c 2011-11-18 08:38:03.000000000 +0000 @@ -24,7 +24,7 @@ #include <sys/types.h> /* Needed before sys/vfs.h with glibc 2.0 --hpreg */ -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # include <sys/param.h> # include <sys/mount.h> #else @@ -72,7 +72,7 @@ #include "unicodeOperations.h" -#if !defined(__FreeBSD__) && !defined(sun) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) #if !defined(__APPLE__) static char *FilePosixLookupMountPoint(char const *canPath, Bool *bind); #endif @@ -381,7 +381,7 @@ *---------------------------------------------------------------------- */ -#if !defined(__FreeBSD__) && !defined(sun) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) Bool File_IsRemote(ConstUnicode pathName) // IN: Path name { @@ -889,7 +889,7 @@ } -#if !defined(__FreeBSD__) && !defined(sun) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) /* *----------------------------------------------------------------------------- * @@ -1889,7 +1889,7 @@ return FALSE; } -#if defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) if ((stfs1.f_flags & MNT_LOCAL) && (stfs2.f_flags & MNT_LOCAL)) { return TRUE; } diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/hgfsHelper/hgfsHelperPosix.c open-vm-tools-8.8.0+2011.10.26-514583/lib/hgfsHelper/hgfsHelperPosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/hgfsHelper/hgfsHelperPosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/hgfsHelper/hgfsHelperPosix.c 2011-11-18 08:38:03.000000000 +0000 @@ -24,7 +24,7 @@ * */ -#if !defined __linux__ && !defined __FreeBSD__ && !defined sun && !defined __APPLE__ +#if !defined __linux__ && !defined __FreeBSD__ && !defined __FreeBSD_kernel__ && !defined sun && !defined __APPLE__ # error This file should not be compiled #endif @@ -65,7 +65,7 @@ Bool HgfsHlpr_QuerySharesDefaultRootPath(Unicode *hgfsRootPath) { -#if defined __FreeBSD__ +#if defined __FreeBSD__ || defined __FreeBSD_kernel__ return FALSE; #else ASSERT(hgfsRootPath != NULL); diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/hgfsServer/hgfsServerLinux.c open-vm-tools-8.8.0+2011.10.26-514583/lib/hgfsServer/hgfsServerLinux.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/hgfsServer/hgfsServerLinux.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/hgfsServer/hgfsServerLinux.c 2011-11-18 08:38:03.000000000 +0000 @@ -44,7 +44,7 @@ #include <sys/types.h> #include <dirent.h> -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # include <sys/param.h> #else # include <wchar.h> @@ -161,7 +161,7 @@ # endif } # define getdents getdents_linux -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #define getdents(fd, dirp, count) \ ({ \ long basep; \ diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/iovector.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/iovector.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/iovector.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/iovector.h 2011-11-18 08:38:03.000000000 +0000 @@ -32,7 +32,7 @@ /* * Ugly definition of struct iovec. */ -#if defined(__linux__) || defined(sun) || defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(sun) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include <sys/uio.h> // for struct iovec #else diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/mntinfo.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/mntinfo.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/mntinfo.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/mntinfo.h 2011-11-18 08:38:03.000000000 +0000 @@ -34,7 +34,7 @@ # include <limits.h> #elif defined(__linux__) # include <mntent.h> -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # include <sys/mount.h> #endif #include "posix.h" @@ -106,7 +106,7 @@ # define MNTINFO_FSTYPE(mnt) mnt->mnt_type # define MNTINFO_MNTPT(mnt) mnt->mnt_dir # define MNTINFO_MNT_IS_RO(mnt) (hasmntopt((mnt), "rw") == NULL) -#elif defined(__FreeBSD__) || defined(__APPLE__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) struct mntHandle { struct statfs *mountPoints; // array of mountpoints per getmntinfo(3) int numMountPoints; // number of elements in mntArray diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/sigPosixRegs.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/sigPosixRegs.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/sigPosixRegs.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/sigPosixRegs.h 2011-11-18 08:38:03.000000000 +0000 @@ -145,7 +145,7 @@ #define SC_ESP(uc) ((unsigned long) (uc)->uc_mcontext->ss.esp) #define SC_EIP(uc) ((unsigned long) (uc)->uc_mcontext->ss.eip) #endif -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #ifdef __x86_64__ #define SC_EAX(uc) ((unsigned long) (uc)->uc_mcontext.mc_rax) #define SC_EBX(uc) ((unsigned long) (uc)->uc_mcontext.mc_rbx) diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/su.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/su.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/su.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/su.h 2011-11-18 08:38:03.000000000 +0000 @@ -50,7 +50,7 @@ char const *localizedDescription, Bool showDialogIfNeeded); -#elif (defined(__linux__) || defined(sun) || defined(__FreeBSD__)) +#elif (defined(__linux__) || defined(sun) || defined(__FreeBSD__)|| defined(__FreeBSD_kernel__)) #include <sys/types.h> #include <unistd.h> diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/util.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/util.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/util.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/util.h 2011-11-18 08:38:03.000000000 +0000 @@ -50,7 +50,7 @@ /* * Define the Util_ThreadID type. */ -#if defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include <pthread.h> typedef pthread_t Util_ThreadID; #elif defined(_WIN32) diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/vmblock.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/vmblock.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/vmblock.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/vmblock.h 2011-11-18 08:38:03.000000000 +0000 @@ -148,7 +148,7 @@ # define VMBLOCK_DEVICE_MODE VMBLOCK_FUSE_DEVICE_MODE # define VMBLOCK_MOUNT_POINT VMBLOCK_FUSE_MOUNT_POINT -#elif defined(linux) +#elif defined(linux) || defined(__GLIBC__) # define VMBLOCK_ADD_FILEBLOCK 98 # define VMBLOCK_DEL_FILEBLOCK 99 # ifdef VMX86_DEVEL diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/vmblock_user.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/vmblock_user.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/vmblock_user.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/vmblock_user.h 2011-11-18 08:38:03.000000000 +0000 @@ -120,7 +120,7 @@ #define VMBLOCK_CONTROL(fd, op, path) VMBLOCK_CONTROL_FUSE(fd, op, path) -#elif defined(linux) +#elif defined(linux) || defined(__GLIBC__) static INLINE int VMBLOCK_CONTROL(int fd, int op, const char *path) diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/vm_product.h open-vm-tools-8.8.0+2011.10.26-514583/lib/include/vm_product.h --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/include/vm_product.h 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/include/vm_product.h 2011-11-18 08:38:03.000000000 +0000 @@ -584,6 +584,8 @@ # define PRODUCT_NAME_PLATFORM PRODUCT_NAME " for Windows" #elif defined(__FreeBSD__) # define PRODUCT_NAME_PLATFORM PRODUCT_NAME " for FreeBSD" +#elif defined(__FreeBSD_kernel__) +# define PRODUCT_NAME_PLATFORM PRODUCT_NAME " for kFreeBSD" #elif defined(sun) # define PRODUCT_NAME_PLATFORM PRODUCT_NAME " for Solaris" #elif defined(__APPLE__) diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/codesetOld.c open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/codesetOld.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/codesetOld.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/codesetOld.c 2011-11-18 08:38:03.000000000 +0000 @@ -634,7 +634,7 @@ { char *codeset; -#if defined(__linux__) +#if defined(__linux__) || defined (__GLIBC__) locale_t new = newlocale(LC_CTYPE_MASK, "", NULL); if (!new) { @@ -907,7 +907,7 @@ * change bufIn so a simple cast is safe. --plangdale */ -#ifdef __linux__ +#if defined __linux__ || defined __GLIBC__ status = iconv(cd, (char **)&bufIn, &sizeIn, &out, &outLeft); #else status = iconv(cd, &bufIn, &sizeIn, &out, &outLeft); diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/hostinfoPosix.c open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/hostinfoPosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/hostinfoPosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/hostinfoPosix.c 2011-11-18 08:38:03.000000000 +0000 @@ -41,7 +41,7 @@ #include <sys/systeminfo.h> #endif #include <sys/socket.h> -#if defined(__FreeBSD__) || defined(__APPLE__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) # include <sys/sysctl.h> #endif #if defined(__APPLE__) @@ -54,7 +54,7 @@ #include <mach/mach.h> #include <mach/mach_time.h> #include <sys/mman.h> -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #if !defined(RLIMIT_AS) # if defined(RLIMIT_VMEM) # define RLIMIT_AS RLIMIT_VMEM @@ -77,7 +77,7 @@ #endif #endif -#if defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include <paths.h> #endif @@ -3023,7 +3023,7 @@ #endif // ifndef __APPLE__ -#if defined(__linux__) || defined(__FreeBSD__) || defined(sun) +#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(sun) /* *----------------------------------------------------------------------------- * diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/idLinux.c open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/idLinux.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/idLinux.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/idLinux.c 2011-11-18 08:38:03.000000000 +0000 @@ -105,7 +105,7 @@ int Id_SetUid(uid_t euid) // IN: new euid { -#if defined(__FreeBSD__) || defined(sun) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(sun) return setuid(euid); #elif defined(linux) || defined __ANDROID__ if (uid32) { @@ -148,7 +148,7 @@ Warning("XXXMACOS: implement %s\n", __func__); return -1; -#elif defined(sun) || defined(__FreeBSD__) +#elif defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) return setgid(egid); #else if (uid32) { @@ -279,7 +279,7 @@ #if defined(__APPLE__) Warning("XXXMACOS: implement %s\n", __func__); return -1; -#elif defined(sun) || defined(__FreeBSD__) +#elif defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) return setreuid(uid, euid); #else if (uid32) { @@ -320,7 +320,7 @@ Id_SetREGid(gid_t gid, // IN: new gid gid_t egid) // IN: new effective gid { -#if defined(sun) || defined(__FreeBSD__) +#if defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) return setregid(gid, egid); #else if (uid32) { diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/posixPosix.c open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/posixPosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/posixPosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/posixPosix.c 2011-11-18 08:38:03.000000000 +0000 @@ -2791,7 +2791,7 @@ #if !defined(sun) // { -#if !defined(__APPLE__) && !defined(__FreeBSD__) // { +#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) // { /* *---------------------------------------------------------------------- * diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/util_misc.c open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/util_misc.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/misc/util_misc.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/misc/util_misc.c 2011-11-18 08:38:03.000000000 +0000 @@ -47,7 +47,7 @@ # include <pwd.h> #endif -#if defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include <pthread.h> #endif @@ -493,7 +493,7 @@ ASSERT(tid != (pid_t)-1); return tid; -#elif defined(__APPLE__) || defined(__FreeBSD__) +#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) ASSERT_ON_COMPILE(sizeof(Util_ThreadID) == sizeof(pthread_t)); return pthread_self(); diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/netUtil/netUtilLinux.c open-vm-tools-8.8.0+2011.10.26-514583/lib/netUtil/netUtilLinux.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/netUtil/netUtilLinux.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/netUtil/netUtilLinux.c 2011-11-18 08:38:03.000000000 +0000 @@ -31,7 +31,7 @@ #endif -#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(sun) && !defined(__APPLE__) +#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) && !defined(__APPLE__) # error This file should not be compiled #endif diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/procMgr/procMgrPosix.c open-vm-tools-8.8.0+2011.10.26-514583/lib/procMgr/procMgrPosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/procMgr/procMgrPosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/procMgr/procMgrPosix.c 2011-11-18 08:38:03.000000000 +0000 @@ -31,7 +31,7 @@ // pull in setresuid()/setresgid() if possible #define _GNU_SOURCE #include <unistd.h> -#if !defined(__FreeBSD__) && !defined(sun) && !defined(__APPLE__) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) && !defined(__APPLE__) #include <asm/param.h> #endif #if !defined(sun) && !defined(__APPLE__) diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/system/systemLinux.c open-vm-tools-8.8.0+2011.10.26-514583/lib/system/systemLinux.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/system/systemLinux.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/system/systemLinux.c 2011-11-18 08:38:03.000000000 +0000 @@ -26,7 +26,7 @@ * */ -#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(sun) && !defined(__APPLE__) +#if !defined(__linux__) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(sun) && !defined(__APPLE__) # error This file should not be compiled #endif @@ -183,7 +183,7 @@ { uint64 uptime = -1; -#ifdef __linux__ +#if defined __linux__ || defined __GLIBC__ { FILE *procStream; char *buf = NULL; diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/unicode/unicodeSimpleTypes.c open-vm-tools-8.8.0+2011.10.26-514583/lib/unicode/unicodeSimpleTypes.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/unicode/unicodeSimpleTypes.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/unicode/unicodeSimpleTypes.c 2011-11-18 08:38:03.000000000 +0000 @@ -2806,7 +2806,7 @@ * on lib/sync, so cheese it. */ while (1 == Atomic_ReadIfEqualWrite(&locked, 0, 1)) { -#if !defined(__FreeBSD__) +#if !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) usleep(250 * 1000); #endif } diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/wiper/wiperPosix.c open-vm-tools-8.8.0+2011.10.26-514583/lib/wiper/wiperPosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/lib/wiper/wiperPosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/lib/wiper/wiperPosix.c 2011-11-18 08:38:03.000000000 +0000 @@ -23,7 +23,7 @@ * */ -#if !defined(__linux__) && !defined(sun) && !defined(__FreeBSD__) && !defined(__APPLE__) +#if !defined(__linux__) && !defined(sun) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(__APPLE__) #error This file should not be compiled on this platform. #endif @@ -31,7 +31,7 @@ #include <sys/stat.h> #if defined(__linux__) || defined(sun) # include <sys/vfs.h> -#elif defined(__FreeBSD__) || defined(__APPLE__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) # include <sys/param.h> # include <sys/ucred.h> # include <sys/mount.h> @@ -72,7 +72,7 @@ #if defined(sun) || defined(__linux__) # define PROCFS "proc" -#elif defined(__FreeBSD__) || defined(__APPLE__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) # define PROCFS "procfs" #endif @@ -326,7 +326,7 @@ return FALSE; } -#elif defined(__FreeBSD__) /* } FreeBSD { */ +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) /* } FreeBSD { */ static Bool WiperIsDiskDevice(MNTINFO *mnt, // IN: file system being considered diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/scripts/kfreebsd-gnu/network open-vm-tools-8.8.0+2011.10.26-514583/scripts/kfreebsd-gnu/network --- open-vm-tools-8.8.0+2011.10.26-514583.orig/scripts/kfreebsd-gnu/network 1970-01-01 00:00:00.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/scripts/kfreebsd-gnu/network 2011-11-18 08:38:03.000000000 +0000 @@ -0,0 +1,298 @@ +#!/bin/sh +########################################################## +# Copyright (C) 2001-2010 VMware, Inc. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation version 2.1 and no later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public +# License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +########################################################## + + +# +# network (kFreeBSD-GNU) +# +# Using a combination of a system networking script, ifconfig, and ifup, +# attempt to release and renew DHCP leases upon receipt of suspend and resume +# events, respectively. +# + + +echo `date` ": Executing '$0'" +echo + +. `dirname "$0"`/../../statechange.subr + + +# +# find_networking_script -- +# +# Searches common kFreeBSD-GNU distro init/rc paths to find a singular network +# services script. +# +# Result: +# Returns a valid networking script path on success or "error" on failure. +# +# Side effects: +# None. +# + +find_networking_script() { + local script="error" + for dir in "/etc/init.d" "/sbin/init.d" "/etc" "/etc/rc.d" ; do + if [ -d "$dir/rc0.d" ] && + [ -d "$dir/rc1.d" ] && + [ -d "$dir/rc2.d" ] && + [ -d "$dir/rc3.d" ] && + [ -d "$dir/rc4.d" ] && + [ -d "$dir/rc5.d" ] && + [ -d "$dir/rc6.d" ]; then + + # Now find the appropriate networking script. + if [ -d "$dir/init.d" ]; then + if [ -x "$dir/init.d/network" ]; then + script="$dir/init.d/network" + elif [ -x "$dir/init.d/networking" ]; then + script="$dir/init.d/networking" + fi + else + if [ -x "$dir/network" ]; then + script="$dir/network" + elif [ -x "$dir/networking" ]; then + script="$dir/networking" + fi + fi + fi + done + + echo "$script" +} + + +# +# save_active_NIC_list -- +# +# Records a list of every active NIC to /var/run/vmware-active-nics. +# +# XXX What's the story on aliases? Should they still be included, or will +# they be recreated automatically upon resume? +# +# Results: +# $activeList has, one per line, a list of all active NICs. +# +# Side effects: +# None. +# + +save_active_NIC_list() { + >$activeList + + for nic in `ifconfig | awk '/^eth/ { print $1 }'`; do + ifconfig $nic | egrep -q '\bUP\b' && echo $nic >> $activeList + exitCode=`expr $exitCode \| $?` + done +} + + +# +# rescue_NIC -- +# +# For each NIC recorded in $activeList that is not currently "up", run +# "ifup $nic". +# +# Results: +# All downed NICs should be active. +# + +rescue_NIC() { + if [ -f "$activeList" ]; then + while read nic; do + if ifconfig $nic | egrep -q '\bUP\b'; then + echo `date` "[rescue_nic] $nic is already active." + else + echo `date` "[rescue_nic] activating $nic ..." + + ifup $nic + exitCode=`expr $exitCode \| $?` + fi + done < $activeList + + rm -f $activeList + fi +} + + +# +# TranquilizeNetworkManager -- +# +# Put the NetworkManager daemon to sleep (maybe). +# +# See http://projects.gnome.org/NetworkManager/developers/spec.html . +# +# Results: +# Sleep(true) request is sent to the NetworkManager D-Bus interface. +# +# Side effects: +# None. +# + +TranquilizeNetworkManager() +{ + # `which' may be a bit noisy, so we'll shush it. + dbusSend=`which dbus-send 2>/dev/null` + rc=$? + if [ $rc = 0 ]; then + # NetworkManager 0.8.0 + $dbusSend --system --print-reply \ + --dest=org.freedesktop.NetworkManager \ + /org/freedesktop/NetworkManager \ + org.freedesktop.NetworkManager.Enable boolean:false + rc=$? + if [ $rc = 0 ]; then + return $rc + fi + # NetworkManager 0.7.0 + $dbusSend --system --print-reply \ + --dest=org.freedesktop.NetworkManager \ + /org/freedesktop/NetworkManager \ + org.freedesktop.NetworkManager.Sleep boolean:true + rc=$? + if [ $rc = 0 ]; then + return $rc + fi + # NetworkManager 0.6 + $dbusSend --system --print-reply \ + --dest=org.freedesktop.NetworkManager \ + /org/freedesktop/NetworkManager \ + org.freedesktop.NetworkManager.sleep + rc=$? + fi + return $rc +} + + +# +# WakeNetworkManager -- +# +# Wake the NetworkManager daemon (maybe). +# +# See http://projects.gnome.org/NetworkManager/developers/spec.html . +# +# Results: +# Sleep(false)request is sent to the NetworkManager D-Bus interface. +# +# Side effects: +# None. +# + +WakeNetworkManager() +{ + # `which' may be a bit noisy, so we'll shush it. + dbusSend=`which dbus-send 2>/dev/null` + rc=$? + if [ $rc = 0 ]; then + # NetworkManager 0.8.0 + $dbusSend --system --print-reply \ + --dest=org.freedesktop.NetworkManager \ + /org/freedesktop/NetworkManager \ + org.freedesktop.NetworkManager.Enable boolean:true + rc=$? + if [ $rc = 0 ]; then + return $rc + fi + # NetworkManager 0.7.0 + $dbusSend --system --print-reply \ + --dest=org.freedesktop.NetworkManager \ + /org/freedesktop/NetworkManager \ + org.freedesktop.NetworkManager.Sleep boolean:false + rc=$? + if [ $rc = 0 ]; then + return $rc + fi + # NetworkManager 0.6 + $dbusSend --system --print-reply \ + --dest=org.freedesktop.NetworkManager \ + /org/freedesktop/NetworkManager \ + org.freedesktop.NetworkManager.wake + rc=$? + fi + return $rc +} + + +# +# main -- +# +# Main entry point. Perform some sanity checking, then map state change +# events to relevant networking operations. +# +# Results: +# See comment at top of file. +# + +main() { + exitCode=0 + activeList=/var/run/vmware-active-nics + + networkScript=`find_networking_script` + [ "$networkScript" != "error" ] || Panic "Cannot find system networking script." + + # XXX Are these really necessary? If so, we should have seen customer + # complaints by now. + which ifup >/dev/null 2>&1 || Panic "ifup not in search path." + which ifconfig >/dev/null 2>&1 || Panic "ifconfig not in search path." + + case "$1" in + poweron-vm) + rm -f $activeList + ;; + suspend-vm) + TranquilizeNetworkManager + exitCode=$? + if [ $exitCode != 0 ]; then + save_active_NIC_list + "$networkScript" stop + exitCode=$? + fi + ;; + resume-vm) + WakeNetworkManager + exitCode=$? + if [ $exitCode != 0 ]; then + # According to hfu, "/etc/init.d/networking restart" on Debian 5.0 + # may bring down ethernet interfaces tagged as "allow-hotplug" without + # bringing them back up. + # + # This is especially a problem when reverting to a live, running + # VM snapshot where an active NIC list hadn't yet been generated, + # resulting in sudden loss of an otherwise operational NIC. + # + # So, if the active list doesn't exist, assume we're coming back to + # a live snapshot and capture the current active list now for + # rescue later. + if [ ! -s $activeList ]; then + save_active_NIC_list + fi + # XXX Do we really want restart or is start sufficient? Like, would + # using start avoid the problem mentioned above? + "$networkScript" restart + rescue_NIC + exitCode=$? + fi + ;; + *) ;; + esac + + return $exitCode +} + +main "$@" diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/scripts/kfreebsd-gnu/pam.d/vmtoolsd open-vm-tools-8.8.0+2011.10.26-514583/scripts/kfreebsd-gnu/pam.d/vmtoolsd --- open-vm-tools-8.8.0+2011.10.26-514583.orig/scripts/kfreebsd-gnu/pam.d/vmtoolsd 1970-01-01 00:00:00.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/scripts/kfreebsd-gnu/pam.d/vmtoolsd 2011-11-18 08:38:03.000000000 +0000 @@ -0,0 +1,7 @@ +#%PAM-1.0 +auth sufficient pam_unix2.so nullok +auth sufficient pam_unix.so shadow nullok +auth required pam_unix_auth.so shadow nullok +account sufficient pam_unix2.so +account sufficient pam_unix.so +account required pam_unix_acct.so diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/dndcp/dnd/dndLinux.c open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/dndcp/dnd/dndLinux.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/dndcp/dnd/dndLinux.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/dndcp/dnd/dndLinux.c 2011-11-18 08:38:03.000000000 +0000 @@ -39,7 +39,7 @@ #include "util.h" #include "escape.h" #include "su.h" -#if defined(linux) || defined(sun) || defined(__FreeBSD__) +#if defined(linux) || defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include "vmblock_user.h" #include "mntinfo.h" #endif @@ -303,7 +303,7 @@ /* We need to make this suck less. */ -#if defined(linux) || defined(sun) || defined(__FreeBSD__) +#if defined(linux) || defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) /* *---------------------------------------------------------------------------- diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/guestInfo/getlib/guestInfoPosix.c open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/guestInfo/getlib/guestInfoPosix.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/guestInfo/getlib/guestInfoPosix.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/guestInfo/getlib/guestInfoPosix.c 2011-11-18 08:38:07.000000000 +0000 @@ -34,7 +34,7 @@ #include <sys/socket.h> #include <sys/stat.h> #include <errno.h> -#if defined(__FreeBSD__) || defined(__APPLE__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) # include <sys/sysctl.h> #endif #ifndef NO_DNET diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/Makefile.am open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/Makefile.am --- open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/Makefile.am 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/Makefile.am 2011-11-18 08:38:03.000000000 +0000 @@ -28,8 +28,6 @@ if HAVE_X11 SUBDIRS += resolutionSet endif -SUBDIRS += timeSync -SUBDIRS += vix SUBDIRS += vmbackup # diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/Makefile.in open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/Makefile.in --- open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/Makefile.in 2011-10-27 18:57:23.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/Makefile.in 2011-11-18 08:38:03.000000000 +0000 @@ -82,7 +82,7 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = desktopEvents dndcp guestInfo hgfsServer powerOps \ - resolutionSet timeSync vix vmbackup + resolutionSet vmbackup DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -295,7 +295,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = $(am__append_1) $(am__append_2) guestInfo hgfsServer \ - powerOps $(am__append_3) timeSync vix vmbackup + powerOps $(am__append_3) vmbackup all: all-recursive .SUFFIXES: diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/timeSync/Makefile.am open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/timeSync/Makefile.am --- open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/timeSync/Makefile.am 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/timeSync/Makefile.am 2011-11-18 08:38:03.000000000 +0000 @@ -39,6 +39,10 @@ libtimeSync_la_SOURCES += slewAdjtime.c libtimeSync_la_SOURCES += pllNone.c endif +if KFREEBSD +libtimeSync_la_SOURCES += slewAdjtime.c +libtimeSync_la_SOURCES += pllNone.c +endif if LINUX libtimeSync_la_SOURCES += slewLinux.c libtimeSync_la_SOURCES += pllLinux.c diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/timeSync/Makefile.in open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/timeSync/Makefile.in --- open-vm-tools-8.8.0+2011.10.26-514583.orig/services/plugins/timeSync/Makefile.in 2011-10-27 18:57:24.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/services/plugins/timeSync/Makefile.in 2011-11-18 08:38:03.000000000 +0000 @@ -53,7 +53,8 @@ host_triplet = @host@ @SOLARIS_TRUE@am__append_1 = slewAdjtime.c pllNone.c @FREEBSD_TRUE@am__append_2 = slewAdjtime.c pllNone.c -@LINUX_TRUE@am__append_3 = slewLinux.c pllLinux.c +@KFREEBSD_TRUE@am__append_3 = slewAdjtime.c pllNone.c +@LINUX_TRUE@am__append_4 = slewLinux.c pllLinux.c subdir = services/plugins/timeSync DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -96,11 +97,13 @@ @SOLARIS_TRUE@ libtimeSync_la-pllNone.lo @FREEBSD_TRUE@am__objects_2 = libtimeSync_la-slewAdjtime.lo \ @FREEBSD_TRUE@ libtimeSync_la-pllNone.lo -@LINUX_TRUE@am__objects_3 = libtimeSync_la-slewLinux.lo \ +@KFREEBSD_TRUE@am__objects_3 = libtimeSync_la-slewAdjtime.lo \ +@KFREEBSD_TRUE@ libtimeSync_la-pllNone.lo +@LINUX_TRUE@am__objects_4 = libtimeSync_la-slewLinux.lo \ @LINUX_TRUE@ libtimeSync_la-pllLinux.lo am_libtimeSync_la_OBJECTS = libtimeSync_la-timeSync.lo \ libtimeSync_la-timeSyncPosix.lo $(am__objects_1) \ - $(am__objects_2) $(am__objects_3) + $(am__objects_2) $(am__objects_3) $(am__objects_4) libtimeSync_la_OBJECTS = $(am_libtimeSync_la_OBJECTS) libtimeSync_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ @@ -314,7 +317,7 @@ libtimeSync_la_LDFLAGS = @PLUGIN_LDFLAGS@ libtimeSync_la_LIBADD = @VMTOOLS_LIBS@ libtimeSync_la_SOURCES = timeSync.c timeSyncPosix.c $(am__append_1) \ - $(am__append_2) $(am__append_3) + $(am__append_2) $(am__append_3) $(am__append_4) all: all-am .SUFFIXES: diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/tests/testVmblock/vmblocktest.c open-vm-tools-8.8.0+2011.10.26-514583/tests/testVmblock/vmblocktest.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/tests/testVmblock/vmblocktest.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/tests/testVmblock/vmblocktest.c 2011-11-18 08:38:03.000000000 +0000 @@ -24,7 +24,7 @@ * */ -#if !defined(linux) && !defined(sun) && !defined(__FreeBSD__) && !defined(vmblock_fuse) +#if !defined(linux) && !defined(sun) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(vmblock_fuse) # error "vmblocktest.c needs to be ported to your OS." #endif @@ -76,7 +76,7 @@ #define THREAD_LOG(fmt, args...) lprintf(" (%lx) " fmt, (unsigned long)pthread_self(), ## args) #define THREAD_ERROR(fmt, args...) lfprintf(stderr, " (%"FMTPID") " fmt, getpid(), ## args) -#if defined (linux) || defined(__FreeBSD__) +#if defined (linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # define os_thread_yield() sched_yield() #elif defined(sun) # define os_thread_yield() yield() diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/vmblockmounter/vmblockmounter.c open-vm-tools-8.8.0+2011.10.26-514583/vmblockmounter/vmblockmounter.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/vmblockmounter/vmblockmounter.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/vmblockmounter/vmblockmounter.c 2011-11-18 08:38:03.000000000 +0000 @@ -29,7 +29,7 @@ #include <ctype.h> #include <errno.h> #include <getopt.h> -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # include <sys/uio.h> # include <sys/param.h> #endif @@ -221,7 +221,7 @@ /* Go! */ #if defined(sun) mntRes = mount(sourceDir, mountPoint, MS_DATA, VMBLOCK_FS_NAME); -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) { struct iovec iov[] = { { .iov_base = "fstype", .iov_len = sizeof "fstype" }, diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/vmware-user-suid-wrapper/main.c open-vm-tools-8.8.0+2011.10.26-514583/vmware-user-suid-wrapper/main.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/vmware-user-suid-wrapper/main.c 2011-10-27 18:57:11.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/vmware-user-suid-wrapper/main.c 2011-11-18 08:38:03.000000000 +0000 @@ -28,7 +28,7 @@ * remove blocks in the blocking file system. */ -#if !defined(sun) && !defined(__FreeBSD__) && !defined(linux) +#if !defined(sun) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) && !defined(linux) # error This program is not supported on your platform. #endif diff -uNr open-vm-tools-8.8.0+2011.10.26-514583.orig/vmware-user-suid-wrapper/wrapper-kfreebsd-gnu.c open-vm-tools-8.8.0+2011.10.26-514583/vmware-user-suid-wrapper/wrapper-kfreebsd-gnu.c --- open-vm-tools-8.8.0+2011.10.26-514583.orig/vmware-user-suid-wrapper/wrapper-kfreebsd-gnu.c 1970-01-01 00:00:00.000000000 +0000 +++ open-vm-tools-8.8.0+2011.10.26-514583/vmware-user-suid-wrapper/wrapper-kfreebsd-gnu.c 2011-11-18 08:38:03.000000000 +0000 @@ -0,0 +1,136 @@ +/********************************************************* + * Copyright (C) 2007 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation version 2.1 and no later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + *********************************************************/ + +/* + * wrapper.c -- + * + * Platform specific code for the VMware User Agent setuid wrapper. + */ + + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "vmware.h" +#include "wrapper.h" + + +/* + * Global functions + */ + + +#ifdef USES_LOCATIONS_DB +/* + *----------------------------------------------------------------------------- + * + * BuildExecPath -- + * + * Determine & return path of vmware-user for use by execve(2). + * + * Results: + * TRUE on success, FALSE otherwise + * + * Side effects: + * None. + * + *----------------------------------------------------------------------------- + */ + +Bool +BuildExecPath(char *execPath, // OUT: Buffer to store executable's path + size_t execPathSize) // IN : size of execPath buffer +{ + char tmpPath[MAXPATHLEN]; + int execLen; + + /* + * The locations database is the only path that's fixed, and it contains the + * paths to all the other paths selected during Tools configuration. The + * locations database file is only writable by root, so we can trust it. + */ + if (!QueryLocationsDB(LOCATIONS_PATH, QUERY_BINDIR, tmpPath, sizeof tmpPath)) { + Error("could not obtain BINDIR\n"); + return FALSE; + } + + if (strlcat(tmpPath, + "/vmware-user-wrapper", sizeof tmpPath) >= sizeof tmpPath) { + Error("could not construct program filename\n"); + return FALSE; + } + + /* + * From readlink(2), "The readlink() system call does not append a NUL + * character to buf." (NB: This breaks if user ever replaces the symlink + * with the target.) + */ + if ((execLen = readlink(tmpPath, execPath, execPathSize - 1)) == -1) { + Error("could not resolve symlink: %s\n", strerror(errno)); + return FALSE; + } + + execPath[execLen] = '\0'; + + /* + * Now make sure that the target is actually part of our "trusted" + * directory. (Check that execPath has LIBDIR as a prefix and does + * not contain "..".) + */ + if (!QueryLocationsDB(LOCATIONS_PATH, QUERY_LIBDIR, tmpPath, + sizeof tmpPath)) { + Error("could not obtain LIBDIR\n"); + return FALSE; + } + + if ((strncmp(execPath, tmpPath, strlen(tmpPath)) != 0) || + (strstr(execPath, "..") != NULL)) { + Error("vmware-user path untrusted\n"); + return FALSE; + } + + return TRUE; +} +#endif // ifdef USES_LOCATIONS_DB + + +/* + *---------------------------------------------------------------------------- + * + * CompatExec -- + * + * Simple platform-dependent execve() wrapper. + * + * Results: + * False. + * + * Side effects: + * This function may not return. + * + *---------------------------------------------------------------------------- + */ + +Bool +CompatExec(const char *path, char * const argv[], char * const envp[]) +{ + execve(path, argv, envp); + return FALSE; +}