From 6e701c12a1a4ad928ad0bff283520aba327fb0bc Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Oct 30 2018 05:13:18 +0000 Subject: import open-vm-tools-10.2.5-3.el7 --- diff --git a/.gitignore b/.gitignore index 4c3bf28..67325fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/open-vm-tools-10.1.10-6082533.tar.gz +SOURCES/open-vm-tools-10.2.5-8068406.tar.gz diff --git a/.open-vm-tools.metadata b/.open-vm-tools.metadata index f37185b..b6cc40d 100644 --- a/.open-vm-tools.metadata +++ b/.open-vm-tools.metadata @@ -1 +1 @@ -54795f3f71bd78af8046c01b511948f280d7cbd1 SOURCES/open-vm-tools-10.1.10-6082533.tar.gz +6199d6d3227540192f2fcdf53684f7bfbbd82655 SOURCES/open-vm-tools-10.2.5-8068406.tar.gz diff --git a/SOURCES/ovt-Ignore-ENXIO-errors-with-SyncDriver.patch b/SOURCES/ovt-Ignore-ENXIO-errors-with-SyncDriver.patch deleted file mode 100644 index 601998b..0000000 --- a/SOURCES/ovt-Ignore-ENXIO-errors-with-SyncDriver.patch +++ /dev/null @@ -1,62 +0,0 @@ -From ebc8bf4a58f7f65dbb7e7b2e1152322159faa228 Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Fri, 1 Jun 2018 15:58:51 +0200 -Subject: [PATCH] Ignore ENXIO errors with SyncDriver - -RH-Author: Cathy Avery -Message-id: <20180601155851.7526-1-cavery@redhat.com> -Patchwork-id: 80546 -O-Subject: [RHEL7.5.z open-vm-tools PATCH] Ignore ENXIO errors with SyncDriver -Bugzilla: 1582123 -RH-Acked-by: Richard Jones -RH-Acked-by: Mohammed Gamal -RH-Acked-by: Eduardo Otubo - -A quiesced snapshot fails when the target VM has a bind mount. The -problem is that the syncDriver gets an ENXIO error when it tries to -open the mount point. To fix the problem, let the quiesce operation -skip a mount point when opening it results in an ENXIO error. - -This change is based on pull request -https://github.com/vmware/open-vm-tools/pull/218 . - -Signed-off-by: Miroslav Rezanina - -Conflicts: - open-vm-tools/AUTHORS version 10.1.10 is empty. - -(cherry picked from commit 6559b7dfd9f6f40c2df76e1b1e785fa3eb1c1da4) -Signed-off-by: Cathy Avery ---- - lib/syncDriver/syncDriverLinux.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/open-vm-tools/lib/syncDriver/syncDriverLinux.c b/open-vm-tools/lib/syncDriver/syncDriverLinux.c -index da0a8cb..4422729 100644 ---- a/lib/syncDriver/syncDriverLinux.c -+++ b/lib/syncDriver/syncDriverLinux.c -@@ -1,5 +1,5 @@ - /********************************************************* -- * Copyright (C) 2011-2017 VMware, Inc. All rights reserved. -+ * Copyright (C) 2011-2018 VMware, Inc. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published -@@ -195,6 +195,14 @@ LinuxDriver_Freeze(const GSList *paths, - Debug(LGPFX "cannot access mounted directory '%s'.\n", path); - continue; - -+ case ENXIO: -+ /* -+ * A bind-mounted file, such as a mount of /dev/log for a -+ * chrooted application, will land us here. Just skip it. -+ */ -+ Debug(LGPFX "no such device or address '%s'.\n", path); -+ continue; -+ - case EIO: - /* - * A mounted HGFS filesystem with the backend disabled will give --- -1.8.3.1 - diff --git a/SOURCES/ovt-Workaround-for-false-negative-result-when-detecting.patch b/SOURCES/ovt-Workaround-for-false-negative-result-when-detecting.patch new file mode 100644 index 0000000..3fb6a84 --- /dev/null +++ b/SOURCES/ovt-Workaround-for-false-negative-result-when-detecting.patch @@ -0,0 +1,218 @@ +From c567bef4b4f7721ef5c0444f464a9843ba609ae2 Mon Sep 17 00:00:00 2001 +From: Miroslav Rezanina +Date: Thu, 2 Aug 2018 17:14:28 +0200 +Subject: [PATCH] Workaround for false negative result when detecting + cloud-init existance + +RH-Author: Miroslav Rezanina +Message-id: <1533230068-14044-1-git-send-email-mrezanin@redhat.com> +Patchwork-id: 81615 +O-Subject: [RHEL-7.6 open-vm-tools PATCH] Workaround for false negative result when detecting cloud-init existance +Bugzilla: 1601559 +RH-Acked-by: Richard Jones +RH-Acked-by: Cathy Avery + +From: Oliver Kurth + +"cloud-init -v" cmd is used to detect if cloud-init is properly configured and +it works on most linux distros. However in some linux distro like Amazon Linux 2, +"cloud-init -v" will print result to stderr instead of stdout and it makes +"forkExecAndWaitCommand" give false negative result. + +1. added a new bool switch in "ForkExecAndWaitCommand" to choose + if we should ignore the stderr output when the return code is 0 +2. removed unnecessary reference for "ForkExecAndWaitCommand" in linuxDeploymentUtilities.c +3. trivial change for some formatting + +(cherry picked from commit 443eced089b634176c6ad1f56512a43381997abc) +Signed-off-by: Miroslav Rezanina +--- + libDeployPkg/linuxDeployment.c | 55 ++++++++++++++-------- + libDeployPkg/linuxDeploymentUtilities.c | 3 +- + 2 files changed, 37 insertions(+), 21 deletions(-) + +diff --git a/libDeployPkg/linuxDeployment.c b/libDeployPkg/linuxDeployment.c +index 023d41f..7bcdd0a 100644 +--- a/libDeployPkg/linuxDeployment.c ++++ b/libDeployPkg/linuxDeployment.c +@@ -143,7 +143,7 @@ static bool CopyFileToDirectory(const char* srcPath, const char* destPath, + const char* fileName); + static int Deploy(const char* pkgName); + static char** GetFormattedCommandLine(const char* command); +-int ForkExecAndWaitCommand(const char* command); ++int ForkExecAndWaitCommand(const char* command, bool ignoreStdErr); + static void SetDeployError(const char* format, ...); + static const char* GetDeployError(void); + static void NoLogging(int level, const char* fmtstr, ...); +@@ -920,7 +920,7 @@ CloudInitSetup(const char *tmpDirPath) + "/bin/mkdir -p %s", cloudInitTmpDirPath); + command[sizeof(command) - 1] = '\0'; + +- forkExecResult = ForkExecAndWaitCommand(command); ++ forkExecResult = ForkExecAndWaitCommand(command, false); + if (forkExecResult != 0) { + SetDeployError("Error creating %s dir: %s", + cloudInitTmpDirPath, +@@ -937,7 +937,7 @@ CloudInitSetup(const char *tmpDirPath) + "/usr/bin/test -f %s/nics.txt", tmpDirPath); + command[sizeof(command) - 1] = '\0'; + +- forkExecResult = ForkExecAndWaitCommand(command); ++ forkExecResult = ForkExecAndWaitCommand(command, false); + + /* + * /usr/bin/test -f returns 0 if the file exists +@@ -946,7 +946,7 @@ CloudInitSetup(const char *tmpDirPath) + */ + if (forkExecResult == 0) { + sLog(log_info, "nics.txt file exists. Copying.."); +- if(!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "nics.txt")) { ++ if (!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "nics.txt")) { + goto done; + } + } +@@ -973,7 +973,7 @@ CloudInitSetup(const char *tmpDirPath) + } + + sLog(log_info, "Copying main configuration file cust.cfg"); +- if(!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "cust.cfg")) { ++ if (!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "cust.cfg")) { + goto done; + } + +@@ -992,7 +992,7 @@ done: + "/bin/rm -rf %s", + cloudInitTmpDirPath); + command[sizeof(command) - 1] = '\0'; +- ForkExecAndWaitCommand(command); ++ ForkExecAndWaitCommand(command, false); + } + sLog(log_error, "Setting generic error status in vmx. \n"); + SetCustomizationStatusInVmx(TOOLSDEPLOYPKG_RUNNING, +@@ -1016,7 +1016,7 @@ CopyFileToDirectory(const char* srcPath, const char* destPath, + snprintf(command, sizeof(command), "/bin/cp %s/%s %s/%s.tmp", srcPath, + fileName, destPath, fileName); + command[sizeof(command) - 1] = '\0'; +- forkExecResult = ForkExecAndWaitCommand(command); ++ forkExecResult = ForkExecAndWaitCommand(command, false); + if (forkExecResult != 0) { + SetDeployError("Error while copying file %s: %s", fileName, + strerror(errno)); +@@ -1026,7 +1026,7 @@ CopyFileToDirectory(const char* srcPath, const char* destPath, + fileName, destPath, fileName); + command[sizeof(command) - 1] = '\0'; + +- forkExecResult = ForkExecAndWaitCommand(command); ++ forkExecResult = ForkExecAndWaitCommand(command, false); + if (forkExecResult != 0) { + SetDeployError("Error while renaming temp file %s: %s", fileName, + strerror(errno)); +@@ -1090,7 +1090,7 @@ UseCloudInitWorkflow(const char* dirPath) + sLog(log_info, "cust.cfg is found in '%s' directory.", dirPath); + } + +- forkExecResult = ForkExecAndWaitCommand(cloudInitCommand); ++ forkExecResult = ForkExecAndWaitCommand(cloudInitCommand, true); + if (forkExecResult != 0) { + sLog(log_info, "cloud-init is not installed"); + free(cfgFullPath); +@@ -1191,7 +1191,7 @@ Deploy(const char* packageName) + deployStatus = CloudInitSetup(tmpDirPath); + } else { + sLog(log_info, "Executing traditional GOSC workflow"); +- deploymentResult = ForkExecAndWaitCommand(command); ++ deploymentResult = ForkExecAndWaitCommand(command, false); + free(command); + + if (deploymentResult != CUST_SUCCESS) { +@@ -1257,7 +1257,7 @@ Deploy(const char* packageName) + strcat(cleanupCommand, tmpDirPath); + + sLog(log_info, "Launching cleanup. \n"); +- if (ForkExecAndWaitCommand(cleanupCommand) != 0) { ++ if (ForkExecAndWaitCommand(cleanupCommand, false) != 0) { + sLog(log_warning, "Error while clean up tmp directory %s: (%s)", + tmpDirPath, strerror (errno)); + } +@@ -1286,7 +1286,7 @@ Deploy(const char* packageName) + int rebootComandResult = 0; + do { + sLog(log_info, "Rebooting\n"); +- rebootComandResult = ForkExecAndWaitCommand("/sbin/telinit 6"); ++ rebootComandResult = ForkExecAndWaitCommand("/sbin/telinit 6", false); + sleep(1); + } while (rebootComandResult == 0); + sLog(log_error, "telinit returned error %d\n", rebootComandResult); +@@ -1497,11 +1497,12 @@ GetFormattedCommandLine(const char* command) + * fork-and-exec. + * + * @param [IN] command Command to execute ++ * @param [IN] ignoreStdErr If we ignore stderr when cmd's return code is 0 + * @return Return code from the process (or DEPLOY_ERROR) + * + **/ + int +-ForkExecAndWaitCommand(const char* command) ++ForkExecAndWaitCommand(const char* command, bool ignoreStdErr) + { + ProcessHandle hp; + int retval; +@@ -1519,14 +1520,30 @@ ForkExecAndWaitCommand(const char* command) + + Process_RunToComplete(hp, 100); + sLog(log_info, "Customization command output: %s\n", Process_GetStdout(hp)); +- +- if(Process_GetExitCode(hp) == 0 && strlen(Process_GetStderr(hp)) > 0) { +- // Assume command failed if it wrote to stderr, even if exitCode is 0 +- sLog(log_error, "Customization command failed: %s\n", Process_GetStderr(hp)); +- retval = -1; ++ retval = Process_GetExitCode(hp); ++ ++ if (retval == 0) { ++ if (strlen(Process_GetStderr(hp)) > 0) { ++ if (!ignoreStdErr) { ++ // Assume command failed if it wrote to stderr, even if exitCode is 0 ++ sLog(log_error, ++ "Customization command failed with stderr: %s\n", ++ Process_GetStderr(hp)); ++ retval = -1; ++ } else { ++ // If we choose to ignore stderr, we do not return -1 when return ++ // code is 0. e.g, PR2148977, "cloud-init -v" will return 0 ++ // even there is output in stderr ++ sLog(log_info, "Ignoring stderr output: %s\n", Process_GetStderr(hp)); ++ } ++ } + } else { +- retval = Process_GetExitCode(hp); ++ sLog(log_error, ++ "Customization command failed with exitcode: %d, stderr: %s\n", ++ retval, ++ Process_GetStderr(hp)); + } ++ + Process_Destroy(hp); + return retval; + } +diff --git a/libDeployPkg/linuxDeploymentUtilities.c b/libDeployPkg/linuxDeploymentUtilities.c +index 83f942d..93e1b0a 100644 +--- a/libDeployPkg/linuxDeploymentUtilities.c ++++ b/libDeployPkg/linuxDeploymentUtilities.c +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2016-2017 VMware, Inc. All rights reserved. ++ * Copyright (C) 2016-2018 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -24,7 +24,6 @@ + #include + #include "linuxDeploymentUtilities.h" + +-extern int ForkExecAndWaitCommand(const char* command); + extern LogFunction sLog; + + /** +-- +1.8.3.1 + diff --git a/SOURCES/resolutionKMS-wayland-2.patch b/SOURCES/resolutionKMS-wayland-2.patch deleted file mode 100644 index 8c9376d..0000000 --- a/SOURCES/resolutionKMS-wayland-2.patch +++ /dev/null @@ -1,339 +0,0 @@ ---- open-vm-tools-10.1.10-6082533/services/plugins/resolutionKMS/resolutionKMS.c 2017-09-27 18:16:07.428992005 -0700 -+++ open-vm-tools-10.1.10-modified/services/plugins/resolutionKMS/resolutionKMS.c 2017-09-27 16:38:40.000000000 -0700 -@@ -1,5 +1,5 @@ - /********************************************************* -- * Copyright (C) 2008-2016 VMware, Inc. All rights reserved. -+ * Copyright (C) 2008-2017 VMware, Inc. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published -@@ -279,6 +279,34 @@ - g_warning("%s: Unable to set tools.capability.resolution_server\n", - __FUNCTION__); - } -+ -+ if (value == 1) { -+ /* -+ * Whenever resolutionKMS is enabled, send -+ * "tools.capability.resolution_server toolbox-dnd 0" to clear -+ * resolutionSet as resolution server. -+ * -+ * Note: The below rpc is sent to TOOLS_DND_NAME if rpcChannelName is -+ * TOOLS_DAEMON_NAME and vice versa (to clear the opposite channel). -+ * This is how rpcChannelName is selected in ToolsOnLoad(): -+ * -+ * if (strcmp(ctx->name, VMTOOLS_GUEST_SERVICE) == 0) { -+ * rpcChannelName = TOOLS_DAEMON_NAME; -+ * } else if (strcmp(ctx->name, VMTOOLS_USER_SERVICE) == 0) { -+ * rpcChannelName = TOOLS_DND_NAME; -+ * } -+ */ -+ gchar *msgClear; -+ msgClear = g_strdup_printf("tools.capability.resolution_server %s 0", -+ (strcmp(rpcChannelName, TOOLS_DAEMON_NAME) == 0 ? -+ TOOLS_DND_NAME : TOOLS_DAEMON_NAME)); -+ if (!RpcChannel_Send(chan, msgClear, strlen(msgClear), NULL, NULL)) { -+ g_warning("%s: Unable to clear tools.capability.resolution_server\n", -+ __FUNCTION__); -+ } -+ g_free(msgClear); -+ } -+ - g_free(msg); - } - -@@ -448,7 +476,7 @@ - - /* - * Save the RPC channel name from the ToolsAppCtx so that we can use it later -- * in calls to ResolutionSetServerCapability(). -+ * in calls to ResolutionKMSServerCapability(). - */ - - if (strcmp(ctx->name, VMTOOLS_GUEST_SERVICE) == 0) { ---- open-vm-tools-10.1.10-6082533/services/plugins/resolutionSet/resolutionCommon.c 2017-09-27 18:16:07.429992005 -0700 -+++ open-vm-tools-10.1.10-modified/services/plugins/resolutionSet/resolutionCommon.c 2017-09-27 16:38:40.000000000 -0700 -@@ -1,5 +1,5 @@ - /********************************************************* -- * Copyright (C) 2016 VMware, Inc. All rights reserved. -+ * Copyright (C) 2016-2017 VMware, Inc. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published -@@ -38,6 +38,7 @@ - /* The DRM device we are looking for */ - #define RESOLUTION_VENDOR "0x15ad" - #define RESOLUTION_DEVICE "0x0405" -+#define RESOLUTION_KERNELNAME "vmwgfx" - - /* Required DRM version for resolutionKMS */ - #define RESOLUTION_DRM_MAJOR 2 -@@ -84,11 +85,19 @@ - struct udev_list_entry *devices, *devListEntry; - struct udev_device *dev; - int fd = -1; -+ int drmFd; - const char *devNode = NULL; - -+ /* Force load the kernel module. */ -+ drmFd = drmOpen(RESOLUTION_KERNELNAME, NULL); -+ if (drmFd >= 0) { -+ (void) drmDropMaster(drmFd); -+ } -+ - udev = udev_new(); -- if (!udev) -- return -1; -+ if (!udev) { -+ goto outNoUdev; -+ } - - /* - * Udev error return codes that are not caught immediately are -@@ -148,6 +157,10 @@ - udev_enumerate_unref(enumerate); - udev_unref(udev); - -+ if (drmFd >= 0) { -+ drmClose(drmFd); -+ } -+ - return fd; - - outFound: -@@ -155,6 +168,10 @@ - outErr: - udev_enumerate_unref(enumerate); - udev_unref(udev); -+ outNoUdev: -+ if (drmFd >= 0) { -+ drmClose(drmFd); -+ } - - return -1; - } -@@ -190,7 +207,7 @@ - } - - if (ver->version_major != RESOLUTION_DRM_MAJOR || -- ver->version_minor < RESOLUTION_DRM_MINOR) { -+ ver->version_minor < RESOLUTION_DRM_MINOR) { - g_debug("%s: Insufficient DRM version %d.%d for resolutionKMS.\n", - __func__, ver->version_major, ver->version_minor); - drmFreeVersion(ver); ---- open-vm-tools-10.1.10-6082533/services/plugins/resolutionSet/resolutionDL.c 2017-09-27 18:16:07.429992005 -0700 -+++ open-vm-tools-10.1.10-modified/services/plugins/resolutionSet/resolutionDL.c 2017-09-27 16:38:40.000000000 -0700 -@@ -66,6 +66,8 @@ - }; - - static struct FuncToResolv drm2Table[] = { -+ LIBDRM_RESOLV(Open), -+ LIBDRM_RESOLV(Close), - LIBDRM_RESOLV(GetVersion), - LIBDRM_RESOLV(FreeVersion), - LIBDRM_RESOLV(DropMaster), ---- open-vm-tools-10.1.10-6082533/services/plugins/resolutionSet/resolutionDL.h 2017-09-27 18:16:07.429992005 -0700 -+++ open-vm-tools-10.1.10-modified/services/plugins/resolutionSet/resolutionDL.h 2017-09-27 16:38:40.000000000 -0700 -@@ -144,6 +144,8 @@ - * However this struct is not subject to the license header of this file. - */ - struct Drm2Interface { -+ int (*Open)(const char *, const char *); -+ int (*Close)(int); - drmVersionPtr (*GetVersion)(int fd); - void (*FreeVersion)(drmVersionPtr); - int (*DropMaster)(int fd); -@@ -190,6 +192,10 @@ - #define udev_list_entry_foreach(_a, _b)\ - udevi_list_entry_foreach(udevi, _a, _b) - -+#define drmOpen \ -+ drmi->Open -+#define drmClose \ -+ drmi->Close - #define drmGetVersion \ - drmi->GetVersion - #define drmFreeVersion \ ---- open-vm-tools-10.1.10-6082533/services/plugins/resolutionSet/resolutionSet.c 2017-09-27 18:16:07.429992005 -0700 -+++ open-vm-tools-10.1.10-modified/services/plugins/resolutionSet/resolutionSet.c 2017-09-27 16:38:40.000000000 -0700 -@@ -76,8 +76,7 @@ - * - * Initialize the guest resolution library. - * -- * @param[in] handle Back-end specific handle, if needed. E.g., in the X11 -- case, this refers to the X11 display handle. -+ * @param[in] handle Back-end specific handle, if needed. - * @return TRUE on success, FALSE on failure - */ - ---- open-vm-tools-10.1.10-6082533/services/plugins/resolutionSet/resolutionX11.c 2017-09-27 18:16:07.429992005 -0700 -+++ open-vm-tools-10.1.10-modified/services/plugins/resolutionSet/resolutionX11.c 2017-09-27 16:38:40.000000000 -0700 -@@ -35,8 +35,6 @@ - #ifndef NO_MULTIMON - #include - #endif --#include --#include - - #include "vmware.h" - #include "debug.h" -@@ -62,6 +60,8 @@ - Bool canUseVMwareCtrlTopologySet; - // TRUE if VMwareCtrl extension supports topology set - Bool canUseRandR12; // TRUE if RandR extension >= 1.2 available -+ -+ Bool canUseResolutionKMS; // TRUE if backing off for resolutionKMS - } ResolutionInfoX11Type; - - -@@ -78,6 +78,7 @@ - static Bool ResolutionCanSet(void); - static Bool TopologyCanSet(void); - static Bool SelectResolution(uint32 width, uint32 height); -+static int ResolutionX11ErrorHandler(Display *d, XErrorEvent *e); - - - /* -@@ -89,29 +90,45 @@ - * X11 back-end initializer. Records caller's X11 display, then determines - * which capabilities are available. - * -- * @param[in] handle User's X11 display -+ * @param[in] handle (ResolutionInfoX11Type is used as backend specific handle) - * @return TRUE on success, FALSE on failure. - */ - - Bool - ResolutionBackendInit(InitHandle handle) - { -- ResolutionInfoX11Type *resInfoX = &resolutionInfoX11; -+ ResolutionInfoX11Type *resInfoX = (ResolutionInfoX11Type *)handle; - ResolutionInfoType *resInfo = &resolutionInfo; - int dummy1; - int dummy2; - -- memset(resInfoX, 0, sizeof *resInfoX); -+ if (resInfoX->canUseResolutionKMS == TRUE) { -+ resInfo->canSetResolution = FALSE; -+ resInfo->canSetTopology = FALSE; -+ return FALSE; -+ } - -- resInfoX->display = handle; -+ XSetErrorHandler(ResolutionX11ErrorHandler); -+ resInfoX->display = XOpenDisplay(NULL); - -+ /* -+ * In case display is NULL, we do not load resolutionSet -+ * as it serve no purpose. Also avoids SEGFAULT issue -+ * like BZ1880932. -+ * -+ * VMX currently remembers the settings across a reboot, -+ * so let's say someone replaces our Xorg driver with -+ * xf86-video-modesetting, and then rebooted, we'd end up here, -+ * but the VMX would still send resolution / topology events -+ * and we'd hit the same segfault. -+ */ - if (resInfoX->display == NULL) { -+ g_error("%s: Invalid display detected.\n", __func__); - resInfo->canSetResolution = FALSE; - resInfo->canSetTopology = FALSE; -- return TRUE; -+ return FALSE; - } - -- resInfoX->display = handle; - resInfoX->rootWindow = DefaultRootWindow(resInfoX->display); - resInfoX->canUseVMwareCtrl = VMwareCtrl_QueryVersion(resInfoX->display, &dummy1, - &dummy2); -@@ -132,6 +149,10 @@ - void - ResolutionBackendCleanup(void) - { -+ ResolutionInfoX11Type *resInfoX = &resolutionInfoX11; -+ if (resInfoX->display) { -+ XCloseDisplay(resInfoX->display); -+ } - return; - } - -@@ -524,7 +545,7 @@ - g_debug("Setting guest resolution to: %dx%d (requested: %d, %d)\n", - xrrSizes[bestFitIndex].width, xrrSizes[bestFitIndex].height, width, height); - rc = XRRSetScreenConfig(resInfoX->display, xrrConfig, resInfoX->rootWindow, -- bestFitIndex, xrrCurRotation, GDK_CURRENT_TIME); -+ bestFitIndex, xrrCurRotation, CurrentTime); - g_debug("XRRSetScreenConfig returned %d (result: %dx%d)\n", rc, - xrrSizes[bestFitIndex].width, xrrSizes[bestFitIndex].height); - } else { -@@ -574,42 +595,28 @@ - - - /** -- * Obtain a "handle", which for X11, is a display pointer. -+ * Obtain a "handle". - * - * @note We will have to move this out of the resolution plugin soon, I am -- * just landing this here now for convenience as I port resolution set over -+ * just landing this here now for convenience as I port resolution set over - * to the new service architecture. - * -- * @return X server display -+ * @return ResolutionInfoX11Type as backend specific handle - */ - - InitHandle - ResolutionToolkitInit(ToolsAppCtx *ctx) // IN: For config database access - { -- int argc = 1; -- char *argv[] = {"", NULL}; -- GtkWidget *wnd; -- Display *display; -+ ResolutionInfoX11Type *resInfoX = &resolutionInfoX11; - int fd; - -+ memset(resInfoX, 0, sizeof *resInfoX); -+ - fd = resolutionCheckForKMS(ctx); - if (fd >= 0) { - resolutionDRMClose(fd); - g_message("%s: Backing off for resolutionKMS.\n", __func__); -- return (InitHandle) 0; -+ resInfoX->canUseResolutionKMS = TRUE; - } -- -- XSetErrorHandler(ResolutionX11ErrorHandler); -- gtk_init(&argc, (char ***) &argv); -- wnd = gtk_invisible_new(); --#ifndef GTK3 -- display = GDK_WINDOW_XDISPLAY(wnd->window); --#else -- display = GDK_WINDOW_XDISPLAY(gtk_widget_get_window(wnd)); --#endif -- -- if (!display) -- g_error("%s: Invalid display detected.\n", __func__); -- -- return (InitHandle) display; -+ return (InitHandle) resInfoX; - } ---- open-vm-tools-10.1.10-6082533/services/plugins/resolutionSet/resolutionRandR12.c 2017-07-28 15:19:20.000000000 -0700 -+++ open-vm-tools-10.1.10-modified/services/plugins/resolutionSet/resolutionRandR12.c 2017-09-27 16:38:40.000000000 -0700 -@@ -139,7 +139,7 @@ - #define LOG_STOP fclose(_ofile) - #else - #define LOG_START --#include -+#include - #define LOG_STOP - #endif - -@@ -1000,7 +1000,7 @@ - info = RandR12GetInfo(dpy, rootWin); - if (!info) { - g_warning("%s: Setup info struct failed.\n", __func__); -- goto out_ungrab; -+ return FALSE; - } - - RandR12GetDpi(dpy, screen, info); diff --git a/SOURCES/resolutionKMS-wayland.patch b/SOURCES/resolutionKMS-wayland.patch deleted file mode 100644 index c922818..0000000 --- a/SOURCES/resolutionKMS-wayland.patch +++ /dev/null @@ -1,2283 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 20370ae..9e4272e 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -235,6 +235,14 @@ AC_ARG_ENABLE( - [enable_tests="$enableval"], - [enable_tests="auto"]) - -+AC_ARG_ENABLE( -+ resolutionkms, -+ AS_HELP_STRING( -+ [--enable-resolutionkms], -+ [build the linux / unix resolutionkms module.]), -+ [], -+ [enable_resolutionkms="auto"]) -+ - AM_INIT_AUTOMAKE - - ### -@@ -792,6 +800,7 @@ AC_CHECK_FUNCS( - [VIX_LIBADD="$VIX_LIBADD -ldl" - LIBVMTOOLS_LIBADD="$LIBVMTOOLS_LIBADD -ldl" - VGAUTH_LIBADD="$VGAUTH_LIBADD -ldl" -+ RESOLUTIONSET_LIBADD="$RESOLUTIONSET_LIBADD -ldl" - ], - [AC_MSG_ERROR( - [dlopen was not found, but is required for open-vm-tools to function properly. Please contact your OS vendor.])])]) -@@ -1265,6 +1274,15 @@ if test "$os" = "linux"; then - MODULES="$MODULES vmblock vmsync" - fi - buildHgfsmounter=yes -+ if test "x$enable_resolutionkms" != "xno"; then -+ PKG_CHECK_MODULES( -+ [LIBUDEV], -+ libdrm libudev, -+ [LIBUDEV_CFLAGS="$LIBUDEV_CFLAGS -DHAVE_LIBUDEV"], -+ [AC_MSG_WARN( -+ [Missing libdrm or libudev. The resolutionKMS plugin will search for them at run-time.])]) -+ enable_resolutionkms="yes" -+ fi - fi - - if test "$os" = "freebsd" || test "$os" = "kfreebsd-gnu"; then -@@ -1352,6 +1370,14 @@ else - UDEVRULESDIR="" - fi - -+if test "x$enable_resolutionkms" = "xauto"; then -+ enable_resolutionkms="no" -+fi -+ -+if test "x$enable_resolutionkms" = "xyes"; then -+ CPPFLAGS="$CPPFLAGS -DENABLE_RESOLUTIONKMS" -+fi -+ - AM_CONDITIONAL(BUILD_HGFSMOUNTER, test "$buildHgfsmounter" = "yes") - AM_CONDITIONAL(LINUX, test "$os" = "linux") - AM_CONDITIONAL(SOLARIS, test "$os" = "solaris") -@@ -1382,6 +1408,7 @@ AM_CONDITIONAL(ENABLE_CAF, test "$enable_caf" = "yes") - AM_CONDITIONAL(HAVE_VSOCK, test "$os" = "linux") - AM_CONDITIONAL(HAVE_MKDTEMP, test "$have_mkdtemp" = "yes") - AM_CONDITIONAL(HAVE_UDEV, test "$have_udev" = "yes") -+AM_CONDITIONAL(ENABLE_RESOLUTIONKMS, test "x$enable_resolutionkms" = "xyes") - - if test "$have_xsm" != "yes"; then - AC_DEFINE([NO_XSM], 1, []) -@@ -1492,6 +1519,7 @@ AC_SUBST([LIB_AUTH_CPPFLAGS]) - AC_SUBST([LIB_IMPERSONATE_CPPFLAGS]) - AC_SUBST([LIB_USER_CPPFLAGS]) - AC_SUBST([LIBVMTOOLS_LIBADD]) -+AC_SUBST([RESOLUTIONSET_LIBADD]) - - ### Program substs - -@@ -1564,6 +1592,7 @@ AC_CONFIG_FILES([ \ - services/plugins/hgfsServer/Makefile \ - services/plugins/powerOps/Makefile \ - services/plugins/resolutionSet/Makefile \ -+ services/plugins/resolutionKMS/Makefile \ - services/plugins/timeSync/Makefile \ - services/plugins/vix/Makefile \ - services/plugins/vmbackup/Makefile \ -diff --git a/services/plugins/Makefile.am b/services/plugins/Makefile.am -index 5d75718..5deb281 100644 ---- a/services/plugins/Makefile.am -+++ b/services/plugins/Makefile.am -@@ -34,6 +34,14 @@ endif - if HAVE_X11 - SUBDIRS += resolutionSet - endif -+if ENABLE_RESOLUTIONKMS -+if !HAVE_X11 -+# resolutionKMS needs resolutionCommon, which lives in -+# the resolutionSet sub directory -+ SUBDIRS += resolutionSet -+endif -+SUBDIRS += resolutionKMS -+endif - SUBDIRS += timeSync - SUBDIRS += vix - SUBDIRS += vmbackup -diff --git a/services/plugins/resolutionKMS/COPYING b/services/plugins/resolutionKMS/COPYING -new file mode 100644 -index 0000000..9c6a6cc ---- /dev/null -+++ b/services/plugins/resolutionKMS/COPYING -@@ -0,0 +1,502 @@ -+ GNU LESSER GENERAL PUBLIC LICENSE -+ Version 2.1, February 1999 -+ -+ Copyright (C) 1991, 1999 Free Software Foundation, Inc. -+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ Everyone is permitted to copy and distribute verbatim copies -+ of this license document, but changing it is not allowed. -+ -+[This is the first released version of the Lesser GPL. It also counts -+ as the successor of the GNU Library Public License, version 2, hence -+ the version number 2.1.] -+ -+ Preamble -+ -+ The licenses for most software are designed to take away your -+freedom to share and change it. By contrast, the GNU General Public -+Licenses are intended to guarantee your freedom to share and change -+free software--to make sure the software is free for all its users. -+ -+ This license, the Lesser General Public License, applies to some -+specially designated software packages--typically libraries--of the -+Free Software Foundation and other authors who decide to use it. You -+can use it too, but we suggest you first think carefully about whether -+this license or the ordinary General Public License is the better -+strategy to use in any particular case, based on the explanations below. -+ -+ When we speak of free software, we are referring to freedom of use, -+not price. Our General Public Licenses are designed to make sure that -+you have the freedom to distribute copies of free software (and charge -+for this service if you wish); that you receive source code or can get -+it if you want it; that you can change the software and use pieces of -+it in new free programs; and that you are informed that you can do -+these things. -+ -+ To protect your rights, we need to make restrictions that forbid -+distributors to deny you these rights or to ask you to surrender these -+rights. These restrictions translate to certain responsibilities for -+you if you distribute copies of the library or if you modify it. -+ -+ For example, if you distribute copies of the library, whether gratis -+or for a fee, you must give the recipients all the rights that we gave -+you. You must make sure that they, too, receive or can get the source -+code. If you link other code with the library, you must provide -+complete object files to the recipients, so that they can relink them -+with the library after making changes to the library and recompiling -+it. And you must show them these terms so they know their rights. -+ -+ We protect your rights with a two-step method: (1) we copyright the -+library, and (2) we offer you this license, which gives you legal -+permission to copy, distribute and/or modify the library. -+ -+ To protect each distributor, we want to make it very clear that -+there is no warranty for the free library. Also, if the library is -+modified by someone else and passed on, the recipients should know -+that what they have is not the original version, so that the original -+author's reputation will not be affected by problems that might be -+introduced by others. -+ -+ Finally, software patents pose a constant threat to the existence of -+any free program. We wish to make sure that a company cannot -+effectively restrict the users of a free program by obtaining a -+restrictive license from a patent holder. Therefore, we insist that -+any patent license obtained for a version of the library must be -+consistent with the full freedom of use specified in this license. -+ -+ Most GNU software, including some libraries, is covered by the -+ordinary GNU General Public License. This license, the GNU Lesser -+General Public License, applies to certain designated libraries, and -+is quite different from the ordinary General Public License. We use -+this license for certain libraries in order to permit linking those -+libraries into non-free programs. -+ -+ When a program is linked with a library, whether statically or using -+a shared library, the combination of the two is legally speaking a -+combined work, a derivative of the original library. The ordinary -+General Public License therefore permits such linking only if the -+entire combination fits its criteria of freedom. The Lesser General -+Public License permits more lax criteria for linking other code with -+the library. -+ -+ We call this license the "Lesser" General Public License because it -+does Less to protect the user's freedom than the ordinary General -+Public License. It also provides other free software developers Less -+of an advantage over competing non-free programs. These disadvantages -+are the reason we use the ordinary General Public License for many -+libraries. However, the Lesser license provides advantages in certain -+special circumstances. -+ -+ For example, on rare occasions, there may be a special need to -+encourage the widest possible use of a certain library, so that it becomes -+a de-facto standard. To achieve this, non-free programs must be -+allowed to use the library. A more frequent case is that a free -+library does the same job as widely used non-free libraries. In this -+case, there is little to gain by limiting the free library to free -+software only, so we use the Lesser General Public License. -+ -+ In other cases, permission to use a particular library in non-free -+programs enables a greater number of people to use a large body of -+free software. For example, permission to use the GNU C Library in -+non-free programs enables many more people to use the whole GNU -+operating system, as well as its variant, the GNU/Linux operating -+system. -+ -+ Although the Lesser General Public License is Less protective of the -+users' freedom, it does ensure that the user of a program that is -+linked with the Library has the freedom and the wherewithal to run -+that program using a modified version of the Library. -+ -+ The precise terms and conditions for copying, distribution and -+modification follow. Pay close attention to the difference between a -+"work based on the library" and a "work that uses the library". The -+former contains code derived from the library, whereas the latter must -+be combined with the library in order to run. -+ -+ GNU LESSER GENERAL PUBLIC LICENSE -+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -+ -+ 0. This License Agreement applies to any software library or other -+program which contains a notice placed by the copyright holder or -+other authorized party saying it may be distributed under the terms of -+this Lesser General Public License (also called "this License"). -+Each licensee is addressed as "you". -+ -+ A "library" means a collection of software functions and/or data -+prepared so as to be conveniently linked with application programs -+(which use some of those functions and data) to form executables. -+ -+ The "Library", below, refers to any such software library or work -+which has been distributed under these terms. A "work based on the -+Library" means either the Library or any derivative work under -+copyright law: that is to say, a work containing the Library or a -+portion of it, either verbatim or with modifications and/or translated -+straightforwardly into another language. (Hereinafter, translation is -+included without limitation in the term "modification".) -+ -+ "Source code" for a work means the preferred form of the work for -+making modifications to it. For a library, complete source code means -+all the source code for all modules it contains, plus any associated -+interface definition files, plus the scripts used to control compilation -+and installation of the library. -+ -+ Activities other than copying, distribution and modification are not -+covered by this License; they are outside its scope. The act of -+running a program using the Library is not restricted, and output from -+such a program is covered only if its contents constitute a work based -+on the Library (independent of the use of the Library in a tool for -+writing it). Whether that is true depends on what the Library does -+and what the program that uses the Library does. -+ -+ 1. You may copy and distribute verbatim copies of the Library's -+complete source code as you receive it, in any medium, provided that -+you conspicuously and appropriately publish on each copy an -+appropriate copyright notice and disclaimer of warranty; keep intact -+all the notices that refer to this License and to the absence of any -+warranty; and distribute a copy of this License along with the -+Library. -+ -+ You may charge a fee for the physical act of transferring a copy, -+and you may at your option offer warranty protection in exchange for a -+fee. -+ -+ 2. You may modify your copy or copies of the Library or any portion -+of it, thus forming a work based on the Library, and copy and -+distribute such modifications or work under the terms of Section 1 -+above, provided that you also meet all of these conditions: -+ -+ a) The modified work must itself be a software library. -+ -+ b) You must cause the files modified to carry prominent notices -+ stating that you changed the files and the date of any change. -+ -+ c) You must cause the whole of the work to be licensed at no -+ charge to all third parties under the terms of this License. -+ -+ d) If a facility in the modified Library refers to a function or a -+ table of data to be supplied by an application program that uses -+ the facility, other than as an argument passed when the facility -+ is invoked, then you must make a good faith effort to ensure that, -+ in the event an application does not supply such function or -+ table, the facility still operates, and performs whatever part of -+ its purpose remains meaningful. -+ -+ (For example, a function in a library to compute square roots has -+ a purpose that is entirely well-defined independent of the -+ application. Therefore, Subsection 2d requires that any -+ application-supplied function or table used by this function must -+ be optional: if the application does not supply it, the square -+ root function must still compute square roots.) -+ -+These requirements apply to the modified work as a whole. If -+identifiable sections of that work are not derived from the Library, -+and can be reasonably considered independent and separate works in -+themselves, then this License, and its terms, do not apply to those -+sections when you distribute them as separate works. But when you -+distribute the same sections as part of a whole which is a work based -+on the Library, the distribution of the whole must be on the terms of -+this License, whose permissions for other licensees extend to the -+entire whole, and thus to each and every part regardless of who wrote -+it. -+ -+Thus, it is not the intent of this section to claim rights or contest -+your rights to work written entirely by you; rather, the intent is to -+exercise the right to control the distribution of derivative or -+collective works based on the Library. -+ -+In addition, mere aggregation of another work not based on the Library -+with the Library (or with a work based on the Library) on a volume of -+a storage or distribution medium does not bring the other work under -+the scope of this License. -+ -+ 3. You may opt to apply the terms of the ordinary GNU General Public -+License instead of this License to a given copy of the Library. To do -+this, you must alter all the notices that refer to this License, so -+that they refer to the ordinary GNU General Public License, version 2, -+instead of to this License. (If a newer version than version 2 of the -+ordinary GNU General Public License has appeared, then you can specify -+that version instead if you wish.) Do not make any other change in -+these notices. -+ -+ Once this change is made in a given copy, it is irreversible for -+that copy, so the ordinary GNU General Public License applies to all -+subsequent copies and derivative works made from that copy. -+ -+ This option is useful when you wish to copy part of the code of -+the Library into a program that is not a library. -+ -+ 4. You may copy and distribute the Library (or a portion or -+derivative of it, under Section 2) in object code or executable form -+under the terms of Sections 1 and 2 above provided that you accompany -+it with the complete corresponding machine-readable source code, which -+must be distributed under the terms of Sections 1 and 2 above on a -+medium customarily used for software interchange. -+ -+ If distribution of object code is made by offering access to copy -+from a designated place, then offering equivalent access to copy the -+source code from the same place satisfies the requirement to -+distribute the source code, even though third parties are not -+compelled to copy the source along with the object code. -+ -+ 5. A program that contains no derivative of any portion of the -+Library, but is designed to work with the Library by being compiled or -+linked with it, is called a "work that uses the Library". Such a -+work, in isolation, is not a derivative work of the Library, and -+therefore falls outside the scope of this License. -+ -+ However, linking a "work that uses the Library" with the Library -+creates an executable that is a derivative of the Library (because it -+contains portions of the Library), rather than a "work that uses the -+library". The executable is therefore covered by this License. -+Section 6 states terms for distribution of such executables. -+ -+ When a "work that uses the Library" uses material from a header file -+that is part of the Library, the object code for the work may be a -+derivative work of the Library even though the source code is not. -+Whether this is true is especially significant if the work can be -+linked without the Library, or if the work is itself a library. The -+threshold for this to be true is not precisely defined by law. -+ -+ If such an object file uses only numerical parameters, data -+structure layouts and accessors, and small macros and small inline -+functions (ten lines or less in length), then the use of the object -+file is unrestricted, regardless of whether it is legally a derivative -+work. (Executables containing this object code plus portions of the -+Library will still fall under Section 6.) -+ -+ Otherwise, if the work is a derivative of the Library, you may -+distribute the object code for the work under the terms of Section 6. -+Any executables containing that work also fall under Section 6, -+whether or not they are linked directly with the Library itself. -+ -+ 6. As an exception to the Sections above, you may also combine or -+link a "work that uses the Library" with the Library to produce a -+work containing portions of the Library, and distribute that work -+under terms of your choice, provided that the terms permit -+modification of the work for the customer's own use and reverse -+engineering for debugging such modifications. -+ -+ You must give prominent notice with each copy of the work that the -+Library is used in it and that the Library and its use are covered by -+this License. You must supply a copy of this License. If the work -+during execution displays copyright notices, you must include the -+copyright notice for the Library among them, as well as a reference -+directing the user to the copy of this License. Also, you must do one -+of these things: -+ -+ a) Accompany the work with the complete corresponding -+ machine-readable source code for the Library including whatever -+ changes were used in the work (which must be distributed under -+ Sections 1 and 2 above); and, if the work is an executable linked -+ with the Library, with the complete machine-readable "work that -+ uses the Library", as object code and/or source code, so that the -+ user can modify the Library and then relink to produce a modified -+ executable containing the modified Library. (It is understood -+ that the user who changes the contents of definitions files in the -+ Library will not necessarily be able to recompile the application -+ to use the modified definitions.) -+ -+ b) Use a suitable shared library mechanism for linking with the -+ Library. A suitable mechanism is one that (1) uses at run time a -+ copy of the library already present on the user's computer system, -+ rather than copying library functions into the executable, and (2) -+ will operate properly with a modified version of the library, if -+ the user installs one, as long as the modified version is -+ interface-compatible with the version that the work was made with. -+ -+ c) Accompany the work with a written offer, valid for at -+ least three years, to give the same user the materials -+ specified in Subsection 6a, above, for a charge no more -+ than the cost of performing this distribution. -+ -+ d) If distribution of the work is made by offering access to copy -+ from a designated place, offer equivalent access to copy the above -+ specified materials from the same place. -+ -+ e) Verify that the user has already received a copy of these -+ materials or that you have already sent this user a copy. -+ -+ For an executable, the required form of the "work that uses the -+Library" must include any data and utility programs needed for -+reproducing the executable from it. However, as a special exception, -+the materials to be distributed need not include anything that is -+normally distributed (in either source or binary form) with the major -+components (compiler, kernel, and so on) of the operating system on -+which the executable runs, unless that component itself accompanies -+the executable. -+ -+ It may happen that this requirement contradicts the license -+restrictions of other proprietary libraries that do not normally -+accompany the operating system. Such a contradiction means you cannot -+use both them and the Library together in an executable that you -+distribute. -+ -+ 7. You may place library facilities that are a work based on the -+Library side-by-side in a single library together with other library -+facilities not covered by this License, and distribute such a combined -+library, provided that the separate distribution of the work based on -+the Library and of the other library facilities is otherwise -+permitted, and provided that you do these two things: -+ -+ a) Accompany the combined library with a copy of the same work -+ based on the Library, uncombined with any other library -+ facilities. This must be distributed under the terms of the -+ Sections above. -+ -+ b) Give prominent notice with the combined library of the fact -+ that part of it is a work based on the Library, and explaining -+ where to find the accompanying uncombined form of the same work. -+ -+ 8. You may not copy, modify, sublicense, link with, or distribute -+the Library except as expressly provided under this License. Any -+attempt otherwise to copy, modify, sublicense, link with, or -+distribute the Library is void, and will automatically terminate your -+rights under this License. However, parties who have received copies, -+or rights, from you under this License will not have their licenses -+terminated so long as such parties remain in full compliance. -+ -+ 9. You are not required to accept this License, since you have not -+signed it. However, nothing else grants you permission to modify or -+distribute the Library or its derivative works. These actions are -+prohibited by law if you do not accept this License. Therefore, by -+modifying or distributing the Library (or any work based on the -+Library), you indicate your acceptance of this License to do so, and -+all its terms and conditions for copying, distributing or modifying -+the Library or works based on it. -+ -+ 10. Each time you redistribute the Library (or any work based on the -+Library), the recipient automatically receives a license from the -+original licensor to copy, distribute, link with or modify the Library -+subject to these terms and conditions. You may not impose any further -+restrictions on the recipients' exercise of the rights granted herein. -+You are not responsible for enforcing compliance by third parties with -+this License. -+ -+ 11. If, as a consequence of a court judgment or allegation of patent -+infringement or for any other reason (not limited to patent issues), -+conditions are imposed on you (whether by court order, agreement or -+otherwise) that contradict the conditions of this License, they do not -+excuse you from the conditions of this License. If you cannot -+distribute so as to satisfy simultaneously your obligations under this -+License and any other pertinent obligations, then as a consequence you -+may not distribute the Library at all. For example, if a patent -+license would not permit royalty-free redistribution of the Library by -+all those who receive copies directly or indirectly through you, then -+the only way you could satisfy both it and this License would be to -+refrain entirely from distribution of the Library. -+ -+If any portion of this section is held invalid or unenforceable under any -+particular circumstance, the balance of the section is intended to apply, -+and the section as a whole is intended to apply in other circumstances. -+ -+It is not the purpose of this section to induce you to infringe any -+patents or other property right claims or to contest validity of any -+such claims; this section has the sole purpose of protecting the -+integrity of the free software distribution system which is -+implemented by public license practices. Many people have made -+generous contributions to the wide range of software distributed -+through that system in reliance on consistent application of that -+system; it is up to the author/donor to decide if he or she is willing -+to distribute software through any other system and a licensee cannot -+impose that choice. -+ -+This section is intended to make thoroughly clear what is believed to -+be a consequence of the rest of this License. -+ -+ 12. If the distribution and/or use of the Library is restricted in -+certain countries either by patents or by copyrighted interfaces, the -+original copyright holder who places the Library under this License may add -+an explicit geographical distribution limitation excluding those countries, -+so that distribution is permitted only in or among countries not thus -+excluded. In such case, this License incorporates the limitation as if -+written in the body of this License. -+ -+ 13. The Free Software Foundation may publish revised and/or new -+versions of the Lesser General Public License from time to time. -+Such new versions will be similar in spirit to the present version, -+but may differ in detail to address new problems or concerns. -+ -+Each version is given a distinguishing version number. If the Library -+specifies a version number of this License which applies to it and -+"any later version", you have the option of following the terms and -+conditions either of that version or of any later version published by -+the Free Software Foundation. If the Library does not specify a -+license version number, you may choose any version ever published by -+the Free Software Foundation. -+ -+ 14. If you wish to incorporate parts of the Library into other free -+programs whose distribution conditions are incompatible with these, -+write to the author to ask for permission. For software which is -+copyrighted by the Free Software Foundation, write to the Free -+Software Foundation; we sometimes make exceptions for this. Our -+decision will be guided by the two goals of preserving the free status -+of all derivatives of our free software and of promoting the sharing -+and reuse of software generally. -+ -+ NO WARRANTY -+ -+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -+ -+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -+DAMAGES. -+ -+ END OF TERMS AND CONDITIONS -+ -+ How to Apply These Terms to Your New Libraries -+ -+ If you develop a new library, and you want it to be of the greatest -+possible use to the public, we recommend making it free software that -+everyone can redistribute and change. You can do so by permitting -+redistribution under these terms (or, alternatively, under the terms of the -+ordinary General Public License). -+ -+ To apply these terms, attach the following notices to the library. It is -+safest to attach them to the start of each source file to most effectively -+convey the exclusion of warranty; and each file should have at least the -+"copyright" line and a pointer to where the full notice is found. -+ -+ -+ Copyright (C) -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with this library; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ -+Also add information on how to contact you by electronic and paper mail. -+ -+You should also get your employer (if you work as a programmer) or your -+school, if any, to sign a "copyright disclaimer" for the library, if -+necessary. Here is a sample; alter the names: -+ -+ Yoyodyne, Inc., hereby disclaims all copyright interest in the -+ library `Frob' (a library for tweaking knobs) written by James Random Hacker. -+ -+ , 1 April 1990 -+ Ty Coon, President of Vice -+ -+That's all there is to it! -diff --git a/services/plugins/resolutionKMS/Makefile.am b/services/plugins/resolutionKMS/Makefile.am -new file mode 100644 -index 0000000..4503dc6 ---- /dev/null -+++ b/services/plugins/resolutionKMS/Makefile.am -@@ -0,0 +1,37 @@ -+################################################################################ -+### Copyright (C) 2009-2016 VMware, Inc. All rights reserved. -+### -+### This program is free software; you can redistribute it and/or modify -+### it under the terms of version 2 of the GNU General Public License as -+### published by the Free Software Foundation. -+### -+### This program is distributed in the hope that it will be useful, -+### but WITHOUT ANY WARRANTY; without even the implied warranty of -+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+### GNU General Public License for more details. -+### -+### You should have received a copy of the GNU General Public License -+### along with this program; if not, write to the Free Software -+### Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+################################################################################ -+ -+plugindir = @VMSVC_PLUGIN_INSTALLDIR@ -+plugin_LTLIBRARIES = libresolutionKMS.la -+ -+libresolutionKMS_la_CPPFLAGS = -+libresolutionKMS_la_CPPFLAGS += @LIBUDEV_CFLAGS@ -+libresolutionKMS_la_CPPFLAGS += @PLUGIN_CPPFLAGS@ -+ -+libresolutionKMS_la_LDFLAGS = -+libresolutionKMS_la_LDFLAGS += @PLUGIN_LDFLAGS@ -+ -+libresolutionKMS_la_LIBADD = -+libresolutionKMS_la_LIBADD += @VMTOOLS_LIBS@ -+libresolutionKMS_la_LIBADD += @RESOLUTIONSET_LIBADD@ -+libresolutionKMS_la_LIBADD += $(top_builddir)/services/plugins/resolutionSet/libresolutionCommon.la -+ -+libresolutionKMS_la_SOURCES = -+libresolutionKMS_la_SOURCES += resolutionKMS.c -+ -+libresolutionKMS_la_DEPENDENCIES = -+libresolutionKMS_la_DEPENDENCIES += $(top_builddir)/services/plugins/resolutionSet/libresolutionCommon.la -diff --git a/services/plugins/resolutionKMS/resolutionKMS.c b/services/plugins/resolutionKMS/resolutionKMS.c -new file mode 100644 -index 0000000..6aff018 ---- /dev/null -+++ b/services/plugins/resolutionKMS/resolutionKMS.c -@@ -0,0 +1,465 @@ -+/********************************************************* -+ * Copyright (C) 2008-2016 VMware, Inc. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Lesser General Public License as published -+ * by the Free Software Foundation version 2.1 and no later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+ * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public -+ * License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * along with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ *********************************************************/ -+ -+/** -+ * @file resolutionKMS.c -- -+ * -+ * Plugin to communicate GUI topology to the vmwgfx drm device through a -+ * control node. This file is a modified version of resolutionSet.c -+ */ -+ -+#define G_LOG_DOMAIN "resolutionKMS" -+ -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include "vmware.h" -+#include "debug.h" -+#include "rpcout.h" -+#include "str.h" -+#include "strutil.h" -+ -+#include "xdrutil.h" -+#include "vmware/guestrpc/tclodefs.h" -+#include "vmware/tools/plugin.h" -+#include "vmware/tools/utils.h" -+#include "../resolutionSet/resolutionCommon.h" -+#include "../resolutionSet/resolutionDL.h" -+ -+#include "vm_version.h" -+#include "embed_version.h" -+#include "vmtoolsd_version.h" -+VM_EMBED_VERSION(VMTOOLSD_VERSION_STRING); -+ -+/* -+ * The maximum number of capabilities we can set. -+ * -+ * See ResolutionSetCapabilities(). -+ */ -+#define RESOLUTION_SET_CAPABILITIES_MAX 5 -+ -+/* -+ * Global information about the communication state -+ */ -+typedef struct { -+ gboolean initialized; // Whether the plugin is already initialized. -+ int fd; // File descriptor to the DRM device. -+} KMSInfoType; -+ -+/* -+ * Internal global variables -+ */ -+KMSInfoType kmsInfo; -+ -+/* -+ * The name of the RPC channel we're using, e.g. TOOLS_DAEMON_NAME. Used by -+ * ResolutionSet_SetServerCapability() to determine which capability to set. -+ */ -+static const char *rpcChannelName = NULL; -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * ResolutionWriteToKernel -- -+ * -+ * Write GUI topology info to the drm device. -+ * -+ * Results: -+ * TRUE on success, FALSE on failure. -+ * -+ * Side effects: -+ * The drm device will send an uevent and expose the new -+ * topology. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+ -+static gboolean -+ResolutionWriteToKernel(const struct drm_vmw_rect *rects, // IN: Screen rects -+ unsigned int num_rects) // IN: Number of -+ // rects -+{ -+ struct drm_vmw_update_layout_arg arg; -+ int ret; -+ -+ memset(&arg, 0, sizeof arg); -+ arg.num_outputs = num_rects; -+ arg.rects = (unsigned long) rects; -+ -+ ret = drmCommandWrite(kmsInfo.fd, DRM_VMW_UPDATE_LAYOUT, &arg, sizeof arg); -+ if (ret < 0) { -+ g_debug("%s: FAIL! Resolutionset write to kernel failed: %d\n", -+ __FUNCTION__, ret); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * ResolutionResolutionSetCB -- -+ * -+ * Handler for TCLO 'Resolution_Set'. -+ * Routine unmarshals RPC arguments and passes over to back-end -+ * ResolutionWriteToKernel(). -+ * -+ * Results: -+ * TRUE if we can reply, FALSE otherwise. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+ -+static gboolean -+ResolutionResolutionSetCB(RpcInData *data) // IN: The RPC data -+{ -+ struct drm_vmw_rect rect; -+ unsigned int index = 0; -+ gboolean retval = FALSE; -+ -+ if (!kmsInfo.initialized) { -+ g_debug("%s: FAIL! Request for resolution set but plugin is not initialized\n", -+ __FUNCTION__); -+ return RPCIN_SETRETVALS(data, "Invalid guest state: resolution set not initialized", FALSE); -+ } -+ -+ rect.x = 0; -+ rect.y = 0; -+ -+ /* parse the width and height */ -+ if (!StrUtil_GetNextUintToken(&rect.w, &index, data->args, " ")) { -+ goto invalid_arguments; -+ } -+ if (!StrUtil_GetNextUintToken(&rect.h, &index, data->args, "")) { -+ goto invalid_arguments; -+ } -+ -+ retval = ResolutionWriteToKernel(&rect, 1); -+ -+invalid_arguments: -+ return RPCIN_SETRETVALS(data, retval ? "" : "Invalid arguments", retval); -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * ResolutionDisplayTopologySetCB -- -+ * -+ * Handler for TCLO 'DisplayTopology_Set'. -+ * Routine unmarshals RPC arguments and passes over to back-end -+ * ResolutionWriteToKernel(). -+ * -+ * Results: -+ * TRUE if we can reply, FALSE otherwise. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+ -+static gboolean -+ResolutionDisplayTopologySetCB(RpcInData *data) -+{ -+ struct drm_vmw_rect *rects = NULL; -+ unsigned int count, i; -+ gboolean success = FALSE; -+ const char *p; -+ -+ if (!kmsInfo.initialized) { -+ g_debug("%s: FAIL! Request for topology set but plugin is not initialized\n", -+ __FUNCTION__); -+ RPCIN_SETRETVALS(data, "Invalid guest state: topology set not initialized", FALSE); -+ goto out; -+ } -+ -+ /* -+ * The argument string will look something like: -+ * [ , ] * count. -+ * -+ * e.g. -+ * 3 , 0 0 640 480 , 640 0 800 600 , 0 480 640 480 -+ */ -+ -+ if (sscanf(data->args, "%u", &count) != 1) { -+ return RPCIN_SETRETVALS(data, -+ "Invalid arguments. Expected \"count\"", -+ FALSE); -+ } -+ -+ rects = malloc(sizeof *rects * count); -+ if (!rects) { -+ RPCIN_SETRETVALS(data, -+ "Failed to alloc buffer for display info", -+ FALSE); -+ return FALSE; -+ } -+ -+ for (p = data->args, i = 0; i < count; i++) { -+ p = strchr(p, ','); -+ if (!p) { -+ RPCIN_SETRETVALS(data, -+ "Expected comma separated display list", -+ FALSE); -+ goto out; -+ } -+ p++; /* Skip past the , */ -+ -+ if (sscanf(p, " %d %d %d %d ", &rects[i].x, -+ &rects[i].y, &rects[i].w, &rects[i].h) != 4) { -+ RPCIN_SETRETVALS(data, -+ "Expected x, y, w, h in display entry", -+ FALSE); -+ goto out; -+ } -+ } -+ -+ success = ResolutionWriteToKernel(rects, count); -+ RPCIN_SETRETVALS(data, success ? "" : "ResolutionSetTopology failed", success); -+out: -+ free(rects); -+ return success; -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * ResolutionKMSServerCapability -- -+ * -+ * Sends the tools.capability.resolution_server RPC to the VMX. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+ -+static void -+ResolutionKMSServerCapability(RpcChannel *chan, // IN: The RPC channel. -+ unsigned int value) // IN: The value to send for -+ // the capability bit. -+{ -+ gchar *msg; -+ -+ if (!rpcChannelName) { -+ g_debug("Channel name is null, RPC not sent.\n"); -+ return; -+ } -+ -+ msg = g_strdup_printf("tools.capability.resolution_server %s %d", -+ rpcChannelName, -+ value); -+ if (!RpcChannel_Send(chan, msg, strlen(msg), NULL, NULL)) { -+ g_warning("%s: Unable to set tools.capability.resolution_server\n", -+ __FUNCTION__); -+ } -+ g_free(msg); -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * ResolutionKMSShutdown -- -+ * -+ * Cleans up internal data on shutdown. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+ -+static void -+ResolutionKMSShutdown(gpointer src, // IN: Unused. -+ ToolsAppCtx *ctx, // IN: The app context. -+ gpointer data) // IN: Unused. -+{ -+ if (kmsInfo.initialized && ctx && ctx->rpc && ctx->isVMware) { -+ ResolutionKMSServerCapability(ctx->rpc, 0); -+ } -+ -+ if (kmsInfo.initialized) { -+ resolutionDRMClose(kmsInfo.fd); -+ kmsInfo.initialized = FALSE; -+ } -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * ResolutionKMSCapabilities -- -+ * -+ * Cleans up internal data on shutdown. -+ * -+ * Results: -+ * An array of capabilities -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+ -+static GArray * -+ResolutionKMSCapabilities(gpointer src, // IN: The source object. -+ ToolsAppCtx *ctx, // IN: The app context. -+ gboolean set, // IN: Whether setting or unsetting -+ // the capability. -+ gpointer data) // Unused. -+{ -+ /* The array of capabilities to return to the tools service. */ -+ ToolsAppCapability capabilityArray[RESOLUTION_SET_CAPABILITIES_MAX]; -+ -+ /* The next unused entry in the capabilities array. */ -+ unsigned int capabilityCount = 0; -+ -+ g_debug("%s: enter\n", __FUNCTION__); -+ -+ /* -+ * We must register display_topology_set before resolution_set to avoid -+ * a race condition in the host. See bug 472343. -+ */ -+ -+ /* -+ * We use a value of '2' here because, for historical reasons, the -+ * Workstation/Fusion UI will treat a value of 1 for this capability -+ * as unsupported. See bug 149541. -+ */ -+ capabilityArray[capabilityCount].type = TOOLS_CAP_OLD; -+ capabilityArray[capabilityCount].name = "display_topology_set"; -+ capabilityArray[capabilityCount].index = 0; -+ capabilityArray[capabilityCount].value = set ? 2 : 0; -+ capabilityCount++; -+ -+ capabilityArray[capabilityCount].type = TOOLS_CAP_OLD; -+ capabilityArray[capabilityCount].name = "display_global_offset"; -+ capabilityArray[capabilityCount].index = 0; -+ capabilityArray[capabilityCount].value = set ? 1 : 0; -+ capabilityCount++; -+ -+ capabilityArray[capabilityCount].type = TOOLS_CAP_OLD; -+ capabilityArray[capabilityCount].name = "resolution_set"; -+ capabilityArray[capabilityCount].index = 0; -+ capabilityArray[capabilityCount].value = set ? 1 : 0; -+ capabilityCount++; -+ -+ /* -+ * Send the resolution_server RPC to the VMX. -+ * -+ * XXX: We need to send this ourselves, instead of including it in the -+ * capability array, because the resolution_server RPC includes the -+ * name of the RPC channel that the VMX should use when sending -+ * resolution set RPCs as an argument. -+ */ -+ -+ if (kmsInfo.initialized && ctx && ctx->rpc && ctx->isVMware) { -+ ResolutionKMSServerCapability(ctx->rpc, set ? 1:0); -+ } -+ -+ ASSERT(capabilityCount <= RESOLUTION_SET_CAPABILITIES_MAX); -+ -+ return VMTools_WrapArray(capabilityArray, -+ sizeof *capabilityArray, -+ capabilityCount); -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * ToolsOnLoad -- -+ * -+ * Plugin entry point -+ * -+ * Results: -+ * The registration data. -+ * -+ * Side effects: -+ * Initializes internal plugin state. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+ -+TOOLS_MODULE_EXPORT ToolsPluginData * -+ToolsOnLoad(ToolsAppCtx *ctx) -+{ -+ RpcChannelCallback rpcs[] = { -+ { "Resolution_Set", &ResolutionResolutionSetCB }, -+ { "DisplayTopology_Set", &ResolutionDisplayTopologySetCB }, -+ }; -+ -+ static ToolsPluginData regData = { -+ "resolutionKMS", -+ NULL, -+ NULL -+ }; -+ -+ ToolsPluginSignalCb sigs[] = { -+ { TOOLS_CORE_SIG_CAPABILITIES, ResolutionKMSCapabilities, ®Data }, -+ { TOOLS_CORE_SIG_SHUTDOWN, ResolutionKMSShutdown, ®Data } -+ }; -+ -+ ToolsAppReg regs[] = { -+ { TOOLS_APP_GUESTRPC, NULL }, -+ { TOOLS_APP_SIGNALS, VMTools_WrapArray(sigs, sizeof *sigs, ARRAYSIZE(sigs)) } -+ }; -+ -+ /* -+ * If we aren't running in a VM (e.g., running in bootcamp natively on -+ * a Mac), then just return NULL. -+ */ -+ if (!ctx->isVMware) { -+ return NULL; -+ } -+ -+ kmsInfo.fd = resolutionCheckForKMS(ctx); -+ if (kmsInfo.fd < 0) { -+ return NULL; -+ } -+ kmsInfo.initialized = TRUE; -+ -+ /* -+ * Save the RPC channel name from the ToolsAppCtx so that we can use it later -+ * in calls to ResolutionSetServerCapability(). -+ */ -+ -+ if (strcmp(ctx->name, VMTOOLS_GUEST_SERVICE) == 0) { -+ rpcChannelName = TOOLS_DAEMON_NAME; -+ } else if (strcmp(ctx->name, VMTOOLS_USER_SERVICE) == 0) { -+ rpcChannelName = TOOLS_DND_NAME; -+ } else { -+ NOT_REACHED(); -+ } -+ -+ regs[0].data = VMTools_WrapArray(rpcs, sizeof *rpcs, ARRAYSIZE(rpcs)); -+ regData.regs = VMTools_WrapArray(regs, sizeof *regs, ARRAYSIZE(regs)); -+ return ®Data; -+} -diff --git a/services/plugins/resolutionSet/Makefile.am b/services/plugins/resolutionSet/Makefile.am -index 3d8dbc4..b3cf81e 100644 ---- a/services/plugins/resolutionSet/Makefile.am -+++ b/services/plugins/resolutionSet/Makefile.am -@@ -16,6 +16,9 @@ - ################################################################################ - - plugindir = @VMUSR_PLUGIN_INSTALLDIR@ -+noinst_LTLIBRARIES = libresolutionCommon.la -+ -+if HAVE_X11 - plugin_LTLIBRARIES = libresolutionSet.la - - libresolutionSet_la_CPPFLAGS = -@@ -30,10 +33,27 @@ libresolutionSet_la_LIBADD = - libresolutionSet_la_LIBADD += @COMMON_XLIBS@ - libresolutionSet_la_LIBADD += @GTK_LIBS@ - libresolutionSet_la_LIBADD += @VMTOOLS_LIBS@ -+libresolutionSet_la_LIBADD += @RESOLUTIONSET_LIBADD@ -+libresolutionSet_la_LIBADD += libresolutionCommon.la - - libresolutionSet_la_SOURCES = - libresolutionSet_la_SOURCES += libvmwarectrl.c - libresolutionSet_la_SOURCES += resolutionSet.c - libresolutionSet_la_SOURCES += resolutionX11.c - libresolutionSet_la_SOURCES += resolutionRandR12.c -+endif -+ -+libresolutionCommon_la_CPPFLAGS = -+libresolutionCommon_la_CPPFLAGS += @PLUGIN_CPPFLAGS@ -+libresolutionCommon_la_CPPFLAGS += @LIBUDEV_CFLAGS@ -+ -+libresolutionCommon_la_SOURCES = -+libresolutionCommon_la_SOURCES += resolutionCommon.c -+libresolutionCommon_la_SOURCES += resolutionCommon.h -+libresolutionCommon_la_SOURCES += resolutionDL.c -+libresolutionCommon_la_SOURCES += resolutionDL.h -+libresolutionCommon_la_LDFLAGS = -+libresolutionCommon_la_LDFLAGS += @PLUGIN_LDFLAGS@ - -+libresolutionCommon_la_LIBADD = -+libresolutionCommon_la_LIBADD += @LIBUDEV_LIBS@ -diff --git a/services/plugins/resolutionSet/resolutionCommon.c b/services/plugins/resolutionSet/resolutionCommon.c -new file mode 100644 -index 0000000..9a076e3 ---- /dev/null -+++ b/services/plugins/resolutionSet/resolutionCommon.c -@@ -0,0 +1,430 @@ -+/********************************************************* -+ * Copyright (C) 2016 VMware, Inc. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Lesser General Public License as published -+ * by the Free Software Foundation version 2.1 and no later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+ * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public -+ * License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * along with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ *********************************************************/ -+/* Authors: -+ * Thomas Hellstrom -+ */ -+ -+#define G_LOG_DOMAIN "resolutionCommon" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "resolutionDL.h" -+#include "vmware/tools/plugin.h" -+#include "vmware/tools/utils.h" -+#include "resolutionCommon.h" -+ -+#ifdef ENABLE_RESOLUTIONKMS -+ -+/* The DRM device we are looking for */ -+#define RESOLUTION_VENDOR "0x15ad" -+#define RESOLUTION_DEVICE "0x0405" -+ -+/* Required DRM version for resolutionKMS */ -+#define RESOLUTION_DRM_MAJOR 2 -+#define RESOLUTION_DRM_MINOR 12 -+ -+/* Required Xorg driver version for resolutionKMS default on */ -+#define RESOLUTION_XORG_MAJOR 13 -+#define RESOLUTION_XORG_MINOR 2 -+ -+/* Recognition token for Xorg driver version scanner */ -+#define RESOLUTION_XORG_VERSTRING "version=" -+ -+/* -+ * Xorg driver file names to scan for. Only the first found will be -+ * scanned for version info. -+ */ -+static const char *driverNames[]= { -+ "/usr/lib64/xorg/modules/drivers/vmware_drv.so", -+ "/usr/lib/xorg/modules/drivers/vmware_drv.so" -+}; -+ -+static const int numDriverNames = 2; -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionOpenDRM -- -+ * -+ * Opens a file descriptor on the indicated node to the first SVGA2 device. -+ * -+ * Results: -+ * Returns a positive file descriptor on success. Otherwise returns -1. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+static int -+resolutionOpenDRM(const char *node) // IN: Device node base name. -+{ -+ struct udev *udev; -+ struct udev_enumerate *enumerate; -+ struct udev_list_entry *devices, *devListEntry; -+ struct udev_device *dev; -+ int fd = -1; -+ const char *devNode = NULL; -+ -+ udev = udev_new(); -+ if (!udev) -+ return -1; -+ -+ /* -+ * Udev error return codes that are not caught immediately are -+ * typically caught in the input argument check in the udev -+ * function calls following the failing call! -+ */ -+ enumerate = udev_enumerate_new(udev); -+ if (udev_enumerate_add_match_subsystem(enumerate, "drm")) -+ goto outErr; -+ if (udev_enumerate_add_match_property(enumerate, "DEVTYPE", "drm_minor")) -+ goto outErr; -+ if (udev_enumerate_scan_devices(enumerate)) -+ goto outErr; -+ -+ devices = udev_enumerate_get_list_entry(enumerate); -+ udev_list_entry_foreach(devListEntry, devices) { -+ const char *path, *vendor, *device; -+ struct udev_device *parent; -+ -+ path = udev_list_entry_get_name(devListEntry); -+ if (!path) -+ continue; -+ if (!strstr(path, node)) -+ continue; -+ -+ dev = udev_device_new_from_syspath(udev, path); -+ if (!dev) -+ goto outErr; -+ -+ parent = udev_device_get_parent_with_subsystem_devtype(dev, -+ "pci", -+ NULL); -+ if (!parent) -+ goto skipCheck; -+ -+ vendor = udev_device_get_sysattr_value(parent, "vendor"); -+ device = udev_device_get_sysattr_value(parent, "device"); -+ if (!vendor || !device) -+ goto skipCheck; -+ -+ if (strcmp(vendor, RESOLUTION_VENDOR) || -+ strcmp(device, RESOLUTION_DEVICE)) -+ goto skipCheck; -+ -+ devNode = udev_device_get_devnode(dev); -+ if (!devNode) -+ goto outFound; -+ -+ fd = open(devNode, O_RDWR); -+ udev_device_unref(dev); -+ break; -+ -+skipCheck: -+ udev_device_unref(dev); -+ } -+ -+ udev_enumerate_unref(enumerate); -+ udev_unref(udev); -+ -+ return fd; -+ -+ outFound: -+ udev_device_unref(dev); -+ outErr: -+ udev_enumerate_unref(enumerate); -+ udev_unref(udev); -+ -+ return -1; -+} -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionDRMCheckVersion -- -+ * -+ * Check that the drm version supports GUI topology communication. -+ * -+ * Checks that the DRM device supports setting GUI topology from the -+ * control node, and also that the topology is communicated on the -+ * modesetting connectors. -+ * -+ * Results: -+ * 0 if DRM device is usable for communicating GUI topology. -+ * -1 otherwise. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+static int -+resolutionDRMCheckVersion(int fd) // IN: An open DRM file descriptor. -+{ -+ drmVersionPtr ver = drmGetVersion(fd); -+ -+ if (!ver) { -+ g_debug("%s: Failed to get DRM version.\n", __func__); -+ return -1; -+ } -+ -+ if (ver->version_major != RESOLUTION_DRM_MAJOR || -+ ver->version_minor < RESOLUTION_DRM_MINOR) { -+ g_debug("%s: Insufficient DRM version %d.%d for resolutionKMS.\n", -+ __func__, ver->version_major, ver->version_minor); -+ drmFreeVersion(ver); -+ return -1; -+ } -+ -+ drmFreeVersion(ver); -+ return 0; -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionDRMRPrimaryCheckOpen -- -+ * -+ * First tries to open a render node to DRM, and if that fails opens a -+ * primary node, and drops master. Then checks that drm supports GUI -+ * topology communication. -+ * -+ * Results: -+ * If succesful returns a positive open file descriptor. Otherwise -+ * returns -1. -+ * -+ * Side effects: -+ * May temporarily become drm master if render nodes are not available, -+ * and thus race with the X server. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+static int -+resolutionDRMRPrimaryCheckOpen(void) -+{ -+ int fd = -1; -+ -+ fd = resolutionOpenDRM("renderD"); -+ if (fd < 0) { -+ g_debug("%s: Failed to open DRM render node.\n", __func__); -+ fd = resolutionOpenDRM("card"); -+ if (fd >= 0) -+ (void) drmDropMaster(fd); -+ } -+ if (fd < 0) { -+ g_debug("%s: Failed to open DRM card node.\n", __func__); -+ goto outErr; -+ } -+ -+ if (!resolutionDRMCheckVersion(fd)) { -+ return fd; -+ } -+ -+ close(fd); -+ outErr: -+ return -1; -+} -+ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionCheckForKMS -- -+ * -+ * Checks whether the vmwgfx DRM is present and supports exposing -+ * layout information through connector properties and preferred modes. -+ * -+ * Results: -+ * If succesful returns a positive number representing an open file -+ * descriptor to the node indicated by the control argument. If -+ * unsuccessful returns -1. -+ * -+ * Side effects: -+ * Opens a file to DRM. The file descriptor should be closed with -+ * resolutionDRMClose() when needed. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+int -+resolutionCheckForKMS(ToolsAppCtx *ctx) // IN: The ToolsAppCtx for -+ // configuration db access. -+{ -+ GError *err = NULL; -+ gboolean doResolutionKMS; -+ int fd; -+ -+ doResolutionKMS = g_key_file_get_boolean(ctx->config, "resolutionKMS", -+ "enable", &err); -+ if (err) { -+ /* -+ * If there is nothing in the configuration file, require -+ * at least Xorg driver version 13.2.0, which has the autolayout -+ * feature, to enable resolutionKMS. -+ */ -+ int major, minor, level; -+ g_clear_error(&err); -+ doResolutionKMS = FALSE; -+ if (!resolutionXorgDriverVersion(numDriverNames, driverNames, -+ RESOLUTION_XORG_VERSTRING, &major, -+ &minor, &level) && -+ (major > RESOLUTION_XORG_MAJOR || -+ (major == RESOLUTION_XORG_MAJOR && -+ minor >= RESOLUTION_XORG_MINOR))) { -+ doResolutionKMS = TRUE; -+ g_debug("%s: ResolutionKMS enabled based on Xorg driver version.\n", -+ __func__); -+ } else { -+ g_debug("%s: ResolutionKMS disabled. (No configuration).\n", -+ __func__); -+ doResolutionKMS = FALSE; -+ } -+ } else { -+ g_debug("%s: ResolutionKMS %s using configuration file info.\n", -+ __func__, (doResolutionKMS) ? "enabled" : "disabled"); -+ } -+ -+ if (!doResolutionKMS) -+ return -1; -+ -+ if (resolutionDLOpen()) { -+ g_warning("%s: Failed to find needed system libraries for " -+ "resolutionKMS.\n", __func__); -+ return -1; -+ } else { -+ g_message("%s: dlopen succeeded.\n", __func__); -+ } -+ -+ fd = resolutionDRMRPrimaryCheckOpen(); -+ -+ if (fd < 0) -+ g_warning("%s: No system support for resolutionKMS.\n", __func__); -+ else -+ g_message("%s: System support available for resolutionKMS.\n", -+ __func__); -+ -+ return fd; -+} -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionDRMClose -- -+ * -+ * Scans for VMWare Xorg driver files and tries to determine the Xorg -+ * driver version. -+ * -+ * Results: -+ * If succesful returns zero and outputs the driver version in the -+ * parameters major, minor and level. If not successful, returns -1. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+void -+resolutionDRMClose(int fd) -+{ -+ close(fd); -+ resolutionDLClose(); -+} -+ -+#endif /* ENABLE_RESOLUTIONKMS */ -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionXorgDriverVersion -- -+ * -+ * Scans for VMWare Xorg driver files and tries to determine the Xorg -+ * driver version. -+ * -+ * Results: -+ * If succesful returns zero and outputs the driver version in the -+ * parameters major, minor and level. If not successful, returns -1. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+int -+resolutionXorgDriverVersion(int numPaths, // IN: Number of strings -+ // in paths. -+ const char *paths[], // IN: Possible driver -+ // paths. -+ const char versionString[], // IN: Version token. -+ int *major, // OUT: Major version # -+ int *minor, // OUT: Minor version # -+ int *level) // OUT: Patchlevel -+ // version # -+{ -+ FILE *driver = NULL; -+ const char *curMatch; -+ char curFileChar; -+ int i; -+ -+ g_debug("%s: Scanning for VMWare Xorg drivers.\n", __func__); -+ for(i = 0; i < numPaths; ++i) { -+ g_debug("%s: Looking for \"%s\".\n", __func__, paths[i]); -+ driver = fopen(paths[i], "r"); -+ if (driver) -+ break; -+ } -+ -+ if (!driver) { -+ g_debug("%s: No driver found.\n", __func__); -+ return -1; -+ } -+ -+ g_debug("%s: Driver found. Looking for version info.\n", __func__); -+ curMatch = versionString; -+ while (*curMatch) { -+ if (feof(driver)) -+ goto outNotFound; -+ -+ curFileChar = fgetc(driver); -+ if (curFileChar == *curMatch) { -+ curMatch++; -+ continue; -+ } else if (curMatch != versionString) { -+ curMatch = versionString; -+ (void) ungetc(curFileChar, driver); -+ } -+ } -+ -+ if (fscanf(driver, "%d.%d.%d", major, minor, level) != 3) -+ goto outNotFound; -+ -+ fclose(driver); -+ g_debug("%s: Version info found: %d.%d.%d\n", __func__, *major, *minor, -+ *level); -+ return 0; -+ -+ outNotFound: -+ fclose(driver); -+ g_debug("%s: No version info found.\n", __func__); -+ return -1; -+} -diff --git a/services/plugins/resolutionSet/resolutionCommon.h b/services/plugins/resolutionSet/resolutionCommon.h -new file mode 100644 -index 0000000..6565190 ---- /dev/null -+++ b/services/plugins/resolutionSet/resolutionCommon.h -@@ -0,0 +1,53 @@ -+/********************************************************* -+ * Copyright (C) 2016 VMware, Inc. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Lesser General Public License as published -+ * by the Free Software Foundation version 2.1 and no later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+ * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public -+ * License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * along with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ *********************************************************/ -+/* Authors: -+ * Thomas Hellstrom -+ */ -+ -+#ifndef _RESOLUTION_COMMON_H_ -+#define _RESOLUTION_COMMON_H_ -+ -+#define INCLUDE_ALLOW_USERLEVEL -+#define INCLUDE_ALLOW_DISTRIBUTE -+#include "includeCheck.h" -+#include "vmware/tools/plugin.h" -+#ifdef ENABLE_RESOLUTIONKMS -+ -+int resolutionCheckForKMS(ToolsAppCtx *ctx); -+void resolutionDRMClose(int fd); -+ -+#else -+ -+static inline int resolutionCheckForKMS(ToolsAppCtx *ctx) -+{ -+ return -1; -+} -+ -+static inline void resolutionDRMClose(int fd) {} -+ -+#endif /* !ENABLE_RESOLUTIONKMS */ -+ -+int -+resolutionXorgDriverVersion(int numPaths, -+ const char *paths[], -+ const char versionString[], -+ int *major, -+ int *minor, -+ int *level); -+ -+#endif /* _RESOLUTION_COMMON_H_ */ -diff --git a/services/plugins/resolutionSet/resolutionDL.c b/services/plugins/resolutionSet/resolutionDL.c -new file mode 100644 -index 0000000..5ec0abb ---- /dev/null -+++ b/services/plugins/resolutionSet/resolutionDL.c -@@ -0,0 +1,206 @@ -+/********************************************************* -+ * Copyright (C) 2016 VMware, Inc. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Lesser General Public License as published -+ * by the Free Software Foundation version 2.1 and no later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+ * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public -+ * License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * along with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ *********************************************************/ -+/* Authors: -+ * Thomas Hellstrom -+ */ -+ -+#ifdef ENABLE_RESOLUTIONKMS -+#ifndef HAVE_LIBUDEV -+ -+#include "resolutionDL.h" -+#include "vmware.h" -+#include -+#include -+#include -+ -+#define G_LOG_DOMAIN "resolutionCommon" -+#include "vmware/tools/plugin.h" -+#include "vmware/tools/utils.h" -+ -+ -+struct FuncToResolv { -+ size_t offset; -+ const char *name; -+}; -+ -+#define UDEV_RESOLV(_name) \ -+ {.offset = offsetof(struct Udev1Interface, _name), \ -+ .name = "udev"#_name} -+ -+#define LIBDRM_RESOLV(_name) \ -+ {.offset = offsetof(struct Drm2Interface, _name), \ -+ .name = "drm"#_name} -+ -+ -+static struct FuncToResolv udev1Table[] = { -+ UDEV_RESOLV(_device_get_devnode), -+ UDEV_RESOLV(_device_get_parent_with_subsystem_devtype), -+ UDEV_RESOLV(_device_get_sysattr_value), -+ UDEV_RESOLV(_device_new_from_syspath), -+ UDEV_RESOLV(_device_unref), -+ UDEV_RESOLV(_enumerate_add_match_property), -+ UDEV_RESOLV(_enumerate_add_match_subsystem), -+ UDEV_RESOLV(_enumerate_get_list_entry), -+ UDEV_RESOLV(_enumerate_new), -+ UDEV_RESOLV(_enumerate_scan_devices), -+ UDEV_RESOLV(_enumerate_unref), -+ UDEV_RESOLV(_list_entry_get_name), -+ UDEV_RESOLV(_list_entry_get_next), -+ UDEV_RESOLV(_new), -+ UDEV_RESOLV(_unref) -+}; -+ -+static struct FuncToResolv drm2Table[] = { -+ LIBDRM_RESOLV(GetVersion), -+ LIBDRM_RESOLV(FreeVersion), -+ LIBDRM_RESOLV(DropMaster), -+ LIBDRM_RESOLV(CommandWrite) -+}; -+ -+struct Udev1Interface *udevi = NULL; -+struct Drm2Interface *drmi = NULL; -+ -+static void *dlhandle; -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionDLClose -- -+ * -+ * Removes any dynamic library reference and frees any resource -+ * allocated by resolutionDLOpen. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+void -+resolutionDLClose(void) -+{ -+ if (udevi) { -+ free(udevi); -+ udevi = NULL; -+ } -+ -+ if (drmi) { -+ free(drmi); -+ drmi = NULL; -+ } -+ -+ if (dlhandle) { -+ dlclose(dlhandle); -+ dlhandle = NULL; -+ } -+} -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionDLResolve -- -+ * -+ * Tries to open and resolve needed symbols of a single shared library. -+ * -+ * Results: -+ * If succesful returns zero, otherwise returns -1. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+static int -+resolutionDLResolve(void **ptr, // OUT: pointer to -+ // function table. -+ size_t size, // IN: Size of ft. -+ const char name[], // IN: Library name. -+ const struct FuncToResolv table[], // IN: Table of name- -+ // offset pairs -+ int numEntries) // IN: Num entries in -+ // table. -+{ -+ void **func_ptr; -+ int i; -+ -+ if (*ptr) -+ return 0; -+ -+ *ptr = malloc(size); -+ if (!*ptr) -+ return -1; -+ -+ dlhandle = dlopen(name, RTLD_NOW); -+ if (!dlhandle) { -+ g_debug("%s: Failed to open shared library \"%s\".\n", __func__, -+ name); -+ goto out_err; -+ } -+ -+ for (i = 0; i < numEntries; ++i) { -+ func_ptr = (void *) ((unsigned long) *ptr + table[i].offset); -+ *func_ptr = dlsym(dlhandle, table[i].name); -+ if (!*func_ptr) { -+ g_debug("%s: Failed to resolve %s symbol \"%s\".\n", __func__, -+ name,table[i].name); -+ goto out_err; -+ } -+ } -+ -+ return 0; -+ -+ out_err: -+ resolutionDLClose(); -+ -+ return -1; -+} -+ -+/* -+ *----------------------------------------------------------------------------- -+ * -+ * resolutionDLOpen -- -+ * -+ * Tries to open and create a reference to distribution shared libraries -+ * needed for the resolutionKMS functionality. -+ * -+ * Results: -+ * If succesful returns zero, otherwise returns -1. -+ * -+ * Side effects: -+ * None. -+ * -+ *----------------------------------------------------------------------------- -+ */ -+int -+resolutionDLOpen(void) -+{ -+ /* We support libudev major versions 0 and 1 for now. */ -+ if (resolutionDLResolve((void **)&udevi, sizeof(*udevi), "libudev.so.1", -+ udev1Table, ARRAYSIZE(udev1Table)) && -+ resolutionDLResolve((void **)&udevi, sizeof(*udevi), "libudev.so.0", -+ udev1Table, ARRAYSIZE(udev1Table))) -+ return -1; -+ -+ if (resolutionDLResolve((void **)&drmi, sizeof(*drmi), "libdrm.so.2", -+ drm2Table, ARRAYSIZE(drm2Table))) -+ return -1; -+ -+ return 0; -+} -+ -+#endif /* !HAVE_LIBUDEV */ -+#endif /* ENABLE_RESOLUTIONKMS */ -diff --git a/services/plugins/resolutionSet/resolutionDL.h b/services/plugins/resolutionSet/resolutionDL.h -new file mode 100644 -index 0000000..f0d8c6d ---- /dev/null -+++ b/services/plugins/resolutionSet/resolutionDL.h -@@ -0,0 +1,217 @@ -+/********************************************************* -+ * Copyright (C) 2016 VMware, Inc. All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU Lesser General Public License as published -+ * by the Free Software Foundation version 2.1 and no later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+ * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public -+ * License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public License -+ * along with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ *********************************************************/ -+/* Authors: -+ * Thomas Hellstrom -+ */ -+ -+#ifndef _RESOLUTION_DL_H_ -+#define _RESOLUTION_DL_H_ -+#ifdef ENABLE_RESOLUTIONKMS -+ -+#define INCLUDE_ALLOW_USERLEVEL -+#define INCLUDE_ALLOW_DISTRIBUTE -+#include "includeCheck.h" -+ -+#ifndef HAVE_LIBUDEV -+ -+#include -+ -+struct udev; -+struct udev_device; -+struct udev_enumerate; -+ -+/* -+ * This struct holds the function pointers we use in libudev.1. Libudev is -+ * Lgpl 2.1 (or later) licensed, and according to lgpl 2.1, section 5, while -+ * we use materials copied from header files, we restrict ourselves to -+ * data structure layouts and small macros and thus, while this should be -+ * considered a derivative work, the use of the object file is unrestricted. -+ * An executable linked with libudev is however subject to lgpl license -+ * restrictions. -+ */ -+struct Udev1Interface { -+ const char * -+ (*_device_get_devnode)(struct udev_device *); -+ struct udev_device * -+ (*_device_get_parent_with_subsystem_devtype)(struct udev_device *, -+ const char *, const char *); -+ const char * -+ (*_device_get_sysattr_value)(struct udev_device *, const char *); -+ struct udev_device * -+ (*_device_new_from_syspath)(struct udev *, const char *); -+ struct udev_device * -+ (*_device_unref)(struct udev_device *); -+ int -+ (*_enumerate_add_match_property)(struct udev_enumerate *,const char *, -+ const char *); -+ int -+ (*_enumerate_add_match_subsystem)(struct udev_enumerate *,const char *); -+ struct udev_list_entry * -+ (*_enumerate_get_list_entry)(struct udev_enumerate *); -+ struct udev_enumerate * -+ (*_enumerate_new)(struct udev *udev); -+ int -+ (*_enumerate_scan_devices)(struct udev_enumerate *); -+ struct udev_enumerate * -+ (*_enumerate_unref)(struct udev_enumerate *); -+ const char * -+ (*_list_entry_get_name)(struct udev_list_entry *); -+ struct udev_list_entry * -+ (*_list_entry_get_next)(struct udev_list_entry *); -+ struct udev * -+ (*_new)(void); -+ struct udev * -+ (*_unref)(struct udev *); -+}; -+ -+#define udevi_list_entry_foreach(_udevi, list_entry, first_entry) \ -+ for (list_entry = first_entry; \ -+ list_entry != NULL; \ -+ list_entry = (_udevi)->_list_entry_get_next(list_entry)) -+ -+/* -+ * This struct is originally defined in xf86drm.h which is MIT licenced. -+ * However, this should not be considered a substantial part of the software, -+ * and this struct is not subject to the license header of this file. -+ */ -+typedef struct _drmVersion { -+ int version_major; /* Major version */ -+ int version_minor; /* Minor version */ -+ int version_patchlevel; /* Patch level */ -+ int name_len; /* Length of name buffer */ -+ char *name; /* Name of driver */ -+ int date_len; /* Length of date buffer */ -+ char *date; /* User-space buffer to hold date */ -+ int desc_len; /* Length of desc buffer */ -+ char *desc; /* User-space buffer to hold desc */ -+} drmVersion, *drmVersionPtr; -+ -+#define DRM_VMW_UPDATE_LAYOUT 20 -+ -+/* -+ * These structs are originally defined in vmwgfx_drm.h, which is dual -+ * MIT and GPLv2 licenced. However, VMWare Inc. owns the copyright and it's -+ * should not be considered a substantial part of the software. -+ * However this struct is not subject to the license header of this file. -+ */ -+/** -+ * struct drm_vmw_rect -+ * -+ * Defines a rectangle. Used in the overlay ioctl to define -+ * source and destination rectangle. -+ */ -+ -+struct drm_vmw_rect { -+ int32_t x; -+ int32_t y; -+ uint32_t w; -+ uint32_t h; -+}; -+ -+/** -+ * struct drm_vmw_update_layout_arg -+ * -+ * @num_outputs: number of active connectors -+ * @rects: pointer to array of drm_vmw_rect cast to an uint64_t -+ * -+ * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl. -+ */ -+struct drm_vmw_update_layout_arg { -+ uint32_t num_outputs; -+ uint32_t pad64; -+ uint64_t rects; -+}; -+ -+/* -+ * This struct holds the function pointers we use in libdrm.2. The -+ * libdrm API is MIT licenced and what we do here should not be considered -+ * a substantial part of the software: -+ * However this struct is not subject to the license header of this file. -+ */ -+struct Drm2Interface { -+ drmVersionPtr (*GetVersion)(int fd); -+ void (*FreeVersion)(drmVersionPtr); -+ int (*DropMaster)(int fd); -+ int (*CommandWrite)(int fd, unsigned long drmCommandIndex, void *data, -+ unsigned long size); -+}; -+ -+extern struct Udev1Interface *udevi; -+extern struct Drm2Interface *drmi; -+ -+void resolutionDLClose(void); -+int resolutionDLOpen(void); -+ -+#define udev_device_get_devnode \ -+ udevi->_device_get_devnode -+#define udev_device_get_parent_with_subsystem_devtype \ -+ udevi->_device_get_parent_with_subsystem_devtype -+#define udev_device_get_sysattr_value \ -+ udevi->_device_get_sysattr_value -+#define udev_device_new_from_syspath \ -+ udevi->_device_new_from_syspath -+#define udev_device_unref \ -+ udevi->_device_unref -+#define udev_enumerate_add_match_property \ -+ udevi->_enumerate_add_match_property -+#define udev_enumerate_add_match_subsystem \ -+ udevi->_enumerate_add_match_subsystem -+#define udev_enumerate_get_list_entry \ -+ udevi->_enumerate_get_list_entry -+#define udev_enumerate_new \ -+ udevi->_enumerate_new -+#define udev_enumerate_scan_devices \ -+ udevi->_enumerate_scan_devices -+#define udev_enumerate_unref \ -+ udevi->_enumerate_unref -+#define udev_list_entry_get_name \ -+ udevi->_list_entry_get_name -+#define udev_list_entry_get_next \ -+ udevi->_list_entry_get_next -+#define udev_new \ -+ udevi->_new -+#define udev_unref \ -+ udevi->_unref -+#define udev_list_entry_foreach(_a, _b)\ -+ udevi_list_entry_foreach(udevi, _a, _b) -+ -+#define drmGetVersion \ -+ drmi->GetVersion -+#define drmFreeVersion \ -+ drmi->FreeVersion -+#define drmDropMaster \ -+ drmi->DropMaster -+#define drmCommandWrite \ -+ drmi->CommandWrite -+ -+#else /* HAVE_LIBUDEV */ -+ -+#include -+#include -+#include -+ -+/* Work around an incorrect define in old libdrm */ -+#undef DRM_VMW_UPDATE_LAYOUT -+#define DRM_VMW_UPDATE_LAYOUT 20 -+ -+static inline void resolutionDLClose(void) {} -+static inline int resolutionDLOpen(void) {return 0;} -+ -+#endif /* HAVE_LIBUDEV */ -+#endif /* ENABLE_RESOLUTIONKMS */ -+#endif -diff --git a/services/plugins/resolutionSet/resolutionInt.h b/services/plugins/resolutionSet/resolutionInt.h -index 55bb704..877a7bc 100644 ---- a/services/plugins/resolutionSet/resolutionInt.h -+++ b/services/plugins/resolutionSet/resolutionInt.h -@@ -74,13 +74,20 @@ typedef struct { - - extern ResolutionInfoType resolutionInfo; - -+#if defined(G_LOG_DOMAIN) -+#error Please include this file before glib.h -+#endif -+#define G_LOG_DOMAIN "resolutionSet" -+ -+#include "vmware/tools/plugin.h" -+ - /* - * Global functions - */ - - /* Functions defined by back-end. */ - Bool ResolutionBackendInit(InitHandle handle); --InitHandle ResolutionToolkitInit(void); -+InitHandle ResolutionToolkitInit(ToolsAppCtx *ctx); - void ResolutionBackendCleanup(void); - Bool ResolutionSetResolution(uint32 width, uint32 height); - #if defined(RESOLUTION_WIN32) -@@ -90,9 +97,4 @@ void ResolutionSetSessionChange(DWORD code, DWORD sessionID); - Bool ResolutionSetTopology(unsigned int ndisplays, DisplayTopologyInfo displays[]); - Bool ResolutionSetTopologyModes(unsigned int screen, unsigned int cmd, unsigned int ndisplays, DisplayTopologyInfo displays[]); - --#if defined(G_LOG_DOMAIN) --#error Please include this file before glib.h --#endif --#define G_LOG_DOMAIN "resolutionSet" -- - #endif // ifndef _LIB_RESOLUTIONINT_H_ -diff --git a/services/plugins/resolutionSet/resolutionSet.c b/services/plugins/resolutionSet/resolutionSet.c -index 96c8349..52e0c5b 100644 ---- a/services/plugins/resolutionSet/resolutionSet.c -+++ b/services/plugins/resolutionSet/resolutionSet.c -@@ -584,9 +584,10 @@ ToolsOnLoad(ToolsAppCtx *ctx) - /* - * XXX move to some shared lib or plugin - */ -- handle = ResolutionToolkitInit(); -+ handle = ResolutionToolkitInit(ctx); - -- ResolutionInit(handle); -+ if (!ResolutionInit(handle)) -+ return NULL; - - regs[0].data = VMTools_WrapArray(rpcs, sizeof *rpcs, ARRAYSIZE(rpcs)); - regData.regs = VMTools_WrapArray(regs, sizeof *regs, ARRAYSIZE(regs)); -diff --git a/services/plugins/resolutionSet/resolutionX11.c b/services/plugins/resolutionSet/resolutionX11.c -index 3c5c120..ae42617 100644 ---- a/services/plugins/resolutionSet/resolutionX11.c -+++ b/services/plugins/resolutionSet/resolutionX11.c -@@ -45,6 +45,7 @@ - #include "strutil.h" - #include "util.h" - #include "posix.h" -+#include "resolutionCommon.h" - - #define VMWAREDRV_PATH_64 "/usr/X11R6/lib64/modules/drivers/vmware_drv.o" - #define VMWAREDRV_PATH "/usr/X11R6/lib/modules/drivers/vmware_drv.o" -@@ -105,8 +106,9 @@ ResolutionBackendInit(InitHandle handle) - resInfoX->display = handle; - - if (resInfoX->display == NULL) { -- g_warning("%s: Called with invalid X display!\n", __func__); -- return FALSE; -+ resInfo->canSetResolution = FALSE; -+ resInfo->canSetTopology = FALSE; -+ return TRUE; - } - - resInfoX->display = handle; -@@ -335,15 +337,10 @@ static Bool - ResolutionCanSet(void) - { - ResolutionInfoX11Type *resInfoX = &resolutionInfoX11; -- int fd = -1; -- off_t filePos = 0; -- Bool keepSearching = TRUE; -- Bool found = FALSE; -- char buf[sizeof VERSION_STRING + 10]; // size of VERSION_STRING plus some extra for the version number -- const char versionString[] = VERSION_STRING; -- ssize_t bytesRead; -- int32 major, minor, level; -- unsigned int tokPos; -+ int major, minor, level; -+ static const char *driverPaths[] = { -+ VMWAREDRV_PATH_64, -+ VMWAREDRV_PATH}; - - /* See if the randr X module is loaded */ - if (!XRRQueryVersion(resInfoX->display, &major, &minor) ) { -@@ -411,55 +408,9 @@ ResolutionCanSet(void) - * 6.9/7.0, we can instead just use the VMWARE_CTRL check. - */ - -- buf[sizeof buf - 1] = '\0'; -- fd = Posix_Open(VMWAREDRV_PATH_64, O_RDONLY); -- if (fd == -1) { -- fd = Posix_Open(VMWAREDRV_PATH, O_RDONLY); -- } -- if (fd != -1) { -- /* -- * One of the opens succeeded, so start searching thru the file. -- */ -- while (keepSearching) { -- bytesRead = read(fd, buf, sizeof buf - 1); -- if (bytesRead == -1 || bytesRead < sizeof buf -1 ) { -- keepSearching = FALSE; -- } else { -- if (Str_Strncmp(versionString, buf, sizeof versionString - 1) == 0) { -- keepSearching = FALSE; -- found = TRUE; -- } -- } -- filePos = lseek(fd, filePos+1, SEEK_SET); -- if (filePos == -1) { -- keepSearching = FALSE; -- } -- } -- close(fd); -- if (found) { -- /* -- * We NUL-terminated buf earlier, but Coverity really wants it to -- * be NUL-terminated after the call to read (because -- * read doesn't NUL-terminate). So we'll do it again. -- */ -- buf[sizeof buf - 1] = '\0'; -- -- /* -- * Try and parse the major, minor and level versions -- */ -- tokPos = sizeof versionString - 1; -- if (!StrUtil_GetNextIntToken(&major, &tokPos, buf, ".- ")) { -- return FALSE; -- } -- if (!StrUtil_GetNextIntToken(&minor, &tokPos, buf, ".- ")) { -- return FALSE; -- } -- if (!StrUtil_GetNextIntToken(&level, &tokPos, buf, ".- ")) { -- return FALSE; -- } -- -- return ((major > 10) || (major == 10 && minor >= 11)); -- } -+ if (!resolutionXorgDriverVersion(2, driverPaths, VERSION_STRING, -+ &major, &minor, &level)) { -+ return ((major > 10) || (major == 10 && minor >= 11)); - } - return FALSE; - } -@@ -633,12 +584,20 @@ ResolutionX11ErrorHandler(Display *d, // IN: Pointer to display connection - */ - - InitHandle --ResolutionToolkitInit(void) -+ResolutionToolkitInit(ToolsAppCtx *ctx) // IN: For config database access - { - int argc = 1; - char *argv[] = {"", NULL}; - GtkWidget *wnd; - Display *display; -+ int fd; -+ -+ fd = resolutionCheckForKMS(ctx); -+ if (fd >= 0) { -+ resolutionDRMClose(fd); -+ g_message("%s: Backing off for resolutionKMS.\n", __func__); -+ return (InitHandle) 0; -+ } - - XSetErrorHandler(ResolutionX11ErrorHandler); - gtk_init(&argc, (char ***) &argv); -@@ -648,5 +607,9 @@ ResolutionToolkitInit(void) - #else - display = GDK_WINDOW_XDISPLAY(gtk_widget_get_window(wnd)); - #endif -+ -+ if (!display) -+ g_error("%s: Invalid display detected.\n", __func__); -+ - return (InitHandle) display; - } diff --git a/SOURCES/use-tirpc.patch b/SOURCES/use-tirpc.patch new file mode 100644 index 0000000..bc28c11 --- /dev/null +++ b/SOURCES/use-tirpc.patch @@ -0,0 +1,460 @@ +diff -ru open-vm-tools-10.2.5-8068406.orig/configure.ac open-vm-tools-10.2.5-8068406/configure.ac +--- open-vm-tools-10.2.5-8068406.orig/configure.ac 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/configure.ac 2018-05-08 18:10:45.650397285 -0700 +@@ -586,6 +586,11 @@ + [enable_vgauth=no], + [with_xml2=yes]) + ++AC_ARG_WITH([tirpc], ++ [AS_HELP_STRING([--without-tirpc], ++ [compiles without tirpc support.])], ++ [with_tirpc="$withval"], ++ [with_tirpc="auto"]) + + # Make sure we are building with openssl 1.0.1 and above so that + # we use only TLSv1_2. +@@ -1066,10 +1071,45 @@ + + fi + ++have_tirpc="no" ++if test "x$with_tirpc" != "xno"; then ++ AC_VMW_CHECK_LIB([libtirpc], ++ [TIRPC], ++ [libtirpc], ++ [], ++ [], ++ [], ++ [], ++ [have_tirpc="yes"], ++ [have_tirpc="no"]) ++fi ++ ++if test "$with_tirpc" = "no"; then ++ use_tirpc="no" ++elif test "$with_tirpc" = "auto"; then ++ use_tirpc=$have_tirpc ++elif test "$with_tirpc" = "yes"; then ++ if test "$have_tirpc" = "no"; then ++ AC_MSG_ERROR([libtirpc is required, but not found.]) ++ else ++ use_tirpc="yes" ++ fi ++fi ++ ++if test "$use_tirpc" = "yes"; then ++ AC_MSG_NOTICE([Building with libtirpc]) ++else ++ AC_MSG_NOTICE([Building without libtirpc]) ++fi ++ + AC_PATH_PROG( + [RPCGEN], + [rpcgen], +- [ AC_MSG_ERROR([rpcgen not found. Please install the libc devel package.]) ]) ++ [not_found]) ++ ++if test "$RPCGEN" = "not_found"; then ++ AC_MSG_ERROR([rpcgen not found. Please install libc-devel or libc-rpcgen package.]) ++fi + + ### + ### Headers +@@ -1406,6 +1446,7 @@ + AM_CONDITIONAL(HAVE_UDEV, test "$have_udev" = "yes") + AM_CONDITIONAL(ENABLE_RESOLUTIONKMS, test "x$enable_resolutionkms" = "xyes") + AM_CONDITIONAL(VGAUTH_USE_CXX, test "$with_icu" = "yes" -o "$use_xmlsec1" != "yes") ++AM_CONDITIONAL(HAVE_TIRPC, test "$use_tirpc" = "yes") + + if test "$have_xsm" != "yes"; then + AC_DEFINE([NO_XSM], 1, []) +@@ -1454,6 +1495,13 @@ + XDR_LIBS="-lnsl -lrpcsvc" + fi + ++# In newer Linux distros Sun RPC has been removed from libc ++XDR_CPPFLAGS= ++if test "$os" = "linux" -a "$use_tirpc" = "yes"; then ++ XDR_CPPFLAGS="-DUSE_TIRPC $TIRPC_CPPFLAGS" ++ XDR_LIBS="$TIRPC_LIBS" ++fi ++ + # Installation directories for core services plugins. + TEST_PLUGIN_INSTALLDIR=$datadir/open-vm-tools/tests + COMMON_PLUGIN_INSTALLDIR=$libdir/open-vm-tools/plugins/common +@@ -1492,6 +1540,7 @@ + AC_SUBST([VMTOOLS_CPPFLAGS]) + AC_SUBST([VMTOOLS_LIBS]) + AC_SUBST([RPCGENFLAGS]) ++AC_SUBST([XDR_CPPFLAGS]) + AC_SUBST([XDR_LIBS]) + AC_SUBST([TEST_PLUGIN_INSTALLDIR]) + AC_SUBST([COMMON_PLUGIN_INSTALLDIR]) +diff -ru open-vm-tools-10.2.5-8068406.orig/lib/dynxdr/dynxdr.c open-vm-tools-10.2.5-8068406/lib/dynxdr/dynxdr.c +--- open-vm-tools-10.2.5-8068406.orig/lib/dynxdr/dynxdr.c 2018-03-22 02:08:52.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/lib/dynxdr/dynxdr.c 2018-05-09 11:03:11.700032698 -0700 +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2008-2017 VMware, Inc. All rights reserved. ++ * Copyright (C) 2008-2018 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -55,7 +55,7 @@ + * Mac OS X, FreeBSD and Solaris don't take a const parameter to the + * "x_getpostn" function. + */ +-#if defined(__APPLE__) || defined(__FreeBSD__) || defined(sun) ++#if defined(__APPLE__) || defined(__FreeBSD__) || defined(sun) || defined(USE_TIRPC) + # define DYNXDR_GETPOS_CONST + #else + # define DYNXDR_GETPOS_CONST const +@@ -172,7 +172,11 @@ + } + + +-#if defined(__GLIBC__) || (defined(sun) && (defined(_LP64) || defined(_KERNEL))) ++#if !defined(USE_TIRPC) && \ ++ defined(__GLIBC__) || \ ++ (defined(sun) && \ ++ (defined(_LP64) || \ ++ defined(_KERNEL))) + /* + *----------------------------------------------------------------------------- + * +@@ -322,11 +326,11 @@ + DynXdrSetPos, /* x_setpostn */ + DynXdrInline, /* x_inline */ + NULL, /* x_destroy */ +-#if defined(__GLIBC__) ++#if defined(__APPLE__) || defined (USE_TIRPC) ++ NULL, /* x_control */ ++#elif defined(__GLIBC__) + NULL, /* x_getint32 */ + DynXdrPutInt32, /* x_putint32 */ +-#elif defined(__APPLE__) +- NULL, /* x_control */ + #elif defined(sun) && (defined(_LP64) || defined(_KERNEL)) + NULL, /* x_control */ + NULL, /* x_getint32 */ +diff -ru open-vm-tools-10.2.5-8068406.orig/lib/dynxdr/Makefile.am open-vm-tools-10.2.5-8068406/lib/dynxdr/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/lib/dynxdr/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/lib/dynxdr/Makefile.am 2018-05-09 11:03:50.510199020 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2008-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2008-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -21,3 +21,5 @@ + libDynxdr_la_SOURCES += dynxdr.c + libDynxdr_la_SOURCES += xdrutil.c + ++libDynxdr_la_CPPFLAGS = @XDR_CPPFLAGS@ ++libDynxdr_la_LIBADD = @XDR_LIBS@ +diff -ru open-vm-tools-10.2.5-8068406.orig/lib/guestRpc/Makefile.am open-vm-tools-10.2.5-8068406/lib/guestRpc/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/lib/guestRpc/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/lib/guestRpc/Makefile.am 2018-05-09 11:04:33.695343248 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2008-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2008-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -20,6 +20,10 @@ + libGuestRpc_la_SOURCES = + libGuestRpc_la_SOURCES += nicinfo_xdr.c + ++libGuestRpc_la_CPPFLAGS = @XDR_CPPFLAGS@ ++ ++libGuestRpc_la_LIBADD = @XDR_LIBS@ ++ + # XXX: Autoreconf complains about this and recommends using AM_CFLAGS instead. + # Problem is, $(CFLAGS) is appended to the compiler command line after AM_CFLAGS + # and after libGuestRpc_la_CFLAGS, so "-Wall -Werror" will override this flag. +diff -ru open-vm-tools-10.2.5-8068406.orig/lib/netUtil/Makefile.am open-vm-tools-10.2.5-8068406/lib/netUtil/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/lib/netUtil/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/lib/netUtil/Makefile.am 2018-05-09 11:05:22.720325766 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2007-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2007-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -20,3 +20,6 @@ + libNetUtil_la_SOURCES = + libNetUtil_la_SOURCES += netUtilLinux.c + ++libNetUtil_la_CPPFLAGS = @XDR_CPPFLAGS@ ++ ++libNetUtil_la_LIBADD = @XDR_LIBS@ +diff -ru open-vm-tools-10.2.5-8068406.orig/lib/nicInfo/Makefile.am open-vm-tools-10.2.5-8068406/lib/nicInfo/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/lib/nicInfo/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/lib/nicInfo/Makefile.am 2018-05-09 11:16:45.873499080 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2014-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2014-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -25,6 +25,9 @@ + + libNicInfo_la_CPPFLAGS = + libNicInfo_la_CPPFLAGS += @GLIB2_CPPFLAGS@ ++libNicInfo_la_CPPFLAGS += @XDR_CPPFLAGS@ ++ ++libNicInfo_la_LIBADD = @XDR_LIBS@ + + AM_CFLAGS = $(DNET_CPPFLAGS) + if USE_SLASH_PROC +diff -ru open-vm-tools-10.2.5-8068406.orig/lib/rpcChannel/Makefile.am open-vm-tools-10.2.5-8068406/lib/rpcChannel/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/lib/rpcChannel/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/lib/rpcChannel/Makefile.am 2018-05-09 11:06:28.808588597 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2009-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2009-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -27,3 +27,6 @@ + + libRpcChannel_la_CPPFLAGS = + libRpcChannel_la_CPPFLAGS += @VMTOOLS_CPPFLAGS@ ++libRpcChannel_la_CPPFLAGS += @XDR_CPPFLAGS@ ++ ++libRpcChannel_la_LIBADD = @XDR_LIBS@ +diff -ru open-vm-tools-10.2.5-8068406.orig/lib/slashProc/net.c open-vm-tools-10.2.5-8068406/lib/slashProc/net.c +--- open-vm-tools-10.2.5-8068406.orig/lib/slashProc/net.c 2018-03-22 02:05:41.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/lib/slashProc/net.c 2018-05-09 11:06:37.592208338 -0700 +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2009-2016 VMware, Inc. All rights reserved. ++ * Copyright (C) 2009-2018 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -36,7 +36,6 @@ + #include "panic.h" + #include "slashProc.h" + #include "slashProcNetInt.h" +-#include "netutil.h" + + + /* +diff -ru open-vm-tools-10.2.5-8068406.orig/libguestlib/Makefile.am open-vm-tools-10.2.5-8068406/libguestlib/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/libguestlib/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/libguestlib/Makefile.am 2018-05-09 11:07:16.200301424 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2007-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2007-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -22,6 +22,7 @@ + + libguestlib_la_LIBADD = + libguestlib_la_LIBADD += @VMTOOLS_LIBS@ ++libguestlib_la_LIBADD += @XDR_LIBS@ + + libguestlib_la_SOURCES = + libguestlib_la_SOURCES += guestlibV3_xdr.c +@@ -56,6 +57,7 @@ + libguestlib_la_CPPFLAGS = + libguestlib_la_CPPFLAGS += -DVMTOOLS_USE_GLIB + libguestlib_la_CPPFLAGS += @GLIB2_CPPFLAGS@ ++libguestlib_la_CPPFLAGS += @XDR_CPPFLAGS@ + + EXTRA_DIST = vmguestlib.pc.in + +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/dndcp/Makefile.am open-vm-tools-10.2.5-8068406/services/plugins/dndcp/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/dndcp/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/dndcp/Makefile.am 2018-05-09 11:08:54.693686707 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2009-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2009-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -28,6 +28,7 @@ + libdndcp_la_CPPFLAGS += -I$(top_srcdir)/services/plugins/dndcp/stringxx + libdndcp_la_CPPFLAGS += -I$(top_srcdir)/services/plugins/dndcp/xutils + libdndcp_la_CPPFLAGS += -I$(top_srcdir)/include ++libdndcp_la_CPPFLAGS += @XDR_CPPFLAGS@ + + # Passing C++ related flags to CPPFLAGS generates error. + # So, we need to pass these to C++ compilation only. +@@ -45,6 +46,7 @@ + libdndcp_la_LIBADD += @VMTOOLS_LIBS@ + libdndcp_la_LIBADD += @HGFS_LIBS@ + libdndcp_la_LIBADD += $(top_builddir)/lib/hgfsUri/hgfsUriPosix.lo ++libdndcp_la_LIBADD += @XDR_LIBS@ + + libdndcp_la_SOURCES = + +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/guestInfo/Makefile.am open-vm-tools-10.2.5-8068406/services/plugins/guestInfo/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/guestInfo/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/guestInfo/Makefile.am 2018-05-09 11:09:40.650361114 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2009-2017 VMware, Inc. All rights reserved. ++### Copyright (C) 2009-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -22,6 +22,7 @@ + + libguestInfo_la_CPPFLAGS = + libguestInfo_la_CPPFLAGS += @PLUGIN_CPPFLAGS@ ++libguestInfo_la_CPPFLAGS += @XDR_CPPFLAGS@ + + libguestInfo_la_LDFLAGS = + libguestInfo_la_LDFLAGS += @PLUGIN_LDFLAGS@ +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/resolutionKMS/resolutionKMS.c open-vm-tools-10.2.5-8068406/services/plugins/resolutionKMS/resolutionKMS.c +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/resolutionKMS/resolutionKMS.c 2018-03-22 02:05:41.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/resolutionKMS/resolutionKMS.c 2018-05-09 11:09:53.202894953 -0700 +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2008-2017 VMware, Inc. All rights reserved. ++ * Copyright (C) 2008-2018 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -29,16 +29,13 @@ + #include + #include + ++#include + #include + #include + + #include "vmware.h" +-#include "debug.h" +-#include "rpcout.h" +-#include "str.h" + #include "strutil.h" + +-#include "xdrutil.h" + #include "vmware/guestrpc/tclodefs.h" + #include "vmware/tools/plugin.h" + #include "vmware/tools/utils.h" +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/resolutionSet/resolutionSet.c open-vm-tools-10.2.5-8068406/services/plugins/resolutionSet/resolutionSet.c +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/resolutionSet/resolutionSet.c 2018-03-22 02:05:41.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/resolutionSet/resolutionSet.c 2018-05-09 11:09:59.737718774 -0700 +@@ -1,5 +1,5 @@ + /********************************************************* +- * Copyright (C) 2008-2017 VMware, Inc. All rights reserved. ++ * Copyright (C) 2008-2018 VMware, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published +@@ -34,7 +34,6 @@ + + #include "resolutionInt.h" + +-#include "xdrutil.h" + #include "vmware/guestrpc/tclodefs.h" + #include "vmware/tools/plugin.h" + #include "vmware/tools/utils.h" +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/vix/Makefile.am open-vm-tools-10.2.5-8068406/services/plugins/vix/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/vix/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/vix/Makefile.am 2018-05-09 11:10:15.184453099 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2009-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2009-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -20,6 +20,7 @@ + + libvix_la_CPPFLAGS = + libvix_la_CPPFLAGS += @PLUGIN_CPPFLAGS@ ++libvix_la_CPPFLAGS += @XDR_CPPFLAGS@ + libvix_la_CPPFLAGS += -I$(top_srcdir)/vgauth/public + + libvix_la_LDFLAGS = +@@ -32,6 +33,7 @@ + libvix_la_LIBADD += $(top_builddir)/lib/auth/libAuth.la + libvix_la_LIBADD += $(top_builddir)/lib/foundryMsg/libFoundryMsg.la + libvix_la_LIBADD += $(top_builddir)/lib/impersonate/libImpersonate.la ++libvix_la_LIBADD += @XDR_LIBS@ + if ENABLE_VGAUTH + libvix_la_LIBADD += $(top_builddir)/vgauth/lib/libvgauth.la + endif +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/vix/vixTools.c open-vm-tools-10.2.5-8068406/services/plugins/vix/vixTools.c +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/vix/vixTools.c 2018-03-22 02:05:41.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/vix/vixTools.c 2018-05-09 00:12:44.258433002 -0700 +@@ -91,7 +91,6 @@ + #include "str.h" + #include "file.h" + #include "err.h" +-#include "guestInfo.h" // MAX_VALUE_LEN + #include "hostinfo.h" + #include "guest_os.h" + #include "guest_msg_def.h" +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/vmbackup/Makefile.am open-vm-tools-10.2.5-8068406/services/plugins/vmbackup/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/vmbackup/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/vmbackup/Makefile.am 2018-05-09 11:10:27.959367162 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2009-2017 VMware, Inc. All rights reserved. ++### Copyright (C) 2009-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -20,6 +20,7 @@ + + libvmbackup_la_CPPFLAGS = + libvmbackup_la_CPPFLAGS += @PLUGIN_CPPFLAGS@ ++libvmbackup_la_CPPFLAGS += @XDR_CPPFLAGS@ + + libvmbackup_la_LDFLAGS = + libvmbackup_la_LDFLAGS += @PLUGIN_LDFLAGS@ +@@ -27,6 +28,7 @@ + libvmbackup_la_LIBADD = + libvmbackup_la_LIBADD += @GOBJECT_LIBS@ + libvmbackup_la_LIBADD += @VMTOOLS_LIBS@ ++libvmbackup_la_LIBADD += @XDR_LIBS@ + + libvmbackup_la_SOURCES = + libvmbackup_la_SOURCES += nullProvider.c +diff -ru open-vm-tools-10.2.5-8068406.orig/services/plugins/vmbackup/stateMachine.c open-vm-tools-10.2.5-8068406/services/plugins/vmbackup/stateMachine.c +--- open-vm-tools-10.2.5-8068406.orig/services/plugins/vmbackup/stateMachine.c 2018-03-22 02:05:41.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/services/plugins/vmbackup/stateMachine.c 2018-05-09 10:14:03.721823229 -0700 +@@ -35,7 +35,6 @@ + + #include "vmBackupInt.h" + +-#include "dynxdr.h" + #include + #include + #include "guestApp.h" +diff -ru open-vm-tools-10.2.5-8068406.orig/toolbox/Makefile.am open-vm-tools-10.2.5-8068406/toolbox/Makefile.am +--- open-vm-tools-10.2.5-8068406.orig/toolbox/Makefile.am 2018-03-22 02:05:02.000000000 -0700 ++++ open-vm-tools-10.2.5-8068406/toolbox/Makefile.am 2018-05-09 11:11:30.514058368 -0700 +@@ -1,5 +1,5 @@ + ################################################################################ +-### Copyright (C) 2007-2016 VMware, Inc. All rights reserved. ++### Copyright (C) 2007-2018 VMware, Inc. All rights reserved. + ### + ### This program is free software; you can redistribute it and/or modify + ### it under the terms of version 2 of the GNU General Public License as +@@ -20,9 +20,11 @@ + vmware_toolbox_cmd_LDADD = + vmware_toolbox_cmd_LDADD += ../libguestlib/libguestlib.la + vmware_toolbox_cmd_LDADD += @VMTOOLS_LIBS@ ++vmware_toolbox_cmd_LDADD += @XDR_LIBS@ + + vmware_toolbox_cmd_CPPFLAGS = + vmware_toolbox_cmd_CPPFLAGS += @VMTOOLS_CPPFLAGS@ ++vmware_toolbox_cmd_CPPFLAGS += @XDR_CPPFLAGS@ + + vmware_toolbox_cmd_SOURCES = + vmware_toolbox_cmd_SOURCES += toolbox-cmd.c diff --git a/SPECS/open-vm-tools.spec b/SPECS/open-vm-tools.spec index ad07aee..233187a 100644 --- a/SPECS/open-vm-tools.spec +++ b/SPECS/open-vm-tools.spec @@ -1,5 +1,5 @@ ################################################################################ -### Copyright 2013-17 VMware, Inc. All rights reserved. +### Copyright 2013-18 VMware, Inc. All rights reserved. ### ### RPM SPEC file for building open-vm-tools packages. ### @@ -19,16 +19,16 @@ ################################################################################ %global _hardened_build 1 -%global majorversion 10.1 -%global minorversion 10 -%global toolsbuild 6082533 +%global majorversion 10.2 +%global minorversion 5 +%global toolsbuild 8068406 %global toolsversion %{majorversion}.%{minorversion} %global toolsdaemon vmtoolsd %global vgauthdaemon vgauthd Name: open-vm-tools Version: %{toolsversion} -Release: 3%{?dist}.1 +Release: 3%{?dist} Summary: Open Virtual Machine Tools for virtual machines hosted on VMware Group: Applications/System License: GPLv2 @@ -42,9 +42,8 @@ ExclusiveArch: x86_64 ExclusiveArch: %{ix86} x86_64 %endif -Patch1: resolutionKMS-wayland.patch -Patch2: resolutionKMS-wayland-2.patch -Patch3: ovt-Ignore-ENXIO-errors-with-SyncDriver.patch +Patch1: use-tirpc.patch +Patch2: ovt-Workaround-for-false-negative-result-when-detecting.patch BuildRequires: autoconf BuildRequires: automake @@ -54,16 +53,8 @@ BuildRequires: doxygen # Fuse is optional and enables vmblock-fuse BuildRequires: fuse-devel BuildRequires: glib2-devel >= 2.14.0 -BuildRequires: gtk2-devel >= 2.4.0 -%if 0%{?fedora} >= 23 -# F23 split gdk-pixbuf2-devel >= 2.31.3-5 into 3 packages, -# gdk-pixbuf2-devel, gdk-pixbuf2-modules-devel, and -# gdk-pixbuf2-xlib-devel. gtk2-devel does not depend on -# gdk-pixbuf2-xlib-devel. Therefore, we need to pull in -# gdk-pixbuf2-xlib-devel dependency ourselves. -BuildRequires: gdk-pixbuf2-xlib-devel -%endif -BuildRequires: gtkmm24-devel +BuildRequires: gtk3-devel >= 3.10.0 +BuildRequires: gtkmm30-devel >= 3.10.0 BuildRequires: libdnet-devel BuildRequires: libicu-devel BuildRequires: libmspack-devel @@ -80,7 +71,13 @@ BuildRequires: libXtst-devel BuildRequires: openssl-devel BuildRequires: pam-devel BuildRequires: procps-devel +%if 0%{?fedora} >= 28 +BuildRequires: rpcgen +%endif BuildRequires: systemd +%if 0%{?fedora} >= 28 +BuildRequires: libtirpc-devel +%endif BuildRequires: xmlsec1-openssl-devel Requires: coreutils @@ -129,11 +126,20 @@ This package contains only the user-space programs and libraries of %{name} that are essential for developing customized applications for VMware virtual machines. +%package test +Summary: Test utilities for Open Virtual Machine Tools +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description test +This package contains only the test utilities for %{name} that are +useful for verifying the functioning of %{name} in VMware virtual +machines. + %prep %setup -q -n %{name}-%{version}-%{toolsbuild} %patch1 -p1 %patch2 -p1 -%patch3 -p1 %build # Required for regenerating configure script when @@ -141,11 +147,19 @@ VMware virtual machines. autoreconf -i autoconf +%if 0%{?fedora} >= 28 +%global usetirpc with-tirpc +%else +%global usetirpc without-tirpc +%endif + %configure \ --without-kernel-modules \ --enable-xmlsec1 \ --enable-resolutionkms \ + --%{usetirpc} \ --disable-static + sed -i -e 's! -shared ! -Wl,--as-needed\0!g' libtool make %{?_smp_mflags} @@ -288,6 +302,7 @@ fi %files desktop %{_sysconfdir}/xdg/autostart/*.desktop +%{_bindir}/vmware-user %{_bindir}/vmware-user-suid-wrapper %{_bindir}/vmware-vmblock-fuse %{_libdir}/%{name}/plugins/vmusr/ @@ -303,90 +318,241 @@ fi %{_libdir}/libvgauth.so %{_libdir}/libvmtools.so +%files test +%{_bindir}/vmware-vgauth-smoketest + %changelog -* Tue Jun 05 2018 Miroslav Rezanina - 10.1010-3.1 -- Ignore ENXIO errors with SyncDriver - resolves: rhbz#1582123 +* Tue Aug 21 2018 Miroslav Rezanina - 10-2.5-3 +- ovt-Workaround-for-false-negative-result-when-detecting.patch [bz#1601559] +- Resolves: bz#1601559 + ([ESXi][RHEL7.6] Include new open-vm-tools patches for cloud-init to work with python-2) + +* Mon May 14 2018 Miroslav Rezanina - 10.2.5-2 +- Updated RHEL version +- Resolves: bz#1527233 + ([ESXi][RHEL7.5]Rebase open-vm-tools to 10.2.5) + +* Wed May 09 2018 Ravindra Kumar - 10.2.5-2 +- Use tirpc for Fedora 28 onwards. + +* Wed May 09 2018 Ravindra Kumar - 10.2.5-1 +- Package new upstream version open-vm-tools-10.2.5-8068406 (RHBZ#1431376). +- Added use-tirpc.patch to use libtirpc instead of deprecated Sun RPC. +- Removed wayland-crash.patch which is no longer needed. -* Tue Oct 03 2017 Richard W.M. Jones - 10.1.10-3 -- New upstream version 10.1.10 - resolves: rhbz#1475608 +* Mon Apr 30 2018 Pete Walter - 10.2.0-5 +- Rebuild for ICU 61.1 + +* Thu Feb 08 2018 Fedora Release Engineering - 10.2.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Fri Dec 29 2017 Ravindra Kumar - 10.2.0-3 +- Patch for a Wayland related crash in the desktopEvents plugin (RHBZ#1526952). +- gdk_set_allowed_backends() is available in version 3.10 and later only. + +* Mon Dec 18 2017 Ravindra Kumar - 10.2.0-2 +- Build with gtk3 only on newer distros. + +* Fri Dec 15 2017 Ravindra Kumar - 10.2.0-1 +- Package new upstream version open-vm-tools-10.2.0-7253323. +- Remove the patches that are no longer needed. +- New version builds with gtk3 by default. +- Package vmware-user symlink in desktop. +- Add a new test package for test utilities. +- Pick a fix to a conditional from Miroslav Vadkerti . + +* Thu Nov 30 2017 Pete Walter - 10.1.10-4 +- Rebuild for ICU 60.1 + +* Thu Sep 28 2017 Ravindra Kumar - 10.1.10-3 +- Replaced 'net-tools' dependency with 'iproute' (RHBZ#1496134). +- Added resolutionKMS-wayland-2.patch with some new fixes. + +* Fri Aug 11 2017 Kalev Lember - 10.1.10-2 +- Bump and rebuild for an rpm signing issue + +* Thu Aug 10 2017 Ravindra Kumar - 10.1.10-1 +- Package new upstream version open-vm-tools-10.1.10-6082533. +- Remove the patches that are no longer needed. + +* Thu Aug 03 2017 Fedora Release Engineering - 10.1.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 10.1.5-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 25 2017 Richard W.M. Jones - 10.1.5-5 +- Fix /tmp race conditions in libDeployPkg (CVE-2015-5191). + +* Sun Apr 02 2017 Ravindra Kumar - 10.1.5-4 +- ResolutionKMS patch for Wayland (RHBZ#1292234). * Thu Mar 16 2017 Ravindra Kumar - 10.1.5-3 - Need to add xmlsec1-openssl dependency explicitly. - related: rhbz#1406901 * Tue Feb 28 2017 Richard W.M. Jones - 10.1.5-2 - Use 0644 permissions for udev rules file. - related: rhbz#1406901 - -* Tue Feb 28 2017 Richard W.M. Jones - 10.1.5-1 -- Rebase to open-vm-tools 10.1.5 from Fedora Rawhide - resolves: rhbz#1406901 -- Enable vgauthd. - resolves: rhbz#1269243 -- Add runtime dependency on pciutils (1388766). - -* Thu Feb 02 2017 Richard W.M. Jones - 10.0.5-4 -- Fix failure to quiesce filesystem when Docker containers are running - resolves: rhbz#1406483 -- Fix for deadlock when taking a snapshot - resolves: rhbz#1398802 - -* Mon Dec 12 2016 Richard W.M. Jones - 10.0.5-3 -- Increase SCSI timeouts with udev rule (RHBZ#1214347). - -* Thu Jun 16 2016 Richard W.M. Jones - 10.0.5-2 -- Rebase to open-vm-tools 10.0.5 (from Fedora Rawhide) - resolves: rhbz#1268537 -- Remove PAM calls to pam_unix2.so module - resolves: rhbz#1313071 - -* Tue May 3 2016 Dave Wysochanski - 9.10.2-5 -- Skip freezing autofs mounts. - resolves: rhbz#1269956 - -* Fri Aug 14 2015 Richard W.M. Jones - 9.10.2-4 -- Enable PrivateTmp for additional hardening - resolves: rhbz#1253698 - -* Wed Jul 29 2015 Richard W.M. Jones - 9.10.2-3 -- Enable deploypkg - resolves: rhbz#1172335 - -* Mon Jul 27 2015 Richard W.M. Jones - 9.10.2-2 -- Disable vgauthd service in vmtoolsd.service file. - resolves: rhbz#1172833 + +* Fri Feb 24 2017 Ravindra Kumar - 10.1.5-1 +- Package new upstream version open-vm-tools-10.1.5-5055683 (RHBZ#1408959). + +* Fri Feb 17 2017 Ravindra Kumar - 10.1.0-1 +- Package new upstream version open-vm-tools-10.1.0-4449150 (RHBZ#1408959). +- Remove patches that are no longer needed. +- Build with --enable-xmlsec1 to avoid dependency on xerces-c and xml-security-c. +- Replace _prefix/lib/udev/rules.d/ with _udevrulesdir macro. + +* Thu Feb 16 2017 Ravindra Kumar - 10.0.5-10 +- sysmacros patch for glibc-2.25 (RHBZ#1411807). +- vgauth patch for openssl-1.1.0. + +* Thu Feb 16 2017 Ravindra Kumar - 10.0.5-9 +- udev rules patch for longer SCSI timeouts (RHBZ#1214347). + +* Sat Feb 11 2017 Fedora Release Engineering - 10.0.5-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Oct 26 2016 Richard W.M. Jones - 10.0.5-5 +- vm-support script needs lspci from pciutils (RHBZ#1388766). + +* Wed Sep 14 2016 Ravindra Kumar - 10.0.5-4 +- Patch for HGFS stale caching issues (RHBZ#1342181). + +* Mon Jun 20 2016 Ravindra Kumar - 10.0.5-3 +- Use systemd-detect-virt to detect VMware platform (RHBZ#1251656). + +* Wed May 25 2016 Ravindra Kumar - 10.0.5-2 +- Obsolete open-vm-tools-deploypkg because its not needed for v10.x. + +* Wed May 25 2016 Ravindra Kumar - 10.0.5-1 +- Package new upstream version open-vm-tools-10.0.5-3227872. +- Add a patch for fixing GCC 6 build issue (RHBZ#1305108). +- Replace kill-werror.patch with no-unused-const.patch. + +* Wed May 25 2016 Richard W.M. Jones - 10.0.0-12 +- Bump and rebuild. + +* Sat Apr 23 2016 Richard W.M. Jones - 10.0.0-11 +- Kill -Werror with fire (RHBZ#1305108). + +* Fri Apr 15 2016 David Tardon - 10.0.0-10 +- rebuild for ICU 57.1 + +* Thu Feb 04 2016 Fedora Release Engineering - 10.0.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Oct 28 2015 David Tardon - 10.0.0-8 +- rebuild for ICU 56.1 + +* Thu Oct 01 2015 Ravindra Kumar - 10.0.0-7 +- Added a missing output redirection + +* Thu Oct 01 2015 Ravindra Kumar - 10.0.0-6 +- Setup Shared Folders mount point when 'vmhgf-fuse -e' is success + +* Thu Oct 01 2015 Ravindra Kumar - 10.0.0-5 +- Setup and teardown Shared Folders mount point on VMs running + on VMware Workstation or VMware Fusion. + +* Wed Sep 30 2015 Ravindra Kumar - 10.0.0-4 +- vmhgfs-fuse needs 'fusermount' from 'fuse' + +* Wed Sep 30 2015 Ravindra Kumar - 10.0.0-3 +- Replace -std=c++11 with -std=gnu++11 to get "linux" definitions work + in order to fix the build issue, + https://kojipkgs.fedoraproject.org//work/tasks/4823/11274823/build.log +- Removed unused definitions for CFLAGS and CXXFLAGS + +* Wed Sep 30 2015 Ravindra Kumar - 10.0.0-2 +- Add -std=c++11 to CXXFLAGS for fixing the build issue, + https://kojipkgs.fedoraproject.org//work/tasks/3685/11273685/build.log + +* Tue Sep 29 2015 Ravindra Kumar - 10.0.0-1 +- Package new upstream version open-vm-tools-10.0.0-3000743 + +* Wed Aug 26 2015 Simone Caronni - 9.10.2-2 +- Add license macro. +- Remove initscripts requirement (#1226369). +- Delete mount.vmhgfs instead of excluding from packaging, so the debug + information is not included in the package (#1190540). +- Be more explicit with configuration files, newer mock complains of files being + listed twice. * Tue Jul 07 2015 Ravindra Kumar - 9.10.2-1 - Package new upstream version open-vm-tools-9.10.2-2822639 - Removed the patches that are no longer needed - resolves: rhbz#1172833 -* Wed May 20 2015 Ravindra Kumar - 9.10.0-2 +* Wed Jun 17 2015 Fedora Release Engineering - 9.10.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 20 2015 Ravindra Kumar - 9.10.0-4 - Claim ownership for /etc/vmware-tools directory - resolves: rhbz#1223498 -* Wed May 20 2015 Richard W.M. Jones - 9.10.0-1 -- Rebase to open-vm-tools 9.10.0 (synchronizing with F22) - resolves: rhbz#1172833 +* Fri May 15 2015 Ravindra Kumar - 9.10.0-3 +- Put Fedora 23 specific fix under a conditional, so that the change + can be backported to other branches easily if required. + +* Fri May 08 2015 Ravindra Kumar - 9.10.0-2 +- F23 has split gdk-pixbuf2-devel >= 2.31.3-5 into 3 packages, gdk-pixbuf2-devel, + gdk-pixbuf2-modules-devel, and gdk-pixbuf2-xlib-devel. gtk2-devel does not depend + on gdk-pixbuf2-xlib-devel. Therefore, we need to pull in gdk-pixbuf2-xlib-devel + dependency ourselves. + +* Thu Apr 30 2015 Ravindra Kumar - 9.10.0-1 +- Package new upstream version open-vm-tools-9.10.0-2476743 +- New version requires adding a new service vgauthd +- Removed old patches that are no longer needed +- Fix (asm_x86.patch) for correct GCC version check +- Fix (strerror_r.patch) for picking GNU signature of strerror_r +- Fix (toolboxcmd.patch) for compiling toolboxcmd-shrink.c with gcc 5.0.1 + +* Wed Feb 04 2015 Ravindra Kumar - 9.4.6-6 +- Added a patch for missing NetIpRouteConfigInfo (BZ#1189295) + +* Mon Jan 26 2015 David Tardon - 9.4.6-5 +- rebuild for ICU 54.1 + +* Wed Sep 24 2014 Simone Caronni - 9.4.6-4 +- Rebuild for new procps-ng version. -* Fri Sep 19 2014 Richard W.M. Jones - 9.4.0-6 -- Really rebuild for updated procps - resolves: rhbz#1140149 +* Tue Aug 26 2014 David Tardon - 9.4.6-3 +- rebuild for ICU 53.1 -* Wed Sep 10 2014 Richard W.M. Jones - 9.4.0-5 -- Rebuild for updated procps - resolves: rhbz#1140149 +* Sun Aug 17 2014 Fedora Release Engineering - 9.4.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild -* Mon Aug 18 2014 Richard W.M. Jones - 9.4.0-4 +* Wed Jul 16 2014 Ravindra Kumar - 9.4.6-1 +- Package new upstream version open-vm-tools-9.4.6-1770165 +- Added "autoreconf -i" and its build dependencies (autoconf, automake and libtool) + to generate configure script, this is required for version 9.4.6 as it does not + have configure script bundled in the tar +- Fix (sizeof_argument.patch) for bad sizeof argument error + +* Sat Jun 07 2014 Fedora Release Engineering - 9.4.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed Apr 23 2014 Ravindra Kumar - 9.4.0-9 - Removed unnecessary package dependency on 'dbus' - Moved 'vm-support' script to /usr/bin - Added a call to 'tools.set.version' RPC to inform VMware platform when open-vm-tools has been uninstalled + +* Wed Mar 26 2014 Ravindra Kumar - 9.4.0-8 - Add missing package dependency on 'which' (BZ#1045709) + +* Tue Mar 25 2014 Ravindra Kumar - 9.4.0-7 +- Add -D_DEFAULT_SOURCE to suppress warning as suggested in + https://sourceware.org/bugzilla/show_bug.cgi?id=16632 + +* Fri Mar 21 2014 Ravindra Kumar - 9.4.0-6 - Add missing package dependencies (BZ#1045709, BZ#1077320) +* Tue Feb 18 2014 Igor Gnatenko - 9.4.0-5 +- Fix FTBFS g_info redefine (RHBZ #1063847) + +* Fri Feb 14 2014 David Tardon - 9.4.0-4 +- rebuild for new ICU + * Tue Feb 11 2014 Richard W.M. Jones - 9.4.0-3 - Only build on x86-64 for RHEL 7 (RHBZ#1054608).