commit 6ffbf9d187613a911a3811f56667ba288c714e1f Author: Oliver Kurth Date: Fri Feb 17 13:26:23 2017 -0800 Exclude non-directory and non-existing paths during quiescing. commit 72a5cb442d7e61e33e5ca6fde37beeeb522a6ab9 Author: Oliver Kurth Date: Fri Feb 17 13:26:23 2017 -0800 Map certain PAM errors to VGAUTH_E_AUTHENTICATION_DENIED. commit 31ba85f8ef06b01adf7f32b1cc0d2c54b3b233f3 Author: Oliver Kurth Date: Thu Jan 19 19:22:59 2017 -0800 bump version to 10.1.5 commit b414574f336664dad7f69e35a4b340c131f89fce Author: Oliver Kurth Date: Wed Jan 18 17:28:20 2017 -0800 Update copyright year commit 2cacd294dc67600c171ecff95799b6c4d9266fdb Author: Oliver Kurth Date: Wed Jan 18 17:28:20 2017 -0800 Bump the VMware Tools update release to version 10.1.5 Change the "current" version for the VMware Tools update release to be 10.1.5. This bump is to allow versions numbers for hot patches which have been or may yet be issued before the update is GA. commit 9a42959c4ae8e98f8f1e107cb580c187462efdc5 Author: Oliver Kurth Date: Wed Jan 18 17:28:19 2017 -0800 Back-out previous Copyright update. commit 0066a3f7113c15f0513b1bb5cbaf2d495188d8b6 Author: Oliver Kurth Date: Wed Jan 18 17:28:18 2017 -0800 Update copyright year to 2017. commit 5af13991b0db6f957fb5e27dba027eedc4f5ca5a Author: Oliver Kurth Date: Wed Jan 18 17:28:16 2017 -0800 Update tools copyright to 2017 commit 492b8837995814b373a52e81199c7a25e66593f5 Author: Oliver Kurth Date: Wed Jan 18 17:28:16 2017 -0800 Change VMware Tools ISO mapping for centos and oraclelinux effective with 10.1.1 No impact to open-vm-tools. commit 4f1fa88b9e2ef125ea7411b95c00659e7053bbcd Author: Oliver Kurth Date: Wed Jan 18 17:28:16 2017 -0800 Add enhanced log messages and a few new log messages. commit 36171f6857afd94e15c2a5761683dcadebfafbd8 Author: Oliver Kurth Date: Wed Jan 18 17:28:16 2017 -0800 Thaw filesystems if the snapshot commit message to VMX fails commit 6ff97ba183f80f91a269b980cb384a45c4fbbab2 Author: Oliver Kurth Date: Wed Jan 18 17:28:16 2017 -0800 Set/update the VMware Tools version for the 10.1.1 release open-vm-tools-10.1.0 build 4449150 * Hgfs VMX: make the shares object use const strings The share name, path and tags strings are immutable and so should be const. They remain that way for the life time of the share. If a user changes any of these in the UI the share will be deleted and a new one created . This change makes them const strings. * Hgfs Linux Mounter: add noserverino mount option When Linux clients run against a Windows HGFS server they can get messed up with the host file IDs returned by the HGFS server when using them for inode numbers. This change allows the user to mount with an option to disable that and always generate inode numbers internally. * Hgfs Linux Server: clean up the mode permission initialization for creates For some reason that is unclear the mode permissions bit mask is set to all ones except for the permissions bits, which we then add as required. This is dangerous if any of the other bits become used in some way. Currently, they appear to be ignored and unused so we have not run into odd errors or behavior. This might change in the future. Now initialize the the mode permissions field to zero so that we only set the bits we want. * Log the proper exit code of powerops Scripts. Use WEXITSTATUS to extract the proper exit code after a child process is completed. * Remove nullok from pam configuration files. The guest operations should be not be allowed for a user with a blank password. Lets remove 'nullok' setting from vmtools / vgauth related pam configuration files. * asyncWebSocket: capture the websocket close status code correctly. This change fixes the following bugs while capturing the websocket close frame status code: 1. An incorrect 'if' condition prevented reading the websocket status code e.g. if (WebSocketDecodeBytesAvailable(s) > 4) now changed to if (s->websocket.frameSize >=2) 2. The status code itself was parsed incorrectly (only one byte was read instead of two) 3. If the closeframe was masked, it was never unmasked before reading the status code Also replaces HYBI prefix in variables to use WEB_SOCKET. This change still does not handle the following case: 1. The websocket close status (normally two bytes total) straddles decodeBuffer boundaries. It would need more investigation to prove if this can even happen. If it does happen, the close status would be interpreted as missing, which is incorrect but mostly harmless. 2. The last chunk of decoded data (without the close status code) does not get sent to the application when a websocket close frame is encountered. * atomics: Atomic_ReadIfEqualWriteBool fails on 32-bit compiles The Atomic_ReadIfEqualWriteBool is documented to return the value of the potential exchange from before the attempted operation. In the 32-bit case we're not doing that. Fix this. * MXUser Locks: Collect the locking activity tree only when requested Currently we always collect the locking activity tree and optionally report it. To lower overhead in an OBJ build, only collect and report it when enabled. * Tools: XML encoding "not quite right" Because we've always handled the XML coming out of tools with the special C XML routines it was never noticed that the escaping of characters was incorrect - not all of the XML sensitive characters were escaped. Fix this. The solution is to escape the escape character (already done) and all five of the XML sensitive characters. * pyVigor: Handle tools XML string escaped data Now that tools is properly passing back escaped strings to avoid any issues with standard/official XML, unescape the strings in the pyVigor guestOps support code. To easily facilitate this, a C callable wrapped function is created and used. * Hgfs Posix Server: return file allocation size for attributes Currently only the Windows HGFS server returns the allocation size of a file. This allows the clients to use accurate disk space sizes and help the guest enumerations calcuate disk space correctly and for stat and du type of operations to report correct information. Posix clients currently under report the file size disk allocation. Posix clients are being fixed in a separate change. Posix hosts should also return this information so that it can be used by clients in stat and du type of operations. The block information could be returned as a new field but that seems unnecessary since their already exists an allocation size field which goes unused for Posix HGFS servers, and can be calculated from the number of 512 byte blocks returned on a stat. * rmks: Send error codes to View Client via VMDB Until now, rmks error codes set with MKSRoleMain_Disconnected() were sent to the View client using process exit codes. The MKS team pointed out that exit codes are unreliably set and recommended using VMDB instead. This change: 1. Sends the error code to View client using VMDB instead of a process exit code. 2. Modifies crtbora to no longer retrieve the rmks process exit code. 3. Interprets the websocket close status code from Blast and converts it to a VDP error code for View client. 4. Handles normal, empty, and missing websocket status codes as the blast server currently only sends these. A subsequent change will convert the full range of websocket errors to corresponding VDP error codes. 5. Sends proper error code on rmks crash This new logic works for PCOIP, because the VDP plugin mechanism also uses MKSRoleMain_Disconnected to pass back error codes. * Add additional logging to debug grabbitmqproxy socket permission. Need add this log line to verify that the VSOCK was fixed later * fix up reload time constants #define in deci-seconds is just confusing * Don't claim we reloaded a non-existent config file VMTools_LoadConfig() is returning TRUE if there's no config file, which confuses its callers and makes them do extra work. Only return TRUE for a non-existent file if its the first time through or if we used to have a file. * Unicode: Begin retiring Unicode_Free Now that the Unicode and ConstUnicode data types have been retired, there is nothing special about Unicode_Free. Retire it. * tools: silence uninitialized variable warning * clean up debug & warning messages in guestInfo plugin * recategorize powerOps logging messages re-work logging messages in the powerOps plugin to provide better data by default. * Unicode: the opaque type is dead Remove the build options... * sizeof: more low hanging fruit Continue moving our code to the prefered style. * adjust logging noise for vmtoolsd change the logging levels for vmtoolsd so that messages come out at the proper level. * lib/file: File_CreateDirectory and friends needs to be consistent File_CreateDirectory fails if the directory already exists on POSIX but succeeds on Windows. Things need to be consistent. Make the Windows version behave like the POSIX version - fail if it already exists. If one want to create a directory but tolerate that it already exists we already have File_EnsureDirectoryEx for that. * Avoid logging when guest IO has been frozen. This change is part 1 of the change to cache log messages when guest has been quiesced. In this change, we avoid logging when guest IO has been frozen. In a subsequent change, i.e. part 2, we will add the code to cache and flush the log messages. * Add Config_GetDouble to lib/stubs. * Const-ify our APIs that use struct iovec Some of our APIs use "struct iovec *iov", which is not the expected semantics: readv/writev/preadv/pwritev take a "struct iovec const *iov" (see http://linux.die.net/man/2/preadv ). So const-ify these APIs. lib/public/iovector.h lib/misc/iovector.c IOV_WriteIovToBuf IOV_WriteBufToIov lib/public/fileIO.h lib/file/fileIOPosix.c lib/file/fileIOWin32.c FileIO_Readv FileIO_Writev FileIO_Preadv FileIO_Pwritev lib/public/aioMgr.h lib/aiomgr/aioMgr.c devices/disk/vmxAioMgr.c lib/aiomgr/simple.c lib/aiomgr/unbuf.c lib/aioManagers/aioGeneric.c lib/aioManagers/aioHttp.c lib/aioManagers/aioLinux.c lib/aioManagers/aioWin32Completion.c lib/blockListVmomi/sanMP.c lib/dmg/dmgAioMgr.c AIOMgr_Queue AIOMgrInterface.Queue * Modifications to random.c Instead of #ifdefs for each function a lot of #defines are used. Furthermore, #bora/lib/misc is used to leverage its SHA1 implementation. The file random_impl.h and the function RandomImplInit() are introduced. * HGFS Protocol: open reply add flags field and flags The HGFS open request has an allocation size that the Windows HGFS server can use to reserve disk space when creating a new file (or overwrite or supersede an existing file). Current implementation of the HGFS server does not make use of this allocation size field. Thus, when it does it should return a flag in the result to indicate the size was used. This allows clients to be sure if the HGFS server used the initial allocation size or not. If not, then the client will continue to do as it currently does, which is cache it locally, and override the values returned from the HGFS server. Future Windows clients, can then test the open reply flags and always use the allocation size returned from the HGFS server calls, and not override them with the local cached value. * Change default debugging level and location As part of the serviceability project, turn on file logging by default, increase the default log levels, and document what they mean and when they should be used. Be sure any fatal errors always make it to syslog/event viewer no matter how things are configured. Fix a bug where changing the logging filename was ignored if done while tools was running. * GuestStats: "MemTotal" is misleading What Windows and Linux do are quite different. What we need to do is create a new name - MemPhysUsable - to express what's really desired and then clean up the Windows, Linux and Vigor codes accordingly. Fix the Windows page in rate. * Gather new default Tools logs with vm-support Part of the serviceability work * Hgfs Linux Client: fix size of mount info Mount info structure is passed between the mounter and the kernel driver client. This structure does not have any guaranteed packing and no way to verify if something becomes misaligned. This change modifies the HgfsMountInfo to include a structure size field so that it can be verified by the kernel client with the HGFS mounter application. In this regard we also ensure the structure is packed so that we should always get the same size no matter what the packing is at the build time for the mounter and driver. * Tools: Use VmkuserCompat_ForkExec for ProcMgrStartProcess on ESXi When vmtoolsd for nested ESXi executes a program on behalf of the VIX API, it should use VmkuserCompat_ForkExec with a specific resource pool rather than the Posix standard fork & exec. * vSock: Prepare for FreeBSD The FreeBSD folks are interested in porting the vmci and vsock drivers for us. When that happens, our API will be available on that platform. In preparation for that, let's add support to our header for FreeBSD. For now we just add some stubs that return errors. This way, we can write code against the APIs now, as long as we handle the errors appropriately. * vm_atomic: fence Atomic_ReadAdd{16,32} on arm64. Atomic_ReadAdd{16,32} were missing DMBs before/after the ops. On arm64 we're emulating x86 memory ordering with atomics by placing these barriers conservatively, somehow these two ops missed out. * Clean up logging in vix plugin Make the logging more sane in the default (< debug) mode. 2 patterns should be used: - a g_debug() containing the op, user, and arguments to the op - a g_message() at the end containing the op and the return code The first could be considered sensitive information, so it will be visible only if logging is increaded from the default. The second will happen in the default scenario. Also exposed a global gImpersonatedUsername that tracks the currently impersonated user for use in debug. * Add toolbox-cmd support for logging configuration Add a 'logging' operation to toolbox-cmd to allow tools.conf logfile changes from the cmdline. Currently just adds 'level', but designed so it can be enhanced to allow additional logging changes. * Create namespacetool which should support on Linux and windows guest. * Blast failed to set resolution in the remote session This problem was caused by Blast switching to a new verison og Glib (2.42.2), that was broken, namely the x64 version of glib was missing g_get_user_name_utf8 export. This fix replaces the call to g_get_user_name_utf8 by GetUserNameA which allows for vmtools.dll and VMWareREsolutionSet.exe to load properly. * File_ListDirectory: Use Util_FreeStringList to clean up There are few explicit clean ups of File_ListDirectory left over from ancient times. Clean this up. * VMCI: Generate event in vmkon guest pause/unpause This change introduces a VMK only VMCI event that notifies VMCI clients when a guest is paused (quiesced) and unpaused. This is to allow VMK VMCI clients to release any pinned guest memory, and in general stop bothering the guest while the guest is paused. VMCI versions bumped only for VMK since this doesn't affect other platforms. * Str_Asprintf error checking Found a few places that really should check the return value. * Fix a compilation error in toolboxcmd-shrink.c with gcc 5.0.1. While building OVT for Fedora 22, hit a compilation error with gcc 5.0.1. This is not specific to open-vm-tools as such because we will hit it whenever we switch to new compiler for internal build too. And, there is some redundant code here. ShrinkGetMountPoints() function also calls ShrinkGetWiperState() and handles the WIPER_UNAVAILABLE and WIPER_DISABLED cases. So, this call to ShrinkGetWiperState() is redundant because wiper state would be always WIPER_ENABLED at this line. * Dictionary: First pass at cleaning up the parameter descriptions We're adding static analysis of functions so the IN/OUT/OPT for each parameter had better be correct. Clean up the low hanging fruit now so we can get to the good stuff faster. This is explicitly not being complete as we are going to the dictionary code to test the detection in the static analyzer. Later changes will clean up the detected issues. * Vigor: function parameter comments IN/OUT/OPT Touch a few places in the online code, cleaning up a few things. This is not intended to be definitive, just to cut down early, excess noise when static analysis kicks in. Futher changes will finish up the job. * lib/file: remove File_Poll* No uses of this code for a long time. Remove it. * Fix the compiler check and include mul64.h in open-vm-tools. CLN 2699687 introduced a compiler version check and CLN 2700663 introduced a new header file mul64.h. The compiler check was intended to be >= GCC 4.4, but it was insisting on both major and minor version of GCC to be >= 4. So, it was breaking on Fedora 22 that has GCC 5.1.1 and for a community user building OVT with GCC 4.3. For old compilers we need to provide mul64.h, so include it in open-vm-tools. * publish tools version and install type This change consists of 3 parts: For tools: - publish version even when installed from OSPs or open-vm-tools (no longer use MAX_INT as the version) - along with the version, publish the install type For vmx: - accept tools install type from tools, and set tools VersionStatus to TOOLS_STATUS_UNMANAGED in case the install type is OSP or OVT - save install type to disk - publish install type in vigor For hostd: - publish install type in vim/vmodl * Improve function header comments (IN/OUT/OPT) As we're looking into static code coverage a few include files have can be cleaned up to reduce the noise, making it easy to see real issues and find bugs. * IN/OUT/OPT: line things up for decorating Get ready for adding the necessary argument descriptions for static code coverage. * Print a newline after the Wipe operation is done. After the wiper operations is completd, the terminal prompt is printed right after 'Progress' bar and it doesn't look good. Print a newline on the console after the wipe operation is done. * Uniformly refer to "open-vm-tools" instead of other variants, such as "Open VM Tools". We are standardizing on "open-vm-tools". There's a bonus fix for a typo in an error message in verify_tools.py. The other changes are all to comments or README files. * Add "PANIC: " prefix to Panic This change adds a standard "PANIC: " prefix to vmx and lib/panic panics, and upgrades the vmx panic to the "Panic" log level. I'm doing this in an effort to help automated scripts determine what the Panic message was from a vmx crash, but it's also nice for developers when reading log files. (The RemoteMKS did this a few years ago, and it's been a nice convenience.) * open-vm-tools: fixes to build on FreeBSD 10 This change includes various fixes to make open-vm-tools build on FreeBSD. Prerequesites: install gcc48 with the command pkg install gcc Install build dependencies: glib libdnet libXinerama libXrandr gtk2 gtkmm24 Instructions for building: autoreconf -i --force env CC=gcc48 CFLAGS=-Wl,-rpath=/usr/local/lib/gcc48 CPPFLAGS="-I/usr/local/include/" LIBS="-L/usr/local/lib" ./configure --without-kernel-modules --without-xmlsecurity --without-icu --disable-vgauth --disable-grabbitmqproxy --disable-deploypkg make - disable vsock for OSes other than Linux - define CheckSanity only ifdef VMX86_DEBUG - make build of hgfsUriPosix depend on having gtkmm, and enable on FreeBSD - xferlogs.c does not need wchar.h * Plumb VMware Photon (container OS) Add VMware Photon as a guest. It is plumbed as a full guest (not an alias) so at all times, now and in the future, it always shows up as "VMware Photon" - not as something generic underneath. The host info code expects that the Photon team will provide an "/etc/lsb-release" file with the appropriate contents therein. We will make any necessary agreeing changes in a later change. The necessary fields may be found in lsbFields array in the lib/misc/hostinfoPosix.c file. * Disable the tools start up time sync if the guest clock is running faster. When the guest clock is running faster, and when guest reboot, some service may stuck due to the time get moved backwards by the tools time sync plugin. Making the entire guest to hang. The problem is very tricky to fix. Having the tools start up script wait for the time sync to complete shall not work well in the newer guest releases where the services are all started up in parallel as much possible. There are also situations where guest has NTP set up while the host does not causing a ping pong effects between the tools time sync and the NTP time sync. The main purpose of the time sync is to prevent the guest from running behind. So if the guest is faster, we can afford not to sync it. This change disable the tools start up time sync if the guest clock is faster than the host. * File_CopyFromNameToName: reduce to File_Copy The 3rd parameter to File_CopyFromNameToName (dstDispose) was "magic", several raw integer values selected the behavior. This has been the behavior for a Very Long Time. Sometime since then, we got File_Copy which takes a Bool that does exactly the same thing, but without magic numbers. Wholesale replace: File_CopyFromNameToName -> File_Copy File_CopyFromFdToName -> (no remaining callsites) All mappings are mechanical (1->TRUE, 2->FALSE). Done by hand, so do please double-check during review. OpenGrok shows this is all mentiones of these function names (minus some dead code). Two cases in apps/modconfig were changed due to the code appearing to be pre-existing buggy (an unlinked / nonexistent file should not be clobbered). * Use the if_nametoindex() from libc to replace private NetUtil_GetIfIndex(). Replace the private interface name to index function with if_nametoindex() from libc. The if_nametoindex() will try all the possible protocols to get a socket handle to retrieve the interface index. * Use gcc's _Static_assert for ASSERT_ON_COMPILE Since version 4.6, gcc has supported _Static_assert, regardless of the -std option. This generates better error messages than our existing ASSERT_ON_COMPILE macro. * Initial Branch of CAF code into vmtools branch * Merg in CAF changes Change 3592033 on 2015/05/27 by dmathews@dmathews_cafdev_vmtools 'Enhance the install.sh a bit Q' * Add some symbolic links to SOs on install * lib/file: FileIO_Close* error handling is inconsistent Make FileIO_Close* return a FileIOResult, just like FileIO_Open, and adjust the code that tests appropriatedly. * Tools upgrade always regenerates server key and certificate files. Modify vmtools installer and guest proxy tool to enable users to preserve guest proxy data during uninstallation and regenerate server key and certificate files during installation. Move guest proxy data creation and destruction from installer to proxy tool. * Caching support for log messages when guest IO is frozen. This change is part 2 of adding caching support for log messages when guest filesystem has been quiesced. When guest filesystem is quiesced we can't log messages to log files. When we are suspended log IO mode, we start caching formatted log messages with required log configuration in an array. We cache a max of 4K log messages when guest is in quiesced state. The cached log messages are flushed using appropriate log handlers when log IO is resumed. Caching log configuration at the time of quiescing is fine because log configuration can't be changed in quiesced state anyway. In order to control (including disabling log caching), we also have a tools.conf switch maxCacheEntries (default 4K). tools-for-esxi builds with glib-2.16.4 which does not provide g_ptr_array_set_free_func interface. Tools build uses glib-2.24.2. Talked to Etienne, ESXi ships with glib 2.26.0 built as cayman_glib. I was able to bump glib version for tools-for-esxi to match with Tools build, but then I hit issues with FreeBSD build which is also using some ancient version of glib. For now, I have given up on bumping glib at the moment and avoid calling the missing glib function g_ptr_array_set_free_func. * Added a missing break statement. This was reported from the community: https://github.com/vmware/open-vm-tools/issues/25 * Initial CAF vmtools build integration * Porting of the guest proxy cert tool to Windows (Part 1) Ported most of the SSL functionality to Windows. Fix the make files. Compiled and run successfuly on Windows. Resolved the OPENSSL_Applink error. See http://stackoverflow.com/questions/16125905/ssl-no-openssl-applink Fork off the implementation that requires Windows native API calls. Those implementations shall be filled in in Part2. * CAF - Preserve config on upgrade * Log the message about caching correctly. When maxCacheEntries is set to 0, caching is disabled. We need to log it correctly. * lib/log: allow more than one custom output This is done a way that is minimally invasive into our existing codes. This also makes the custom output more similar to the other outputs in that there is now a way to specify a unique name for each instance. * vgauth - add a -h option add a -h option, even though it shouldn't be run from a cmdline. * lib/log: provide a function that handles common product info issues Refactor the simple, default product info setting code into an accessible routine to make Log Facility users life easier. * lib/log: handle a new init with function It can use the new product state setter too... * lib/file: FileIO_Sync return value cleanup The FileIO_Sync usage is inconsistent with the rest of FileIO - return int rather than FileIOResult. * FileIO_IsSuccess: clean up some code (and fix a bug) * Hgfs Linux Installer: add HGFS FUSE mount capability Running the Linux tar installer for tools there are 2 HGFS clients which can be installed and mounted to provide file sharing between the host and the guest. The existing Linux kernel mode client and the FUSE client. This change adds the checks to decide which HGFS client to use and install. Which HGFS client to install is decided using the Linux kernel version, and 4.0.0 is the current latest version used if HGFS FUSE is supported tests if the Linux VM has the FUSE components installed or not. The capability of the HGFS FUSE client to run (by default) is done by the HGFS FUSE client itself running it with -e or --enabled argument. This performs a system compability check and returns 0 = success system is compatible i.e., enabled by default, 1 = Linux OS version is not supported for HGFS FUSE client older than 4.0.0 2 = Linux OS is missing FUSE components and the user should install them. For 0 or success the installer willl install the HGFS FUSE client by default and mount the HGFS shares at the usual location of /mnt/hgfs For 1 result the installer will install the legacy kernel version. For 2 the installer outputs a message for the user recommending installing the FUSE packages to enable the feature. The VMware tools start up scripts also run the HGFS FUSE binary to determine the current system compatibility and will start and mount the HGFS FUSE client for 0 returned as above. Otherwise, the legacy kernel driver will be started and mounted. (Assuming HGFS client is needed.) The VIX RPC callback in the vmtools daemon called when the UI enables shared folders to perform the HGFS mount now also runs the HGFS FUSE binary to determine whether it should mount using the HGFS FUSE client or the legacy kernel driver. It also determines if the mount is needed checking for the expected HGFS client mount from the mtab entries. Lastly, the user can mount the FUSE client manually even if the system compatibility checks for default use fail. It just will not work with the UI enable or disable of the feature or across reboots for those cases. * Perform Linux quiescing in a separate thread. When guest is doing IO, OPEN and FIFREEZE calls might take longer than expected. OPEN could take long even when it is a network mount point (NFS), though it is no longer applicable after fix for bug 1206486. In order to free up the main thread for processing other important messages like ping, we run the freeze steps in a separate thread. The new thread for freeze modifies currentOp in gBackupState which is also accessed by the AsyncCallback driving the state machine (run by main thread). Also, according to a comment in vm_atomic.h, gcc might generate two instructions for writing a 64-bit value. Therefore, we have opLock mutex to protect access to currentOp and related fields. Having a separate thread requires tracking freeze status and adding a new state VMBACKUP_MSTATE_SYNC_FREEZE_WAIT to vmbackup state machine. Freeze status is tracked as VmBackupFreezeStatus. This change is mostly Linux specific because the bug was found on Linux and a major issue is to enforce Windows threading apartments. When enabled for Windows same code generates RPC_E_WRONG_THREAD because CoCreateInstance is created by a different (main) thread than submitTask. Refer http://blogs.msdn.com/b/larryosterman/archive/2005/08/25/456344.aspx. Fixing this for Windows will require major code re-org and probably not worth it right now. While there, improve some log messages and add few new log messages for future use. * Asyncsocket: Fix DoOneMsg ref count leak and other bugs There a few issues with AsyncSocket_DoOneMsg: - The poll callback removal is specific to regular socket, and does not remove any real-time callback that may have been registered. - When using with IVmdbPoll, it would leak an ref when the function is called within an asyncsocket error handler being called from the recv callback. In that case AsyncSocketIPollRemove would not decrement the ref count, but the subsequent AsyncSocketIPollAdd would increment, resulting in an imbalance. The fix is to not add the callback in the error case. - The recv callback can also be canceled if FillRecvBuffer fires the client callback, so we need to check for that. * Stop caching procState for Posix guests. The child process' state for StartProgramInGuest is cached in memory for 5 mins. procState holds a FD in case of Posix. FDs are limited per process (usually 1024 by default). Therefore, holding on to open FDs in cache could be problematic if there are frequent calls to StartProgramInGuest, as that would make vmtoolsd run out of FDs. Holding on to procState is required only for Windows to keep Windows from reusing PIDs, however, this is not required in case of Posix. Stop caching procState for the child processes that are no longer running in case of Posix which would automatically take care of closing the FD. * Tools Vix Plugin: fix mount call potential security issue The Vix plugin processes the HGFS mount request when the user enables shared folders feature from the UI. For Linux guests only, this results in a system call to mount. However, no path is specified and it could pick up any mount in the root system path. We fix this by explicitly checking for the system mount which resides in either "/bin" for example in the case of Ubuntu, or "/usr/bin" in the case of SUSE. * lib/file: Posix File_WalkDirectoryNext incorrect The Posix File_WalkDirectoryNext header documentation is incorrect. It returns a directory entry, not a full path. The Windows and Posix implementations of File_WalkDirectory* and File_ListDirectory all behave identically - they return directory contents, not full paths. * Add more logging around AsyncSocket Flushing. * Tools Vix Plugin: fix fuse mount arguments list * Change default sampling rate for guest stats to 20 seconds. Add a new poll interval guestinfo.stats-interval with default value of 20 seconds. GuestStats follow this interval now and rest of the GuestInfo follows the existing guestinfo.poll-interval with old default value of 30 seconds. Now, users can disable GuestStats by setting guestinfo.stats-interval=0, so guestinfo.disable-perf-mon is a redundant configuration. However, we need to support it for being compatible with old tools configuration as this alone is not a big enough reason to upgrade the tools config. VC and layers above use 20 seconds interval for sampling performance stats. The current default interval for guestInfo leads to a sampling error of 30%. In order to avoid sampling errors we have few choices, change the current default or add a separate interval for guest stats. We choose latter because we don't want to increasing reporting frequency for guestInfo in general and thereby increase unnecessary load on overall system. Also added a kill switch "guestinfo.stats.enabled" (default TRUE) in VMX to disable guest stats. When this config is set to FALSE, treat the guest stats as v1 to updating vmkernel, but don't process the extendable part of the payload. There was a typo bug in memAvailable calculations on Linux. It was using lowWaterMark->value where it should have been lowWaterMarkValue. * atomics: add arm64 implementation for Atomic_Bool Straight forward Atomic_Bool support for arm64 * Port guest proxy cert tool to Windows (Part 4 and Final) Added code to check for the super user privileges. Added an verbose option to enable logging if the user needs to. * Fixed typo in namespace command name from "namespace-get-events" to "namespace-get-event". Added fflush for stdout and stderror. * Include cstring to avoid 'memset not in scope' error. Under a specific build environment (SUSE SLED 11 SP4), it fails to compile open-vm-tools source codes because cstring is not included to define the memset function prototype. * Add additional logging to help debug TCLO rpc timeout It is going to be very useful to dump the content of the TCLO RPC requests. Also we should also need to log the empty message periodically so that we can be sure that the tools side is checking the TCLO RPC in time. * GOS Table: Add asianux7-64 Yet another asianux release... In this case we had gone ahead and covered a future version 5 release and now discover that they renamed it version 7. We keep the 5 entries so existing VMs run but all front facing stuff is now version 7. * Make mouse switchable between VMW0003 and PNP0F13 * Guest OS: trivial clean up The entries for OTHER should be together. * Help with tools uninstall removal of caf directories * Virtualize most of the AsyncSocket_* public member functions in vmcore-main. - Exceptions to this approach are AysncSocket_GetID and AsyncSocket_SetErrorFn APIs. * GuestOS: Future proof Linux version identification When we encounter a Linux newer than the code knows about we return a guestOS string that is the latest known to code along with its appropriate description. This is very future proof. Change the Linux ID code to return a description string which is dynamically created from the major/minor release number of the Linux - return "Other Linux x.y kernel". This makes the Linux ID code in sync with the Solaris and Windows codes which perform the equivalent operations. Towards this end, the "front facing" descriptions for Linux 3.x are updated to "3.x or later". If a newer Linux comes along that needs special treatment, the front facing string will be changed to "3.x-a.b" and the new Linux will get its own string. This change makes Linux 4.x "just fall out". We really do not care what the guest OS string is within the VMX file, only that it is correct for the guest to be run. * Fast UTF8 validation We validate UTF8 strings using the ICU or older CodeSet routines. These paths are correct but have somewhat high overhead. Encorporate an optimized, high speed UTF8 validator. The optimized, high speed UTF8 validator is added as a separate file within lib/misc so it can be used throughout our source base with minimal interactions. By name, it is part of the CodeSet API. A Unicode library wrapper function for the CodeSet function is also included... some may find this useful routine more easily this way. * asyncsocket: add AsyncSocket_SetCloseOptions() This is the first of a two-part change to: - enable asyncWebSocket::close to send a websocket close frame per RFC-6455 and flush it out before closing the socket, and - enable a websocket client to optionally wait asynchronously until the remote side cleanly shuts down the connection in response to receiving a close frame. AsyncSocket_SetCloseOptions() adds the following optional behaviors when AsyncSocket_Close() is called: 1. If flushEnabledMaxWaitMsec is set, AsyncSocket_Close() will synchronously call AsyncSocket_Flush() until all outgoing data are sent over the wire. 2. If closeCb is set, the callback will fire when AsyncSocket_Close() has closed the socket. For the asyncWebSocket case: Option #1 allows the application to synchronously wait for the websocket close frame to get flushed out. Option #2 allows the application to asynchronously wait for the websocket close frame reply before closing the socket. * Let the vmtools uninstall remove some paths * Remove some log files that CAF put into it's bin dir * Implement a PCG random number generator PCG is a new / fast random number generator that looks pretty good. Best part: it only needs 64 bits of state storage normally. * Coverity fixes for possible use_after_free, double_free and double_close. * Random_FastSeed: take explicit seed Make the seed be explicit instead of implicitly 0. * Replace global gLoggingStopped with thread private LogState. Logger is not a global object, so using a logger level lock to protect global variable gLoggingStopped does not help. This was not an issue before because Toolsd was pretty much single threaded. This change does two things: 1. Replace global gLoggingStopped with thread private LogState. 2. Keep the existing lock in vmx logger to protect the logger itself from the scenario of different threads logging to same domain (=> same logger being used by multiple callers) at the same time. * Window 10 Server now has an official name - 2016 * fix vgauth logging defaults more servicability work. make vgauth use /var/log like toolsd * AsyncSocket - Parsing updated websocket header field. Additional logs. Parse updated websocket header field for e2e port and pass it to proxy API. Additional log messages for better debug information. * ASYNC-SOCKET: Fix the logic to throw away buffers that we failed to send. AsyncSocketSendSocket appends a buffer to the sendBufList and tries to send it out. If the send fails, there is logic to remove it from the list but it was comparing the head of the list to see if it has changed while we actually appended the buffer to the tail of the list. This results in the failed buffer lingering in the list and upon an immediate asynSocketClose, the callback associated with the failed buffer would fire. * Add ProductState_GetConfigName, make W32UtilGetCommonAppDataPath use it Add ProductState_{Set,Get}ConfigName functions that programs can use to explicitly specify the product name for configuration files. * Don't sort compatible product names completely lexically (CUI) Add internal sorting keys to use instead. This also allows us to sort products alphabetically but to sort versions in decreasing order. * Rename MsgList_ToString to MsgList_ToEnglishString MsgList_ToString does not perform localization. This is confusing. Even though its function comment says so, we should just make the function name more descriptive. * Fix error messages in CAF install.sh script * Add usrsctp to AsyncProxySocket. Remove unused variable which prevents compile with -Werror. Fix scons build breakage. * Skip freezing autofs mounts. It's possible that some autofs maps entry become invalid over time. So, trying to freeze such invalid entries could lead quiesce snapshot to be failed. * Windows named pipe server impl in bora/lib This code adds the server creation functinality for named pipes in asyncsocket library. It exposes the AsyncSocket_CreateNamedPipe function which creates a named pipe and passes a valid AsyncSocket object to the user. Also changed/added a few other functions to make it work. Added an accept function that gets called when a new connection request comes in. Added needed functions for Closing the named pipe on cleanup. The internal accept callback function creates a new AsyncSocket object, swaps the HANDLE object of the new AsyncSocket object with the older object and returns to the client the new AsyncSocket object(handle is swapped as the connection is associated with the HANDLE). The older asyncsocket object is put to listen mode again. * Fix the params passed to accept SSL callback function The clientData passed to AsyncSocketSslAcceptCallback is really just the asock structure. That is different from the asock->clientData which is expected to be passed to sslAcceptFn(). The current callers of AsyncSocket_StartSslAccept() don't use the clientData field in CB, which is probably why they never had an issue. * Avoid warning message when logging group is missing. When tools.conf is not around, g_key_file_get_integer() returns G_KEY_FILE_ERROR_GROUP_NOT_FOUND, so a check for G_KEY_FILE_ERROR_KEY_NOT_FOUND error alone is not sufficient. Missing error check was leading to an unnecessary warning in the system logs whenever service was started with no tools.conf. * AsyncSocket/SSL: Add APIs to do connect SSL asynchronously. Currently AsyncSocket_ConnectSSL is a synchronous API. VRDMA backend needs to initiate SSL connections from VMX which have to be asynchronous. There are already APIs in ssl.h/asyncsocket.h for accepting SSL connections asynchronously. This change adds new functions to do SSL connect asynchronously. The APIs are very similar to AcceptSSL APIs (SSL_SetupAcceptWithContext, SSL_TryCompleteAccept and AsyncSocket_StartSslAccept). * Make sure a timeout source exists when the polling interval is unchanged. TweakGatherLoop previously returned without creating a timeout source if the polling interval had not changed. That's fine if a timeout source already exists, but that may not always be the case. To address that possibility, the code has been modified to check whether there is a timeout source before checking whether the polling interval has changed. * Hgfs Server: add a common function for shares access check Previously this function was duplicated and placed in VMX and tools policy code. This leads to the Hgfs Server library calling directly into the VMX and tools service. Furthermore, the function does not need to reside in the policy code as it only relies on the arguments passed and uses definitions defined in the Hgfs protocol header. This change adds the function into the hgfs server library. This simplifies the tools build of the server policy code as it will not need to duplicate the function now and so is removed. The host server policy will be updated separately. * Hgfs Server VMX: replace the check mode for a share This removes the other duplicated policy function to check the shares access mode. It is now replaced with a call into the Hgfs server share access check funciton. * Define int128 and uint128 in vm_basic_types.h * nrandom: Add raw SHA1 APIs and use Intel's HWRNG if available Add support for RDRAND and RDSEED. Using opcode for RDSEED to work around that our GNU assembler doesn't recognize the 'rdseed' instruction yet. Adjust sha1.c and thereby fix extract_buf() in native random driver. * The random driver doesn't use the "full" SHA1 algorithm (no padding, no variable length messages) * It sets the initial state if RDRAND is supported and only transforms block-wise * To have the same behavior (omitting the prepare phase) in ESXi we add SHA1RawInit() and SHA1RawTransformBlocks() * open-vm-tools: use top_srcdir instead of top_builddir for include paths With autoconfed packages, it's generally possible to build in another directory than the source directory. For example, you can do: # tar zxf pkg-1.2.tar.gz # cd pkg-1.2 # mkdir build && cd build # ../configure && make The advantage is that it's very easy to clean up, just remove the build dir. However, the feature was broken in open-vm-tools because in some places $top_builddir was used instead of $top_srddir. This change fixes that. * Change StrUtil_StrToInt to reject empty strings as invalid. StrUtil_StrToInt(&out, ""); used to return true for success, and populate `out` with zero. Now returns false. (As listed in the documentation, `out` is undefined if the function fails.) * Refactoring of AsyncProxySocket code Refactoring of AsyncProxySocket code for better readability. Mainly renamed direct socket to primary socket and proxy socket to secondary socket. * Hgfs: move the file type from the protocol to the hgfs public header Since the file type is exposed to the DnD code it makes sense to move it to the public hgfs header alongside other publicly exposed types such as the open mode too. This allows the DnD code to not include the Hgfs protocol header directly. Longer term it would be great if the DnD code minimised the exposure to this type using DnD wrapper functions mapping to its own internal type. This would allow later removal of exposing the Hgfs type completely with minimal impact. * Fix timestamp check The timestamp check math was broken for NotOnOrAfter, and if the lifetime of the token was long enough, it would fail a valid token. Do some cleanup to make it all clearer. * Add 'info update network' subcommand Add network update cmd for the VMfork project so it can flush reconfigured child network info asap to the management layers. * Support for fallback to TCP for Blast UDP. When starting a UDP connection fails we should be falling back to the existing TCP connection. The failure could be for any reason. E.g. - firewall in the middle which restricts UDP traffic or client proxy initialization failed etc. * open-vm-tools: make dndcp plugin link with hgfsUriPosix During 'make install', libtool threw an error because it's not able to find HgfsUri_ConvertFromPathToHgfsUri when linking the dndcp plugin, because the dependency on hgfsUriPosix was missing. Fix Makefile.am to make dndcp plugin link with hgfsUriPosix. * Use C++11 for libsigc++-2.0 >= 2.5.1. According to http://libsigc.sourceforge.net/ and recent build failures with open-vm-tools 10.0.0 on Fedora 23 & 24, libsigc++-2.0 >= 2.5.1 requires C++11. When using C++11, I also figured that normally Linux builds define "__linux__" instead of "linux". The latter is defined only when GNU is enabled. So, replace "linux" with "__linux__" so that we can use -std=c++11, otherwise, we will need to use -std=gnu++11. We might want to use GNU C++11 extensions in future for some other reasons, but I don't think "linux" define is a good reason to choose it. C++11 generates warnings for missing space between strings and literals. So, fix those as well. * Fix for assertion in asyncSocketInterface.c Like AsyncSocket_GetWebSocketProtocol, AsyncSocket_GetWebSocketCookie is also used by clients with normal sockets (non-websockets). The virtual table for these sockets will have "asock->vt->getWebSocketCookie" as NULL. * Workaround fix to avoid rpc warning messages flooding by changing log level to debug. Customers will see a lot of 'SimpleSock: Socket # closed by peer.' in their event viewer if they are using terminal server. It does no harm but will bring unnecessary concern to customer. Change its log level from warning to debug. * Add an error handler to X11 resolutionSet If display memory is not sufficient to set a new desktop size, an X error event may be generated. Without a custom error handler, this will terminate the user tools daemon, which is undesirable. Add an X error handler that logs the error without returning. * Hgfs Server VMX: add some logging for file change notify ops The packing of the Hgfs set watch operation for a directory in a share HGFS_OP_SET_WATCH_V4 and for the packing of a HGFS_OP_NOTIFY_V4 file change event was not logged. This makes it cumbersome to track operation occurrences in the log file. Add logs for each of these events. * build vmware-toolbox-cmd for ESXi * Hgfs Linux Kernel Client: support older mount info version It is proving more problematic to expect that the HGFS mounter binary and kernel HGFS driver client be kept in sync. For full functionality with all the mount options supported the latest mounter binary be used together with the latest kernel client. However, users can mess this up at install time with failure to replace the user mode mounter application. Furthermore, Ubuntu need a new kernel mode HGFS client for shipping 15.10 open-vm-tools-dkms package in a Linux 4.2 kernel, and this needs to work with the older mounter binary. This change allows the kernel driver to support the existing new mount information object but also the older one. For future changes, bump the newer version in the mount information object, too. In order to achieve the support of at least two versions of the HgfsMountInfo structure make the main line code independent from the mount information object and now initializes the super block information object from local variables set from the mount information data. The validation check for the user supplied HgfsMountInfo data is pushed into a wrapper routine which will return success or failure of the check. On success it will return the version of the mounter information which is passed on to the function for extraction of the interesting data fields to use. Note, for now, we support the current and older version only. There is no assumption made about any newer version being backwards compatible and extracting the information that it knows in those cases, it will just fail. This only affects the Linux HGFS kernel client, the OSX and Solaris clients remain as before as there is no need for supporting multiple versions of the mounter binary. * vmtoolsd: log message when loading a plugin fails Add a log message when loading a plugin with system libraries fails. Sometimes when vmtoolsd attempts to load a plugin it may fail, and then attempt to load the plugin with shipped libraries. * Making Blocking socket APIs public. Making Blocking socket APIs public and removing them from virtual table. * lib/uuid: Avoid magic number for ISO 11578 UUID format length. We refer to the ISO 11578 hexadecimal UUID format as "packed" format. A constant for its fixed length seems reasonable. * HostInfo: vmkernel5 The hostinfo identification code isn't coded to handle vmkernel 6.5 - nor is it robust about what it would do when we hit vmkernel 10 and later. * Modify freebsd debug statement to avoid a crash freebsd is trying to use a %Zu for a size_t value. But instead, it appears to simply ignore the format '%' and print it. which means a lot of bogus debug noise like [Aug 18 09:45:24.159] [ debug] [vmsvc] RpcIn: sending Zu bytes Which is gross. But when we use it with more than one arg, we end up with a nasty type issue, and try to treat use arg1 with arg2's format, and boom: "RpcIn: received %Zu bytes, content:\"%s\"\n" The size_t in arg1 gets processed by the %s. * circList.h: stop name conflicting BSD headers (widely used by Mac OSX and by vmkernel's BSD networking stack) have a sys/queue.h that defines LIST_FIRST and LIST_FREE macros ... and does so differently from the one in circList.h. Previously we have worked around the problem with undef. * Meet the security requirements that we should disable SSLv3, TLSv1, and TLSv1_1, leaving only the TLSV1_2 on. Leavarage the bora/lib/ssl's SSL_NewContext() function to create the SSL context so that most of the other security requirements can be auto fullfilled, e.g. cipher list, single DH use, no ticket... * display help message for "stat raw" commands through toolboxcli The help commands needs to be extended to include the "raw" related subcommands # vmware-toolbox-cmd stat raw session host resources vscsi scsi0:0 vnet 00:0c:29:ca:27:69 # vmware-toolbox-cmd help stat stat: print useful guest and host information Usage: vmware-toolbox-cmd stat Subcommands: hosttime: print the host time speed: print the CPU speed in MHz ESX guests only subcommands: sessionid: print the current session id balloon: print memory ballooning information swap: print memory swapping information memlimit: print memory limit information memres: print memory reservation information cpures: print CPU reservation information cpulimit: print CPU limit information * Fix remove alias bugs If remove alias is called when a mapped alias also exists, but with a different cert, then the remove alias code was confused and returned invalid arg, thinking there was no match. If multiple mapped entries refer to the same cert, it would only look at the first user for removal, failing w/o error to remove the later. Tweaked the remove alias code to fall through and clear out any mapedp entries even if they shouldn't be there, so anything left behind by 1545682 will be clearable. Added some new unit tests for these scenarios. Also added some sanity checking code the service does at startup to check for an orphaned alias. * GosTable: Photon is "Photon OS" now. Make the appropriate adjustments. * GosTable: add debian 9 and 10 Prepare for debian 9 and 10. * GosTable: Darwin 16 (OS X 10.12) Pre enable Darwin 16 (OS X 10.12). Default OS X becomes 10.11. Fusion team/Regis/Darius: We *REALLY* need to update vmcore/vmx/main/cpuid.c to reflect the abiities of newer CPUs. * Update the cipher list. The cipher spec has been made more strict since the bora/lib/ssl/ssl.c cipher list was last updated. VMTools calls the bora/lib/ssl/ssl.c SSL_NewContext() to create the ssl context. We are required to use the updated cipher list. Two approaches: 1) Set the the cipher list again after calling lib/ssl SSL_NewContext. 2) Change lib/ssl to update the cipher list. We decided to take the latter approach. * Fix impersonation on OS X. As of a security patch to 10.10.3, setreuid() cannot be reverted. since OS X doesn't has setresuid(), that means we can only use the effective uid for guestOps. This means: - KillProcess can't be done, since kill() looks at real uid - access(2) also looks at real, which can result in GetFileAttributes() on an unreadable file suceeding, but returning unset data - Impersonate needs to use seteuid() instead of setreuid() - When lanching a new process, we need to have both effective and real set * Fix l10n handling on cmdline The glib option parser dealt poorly with Unicode cmdline args before 2.40. Unfortunately, we use an older version. So work around it and parse by hand. * Speed up File_IsFullPath. We currently do a Unicode_StartsWith in File_IsFullPath. This can be replaced with a light-weight character compare. * Expose File_StripFwdSlashes Expose FileStripFwdSlashes as File_StripFwdSlashes. * Make Snapshot Take API with guest quiesce parameters 1. Change Snapshot Vigor API quiesce as quiesceData parameter 2. Change tools/vmbackup to send new binary (ABI) API to vmtools 3. Detect the timeout by keep_alive msg * Add namespacetool in tools package for Linux and windows. Modified user options- - Provided simple namespace command for end user. - added one more command to delete key. * VMCI: Retire VMCI_QPFLAG_PINNED The VMCI_QPFLAG_PINNED was introduced to support a specific use case (vVol), where mapping in a page when accessing a VMCI queue couldn't be handled. vVol moved on to using vPageChannel (and may even be gone as a project now), and the flag has already been removed from the upstreamed Linux driver, so let's remove it completely. * Pre-glibc-2.5 is deprecated. Remove macros to work around pre-glibc-2.5. Most of these cover functionality that was added in glibc-2.3 or glibc-2.4. * Remove wrapLib from loglevel_user.h. * Allow self signed certs anywhere in the chain A common use case is to have an SSO server with a self-signed root and leaf cert. Before this change, if the leaf was in the alias store, then the cert verification would fail because the self-signed root was considered an error. * GosTable: clean up Debian The bits for Debian say "4-5" and one bit covers them all. No need to be specific until there is a need. * Add VSS parameters and timeout to control the VSS process during snapshot 1. utilize the timeout to extend the time of process 2. Add StartEx in VSS requestor to use vss paramters from GuestQuiesceParamsV2 * mksVNCServer - Add support in Linux agent for sending session close reason to client. * Fix domain user decoder in vgauth. Fix printf format for domain users * GosTable: Separate out Oracle and CentOS We need Oracle and CentOS separated out for special treatment. The newer OSen are grouped in 3.x Linux (or later). * Initialize netutil properly. Netutil has some dependencies which are poorly enforced. * Add partly encrypted dictionary. We are leveraging existing code for encrypting VMs on our hosted products, Workstation and Fusion. In the hosted products the .vmx file dictionary entries are encrypted by default; we support opt-out of encryption by specifying "plain" on get and set. However, on ESX we want most of the dictionary entries to be plain- text by default. The main reason for this decision is compatibility with several existing VMware products that depend on being able to read and write the dictionary out of band. For example, SRM writes to the .vmx file directly when fixing paths at the recover site. Note that the default behavior on ESX can be changed by using the following config option: encryption.unspecified.default = "encrypt" With that option specified in the .vmx file before encryption, VMs on ESX will be encrypted as they are on hosted. * open-vm-tools: add common-agent (CAF) Add caf files to open-vm-tools. - building caf is disabled by default for now. - the list of files to be included is generated dynamically, to avoid extra work and errors when files change. - however, the list of files to be compiled in the Makefile.am files is NOT generated dynamically, so every time files are added/removed, the Makefile.am files need to be adjusted. - two caf source files had to be edited because they use the macro VERSION which conflicts with defines used for ovt - building caf depends on rabbitmq >= 0.6 (Ubuntu 14.04 ships with version 0.4.1 and 15.04 with 0.5) - caf files are licensed with LGPL * Pull 'disk' command from ESXi 'disk' command underlying support doesn't handle typical ESX disk types, so remove it. * Stop compositing frames when no-one is watching This change makes the first foray into having the MKS stop compositing frames when no-one is watching. Under the config option "mks.allowFrameWatchingChecks=TRUE" (still disabled by default), the MKS will now skip the actual compositing, unless an EndFrameImmediately is requested. This has the nice side-effect of ensuring that the odd sources of frame composition keep working like normal (such as SVGA develEndFrames, mksReplays, or Checkpoint stale screenshots), although we might want to revisit this in the future. We do not yet have any notifications of when the watching status changes for the screenSources to consume, but that will presumably be coming as soon as the first one is ready to use this notification. * Generate isoimages_manifest.txt as part of tools linux build Tools build needs to generate ISO image map manifest file isoimages_manifest.txt for host to pick the guest to ISO name mapping. Define this mapping in the guest_os_tables.h, so that it is all in one place and matches exactly with the guests we know about. As part of this change, also introduce the new mapping for EOL Linux and Windows guests, i.e. frozen ISOes for these guests: 1. winPreVista.iso for pre-Vista Windows, and 2. linuxPreGlibc25.iso for pre-RHEL 5, pre-SLES 11, pre-Ubuntu 10 and other pre-glibc 2.5 based Linux distros * tar installer: remove pam_unix2.so from pam file A customer was concerned about the warning "pam_unix2.so cannot be opened" on RHEL 6.3. That modules was used in older Linux distributions, but the functionality has been added to pam_unix.so ion newer ones. Since tools are frozen for older distros, it's now safe to remove the reference to pam_unix2.so. * Changes for building caf in Open VM Tools. * Merge CAF install directory. * return DNS info on ESXi ESXi Tools only returned the basic NIC info, not the routing or DNS. This adds the DNS by rearranging #ifdef's and calling the existing code for ESX. * Removed extra line in output of namespacetool command get-value. * Added namespacetool to open-vm-tools. * Fix incorrect value of prefixLength in guest info. The prefix length (number of netmask bits) are not set in the guest info for the nested ESX VM. This is because we were missing code path that computes it in ESX tools. Added the code that computes it. * lib/misc: Remove Util_GetPrime. No callers remain for this bizarre function. Good-bye. * VMCI Win Client:Migrate to the new WDK build system Keep building the WinXP/Win2K3 and Win8 variants but with the new build logic. Switching these to Vista and dropping the WinXP/Win2K3 builds will be a short follow on change. The change also includes changes to make the drivers compile with the new build system using warning level 4. * Update open vm tools installation to allow CAF to install/run * open-vm-tools: remove directories on uninstall A few directories related to caf remained after 'make uninstall'. * Update the Copyright year to 2016. A new version of GuestSDK will be released as a part of vSphere 2016. Updated the copyright year to 2016 at all applicable places in the GuestSDK code. * Fix upgrade from old (pre cafenv-appconfig) version of CAF * improve logging make the default logging more useful by turning a bunch of Debug() into Log(). Now it dumps some of the request basics and errors. tokens are hidden (security) and certs are hidden (noise level). * more cmdline parser improvements restore support for '=' between option and value. * tool1010 L10n drop 1 This is to check in tools1010 L10n drop 1. * BackupComplete may lead to data loss if log is truncated Add extra state in VMX to commit snapshot before backup completion and update manifest file at last. * open-vm-tools: fixes to build with FreeBSD - amd64 in host_cpu means 64bit, add that to configure.ac - use 'z' for FMTSZ in FreeBSD, just like Linux * Merge CAF to Tools * Tools 10.1 - Final L10n drop This is to check in the final L10n drop for Tools 10.1. * Add Tools version 10.0.6 definition * prioritize 'ip' over 'ifconfig' for gathering networks openSUSE 13.1 (at least) has a bug with ifconfig where it truncates the network name. which makes the script code to save off the networks break. so instead of prioritizing 'ifconfig', use 'ip' which doesn't have any issues. * tar installer: fix to build with clang > 3.4 Functions HasMap_Store() and _Retrieve() are not used any more, so remove them. Implement CheckSanity only if VMX86_DEBUG is set to avoid unused function warning. * Fix some memory leaks. leaking the 'data' pref value for a log handler. leaking an rpc message response if the caller doesn't want it. leaking username/password for every guestOp * Correct the freeze and thaw ordering for mount points There were two issues with the way we were doing quiescing on Linux: 1. Thaw was following the same order as freeze, actually it should follow the reverse order of freeze. Fixed the thaw order. 2. Freeze was following the order provided by getmntent API which is the order in which system created the mount points. This could be problematic when a mount point depends on other mount point, e.g. loopback mount point. In order to honor the dependency among mount points, we need to reverse the order of mount points listed by getmntent API. While reviewing this change it was found that the interface used for passing the mount points around was not very clean. It was a ':' separated string of mount points. There were multiple problems with it. We were converting a list of strings into one string and then tokenizing it later. As part of this change, we fix that interface too by replacing the string with single-linked list, GSList. Using GSList brings glib dependency to lib/syncDriver. * Restore fdCnt to size_t. The datatype for fdCnt was changed to ssize_t in a previous change. It was not required because we can adjust the 'for' loop using it and keep it as size_t. * Fix additional tools issues reported by Coverity. Fix some issues found by the latest Coverity scan of tools 10.1, plus a few related nits. * Namespacetool links vmtools lib which has already implemented functions "Debug" and "Panic". Removed these functions' implementations from namespacetool. * Added new constants for tools version 10.0.7 (namespacetool changes). open-vm-tools 10.0.7 will add support for namespace command line utility, so, we need to add tools version constants for 10.0.7 (update3) as a future reference. * Fix unused function errors thrown by clang 3.4 Fix unused function errors thrown by clang 3.4. These are all caused by functions only used in an ASSERT(), which is defined to a NOP for non-debug builds. * Improving CAF build time, esp for open-vm-tools - additional files * Add signature checks to lib/toolsversion accesses. Add Tools ISO signature checks to the accesses coming from lib/toolsversion. Also, extend the signature checks to cover manifest files we read from the ProductLocker. As this change requires some of the stuff in toolinstall.c, mainly ToolInstallLocalFileReader. So, move that stuff to a common place in lib/toolsIso, so that lib/toolsversion and toolinstall.c can share it easily. While moving ToolInstallLocalFileReader to lib/toolsIso rename it accordingly, i.e. ToolsIsoLocalFileReader. Also, move the related callbacks along with it. New workflow for loading manifest files requires the dictionary to be built from memory buffer, but existing Dictionary API does not accept MsgList from caller. So, add the missing API for this, i.e. Dictionary_LoadFromBufferEx. * Detect slow running systems in guestInfo. - Added a new function in guestInfo. The new function checks the last time when the guest info was captured and prints a warning and sends a RPC message to the VMX if the elapsed interval was more than the expected poll interval. * Fix additional coverity issues in tools and hgfs. Fix some uninitialized variable problems reported by the Coverity scan of tools. * Remove guestStats that are beyond 60u1 scope. The guestStats in R10 Tools release follow 60u1 scope and therefore we need to remove the guestStats that are not in scope for 60u1. * Fix a couple more Coverity-reported issues in tools. Fix an uninitialized variable and a use-after-free problem reported by Coverity. The use-after-free problem occurs in the swig-generated file vmGuestLibJava_wrap.c and is addressed by changing a function prototype processed by swig to use void * in place of char *. For additional background see https://sourceforge.net/p/swig/mailman/message/34977020/ * open-vm-tools: fix build error in Ubuntu 16.04 The -std=c++11 causes an error when used with the GNU C compiler, but it is in GTKMM_CPPFLAGS. So this change moves GTKMM_CPPFLAGS from libdndcp_la_CPPFLAGS to libdndcp_la_CXXFLAGS in services/plugins/dndcp/Makefile.am. This also fixes building for current Debian sid. * Hold a reference to vSocket address family in vmtoolsd. On old hosts that do not support secure guestRpc vmtoolsd falls back to use backdoor. However, there could be vmci and vsocket drivers loaded in the guest that make vSocket consumers (e.g. guestLib and namespace-cmd) try vSocket all the time before falling back to backdoor. On old Linux guests like RHEL 5, 6 (kernels below 3.9 that do not have upstreamed vmci and vsocket drivers) this causes log spew in guest system logs because of vSocket address family being registered and unregistered on each RPC call (RpcChannel_SendOne). This could be solved in multiple ways involving some work from user. In order to solve this problem in a user friendly way, we hold a reference to vSocket device in vmtoolsd service, so that the reference goes away during Tools upgrade. * Tools GuestInfo - Return proper osname for Oracle Linux 6 / 7 Updated the code to detect Oracle Linux 6 and Oracle Linux 7 and return proper osname acocrdingly. In Oracle Linux 6.7 GA VM, following are the contents of /etc/oracle-release Oracle Linux Server release 6.7 In Oracle Linux 7.1 GA VM, following are the contents of /etc/oracle-release Oracle Linux Server release 7.1 * Tools GuestInfo - Return proper osname for Centos 6 / 7 Updated the code to detect Centos 6 and Centos Linux 7 and return proper osname acocrdingly. In Centos 6.7 GA VM, following are the contents of /etc/centos-release CentOS release 6.7 (Final) In Centos 7.2 GA VM, following are the contents of /etc/centos-release CentOS Linux release 7.2.1511 (Core) * Tolerate the lack of RPC channel when there is no backdoor. A VM with the backdoor disabled leads to having no RPC channel in vmtoolsd. Tolerate this situation instead of ASSERTing. * Make NullProvider race-free to be thread-safe. The NullProvider start function was sending the 'prov.snapshotCommit' message to VMX, which was being done on the worker thread. This led to a race condition where the VMX state machine advanced faster than the guest side state machine. Later, when the VMX state machine sent 'vmbackup.snapshotDone' to the vmbackup plugin, it did not like it because it was not ready for that message. To fix this issue, we split the code that sends the 'prov.snapshotCommit' message into a separate callback that gets called by the main thread instead of the worker thread. To do that, we created a VmBackupOp for NullProvider so that it can be monitored by the top level state machine. Also fixed a subtle race in VmBackupAsyncCallback. It can prematurely release an op if the op was set by worker thread between the QueryStatus and Release calls. This was possible due the initial value of status. Fixed the initial value of status to make it impossible. * open-vm-tools: add udev rules to set scsi timeout To avoid volumes going read-only offline, a longer timeout was needed. This is already done for tar tools and OSPs using udev rules, but not yet for open-vm-tools. This change adds a udev rule for open-vm-tools. * Fix a namespace tool crash. The namespace tool core-dumps when running the following command vmware-namespace-cmd -V get-value name -k key This is because glib options parser removed the -V from the argv, and passed the ValidateNsCommands() check. However, the later RunNamespacecommand shall ASSERT() on the NULL nscmd. * Properly handle non-ASCII filenames. Filenames are passed as UTF-8, but file opens (both CreateFile and fopen()) were assuming ASCII. Switch to a conversion and CreateFileW and g_fopen(), which handles full UTF-8 filenames. Also tweak the error logging to dump the error code for easier debugging on non-English OSes. * Fix the namespace tool verbose option. The namespace tool verbose option was supposed to print out the debug and warning messages of the vm libs to stdio, but it didn't. * Don't auto-retry RpcChannel_Send when error is final. RpcChannel_Send retries in case of any error. However, retry makes sense only when there is a transport error. When there is a failure returned from VMware in handling the RPC command, the error is final and retrying does not make any sense, so avoid retry when it is not a transport error. In order to differentiate between the two types of errors the internal function signatures required changes. As there are not many direct consumers for RpcOut_send, fix all of its callers too to check rpcStatus along with the return value of the function. The new API behavior also allows removal of some string comparisons on "reply". There are no other behavioral changes intended in RpcChannel_Send, so all the callers of this function remain untouched. * Replace RpcOut_sendOne with RpcChannel_SendOne in vmtoolsd commandline. "vmtoolsd --cmd=" uses RpcOut_sendOne which is a backdoor only implementation. It should try vSocket before falling back to backdoor. * Make sure the Windows version of namespacetool logs to stdio instead of logging to debugger. The Windows version of namespacetool didn't print warning messages under the verbose option. * Add toolbox-cmd for tools.conf config entries. Add a generic tools.conf set/get mechanism that can be used for any config entry. The first specific use case is to enable/disable the allowLocalSystem pref for SRM. * Remove an ASSERT and save vSock family reference in vmsvc only. VMCISock_GetAFValueFd API does not open a vsock device if the kernel has upstreamed drivers. So don't ASSERT if the vsock fd is not valid in such cases. Save the reference only when the family as well as the fd are valid, because there is no need to save the reference in the case of upstreamed drivers. If 'vmusr' holds a reference to vSock address family, it could come in the way of upgrade because 'vmusr' keeps running during upgrade. To avoid that issue and given that we just need one reference, we limit the reference to main service only. Also fix the VMCISock_GetAFValueFd API to initialize outFd in the case of upstreamed drivers. * Allow SAML authn to bypass impersonation if the user is unchanged. vmwsu can't create an impersonation token for SYSTEM since its not a 'real' account. So bypass the impersonation phase since toolsd is already running as SYSTEM. * Increase the scope of 'opLock' to avoid a race in VmBackupAsyncCallback. A previous fixe to a race between worker thread and main thread in VmBackupAsyncCallback could lead to premature release of 'currentOp' from 'gBackupState'. If the 'currentOp' was set after VmBackupAsyncCallback had queried status of the 'currentOp', but VmBackupAsyncCallback was not done with 'status' value check, it could release the 'currentOp' prematurely because 'status' was initialized to VMBACKUP_STATUS_FINISHED. The fix was to initialize the 'status' to VMBACKUP_STATUS_PENDING. The fix broke HBR because HBR invokes quiescing with the 'execScripts = false' option, and in that case there is no 'currentOp' setup by the VmBackupStartScripts() call, which leaves VmBackupAsyncCallback in its initialized 'status' VMBACKUP_STATUS_PENDING. This fix reverts the previous fix by restoring the 'status' initial value to VMBACKUP_STATUS_FINISHED and increases the scope of the lock 'opLock' to address the race condition. This change also adds some Tools configuration settings to make it easier to test HBR scenarios. Also moved the common functions to vmtoolslib. * Fix HGFS mount call to create mount point. For FUSE clients and open-vm-tools installations the package might not create the shared folders mount point. The only reliable way to ensure that we have one is to create it ourselves. This also ensures if a user has inadvertently deleted the mount point after installing tools and before enabling the Shared Folders feature the mount will be robust enough to still mount. Secondly, did some clean up of the mount function to move the check for already mounted into a separate function. Finally, the mount file table check now uses the common mount info macros and the system calls are replaced with ProcMgr exec calls. The file access checks now use the glib routines as do the mkdir and rmdir for mount point creation and deletion. * Make Vsock RPC code handle the ECONNRESET. The VMX might delay releasing a vsock when the client side closes the end point first. This makes a later client vsock connect attempt fail with ECONNRESET using the same source port as the closed one. Note that the client binds OK on the reused source port, since the client side has released the socket on that port. Rewrote the connect code to make it more clear and explicitly separated the retry logic. The existing higher level error code enum was also not clearly defined. It is best to keep and return the system errno, and also added additional information about which socket API call failed. * tar installer/OSPs: Check for a valid shell in pam configuration. When a program is run in a VM using vmrun from the host, the user account is not checked for a valid shell. This changes adds this to the pam configuration for vmtoolsd. Note that /sbin/nologin is a valid shell in CentOS and RHEL, but not in Ubuntu. Valid shells are those that are listed in /etc/shells. * open-vm-tools: Add support for gtk3. Add support for building open-vm-tools with gtk3. #ifdef statements have been added for conditional compiling for GTK2/GTK3. * Tools RpcIn: fix an assert triggered by a race condition RpcIn open channel asserts that the current channel is NULL. This is being triggered during the disk wipe operation test. The test stressed the machine so that the guest tools service ran slowly and the VMX timed out and so reset the channel. This caused the tools service to do a channel check reset, which then called RpcChannelRestart to stop and start the channel. Unfortunately, this call modified the channel global without synchronizing with the other threads sending RPCs. DiskWipe plugin was in the middle of a RpcChannel_Send (with the lock acquired) when the restart call ran concurrently. To fix this issue the RpcChannelRestart now acquires the same channel lock around the channel stop and start calls so that all sending threads wait or complete first. * Tools RPC: Fix XDR invocation on mac and an uninitialized variable. Uninitialized variable in rpcin.c: Initialize status to FALSE. xdrproc_t: On many platforms xdrproc_t is an unprototyped function pointer that can take either 2 or 3 arguments. Apple changed their implementation to always take 3 arguments, so add a third argument. * Guest DNDCP: Remove unused private variables. * Hgfs Server: minor clean up of request header size. Consistently use the correct function for determining the header size for the HGFS packet to be used. This is necessary due to the different protocol versions that exist; originally the request and reply contained different protocol headers. * Hgfs Server: more minor clean up of write operations. * Hgfs Server: write ops clean up. Very minor write ops clean up fixes which renames the arguments and local variables to be more consistent. * Hgfs Server: add write op arg basic validate write op. Add the basic write operation argument validation routine to obtain the data sizes of the request and data to write for the supported HGFS protocol versions (1 through 4). Add a call to it from the main write operation handler. * Hgfs Server: write op move argument checks. Consolidate the argument verifications to the common code as these are often duplicated. This will now explicitly perform the Hgfs write operation argument verification in the common handler before calling the platform specific code to actually peform the write. * Hgfs Server: write op move argument checks. Complete the argument verifications in the common code adding the missing checks for the write request packet size checks and the write request data size (separated from the request itself as in V4 of the HGFS protocol). This will catch any attempts from a client to pass a write request containing a data size argument for the data to write that is greater than the amount of data in the HGFS packet or data buffer passed. * Thaw/resume guest file system when VMX aborts an operation. When an operation is aborted by VMX after quiescing the guest, we need to thaw/resume the guest without leaving it in limbo. * Common version: Use disable-tools-version for old hosts only. Use disable-tools-version for old hosts only, and add a hide-tools-version flag. Set disable-tools-version to "true" again for OSPs. * Apply ICU patches to lib/unicode. Apply various ICU patches between ICU 4.4.1 and 57.1. * Return default value in case of NULL key instead of ASSERTing. The configKey is NULL for NullProvider, so VMTools_ConfigGetBoolean should return default value if any of the input args is NULL. * Updating glib and dependent libraries for CAF to latest version glib is upgraded to 2.48.0 with the following dependencies: libiconv 1.14 pcre 8.38 zlib 1.2.8 libffi 3.2.1 * xmlsec1 support for verification Add SAML verification with xmlsec1. * Fix some memory leaks * Add verification of SAML assertions (Subject and Condtions) * Do schema validation with xmlsec1. Add schema validation for xmlsec1 based SAML verification. * Add xmlsec1 to open-vm-tools. Add the new files to open-vm-tools and add a switch to turn it on. xml-security-c remains the default for now. also clean up the service Makefile, which was using the client lib, for common code instead of building it in. * Update VGAuth source for compilation with OpenSSL 1.0.x or 1.1.0. OpenSSL 1.1.0 is about to released. With that release comes a number of changes that include making several types opague. Along with this, new or renamed setter/getter functions appear. The API changes and the impact on open-source products is discussed at: https://wiki.openssl.org/index.php/1.1_API_Changes. Updated man pages are available at: https://www.openssl.org/docs/manmaster/ The impact on VMware Tools and open-vm-tools is that the message digest type MD_CTX has become opague. Local (stack) MD_CTX objects are not supported. The required change is to dynamically allocate MD_CTX objects as needed using the 1.1.0 API xxx_new() and xxx_free() or the pre-1.1.0 functions xxx_create() and xxx_destroy(). * Update glib and pcre. This change adds a new glib.mk whose scope is local to the tools build. The new glib.mk sets the glib2 version to 2.48 for the tools build. The new version of glib depends upon libpcre, libiconv and libffi. * Properly configure xmlsec1 for CentOS. Some distros build xmlsec1 with dynamic crypto, so we have to do things slightly differently. Also work around a bug in how Redhat & SuSE packages xmlsec1. They built it with -DXMLSEC_NO_SIZE_T, but that flag isn't properly exposed by xmlsec1-config. This results in a bunch of xmlsec1 data structures (anything with an xmlSecSize in it) being different between the lib and our code, and it tends not to work when our code references fields in the data structure. So this change always sets -DXMLSEC_NO_SIZE_T. * Log level change in CAF - Change default log level to ERROR. open-vm-tools-10.0.5 build 3227882 * ae82fa6 [Bug 1526360] fix timestamp check * b510107 [Bug 1531545] Add an error handler to X11 resolutionSet * adab9c5 [Bug 1503195] Kill tasklet when unloading vmci module * 35bcc69 [Bug 1519223] Avoid warning message when logging group is missing. * 581f2d0 [Bug 1473600] Skip freezing autofs mounts. * 8184e92 [Bug 1507819] Workaround fix to avoid rpc warning messages flooding by changing log level to debug. * eb47321 [Bug 1526327] make vmhgfs compatible with Linux kernel 4.2 open-vm-tools-10.0.0 build 3000743 * Common versioning * Quiesced snapshots * hgfs-fuse * Logging changes * AsyncSocket changes * Change ASSERT macros to VERIFY * Additional locking fixes and optimizations * Unicode type and macro cleanup * Change glib logging in RpcChannel to use Debug/Warning/Panic. * Clean up HGFS server unpack file name V3 arguments * Fix nested logging for VmxLogger with vsocket channel. * Compile mac-rdpvcbridge from cart-dev * Implement VMware Tools for ESXi 6.0 guests. * Get rid of ASSERT_ALWAYS_AVAILABLE * Get rid of ASSERT_LENGTH. * Move ASSERT_OR_IN_PANIC() from public/vm_assert.h to vmkernel. * Make lib/location product-agnostic * desktopEvents: Leave libICE rug firmly under libSM. * Remove SLPv2 * Provide a kill-switch for using vsocket in RpcChannel. * Use binary search tree to map guest os string to guest os enum. * codeset: use icuDir instead of libDir * Remove NR_MPNS_PER_PAGE * Make FileIO_AtomicUpdate fail gracefully when File_FullPath fails. * Merge atomic FetchAndAdd64 with ReadAdd64. * Rename Atomic_FetchAdd, part 1. * AsyncSocket: Remove UDP socket support. * Introduce Id_IsSetUGid for detecting setuid/setgid binaries. * Update WS, player version numbers on *-main branch. * Integrate all VIX changes from hosted13-pd-rel to vmcore-main. * Rename Atomic_FetchAnd*, part 5. * Cache Tools conf path. * No more Atomic_Fetch. * Add configuring of the Windows core dump flags for the tools service * Temporary fix for PR 1111448. * Add surface logging to basicOps * Id_IsSetUGid fails to compile on Android. * Add devel backdoor command to run replays inside frobos tests. * Save registers earlier during Panic. * Prepare the HGFS Windows client to use VMCI transport header version 2 * Get Mac OS system version from (Server|System)Version.plist * WebMKS plumbing: vmx side * Create new V2 of VMCI transport header * Minor logging cleanup in vmware-vprobe * Notify VMX when Toolsd is going down * Remove ovftool temporary fix. * Add /proc/interrupts and /proc/irq/* to vm-support * Remove HGFS from FreeBSD builds and packaging * Split DR6_ONES into DR6_DEFAULT and DR6_ONES * Add utilMem to Frobos * Support Intel RTM Debug behavior in VT mode. * MSG: Skip errno localization on unknown platforms. * Replace CPU_MemBarrier with Atomic_MFence * Prevent low privileged user from writable access to tools conf data * Change shutdown notification RPC failure message to debug. * Eliminate some "legacy IPC baggage". * Fix tools_obj_linux64 build (license file mismatch) * Convert the HGFS uses of ASSERT_DEVEL into ASSERT or remove * arm64 support in vm_basic_{types,defs}.h * Add an error function hook to PollDefault * arm64 support in vm_[basic_]asm.h * asyncWebSocket: improve rmks warning message when WebSocket connection fails due to bad SSL cert. * Implement MXUser semaphores on Mac OS with lib dispatch semaphores * Replace 3-clause BSD license template with 2-clause BSD license * vm_basic_{types,asm}.h: cleanup architecture #ifdefs * Add a surface flag for 16-byte image alignment in mobs * Change config.version from String to Long. * Fix HGFS server change notification packet handling. * Cleanup "vm_basic_defs.h" * vm_atomic: add ARM64 atomic operations. * Enable the HGFS VMCI VMX and HGFS server use the V2 header * Implement Devel ScreenShot command * Fix the HGFS protocol opcode to differentiate headers * vmkBoot: refactor serial, arm64 serial & panic. * vm_atomic: fix arm64 ReadIfWriteEqual atomics. * arm: bug fixes for uint*set implementations. * Rework the tools heartbeat code in the VMX. * vm_atomic: eliminate non-ASCII chars in comment. * Remove the incorrect immediate constraint from 64-bit atomic ops * Refactor code under guestinfo/getlib. * Remove __builtin_*_address(N) compile checks. * boot: misc. vmkernel changes to allow arm64 boot.c compile. * debug: move debug to main/x86, arm64 stubs. * prda/specialstack: refactor to split out arch deps, arm64 support. * Cleanup guestinfo plugin header dependency. * Change WSAAddressToString to WSAAddressToStringA * Handle EINVAL for preadv and pwritev. * Change GET_CURRENT_LOCATION definition. * Check if __GLIBC_PREREQ is defined before using it. * Add support for IOMMU guest addresses > 16TB. * * Fix Atomic_Read on ARMv7. * Create a trivial view when both the texture and the view are R24G8 class. * vm_atomic: fix ARM 32/64-bit Atomic_Read. * OvhdMem refactor + pull from vmioplugin branch * cpuset/vm_basic_asm: use standard clr/ctz primitives. * vm_basic_asm: fix windows build breakage. * vSock: Rename "VMCI Sockets". * Disable nullDriver by default and add a config switch to enable it. * First submit of the VDTI PCI Device. * Cleanup/Rationalize coreDump * vSock VMX: Introduce a separate sendCb field * Don't define g_info if it is available. * A virtual USB video device backend. * A virtual video device backend. * Skip freezing remote mounts. * lib/file: Various fixes to FileIOP(read|write)vInternal and FileIO_(Readv|Writev). * Use int 31 instruction to trigger an assert in the VMKernel * vm_basic_asm: fix uint32set for arm64. * Clean up of APIs used by the HGFS server library * Clean up the HGFS server shares interface to the HGFS server part II * Ignore disk UUIDs from the paths to be frozen. * Clean up the HGFS server use of the policy share enumeraton APIs * fix HostinfoGetOSShortName to support Debian 7.x * remove unnecessary constraints for ABSOLUTELY_NOINLINE define * More clean up the HGFS server manager, policy manager APIs * Remove MPN32 related macros. * lib/uuid: Add CreateRandomEFI, and cleanup * Fix buffer overflow in perfMonLinux * AsyncSocket: hostname/IP string connection functions should attempt both IPv4 and IPv6 connections. * lib/lock: lock tracking tree optimization * Fast send on the asynNamedPipe if Write completes synchronously. * increase MAX_MPN to 38 bits * finish conversion of invalid_mpn64 and max_mpn64 * Change Mul64x3264 family of functions to round instead of truncating * Add CACHELINE_SIZE to vm_basic_defs.h. * Memory is accessed after being freed in function * Add some debug noise to RPCs received in guest. * Add SMAP support to MMU page walkers and MonTLB * lib/file: File_Rotate needs some protection * Hgfs VMCI: move packet max size to the correct location * Hgfs Server: remove transport only header file from the server. * Log errors in RandomBytesWin32. * Defer the RunScript cleanup when VIX commands are restricted. * Add support in resolution set to log multiple sessions in RDSH. * Make Clamped_SAdd32 more robust against compiler options * Compare the remote FS type strings the right way. * VIX plugin under vmusr should not register for TOOLS_CORE_SIG_IO_FREEZE. * Add runtime macros to check type of tools service. * vm_atomic: remove unfenced atomic operations. * vm_atomic: LOCK-like semantics for arm64 atomics. * refcount/vm_basic_asm: multi-architecture memory barriers. * Hgfs Server: Fix unpacking of protocol header unused fields * Enlarge MAX_IFACES to ensure vmtools could get a valid GOS IP throguh NetUtil_GetPrimaryIP(). * Change BPN to be a 64 bit type. * lib/lock: MXUser_Control* -> typed functions [trivial?] * fix bad error * ARM64: Add more basic assembler support * Guest Tools: Add memNeeded for Windows and Linux and handle versioning * Fix incorrect LRU file accounting for memNeeded on Linux * Change the bit representation of BPN to make way for NVM. * tools perf mon: collect more stats from /proc/meminfo * Remove vmxwifi.sys and macWireless_defs.h * tools perf mon: refactor * tools data collection: Collect all of the new Linux data * Guest stats: fix the time base * gos tables: Table must be sorted; reinsert "coreos-64" accordingly * guest performance data: no need to have a maximum RPC transfer size * guest perf stats: replumb GuestInfo_PerfMon * guest perf stats: GuestInfo_PerfMon builds the RPC data itself * guest perf data: collect the Linux data * guest perf data: return the new protocol * guest perf stats: ice the cake (add some polish) * guest perf stats: Linux goes to the new format * Hgfs Posix Server: fix the writes to not exceed max file size * Stick backdoor behavior after vSocket connection failure. * Hgfs Posix Server: fix Solaris tools obj builds for log statements * Fix memory leak in hgfs server. * Implement QuadBlit for DX11Renderer. * Add feature-specific RDE Dev Targets - folderRedirection, tsmmr, viewMP * MX_Lock should not use HLE on unpatched Haswell systems * Hgfs Posix Server: add some useful logging for symlink names * lib/file: Don't leak a filename in FileRotateByRenumber. * Hgfs Posix Server: add more useful logging to open * Hgfs Posix Server: fix open requests failing EAGAIN (EWOULDBLOCK) * Sometimes channel can be NULL, this will make vmtools panic. * lib: misc/sig support for arm64 (redux). * HostType: stop using sysctl * authPosix: use getspent when using shadow password, but not PAM * Added protocol selection to bora AsyncWebSocket.- Changed VNC Client offer 'vmware-vvc' protocol as an additional protocol. * Enable 3D with DX11Renderer and port over the existing PROTOTYPE RenderOps functions. * Create the support dir under /tmp instead of CWD. * Disable NullDriver backend only for forceQuiece case. * Hgfs Server: fix malformed symlink creation requests * Hgfs Server: fix check malformed read packets * Fix Ubuntu errors in the vm-support script. * Expose BDOOR_CMD_VCPU_MMIO_HONORS_PAT to guest. * Add optional websocket protocols parameter to AsyncSocket_ListenWebSocketUDS. If NULL then default (legacy) protocols are used. * Allow the network script to bring each individual interface up/down. * deployPkg plugin: make deployPkg.cpp build as C or C++ * GOSTable: Plumb vmkernel6 as a separate bit * add deployPkg files to open-vm-tools * Introduce mkfsPmem, libpmem for managing pmem resources via the kernel from user-space. * Allow to queue MCE requests form the kernel to the VMM. * HGFS: Remove R/R * Replace PUSHF/POPF with STAC/NOP when setting EFLAGS.AC * lib/file: hostd crashes in assertion failure due to file list * Tools: Create GuestInfo_GetPrimaryIP as a IPv6 compliant version of NetUtil_GetPrimaryIP * Remove memNeeded calculation from the guest tools * Move SIZE_xxBITS to common architecture file. * GOSTable: Windows 10 as a unique guest * Set _FILE_OFFSET_BITS=64 for Solaris * Plumbing to expose (whitelisted) vsi-based stats in guest * Assorted _FILE_OFFSET_BITS=64 / _LARGEFILE64_SOURCE fixups * Serial: [2/16] Serial8250 - refactor into generic and platform parts. * lib/log: Improve the level filtering implementation and documentation * lib/log: no need to "blip" the lock * lib/misc: header clean up * Add 16 bits atomics to vm_atomic.h. * Add 16 bits atomics for arm64 * Clean up some file headers * Begin plumbing guest mks stats out to the host. * lib/log: improved documentation in log.h * Converting MPN to MPN32. * Reimplement guestproxycerttool.pl in C. * Atomic Boolean support * Add grabbitmqProxy plugin to open-vm-tools. * Windows 10: an all Windows 10 macro * Remove some vacuous FileIO usage * Introducing 64-bit MPN type. * mks: add shared-secret authentication for Blast websocket connections * Windows 10: add macros for all 32 and all 64 bit * Add guestproxycerttool (C-implementation) to open-vm-tools and OSPs. * cleanup app balloon in vmm, vmx, and parts of vmkernel * Honour panic.breakOnPanic on Posix. * hashTable: free function work like our other free functions * Introduce certificate hash verification in blast native clients. * Forward declare sslverifyparam in ssldirect.h * asyncWebsocket: move WebSocketHandshakeState into asyncWebSocket.c * RecordReplayRemoval: make RR go away from automation tools. * tools: improved memNeeded * guest stats: Use DynBufs * guest tools: a bit of consolidation * guest stats: rates in pages per second * Guest stats: Dynamically capture stats in Linux * guestStats: optimize memory allocation * guest stats: Linux deals with overflow * guest stats: consistent open file failure messages * GuestStat: improve function header * GuestStat: more function header cleanup * Stop publishing guest stats from VSI/GuestMemInfo structure. * Guest Stats: extensible reporting * Use new #define _DEFAULT_SOURCE to build open-vm-tools. * Publish Windows guest stats via V5 format * Guest stats: Only populate Linux legacy values that have been consumed * guest stats: Linux publish names as defines * Windows stat code cleanup * GuestStat: official registed the build in names * Adjust lock ranks for IO filters. * asyncWebSocket: remove hybi designator and consolidate code * asyncWebSocket: simplify protocol lists and framing * asyncSocket: simplify the interface for specifying websocket protocols * GuestStat: Name data is properly name string * lib/misc: Support Util_IsAbsolutePath on Solaris and FreeBSD * Hgfs Server: fix unpack of file name args for directory open * Minor updates to windows stat code * GuestStats: Better data validation and names * Debug log messages and minor fixes. * Add TLS caching for gettid calls on Linux * Add File_DeleteDirectoryContent. * Allow vm-support script execution only for root user. * GuestStats: rationalize the stat datum bits * No more MPN64 type. * Gettid TLS: fix coredumping * sigPosix scrub: more consistent self-signal behavior and remove unused code * Guest Stats: fix alphabetization * Publish stats for Windows pagefile size and used subset in KB * GuestOps: Set file ownership before setting file permissions. * GuestStats: no time units. * GuestSDK: remove vmtools.dll/so dependency * Use new generic way to collect guest stats and remove unused legacy guest stats. * Remove vmioplugin. * Use GOnce in pollGtk instead of a static mutex. * Update hgfsServer alias code. * Inline ASM for rotate left/right instruction * Add backdoor command to restrict vmmouse * Add Posix File to hgfsURI * lib/file: FileSleeper must really sleep * Fix unnecessary cast * Add LIKELY/UNLIKELY into MXUserRec * Fix argument order for InterlockedCompareExchange8 * rmks/ssl: change SSL verification for View/Blast RMKS connections to reject mismatched thumbprint always * GuestStats: Linux active/inactive anon buffers * GuestStats: order the linux stats * GuestStats: Clean up include file * Hgfs Server: enhance logging for packet request ID * Allow RpcVMX_LogV to run without calling malloc. * Update the stat IDs list. * Don't mount alias target volumes while resolving HGFS file attributes * Remove the executable bit from various source files * add some improved cert debug noise * Basic infrastructure support for guestIntegrity backdoor calls. * Implement MXUser semaphores on Mac OS with lib dispatch semaphores * Add a backdoor command for mksStats snapshots. * add vmhgfs-fuse to open-vm-tools * vm_basic_defs/gdb: use non-builtin offsetof for vmk gdb macros. * Implement MXUserEvent * Remove updateAgent code. * Change default sampling rate for guest stats to 20 seconds. * Include cstring to avoid 'memset not in scope' error. * Remove guestStats that are beyond 60u1 scope. * Fixes for use_after_free, double_free and double_close. * Use a global lock for protecting gLoggingStopped. * change default debugging level and location * adjust logging noise for vmtoolsd * clean up debug & warning messages in guestInfo plugin * clean up logging in vix plugin * recategorize powerOps logging messages * gather new default Tools logs with vm-support * add toolbox-cmd support for log` open-vm-tools-9.10.2 build 2822639 * Use new #define _DEFAULT_SOURCE to build OVT. glibc-2.20 has deprecated the _BSD_SOURCE and _SVID_SOURCE macros. Starting with glibc-2.19 _DEFAULT_SOURCE is recommended. Keep the old macros because someone might want to build open-vm-tools with an older glibc version. With glibc-2.20 VGAuthLog.c was picking the POSIX definition for strerror_r that returns int type. That does not work with glibc-2.2, which has only one definition with return type char *. For better compatibility with various glibc versions, use the _GNU_SOURCE definition of strerror_r that returns char *. * Fix a compilation error in toolboxcmd-shrink.c with gcc 5.0.1. Building open-vm-tools for Fedora 22 hit a compilation error with gcc 5.0.1. Also remove some redundant code. ShrinkGetMountPoints() calls ShrinkGetWiperState() and handles the WIPER_UNAVAILABLE and WIPER_DISABLED cases. The call to ShrinkGetWiperState() is redundant because wiper state will always be WIPER_ENABLED. * Fix the compiler version check and include mul64.h. The compiler check was intended to be >= GCC 4.4, but it was insisting that the major and minor version numbers of GCC both be >= 4, so it was breaking on Fedora 22, which has GCC 5.1.1, and for a user who was building with GCC 4.3. For old compilers we need to provide mul64.h, so include it in open-vm-tools. * Retry sending vmbackup event with elevated privileges. A privilege check on the host side was implemented in ESXi 5.5. Due to this change, once guest/Toolsd sends iopl_elevation capability (RPC msg "tools.capability.iopl_elevation") to an ESXi 5.5 host, it requires guest to elevate the privileges before the guest sends vmbackup event. Linux Tools version 9.4.x sends this capability and enables this behavior on the host. Tools version 9.10.0 does not send iopl_elevation capability and does not require privilege elevation. Therefore, in order to workaround the host behavior, we retry sending the vmbackup event after elevating the guest privileges. To avoid doubling the RPC messages from Toolsd, we also cache the last failure result from the unprivileged attempt for the duration of current vmbackup operation. * vSock changes to prepare for FreeBSD Add support to header files for FreeBSD. For now just add some stubs that return errors. * add a -h option to vgauth vgauth is not normally run from a command line, but add a -h option to provide minimal documentation. * Bump Tools version to 9.10.2 for open-vm-tools release. * Workaround NFS open bug by retrying on ESTALE RFC 1341775 uncovered an NFS client open race which causes open to fail with ESTALE if there is another host trying to atomically swap the file at the same time. This causes the file to be unlinked which might cause the thread trying to open it (for acquiring lock) to fail with ESTALE. Implement a very simple fix which retries for 3 seconds upon getting ESTALE. * Fix the HGFS protocol opcode to differentiate headers For differentiating the older HgfsRequest and the new HgfsHeader structures sent in an HGFS packet, the old header opcode is set to 0xff using HGFS_V4_LEGACY_OPCODE. This should have been made a specific value of the HGFS opcode enum and named for what it really means, but the enum type could clash with the HGFS_V4_LEGACY_OPCODE by accident if enough values are added. There is a potential issue with the newer HgfsHeader object where it overlays the old HgfsRequest op field. The new header tries to break the field into the first byte and save the remaining 3 bytes for a different use. However, this cannot be done as the current and shipping HGFS server code uses the HgfsRequest and op field (4 bytes) to verify the value is 0xFF. If this is a match then it is deemed that the packet has the new header. If the client tried to use any of the new header's reserved2 fields (overlayed with part of the old header op field) then the HGFS server test for a new header would fail to match. Fixed the HgfsHeader opcode fields to actually be the correct HgfsOp type. Removed the define for HGFS_V4_LEGACY_OPCODE and made it part of the opcode enum to ensure correct type checking. Added an assert on compile to ensure that the HGFS opcode values don't encroach on the invalid opcode used to determine the header type. Renamed the HGFS_V4_LEGACY_OPCODE to conform with the existing enum values and state exactly what its meaning is: HGFS_OP_NEW_HEADER. Now the 4 bytes cannot be used for anything but the protocol opcode new header value. This also corrects any strict typing by compilers for building open vm tools in newer guest operating systems. * Thaw filesystems when the snapshot commit message to VMX fails. If it takes a long time to freeze filesystems, VMX may timeout the snapshot operation so the commit fails. After this happens, thaw the frozen filesystems. * open-vm-tools: fixes to build on FreeBSD 10 Various fixes to make open-vm-tools build on FreeBSD: - disable vsock for OSes other than Linux - define CheckSanity only ifdef VMX86_DEBUG - make build of hgfsUriPosix depend on having gtkmm, and enable on FreeBSD - xferlogs.c does not need wchar.h Instructions for building on FreeBSD: 1. Install gcc48 with 'pkg install gcc' 2. Install build dependencies: glib libdnet libXinerama libXrandr gtk2 gtkmm24 3. autoreconf -i --force 4. env CC=gcc48 CFLAGS=-Wl,-rpath=/usr/local/lib/gcc48 CPPFLAGS="-I/usr/local/include/" LIBS="-L/usr/local/lib" ./configure --without-kernel-modules --without-xmlsecurity --without-icu --disable-vgauth --disable-grabbitmqproxy --disable-deploypkg 5. make * Don't build vmxnet driver for Linux >= 3.3 The vmxnet driver does not build for Linux kernel versions >= 3.3. * Don't build HGFS kernel driver for Linux >= 3.17.0 The HGFS kernel component is old and has many changes missing to support newer Linux kernel releases. There will be a newer update coming which will include all of the changes necessary for newer Linux kernels to be supported. For now, we are limiting the building of the current HGFS kernel client to Linux kernels 3.17.0 and earlier for this release of open-vm-tools. This will allow the build of the open-vm-tools package to complete on newer kernel versions.