diff --git a/.gitignore b/.gitignore index 737f4e8..007b99d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/open-vm-tools-11.0.5-15389592.tar.gz +SOURCES/open-vm-tools-11.1.0-16036546.tar.gz diff --git a/.open-vm-tools.metadata b/.open-vm-tools.metadata index 5b37bd9..b5a3f96 100644 --- a/.open-vm-tools.metadata +++ b/.open-vm-tools.metadata @@ -1 +1 @@ -502484f4a112954932a7ee32d234e0c85793fcac SOURCES/open-vm-tools-11.0.5-15389592.tar.gz +95923f136cde31d149d7859cd6af308230c91856 SOURCES/open-vm-tools-11.1.0-16036546.tar.gz diff --git a/SOURCES/0002-Address-Coverity-issues-reported-in-bora-lib-file-fi.patch b/SOURCES/0002-Address-Coverity-issues-reported-in-bora-lib-file-fi.patch deleted file mode 100644 index e20d8fc..0000000 --- a/SOURCES/0002-Address-Coverity-issues-reported-in-bora-lib-file-fi.patch +++ /dev/null @@ -1,63 +0,0 @@ -From e1d523d4fdb179e3fd2494d18e813a4e392006e5 Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Tue, 3 Dec 2019 14:30:47 +0100 -Subject: Address Coverity issues reported in bora/lib/file/file.c. - -RH-Author: Cathy Avery -Message-id: <20191203143050.23065-2-cavery@redhat.com> -Patchwork-id: 92833 -O-Subject: [RHEL8.2 open-vm-tools PATCH 1/4] Address Coverity issues reported in bora/lib/file/file.c. -Bugzilla: 1769881 -RH-Acked-by: Vitaly Kuznetsov -RH-Acked-by: Miroslav Rezanina - -commit 5ca2850b60de0f27c3f8c565d7b7e553acc2921f -Author: Oliver Kurth -Date: Tue Aug 27 12:55:37 2019 -0700 - - Address Coverity issues reported in bora/lib/file/file.c. - - Fix a minor memory leak in the function File_ExpandAndCheckDir. - Also add annotations for unchecked return values in functions - GetOldMachineID and File_MoveTree, so that Coverity scans of - open-vm-tools will automatically classify these issues as - "Intentional". These annotations are useful both for internal - use as well as for partners who run Coverity scans on open-vm-tools. - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/lib/file/file.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/open-vm-tools/lib/file/file.c b/open-vm-tools/lib/file/file.c -index 7dae12c..774ec41 100644 ---- a/open-vm-tools/lib/file/file.c -+++ b/open-vm-tools/lib/file/file.c -@@ -558,6 +558,7 @@ GetOldMachineID(void) - sizeof hardwareID); - - /* Base 64 encode the binary data to obtain printable characters */ -+ /* coverity[check_return] */ - Base64_Encode(rawMachineID, sizeof rawMachineID, encodedMachineID, - sizeof encodedMachineID, NULL); - -@@ -1437,6 +1438,7 @@ File_MoveTree(const char *srcName, // IN: - * Only clean up if we created the directory. Not attempting to - * clean up partial failures. - */ -+ /* coverity[check_return] */ - File_DeleteDirectoryTree(dstName); - } - } -@@ -2186,6 +2188,7 @@ File_ExpandAndCheckDir(const char *dirName) // IN: - - return edirName; - } -+ free(edirName); - } - - return NULL; --- -1.8.3.1 - diff --git a/SOURCES/0003-Fix-a-potential-NULL-pointer-dereference-in-the-vmba.patch b/SOURCES/0003-Fix-a-potential-NULL-pointer-dereference-in-the-vmba.patch deleted file mode 100644 index c23cf87..0000000 --- a/SOURCES/0003-Fix-a-potential-NULL-pointer-dereference-in-the-vmba.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 9beab82cd41a79babaeef46129a88b9a8d7e120f Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Tue, 3 Dec 2019 14:30:48 +0100 -Subject: Fix a potential NULL pointer dereference in the vmbackup plugin. - -RH-Author: Cathy Avery -Message-id: <20191203143050.23065-3-cavery@redhat.com> -Patchwork-id: 92836 -O-Subject: [RHEL8.2 open-vm-tools PATCH 2/4] Fix a potential NULL pointer dereference in the vmbackup plugin. -Bugzilla: 1769881 -RH-Acked-by: Vitaly Kuznetsov -RH-Acked-by: Miroslav Rezanina - -commit 0bb6cf83fb6b1f80c99beb11cd47e0db02e252ff -Author: Oliver Kurth -Date: Fri Nov 22 14:52:35 2019 -0800 - - Fix a potential NULL pointer dereference in the vmbackup plugin. - - In some circumtances, VmBackupAsyncCallback might dereference - gBackupState after calling VmBackupDoAbort even though the - latter function can potentially set gBackupState to NULL. Add - a check to prevent the potential NULL pointer dereference. - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/services/plugins/vmbackup/stateMachine.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/open-vm-tools/services/plugins/vmbackup/stateMachine.c b/open-vm-tools/services/plugins/vmbackup/stateMachine.c -index 6b42286..5c01a7b 100644 ---- a/open-vm-tools/services/plugins/vmbackup/stateMachine.c -+++ b/open-vm-tools/services/plugins/vmbackup/stateMachine.c -@@ -675,6 +675,15 @@ VmBackupAsyncCallback(void *clientData) - if (gBackupState->rpcState == VMBACKUP_RPC_STATE_ERROR) { - g_warning("Aborting backup operation due to RPC errors."); - VmBackupDoAbort(); -+ -+ /* -+ * Check gBackupState, since the abort could cause a transition to -+ * VMBACKUP_MSTATE_IDLE, in which case the VmBackupState structure -+ * would be freed and gBackupState would be NULL. -+ */ -+ if (gBackupState == NULL) { -+ return FALSE; -+ } - goto exit; - } - } --- -1.8.3.1 - diff --git a/SOURCES/0004-Address-two-Coverity-reported-issues-in-hostinfoPosi.patch b/SOURCES/0004-Address-two-Coverity-reported-issues-in-hostinfoPosi.patch deleted file mode 100644 index e1bfedd..0000000 --- a/SOURCES/0004-Address-two-Coverity-reported-issues-in-hostinfoPosi.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 8fbef69f0b3ce6648d594794b945169331ddfa06 Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Tue, 3 Dec 2019 14:30:49 +0100 -Subject: Address two Coverity-reported issues in hostinfoPosix.c. - -RH-Author: Cathy Avery -Message-id: <20191203143050.23065-4-cavery@redhat.com> -Patchwork-id: 92834 -O-Subject: [RHEL8.2 open-vm-tools PATCH 3/4] Address two Coverity-reported issues in hostinfoPosix.c. -Bugzilla: 1769881 -RH-Acked-by: Vitaly Kuznetsov -RH-Acked-by: Miroslav Rezanina - -commit 8a01c912927b5bb8cdbfa57f5e8c92e8cf792bef -Author: Oliver Kurth -Date: Fri Nov 22 14:52:35 2019 -0800 - - Address two Coverity-reported issues in hostinfoPosix.c. - - Rework some code with the intent of making it more straightfoward, - which also eliminates a false positive. - - Check the return value from PosixUnlink and log a warning on error. - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/lib/misc/hostinfoPosix.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/open-vm-tools/lib/misc/hostinfoPosix.c b/open-vm-tools/lib/misc/hostinfoPosix.c -index 9d58abe..20cefb5 100644 ---- a/open-vm-tools/lib/misc/hostinfoPosix.c -+++ b/open-vm-tools/lib/misc/hostinfoPosix.c -@@ -1153,10 +1153,7 @@ out: - if (success) { - result[nArgs - 1] = DynBuf_Detach(&b); - } else { -- if (nArgs != 0) { -- Util_FreeStringList(result, nArgs); -- } -- -+ Util_FreeStringList(result, nArgs); - result = NULL; - } - -@@ -2916,7 +2913,10 @@ Hostinfo_Daemonize(const char *path, // IN: NUL-terminated UTF-8 - * with another process attempting to daemonize and unlinking the - * file it created instead. - */ -- Posix_Unlink(pidPath); -+ if (Posix_Unlink(pidPath) != 0) { -+ Warning("%s: Unable to unlink %s: %u\n", -+ __FUNCTION__, pidPath, errno); -+ } - } - - errno = err; --- -1.8.3.1 - diff --git a/SOURCES/0005-Fix-a-resource-leak-issue-in-deployPkg.patch b/SOURCES/0005-Fix-a-resource-leak-issue-in-deployPkg.patch deleted file mode 100644 index 46d6642..0000000 --- a/SOURCES/0005-Fix-a-resource-leak-issue-in-deployPkg.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 9357c2476eb74a9862ec07d0ede8d933b734e5cc Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Tue, 3 Dec 2019 14:30:50 +0100 -Subject: Fix a resource leak issue in deployPkg - -RH-Author: Cathy Avery -Message-id: <20191203143050.23065-5-cavery@redhat.com> -Patchwork-id: 92837 -O-Subject: [RHEL8.2 open-vm-tools PATCH 4/4] Fix a resource leak issue in deployPkg -Bugzilla: 1769881 -RH-Acked-by: Vitaly Kuznetsov -RH-Acked-by: Miroslav Rezanina - -commit 2ffd2913088505d8249fa342b0ee8e5002a69108 -Author: Oliver Kurth -Date: Fri Nov 22 14:52:35 2019 -0800 - - Fix a resource leak issue in deployPkg - - Variable file going out of scope in error path leaks the storage it - points to. Added fclose before return when malloc failed. - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/libDeployPkg/linuxDeployment.c | 23 ++++++++++++++--------- - 1 file changed, 14 insertions(+), 9 deletions(-) - -diff --git a/open-vm-tools/libDeployPkg/linuxDeployment.c b/open-vm-tools/libDeployPkg/linuxDeployment.c -index 1af0893..4f36a00 100644 ---- a/open-vm-tools/libDeployPkg/linuxDeployment.c -+++ b/open-vm-tools/libDeployPkg/linuxDeployment.c -@@ -824,17 +824,18 @@ TransitionState(const char* stateFrom, const char* stateTo) - * - *----------------------------------------------------------------------------- - */ --static char* --GetNicsToEnable(const char* dir) -+ -+static char * -+GetNicsToEnable(const char *dir) - { - /* -- * The file nics.txt will list ordinal number of all nics to enable separated by -- * a ",". In current architecture we can have max 4 nics. So we just have to read -- * maximum of 7 characters. This code uses 1024 chars to make sure any future -- * needs are accomodated. -+ * The file nics.txt will list ordinal number of all nics to enable separated -+ * by a ",". In current architecture we can have max 4 nics. So we just have -+ * to read maximum of 7 characters. This code uses 1024 chars to make sure -+ * any future needs are accomodated. - */ - static const unsigned int NICS_SIZE = 1024; -- static const char* nicFile = "/nics.txt"; -+ static const char *nicFile = "/nics.txt"; - - FILE *file; - -@@ -852,7 +853,9 @@ GetNicsToEnable(const char* dir) - if (file) { - ret = malloc(NICS_SIZE); - if (ret == NULL) { -- SetDeployError("Error allocating memory to read nic file '%s'", fileName); -+ SetDeployError("Error allocating memory to read nic file '%s'", -+ fileName); -+ fclose(file); - free(fileName); - return ret; - } -@@ -862,7 +865,8 @@ GetNicsToEnable(const char* dir) - - // Check various error condition - if (ferror(file)) { -- SetDeployError("Error reading nic file '%s'.(%s)", fileName, strerror(errno)); -+ SetDeployError("Error reading nic file '%s'.(%s)", fileName, -+ strerror(errno)); - free(ret); - ret = NULL; - } -@@ -880,6 +884,7 @@ GetNicsToEnable(const char* dir) - return ret; - } - -+ - /** - *------------------------------------------------------------------------------ - * --- -1.8.3.1 - diff --git a/SOURCES/0006-Rectify-a-log-spew-in-vmsvc-logging-vmware-vmsvc-roo.patch b/SOURCES/0006-Rectify-a-log-spew-in-vmsvc-logging-vmware-vmsvc-roo.patch deleted file mode 100644 index 8efdace..0000000 --- a/SOURCES/0006-Rectify-a-log-spew-in-vmsvc-logging-vmware-vmsvc-roo.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 036b206fac64786447e841c7b57941ecbdf84e77 Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Fri, 14 Feb 2020 12:23:09 +0100 -Subject: Rectify a log spew in vmsvc logging (vmware-vmsvc-root.log ) - -RH-Author: Cathy Avery -Message-id: <20200214122309.5769-1-cavery@redhat.com> -Patchwork-id: 93876 -O-Subject: [RHEL8.2 open-vm-tools PATCH] Rectify a log spew in vmsvc logging (vmware-vmsvc-root.log ) -Bugzilla: 1800812 -RH-Acked-by: Eduardo Otubo -RH-Acked-by: Mohammed Gamal - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1800812 -Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=26372468 -Branch: rhel8/master-11.0.0 -Tested: By QE -Upstream Status: stable-11.0.5-suse-bug-1162435 targeted for 11.1.0 - -commit 4ee0bd3c8ead89541ab7d196fb54e940e397420d -Author: Oliver Kurth -Date: Fri, 7 Feb 2020 10:39:38 -0800 - - Rectify a log spew in vmsvc logging (vmware-vmsvc-root.log ) - - When a LSI Logic Parallel SCSI controller sits in PCI bus 0 - (SCSI controller 0), the Linux disk device enumeration does not provide - a "label" file with the controller name. This results in messages like - - "GuestInfoGetDiskDevice: Missing disk device name; VMDK mapping unavailable for "/var/log", fsName: "/dev/sda2" - - repeatedly appearing in the vmsvc logging. The patch converts what previously - was a warning message to a debug message and thus avoids the log spew. - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/services/plugins/guestInfo/diskInfo.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/open-vm-tools/services/plugins/guestInfo/diskInfo.c b/open-vm-tools/services/plugins/guestInfo/diskInfo.c -index 878276c..032c092 100644 ---- a/open-vm-tools/services/plugins/guestInfo/diskInfo.c -+++ b/open-vm-tools/services/plugins/guestInfo/diskInfo.c -@@ -846,9 +846,9 @@ GuestInfoGetDiskDevice(const char *fsName, - */ - for (indx = 0; indx < partEntry->diskDevCnt; indx++) { - if (partEntry->diskDevNames[indx][0] == '\0') { -- g_warning("%s: Missing disk device name; VMDK mapping unavailable " -- "for \"%s\", fsName: \"%s\"\n", __FUNCTION__, -- partEntry->name, fsName); -+ g_debug("%s: Missing disk device name; VMDK mapping unavailable " -+ "for \"%s\", fsName: \"%s\"\n", __FUNCTION__, -+ partEntry->name, fsName); - partEntry->diskDevCnt = 0; - free(partEntry->diskDevNames); - partEntry->diskDevNames = NULL; --- -1.8.3.1 - diff --git a/SOURCES/ovt-Fix-a-trivial-memory-leak-in-namespacetool.c.patch b/SOURCES/ovt-Fix-a-trivial-memory-leak-in-namespacetool.c.patch deleted file mode 100644 index 7610c8d..0000000 --- a/SOURCES/ovt-Fix-a-trivial-memory-leak-in-namespacetool.c.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 8914b79dadae708672657e8879832d61c4f2cde1 Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Tue, 21 Apr 2020 10:38:45 +0200 -Subject: [PATCH 1/3] Fix a trivial memory leak in namespacetool.c. - -RH-Author: Cathy Avery -Message-id: <20200331185439.5940-2-cavery@redhat.com> -Patchwork-id: 94516 -O-Subject: [RHEL-8.2.1 open-vm-tools PATCH 1/2] Fix a trivial memory leak in namespacetool.c. -Bugzilla: 1811729 -RH-Acked-by: Miroslav Rezanina -RH-Acked-by: Vitaly Kuznetsov - -commit 8dbd6e991315bb1b0a18c369c4d2bb165ef1f184 -Author: Oliver Kurth -Date: Tue, 17 Mar 2020 14:36:55 -0700 - - Fix a trivial memory leak in namespacetool.c. - - Fix a memory leak reported by a customer based on their Coverity - scans of open-vm-tools. - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/namespacetool/namespacetool.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/open-vm-tools/namespacetool/namespacetool.c b/open-vm-tools/namespacetool/namespacetool.c -index 171e352..bfd003d 100644 ---- a/open-vm-tools/namespacetool/namespacetool.c -+++ b/open-vm-tools/namespacetool/namespacetool.c -@@ -233,6 +233,7 @@ GetValueFromStdin(gchar **data, gsize *length) - *length = 0; - } - g_free(gErr); -+ g_io_channel_unref(iochannel); - return retVal; - } - --- -1.8.3.1 - diff --git a/SOURCES/ovt-Update-copyright-to-reflect-previous-change.patch b/SOURCES/ovt-Update-copyright-to-reflect-previous-change.patch deleted file mode 100644 index e8aa1a2..0000000 --- a/SOURCES/ovt-Update-copyright-to-reflect-previous-change.patch +++ /dev/null @@ -1,39 +0,0 @@ -From dd9e505722eeb8e2e5e8db6ab903b2bd9480a224 Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Tue, 21 Apr 2020 10:38:48 +0200 -Subject: [PATCH 2/3] Update copyright to reflect previous change. - -RH-Author: Cathy Avery -Message-id: <20200331185439.5940-3-cavery@redhat.com> -Patchwork-id: 94517 -O-Subject: [RHEL-8.2.1 open-vm-tools PATCH 2/2] Update copyright to reflect previous change. -Bugzilla: 1811729 -RH-Acked-by: Miroslav Rezanina -RH-Acked-by: Vitaly Kuznetsov - -commit 95bb9273cccfd38e0f3299828a0a6cf5a8c30efb -Author: Oliver Kurth -Date: Tue, 17 Mar 2020 14:36:55 -0700 - - Update copyright to reflect previous change. - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/namespacetool/namespacetool.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/open-vm-tools/namespacetool/namespacetool.c b/open-vm-tools/namespacetool/namespacetool.c -index bfd003d..fc38f06 100644 ---- a/open-vm-tools/namespacetool/namespacetool.c -+++ b/open-vm-tools/namespacetool/namespacetool.c -@@ -1,5 +1,5 @@ - /********************************************************* -- * Copyright (C) 2016-2019 VMware, Inc. All rights reserved. -+ * Copyright (C) 2016-2020 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 --- -1.8.3.1 - diff --git a/SOURCES/ovt-add-appinfo-plugin.patch b/SOURCES/ovt-add-appinfo-plugin.patch deleted file mode 100644 index e94e60f..0000000 --- a/SOURCES/ovt-add-appinfo-plugin.patch +++ /dev/null @@ -1,1608 +0,0 @@ -From f3408f83b462d0e24739485e93ea8f8d98909ac5 Mon Sep 17 00:00:00 2001 -From: Cathy Avery -Date: Tue, 21 Apr 2020 10:38:54 +0200 -Subject: [PATCH 3/3] add appinfo plugin - -RH-Author: Cathy Avery -Message-id: <20200327120950.5402-1-cavery@redhat.com> -Patchwork-id: 94452 -O-Subject: [RHEL-8.2.1 open-vm-tools PATCH] add appinfo plugin -Bugzilla: 1809751 -RH-Acked-by: Eduardo Otubo -RH-Acked-by: Vitaly Kuznetsov - -commit f1f0b812e7fb9ccf405fcfd48ddb4d65e8532eef -Author: Oliver Kurth -Date: Wed Feb 5 17:21:52 2020 -0800 - - add appinfo plugin - -Signed-off-by: Cathy Avery -Signed-off-by: Miroslav Rezanina ---- - open-vm-tools/configure.ac | 3 +- - open-vm-tools/lib/include/appInfo.h | 41 ++ - open-vm-tools/services/plugins/Makefile.am | 5 +- - open-vm-tools/services/plugins/appInfo/COPYING | 502 ++++++++++++++++++ - open-vm-tools/services/plugins/appInfo/Makefile.am | 37 ++ - open-vm-tools/services/plugins/appInfo/appInfo.c | 572 +++++++++++++++++++++ - .../services/plugins/appInfo/appInfoInt.h | 64 +++ - .../services/plugins/appInfo/appInfoPosix.c | 124 +++++ - .../services/plugins/appInfo/appInfoUtil.c | 143 ++++++ - 9 files changed, 1489 insertions(+), 2 deletions(-) - create mode 100644 open-vm-tools/lib/include/appInfo.h - create mode 100644 open-vm-tools/services/plugins/appInfo/COPYING - create mode 100644 open-vm-tools/services/plugins/appInfo/Makefile.am - create mode 100644 open-vm-tools/services/plugins/appInfo/appInfo.c - create mode 100644 open-vm-tools/services/plugins/appInfo/appInfoInt.h - create mode 100644 open-vm-tools/services/plugins/appInfo/appInfoPosix.c - create mode 100644 open-vm-tools/services/plugins/appInfo/appInfoUtil.c - -diff --git a/open-vm-tools/configure.ac b/open-vm-tools/configure.ac -index 9aa95ab..40f8bdc 100644 ---- a/open-vm-tools/configure.ac -+++ b/open-vm-tools/configure.ac -@@ -1,5 +1,5 @@ - ################################################################################ --### Copyright (C) 2007-2019 VMware, Inc. All rights reserved. -+### Copyright (C) 2007-2020 VMware, Inc. All rights reserved. - ### - ### Configure script for building the VMware OSS Tools. - ### -@@ -1579,6 +1579,7 @@ AC_CONFIG_FILES([ \ - services/Makefile \ - services/vmtoolsd/Makefile \ - services/plugins/Makefile \ -+ services/plugins/appInfo/Makefile \ - services/plugins/desktopEvents/Makefile \ - services/plugins/dndcp/Makefile \ - services/plugins/guestInfo/Makefile \ -diff --git a/open-vm-tools/lib/include/appInfo.h b/open-vm-tools/lib/include/appInfo.h -new file mode 100644 -index 0000000..122d08e ---- /dev/null -+++ b/open-vm-tools/lib/include/appInfo.h -@@ -0,0 +1,41 @@ -+/********************************************************* -+ * Copyright (C) 2020 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. -+ * -+ *********************************************************/ -+ -+#ifndef _APPINFO_H_ -+#define _APPINFO_H_ -+ -+/** -+ * @file appInfo.h -+ * -+ * Declares few constants for the appInfo plugin. -+ */ -+ -+/** -+ * The guest Variable name for the application information. -+ */ -+#define APP_INFO_GUESTVAR_KEY "appInfo" -+ -+#define APP_INFO_VERSION_1 1 -+#define APP_INFO_KEY_VERSION "version" -+#define APP_INFO_KEY_UPDATE_COUNTER "updateCounter" -+#define APP_INFO_KEY_PUBLISHTIME "publishTime" -+#define APP_INFO_KEY_APPS "applications" -+#define APP_INFO_KEY_APP_NAME "a" -+#define APP_INFO_KEY_APP_VERSION "v" -+ -+#endif /* _APPINFO_H_ */ -diff --git a/open-vm-tools/services/plugins/Makefile.am b/open-vm-tools/services/plugins/Makefile.am -index 7ab22ee..e010ab1 100644 ---- a/open-vm-tools/services/plugins/Makefile.am -+++ b/open-vm-tools/services/plugins/Makefile.am -@@ -1,5 +1,5 @@ - ################################################################################ --### Copyright (C) 2009-2019 VMware, Inc. All rights reserved. -+### Copyright (C) 2009-2020 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 -@@ -16,6 +16,9 @@ - ################################################################################ - - SUBDIRS = -+if LINUX -+SUBDIRS += appInfo -+endif - if HAVE_X11 - SUBDIRS += desktopEvents - endif -diff --git a/open-vm-tools/services/plugins/appInfo/COPYING b/open-vm-tools/services/plugins/appInfo/COPYING -new file mode 100644 -index 0000000..9c6a6cc ---- /dev/null -+++ b/open-vm-tools/services/plugins/appInfo/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/open-vm-tools/services/plugins/appInfo/Makefile.am b/open-vm-tools/services/plugins/appInfo/Makefile.am -new file mode 100644 -index 0000000..fd1e466 ---- /dev/null -+++ b/open-vm-tools/services/plugins/appInfo/Makefile.am -@@ -0,0 +1,37 @@ -+################################################################################ -+### Copyright (C) 2020 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 -+################################################################################ -+ -+SUBDIRS = -+ -+plugindir = @VMSVC_PLUGIN_INSTALLDIR@ -+plugin_LTLIBRARIES = libappInfo.la -+ -+libappInfo_la_CPPFLAGS = -+libappInfo_la_CPPFLAGS += @PLUGIN_CPPFLAGS@ -+ -+libappInfo_la_LDFLAGS = -+libappInfo_la_LDFLAGS += @PLUGIN_LDFLAGS@ -+ -+libappInfo_la_LIBADD = -+libappInfo_la_LIBADD += @VMTOOLS_LIBS@ -+libappInfo_la_LIBADD += @GOBJECT_LIBS@ -+ -+libappInfo_la_SOURCES = -+libappInfo_la_SOURCES += appInfo.c -+libappInfo_la_SOURCES += appInfoInt.h -+libappInfo_la_SOURCES += appInfoUtil.c -+libappInfo_la_SOURCES += appInfoPosix.c -diff --git a/open-vm-tools/services/plugins/appInfo/appInfo.c b/open-vm-tools/services/plugins/appInfo/appInfo.c -new file mode 100644 -index 0000000..b0db092 ---- /dev/null -+++ b/open-vm-tools/services/plugins/appInfo/appInfo.c -@@ -0,0 +1,572 @@ -+/********************************************************* -+ * Copyright (C) 2020 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. -+ * -+ *********************************************************/ -+ -+/* -+ * appInfo.c -- -+ * -+ * Captures the information about running applications inside the guest -+ * and publishes it to a guest variable. -+ */ -+ -+ -+#include -+#include -+#include -+ -+#include "appInfo.h" -+#include "appInfoInt.h" -+#include "vmware.h" -+#include "conf.h" -+#include "dynbuf.h" -+#include "escape.h" -+#include "str.h" -+#include "util.h" -+#include "vm_atomic.h" -+#include "vmcheck.h" -+#include "vmware/tools/log.h" -+#include "vmware/tools/threadPool.h" -+#include "vmware/tools/utils.h" -+ -+#if !defined(__APPLE__) -+#include "vm_version.h" -+#include "embed_version.h" -+#include "vmtoolsd_version.h" -+VM_EMBED_VERSION(VMTOOLSD_VERSION_STRING); -+#endif -+ -+#if defined(_WIN32) -+#include "codeset.h" -+#endif -+ -+/** -+ * Maximum size of the packet size that appInfo plugin should send -+ * to the VMX. Currently, this is set to 62 KB. -+ */ -+#define MAX_APP_INFO_SIZE (62 * 1024) -+ -+/** -+ * Default poll interval for appInfo is 30m -+ */ -+#define APP_INFO_POLL_INTERVAL (30 * 60) -+ -+/** -+ * Default value for CONFNAME_APPINFO_DISABLED setting in -+ * tools configuration file. -+ * -+ * FALSE will enable the plugin. TRUE will disable the plugin. -+ */ -+#define APP_INFO_CONF_DEFAULT_DISABLED_VALUE FALSE -+ -+/** -+ * Defines the current poll interval (in seconds). -+ * -+ * This value is controlled by the appinfo.poll-interval config file option. -+ */ -+int appInfoPollInterval = 0; -+ -+/** -+ * AppInfo gather loop timeout source. -+ */ -+static GSource *appInfoTimeoutSource = NULL; -+ -+ -+/* -+ ***************************************************************************** -+ * EscapeJSONString -- -+ * -+ * Escapes a string to be included in JSON content. -+ * -+ * @param[in] str The string to be escaped. -+ * -+ * @retval Pointer to a heap-allocated memory. This holds the escaped content -+ * of the string passed by the caller. -+ * -+ ***************************************************************************** -+ */ -+ -+static char * -+EscapeJSONString(const char *str) // IN -+{ -+ /* -+ * Escape '"' and '\' characters in the JSON string. -+ */ -+ -+ static const int bytesToEscape[] = { -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // " -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, // '\' -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -+ }; -+ -+ return Escape_DoString("\\u00", bytesToEscape, str, strlen(str), -+ NULL); -+} -+ -+ -+/* -+ ***************************************************************************** -+ * SetGuestInfo -- -+ * -+ * Sends a simple key-value update request to the VMX. -+ * -+ * @param[in] ctx Application context. -+ * @param[in] key Key sent to the VMX -+ * @param[in] value GuestInfo data sent to the VMX -+ * -+ * @retval TRUE RPCI succeeded. -+ * @retval FALSE RPCI failed. -+ * -+ ***************************************************************************** -+ */ -+ -+static Bool -+SetGuestInfo(ToolsAppCtx *ctx, // IN: -+ const char *guestVariableName, // IN: -+ const char *value) // IN: -+{ -+ Bool status; -+ char *reply = NULL; -+ gchar *msg; -+ size_t replyLen; -+ -+ ASSERT(guestVariableName); -+ ASSERT(value); -+ -+ msg = g_strdup_printf("info-set guestinfo.%s %s", -+ guestVariableName, -+ value); -+ -+ status = RpcChannel_Send(ctx->rpc, -+ msg, -+ strlen(msg) + 1, -+ &reply, -+ &replyLen); -+ g_free(msg); -+ -+ if (!status) { -+ g_warning("Error sending RPC message: %s\n", reply ? reply : "NULL"); -+ vm_free(reply); -+ return FALSE; -+ } else { -+ g_info("Successfully sent the app information.\n"); -+ } -+ -+ status = (*reply == '\0'); -+ vm_free(reply); -+ return status; -+} -+ -+ -+/* -+ ***************************************************************************** -+ * AppInfoGatherTask -- -+ * -+ * Collects all the desired application related information and updates VMX. -+ * -+ * @param[in] data The application context. -+ * -+ ***************************************************************************** -+ */ -+ -+static void -+AppInfoGatherTask(ToolsAppCtx *ctx, -+ void *data) -+{ -+ DynBuf dynBuffer; -+ char tmpBuf[1024]; -+ int len; -+ gchar *tstamp = NULL; -+ char *escapedCmd = NULL; -+ char *escapedVersion = NULL; -+ GSList *appList = NULL; -+ GSList *appNode; -+ static Atomic_uint64 updateCounter = {0}; -+ uint64 counter = (uint64) Atomic_ReadInc64(&updateCounter) + 1; -+ -+ static char headerFmt[] = "{\n" -+ "\"" APP_INFO_KEY_VERSION "\":\"%d\", \n" -+ "\"" APP_INFO_KEY_UPDATE_COUNTER "\":\"%"FMT64"d\", \n" -+ "\"" APP_INFO_KEY_PUBLISHTIME "\":\"%s\", \n" -+ "\"" APP_INFO_KEY_APPS "\":["; -+ static char jsonPerAppFmt[] = -+ "%s\n" // , for all the elements after the first one -+ "{" -+ "\"" APP_INFO_KEY_APP_NAME "\":\"%s\"" -+ "," -+ "\"" APP_INFO_KEY_APP_VERSION "\":\"%s\"" -+ "}"; -+ static char jsonSuffix[] = "]}"; -+ -+ DynBuf_Init(&dynBuffer); -+ -+ tstamp = VMTools_GetTimeAsString(); -+ -+ len = Str_Snprintf(tmpBuf, sizeof tmpBuf, headerFmt, -+ APP_INFO_VERSION_1, -+ counter, -+ tstamp != NULL ? tstamp : ""); -+ -+ if (len < 0) { -+ g_warning("Insufficient space for the header.\n"); -+ goto abort; -+ } -+ -+ DynBuf_Append(&dynBuffer, tmpBuf, len); -+ -+ appList = AppInfo_SortAppList(AppInfo_GetAppList()); -+ -+ for (appNode = appList; appNode != NULL; appNode = appNode->next) { -+ size_t currentBufferSize = DynBuf_GetSize(&dynBuffer); -+ AppInfo *appInfo = (AppInfo *) appNode->data; -+ -+ if (appInfo->appName == NULL || -+ appInfo->version == NULL) { -+ goto next_entry; -+ } -+ -+ escapedCmd = EscapeJSONString(appInfo->appName); -+ -+ if (NULL == escapedCmd) { -+ g_warning("Failed to escape the content of cmdName\n"); -+ goto abort; -+ } -+ -+ escapedVersion = EscapeJSONString(appInfo->version); -+ if (NULL == escapedVersion) { -+ g_warning("Failed to escape the content of version information.\n"); -+ goto abort; -+ } -+ -+ if (appNode == appList) { -+ len = Str_Snprintf(tmpBuf, sizeof tmpBuf, jsonPerAppFmt, -+ "", escapedCmd, escapedVersion); -+ } else { -+ /* -+ * If this is not the first element, then add ',' at the beginning. -+ */ -+ len = Str_Snprintf(tmpBuf, sizeof tmpBuf, jsonPerAppFmt, -+ ",", escapedCmd, escapedVersion); -+ } -+ -+ if (len < 0) { -+ g_warning("Insufficient space for the application information.\n"); -+ goto next_entry; -+ } -+ -+ if (currentBufferSize + len + sizeof jsonSuffix > MAX_APP_INFO_SIZE) { -+ g_warning("Exceeded the max info packet size." -+ " Truncating the rest of the applications.\n"); -+ break; -+ } -+ -+ DynBuf_Append(&dynBuffer, tmpBuf, len); -+ -+next_entry: -+ free(escapedCmd); -+ escapedCmd = NULL; -+ free(escapedVersion); -+ escapedVersion = NULL; -+ } -+ -+ DynBuf_Append(&dynBuffer, jsonSuffix, sizeof jsonSuffix - 1); -+ SetGuestInfo(ctx, APP_INFO_GUESTVAR_KEY, DynBuf_GetString(&dynBuffer)); -+ -+abort: -+ free(escapedCmd); -+ free(escapedVersion); -+ AppInfo_DestroyAppList(appList); -+ g_free(tstamp); -+ DynBuf_Destroy(&dynBuffer); -+} -+ -+ -+/* -+ ***************************************************************************** -+ * AppInfoGather -- -+ * -+ * Creates a new thread that collects all the desired application related -+ * information and udates the VMX. -+ * -+ * @param[in] data The application context. -+ * -+ * @return TRUE to indicate that the timer should be rescheduled. -+ * -+ ***************************************************************************** -+ */ -+ -+static gboolean -+AppInfoGather(gpointer data) -+{ -+ ToolsAppCtx *ctx = data; -+ if (!ToolsCorePool_SubmitTask(ctx, AppInfoGatherTask, NULL, NULL)) { -+ g_warning("%s: failed to start information gather thread\n", -+ __FUNCTION__); -+ } -+ -+ return TRUE; -+} -+ -+ -+/* -+ ***************************************************************************** -+ * TweakGatherLoop -- -+ * -+ * @brief Start, stop, reconfigure a GuestInfoGather poll loop. -+ * -+ * This function is responsible for creating, manipulating, and resetting a -+ * AppDiscoveryGather loop timeout source. -+ * -+ * @param[in] ctx The app context. -+ * @param[in] enable Whether to enable the gather loop. -+ * -+ ***************************************************************************** -+ */ -+ -+static void -+TweakGatherLoop(ToolsAppCtx *ctx, -+ gboolean enable) -+{ -+ gint pollInterval = 0; -+ -+ if (enable) { -+ pollInterval = APP_INFO_POLL_INTERVAL * 1000; -+ -+ /* -+ * Check the config registry for custom poll interval, -+ * converting from seconds to milliseconds. -+ */ -+ if (g_key_file_has_key(ctx->config, CONFGROUPNAME_APPINFO, -+ CONFNAME_APPINFO_POLLINTERVAL, NULL)) { -+ GError *gError = NULL; -+ -+ pollInterval = g_key_file_get_integer(ctx->config, -+ CONFGROUPNAME_APPINFO, -+ CONFNAME_APPINFO_POLLINTERVAL, -+ &gError); -+ pollInterval *= 1000; -+ -+ if (pollInterval < 0 || gError) { -+ g_warning("Invalid %s.%s value. Using default %us.\n", -+ CONFGROUPNAME_APPINFO, -+ CONFNAME_APPINFO_POLLINTERVAL, -+ APP_INFO_POLL_INTERVAL); -+ pollInterval = APP_INFO_POLL_INTERVAL * 1000; -+ } -+ -+ g_clear_error(&gError); -+ } -+ } -+ -+ if (appInfoTimeoutSource != NULL) { -+ /* -+ * If the interval hasn't changed, let's not interfere with the existing -+ * timeout source. -+ */ -+ if (pollInterval == appInfoPollInterval) { -+ ASSERT(pollInterval); -+ return; -+ } -+ -+ /* -+ * Destroy the existing timeout source since the interval has changed. -+ */ -+ -+ g_source_destroy(appInfoTimeoutSource); -+ appInfoTimeoutSource = NULL; -+ } -+ -+ /* -+ * All checks have passed. Create a new timeout source and attach it. -+ */ -+ appInfoPollInterval = pollInterval; -+ -+ if (appInfoPollInterval) { -+ g_info("New value for %s is %us.\n", -+ CONFNAME_APPINFO_POLLINTERVAL, -+ appInfoPollInterval / 1000); -+ -+ appInfoTimeoutSource = g_timeout_source_new(appInfoPollInterval); -+ VMTOOLSAPP_ATTACH_SOURCE(ctx, appInfoTimeoutSource, -+ AppInfoGather, ctx, NULL); -+ g_source_unref(appInfoTimeoutSource); -+ } else { -+ g_info("Poll loop for %s disabled.\n", CONFNAME_APPINFO_POLLINTERVAL); -+ SetGuestInfo(ctx, APP_INFO_GUESTVAR_KEY, ""); -+ } -+} -+ -+ -+/* -+ ***************************************************************************** -+ * AppInfoServerConfReload -- -+ * -+ * @brief Reconfigures the poll loop interval upon config file reload. -+ * -+ * @param[in] src The source object. -+ * @param[in] ctx The application context. -+ * @param[in] data Unused. -+ * -+ ***************************************************************************** -+ */ -+ -+static void -+AppInfoServerConfReload(gpointer src, -+ ToolsAppCtx *ctx, -+ gpointer data) -+{ -+ gboolean disabled = -+ VMTools_ConfigGetBoolean(ctx->config, -+ CONFGROUPNAME_APPINFO, -+ CONFNAME_APPINFO_DISABLED, -+ APP_INFO_CONF_DEFAULT_DISABLED_VALUE); -+ TweakGatherLoop(ctx, !disabled); -+} -+ -+ -+/* -+ ***************************************************************************** -+ * AppInfoServerShutdown -- -+ * -+ * Cleanup internal data on shutdown. -+ * -+ * @param[in] src The source object. -+ * @param[in] ctx Unused. -+ * @param[in] data Unused. -+ * -+ ***************************************************************************** -+ */ -+ -+static void -+AppInfoServerShutdown(gpointer src, -+ ToolsAppCtx *ctx, -+ gpointer data) -+{ -+ if (appInfoTimeoutSource != NULL) { -+ g_source_destroy(appInfoTimeoutSource); -+ appInfoTimeoutSource = NULL; -+ } -+ -+ SetGuestInfo(ctx, APP_INFO_GUESTVAR_KEY, ""); -+} -+ -+ -+/* -+ ***************************************************************************** -+ * ToolsOnLoad -- -+ * -+ * Plugin entry point. Initializes internal plugin state. -+ * -+ * @param[in] ctx The app context. -+ * -+ * @return The registration data. -+ * -+ ***************************************************************************** -+ */ -+ -+TOOLS_MODULE_EXPORT ToolsPluginData * -+ToolsOnLoad(ToolsAppCtx *ctx) -+{ -+ static ToolsPluginData regData = { -+ "appInfo", -+ NULL, -+ NULL -+ }; -+ -+ uint32 vmxVersion = 0; -+ uint32 vmxType = VMX_TYPE_UNSET; -+ -+ /* -+ * Return NULL to disable the plugin if not running in a VMware VM. -+ */ -+ if (!ctx->isVMware) { -+ g_info("Not running in a VMware VM.\n"); -+ return NULL; -+ } -+ -+ /* -+ * Return NULL to disable the plugin if VM is not running on ESX host. -+ */ -+ if (!VmCheck_GetVersion(&vmxVersion, &vmxType) || -+ vmxType != VMX_TYPE_SCALABLE_SERVER) { -+ g_info("VM is not running on ESX host.\n"); -+ return NULL; -+ } -+ -+ /* -+ * Return NULL to disable the plugin if not running in vmsvc daemon. -+ */ -+ if (!TOOLS_IS_MAIN_SERVICE(ctx)) { -+ g_info("Not running in vmsvc daemon: container name='%s'.\n", -+ ctx->name); -+ return NULL; -+ } -+ -+ /* -+ * This plugin is useless without an RpcChannel. If we don't have one, -+ * just bail. -+ */ -+ if (ctx->rpc != NULL) { -+ ToolsPluginSignalCb sigs[] = { -+ { TOOLS_CORE_SIG_CONF_RELOAD, AppInfoServerConfReload, NULL }, -+ { TOOLS_CORE_SIG_SHUTDOWN, AppInfoServerShutdown, NULL } -+ }; -+ ToolsAppReg regs[] = { -+ { TOOLS_APP_SIGNALS, -+ VMTools_WrapArray(sigs, sizeof *sigs, ARRAYSIZE(sigs)) -+ } -+ }; -+ -+ gboolean disabled = FALSE; -+ -+ regData.regs = VMTools_WrapArray(regs, -+ sizeof *regs, -+ ARRAYSIZE(regs)); -+ -+ /* -+ * Set up the AppInfo gather loop. -+ */ -+ disabled = -+ VMTools_ConfigGetBoolean(ctx->config, -+ CONFGROUPNAME_APPINFO, -+ CONFNAME_APPINFO_DISABLED, -+ APP_INFO_CONF_DEFAULT_DISABLED_VALUE); -+ TweakGatherLoop(ctx, !disabled); -+ -+ return ®Data; -+ } -+ -+ return NULL; -+} -+ -+ -+/* -+ * END Tools Core Services goodies. -+ ***************************************************************************** -+ */ -diff --git a/open-vm-tools/services/plugins/appInfo/appInfoInt.h b/open-vm-tools/services/plugins/appInfo/appInfoInt.h -new file mode 100644 -index 0000000..1897926 ---- /dev/null -+++ b/open-vm-tools/services/plugins/appInfo/appInfoInt.h -@@ -0,0 +1,64 @@ -+/********************************************************* -+ * Copyright (C) 2020 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. -+ * -+ *********************************************************/ -+ -+#ifndef _APPINFOINT_H_ -+#define _APPINFOINT_H_ -+ -+/** -+ * @file appInfoInt.h -+ * -+ * Header file with few functions that are internal to appInfo plugin. -+ */ -+ -+#define G_LOG_DOMAIN "appInfo" -+#include "vm_basic_types.h" -+#include -+#include "vmware/tools/plugin.h" -+ -+#if defined(_WIN32) -+ -+#include -+typedef DWORD AppInfo_Pid; -+ -+#else /* POSIX */ -+ -+#include -+typedef pid_t AppInfo_Pid; -+ -+#endif -+ -+/* -+ * Application information structure. -+ * This holds basic information we return per process -+ * when listing process information inside the guest. -+ */ -+ -+typedef struct AppInfo { -+ AppInfo_Pid procId; -+ char *appName; // UTF-8 -+ char *version; -+#if defined(_WIN32) -+ size_t memoryUsed; -+#endif -+} AppInfo; -+ -+GSList *AppInfo_GetAppList(void); -+GSList *AppInfo_SortAppList(GSList *appList); -+ -+void AppInfo_DestroyAppList(GSList *appList); -+#endif /* _APPINFOINT_H_ */ -diff --git a/open-vm-tools/services/plugins/appInfo/appInfoPosix.c b/open-vm-tools/services/plugins/appInfo/appInfoPosix.c -new file mode 100644 -index 0000000..d7b05be ---- /dev/null -+++ b/open-vm-tools/services/plugins/appInfo/appInfoPosix.c -@@ -0,0 +1,124 @@ -+/********************************************************* -+ * Copyright (C) 2020 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. -+ * -+ *********************************************************/ -+ -+/* -+ * appInfoPosix.c -- -+ * -+ * Functions to capture the information about running applications inside -+ * a Linux guest. -+ * -+ */ -+ -+#ifndef __linux__ -+# error This file should not be compiled. -+#endif -+ -+ -+#include -+#include -+#include -+ -+#include "appInfoInt.h" -+#include "procMgr.h" -+#include "vmware.h" -+#include "str.h" -+#include "util.h" -+ -+ -+/* -+ *---------------------------------------------------------------------- -+ * AppInfoGetAppInfo -- -+ * -+ * Retrieves the application information for a specified process. -+ * -+ * @param[in] procInfo Information about a process. -+ * -+ * @retval The application information. The caller must free the memory -+ * allocated for the application information. -+ * NULL if any error happens. -+ * -+ *---------------------------------------------------------------------- -+ */ -+ -+AppInfo * -+AppInfoGetAppInfo(ProcMgrProcInfo *procInfo) // IN -+{ -+ AppInfo *appInfo = NULL; -+ -+ if (procInfo == NULL) { -+ return appInfo; -+ } -+ -+ if (procInfo->procCmdName == NULL) { -+ return appInfo; -+ } -+ -+ appInfo = Util_SafeMalloc(sizeof (*appInfo) * 1); -+ appInfo->procId = procInfo->procId; -+ appInfo->appName = Util_SafeStrdup(procInfo->procCmdName); -+ appInfo->version = Util_SafeStrdup(""); -+ -+ return appInfo; -+} -+ -+ -+/* -+ *---------------------------------------------------------------------- -+ * AppInfo_GetAppList -- -+ * -+ * Generates the application information list. -+ * -+ * @retval Pointer to the newly allocated application list. The caller must -+ * free the memory using AppInfoDestroyAppList function. -+ * NULL if any error occurs. -+ * -+ *---------------------------------------------------------------------- -+ */ -+ -+GSList * -+AppInfo_GetAppList(void) { -+ GSList *appList = NULL; -+ int i; -+ ProcMgrProcInfoArray *procList = NULL; -+ size_t procCount; -+ -+#if defined(_WIN32) -+ procList = ProcMgr_ListProcessesEx(); -+#else -+ procList = ProcMgr_ListProcesses(); -+#endif -+ -+ if (procList == NULL) { -+ g_warning("Failed to get the list of processes.\n"); -+ return appList; -+ } -+ -+ procCount = ProcMgrProcInfoArray_Count(procList); -+ for (i = 0; i < procCount; i++) { -+ AppInfo *appInfo; -+ ProcMgrProcInfo *procInfo = ProcMgrProcInfoArray_AddressOf(procList, i); -+ appInfo = AppInfoGetAppInfo(procInfo); -+ if (NULL != appInfo) { -+ appList = g_slist_prepend(appList, appInfo); -+ } -+ } -+ -+ ProcMgr_FreeProcList(procList); -+ -+ return appList; -+} -diff --git a/open-vm-tools/services/plugins/appInfo/appInfoUtil.c b/open-vm-tools/services/plugins/appInfo/appInfoUtil.c -new file mode 100644 -index 0000000..f0327ec ---- /dev/null -+++ b/open-vm-tools/services/plugins/appInfo/appInfoUtil.c -@@ -0,0 +1,143 @@ -+/********************************************************* -+ * Copyright (C) 2020 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. -+ * -+ *********************************************************/ -+ -+/* -+ * appInfoUtil.c -- -+ * -+ * Utility functions for the application list information. -+ */ -+ -+ -+#include -+#include -+#include "appInfoInt.h" -+ -+ -+/* -+ ****************************************************************************** -+ * AppInfoDestroyAppData -- -+ * -+ * Free function for application data. This function is called by the glib -+ * for each element in the application list while freeing. -+ * -+ * @param[in] data Pointer to the application data. -+ * -+ * @retval NONE -+ * -+ ****************************************************************************** -+ */ -+ -+void -+AppInfoDestroyAppData(gpointer data) { -+ AppInfo *appInfo = (AppInfo *) data; -+ -+ if (appInfo == NULL) { -+ return; -+ } -+ -+ free(appInfo->appName); -+ free(appInfo->version); -+ free(appInfo); -+} -+ -+ -+/* -+ ****************************************************************************** -+ * AppInfoDestroyAppList -- -+ * -+ * Frees the entire memory allocated for the application list. -+ * -+ * @param[in] appList Pointer to the application list. -+ * -+ * @retval NONE -+ * -+ ****************************************************************************** -+ */ -+ -+void -+AppInfo_DestroyAppList(GSList *appList) { -+ if (appList == NULL) { -+ return; -+ } -+ -+ g_slist_free_full(appList, AppInfoDestroyAppData); -+} -+ -+ -+/* -+ ****************************************************************************** -+ * AppInfoCompareApps -- -+ * -+ * Compare function used by glib while sorting the application list. -+ * For windows guests, the memory used by the application is used for comparing. -+ * For linux guests, no comparison is done and hence 0 is returned. -+ * -+ * @param[in] a Pointer to the first application that should be compared. -+ * @param[in] b Pointer to the second application that should be compared. -+ * -+ * @retval -1 if a should be kept before b in the sorted list. -+ * 0 if both the elements are same. -+ * 1 if b should be kept before a in the sorted list. -+ * -+ ****************************************************************************** -+ */ -+ -+static gint -+AppInfoCompareApps(gconstpointer a, -+ gconstpointer b) { -+#if defined(_WIN32) -+ if (a != NULL && b != NULL) { -+ size_t aMemory = ((AppInfo *) a)->memoryUsed; -+ size_t bMemory = ((AppInfo *) b)->memoryUsed; -+ if (aMemory < bMemory) { -+ return 1; -+ } else if (aMemory == bMemory) { -+ return 0; -+ } else { -+ return -1; -+ } -+ } -+ return 0; -+#else -+ return 0; -+#endif -+} -+ -+ -+/* -+ ****************************************************************************** -+ * AppInfo_SortAppList -- -+ * -+ * Sorts the provided list of applications. -+ * -+ * @param[in] appList List of applications that need to be sorted. -+ * -+ * @retval The sorted list of applications. -+ * -+ ****************************************************************************** -+ */ -+ -+GSList * -+AppInfo_SortAppList(GSList *appList) // IN/OUT -+{ -+ if (appList == NULL) { -+ return appList; -+ } -+ -+ return g_slist_sort(appList, AppInfoCompareApps); -+} --- -1.8.3.1 - diff --git a/SOURCES/vmtoolsd.pam b/SOURCES/vmtoolsd.pam new file mode 100644 index 0000000..aa3daa0 --- /dev/null +++ b/SOURCES/vmtoolsd.pam @@ -0,0 +1,5 @@ +#%PAM-1.0 +auth substack password-auth +auth include postlogin +account required pam_nologin.so +account include password-auth diff --git a/SPECS/open-vm-tools.spec b/SPECS/open-vm-tools.spec index bd06422..ef446b2 100644 --- a/SPECS/open-vm-tools.spec +++ b/SPECS/open-vm-tools.spec @@ -19,16 +19,16 @@ ################################################################################ %global _hardened_build 1 -%global majorversion 11.0 -%global minorversion 5 -%global toolsbuild 15389592 +%global majorversion 11.1 +%global minorversion 0 +%global toolsbuild 16036546 %global toolsversion %{majorversion}.%{minorversion} %global toolsdaemon vmtoolsd %global vgauthdaemon vgauthd Name: open-vm-tools Version: %{toolsversion} -Release: 3%{?dist} +Release: 2%{?dist} Summary: Open Virtual Machine Tools for virtual machines hosted on VMware Group: Applications/System License: GPLv2 @@ -38,20 +38,10 @@ Source1: %{toolsdaemon}.service Source2: %{vgauthdaemon}.service Source3: run-vmblock\x2dfuse.mount Source4: open-vm-tools.conf +Source5: vmtoolsd.pam ExclusiveArch: x86_64 -Patch0002: 0002-Address-Coverity-issues-reported-in-bora-lib-file-fi.patch -Patch0003: 0003-Fix-a-potential-NULL-pointer-dereference-in-the-vmba.patch -Patch0004: 0004-Address-two-Coverity-reported-issues-in-hostinfoPosi.patch -Patch0005: 0005-Fix-a-resource-leak-issue-in-deployPkg.patch -Patch0006: 0006-Rectify-a-log-spew-in-vmsvc-logging-vmware-vmsvc-roo.patch -# For bz#1811729 - [ESXi][RHEL8.2.1]open-vm-tools coverity scan issue -Patch7: ovt-Fix-a-trivial-memory-leak-in-namespacetool.c.patch -# For bz#1811729 - [ESXi][RHEL8.2.1]open-vm-tools coverity scan issue -Patch8: ovt-Update-copyright-to-reflect-previous-change.patch -# For bz#1809751 - [ESXi][RHEL8.2.1]open-vm-tools add appinfo plugin patch -Patch9: ovt-add-appinfo-plugin.patch BuildRequires: autoconf BuildRequires: automake @@ -95,6 +85,7 @@ Requires: sed Requires: systemd Requires: systemd-libs Requires: tar +Requires: util-linux Requires: which # xmlsec1-openssl needs to be added explicitly Requires: xmlsec1-openssl @@ -121,6 +112,22 @@ This package contains only the user-space programs and libraries of %{name} that are essential for improved user experience of VMware virtual machines. +%package sdmp +Summary: Service Discovery components for Open Virtual Machine Tools +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: coreutils +Requires: gawk +Requires: glibc-common +Requires: grep +Requires: iproute +Requires: procps + +%description sdmp +This package contains only the user-space programs and utility scripts of +%{name} that are essential for performing service discovery in VMware virtual +machines by vRealize Operations Service Discovery Management Pack. + %package devel Summary: Development libraries for Open Virtual Machine Tools Group: Development/Libraries @@ -155,6 +162,7 @@ autoreconf -vif --without-kernel-modules \ --enable-xmlsec1 \ --enable-resolutionkms \ + --enable-servicediscovery \ --%{usetirpc} \ --disable-static @@ -187,15 +195,12 @@ rm -f docs/api/build/html/FreeSans.ttf # Remove mount.vmhgfs & symlink rm -fr %{buildroot}%{_sbindir} %{buildroot}/sbin/mount.vmhgfs -# Move vm-support to /usr/bin -mv %{buildroot}%{_sysconfdir}/vmware-tools/vm-support %{buildroot}%{_bindir} - # Systemd unit files install -p -m 644 -D %{SOURCE1} %{buildroot}%{_unitdir}/%{toolsdaemon}.service install -p -m 644 -D %{SOURCE2} %{buildroot}%{_unitdir}/%{vgauthdaemon}.service install -p -m 644 -D '%{SOURCE3}' %{buildroot}%{_unitdir}/run-vmblock\\x2dfuse.mount -install -p -m 644 -D %{SOURCE4} %{buildroot}/usr/lib/modules-load.d/open-vm-tools.conf - +install -p -m 644 -D %{SOURCE4} %{buildroot}%{_modulesloaddir}/open-vm-tools.conf +install -p -m 644 -D %{SOURCE5} %{buildroot}%{_sysconfdir}/pam.d/vmtoolsd # 'make check' in open-vm-tools rebuilds docs and ends up regenerating # the font file. We can add %%check secion once 'make check' is fixed @@ -233,6 +238,12 @@ fi %post desktop %systemd_post run-vmblock\x2dfuse.mount +%post sdmp +# Load the newly installed or upgraded SDMP plugin +if %{_bindir}/systemctl is-active %{toolsdaemon}.service &> /dev/null; then + %{_bindir}/systemctl restart %{toolsdaemon}.service &> /dev/null || /bin/true +fi + %preun %systemd_preun %{toolsdaemon}.service %systemd_preun %{vgauthdaemon}.service @@ -263,6 +274,16 @@ fi %systemd_postun_with_restart %{toolsdaemon}.service %systemd_postun_with_restart %{vgauthdaemon}.service +%postun desktop +%systemd_postun run-vmblock\x2dfuse.mount + +%postun sdmp +# In case of uninstall, unload the uninstalled SDMP plugin +if [ "$1" = "0" ] && \ + %{_bindir}/systemctl is-active %{toolsdaemon}.service &> /dev/null; then + %{_bindir}/systemctl restart %{toolsdaemon}.service &> /dev/null || /bin/true +fi + %files %license COPYING %doc AUTHORS ChangeLog NEWS README @@ -299,22 +320,33 @@ fi %dir %{_libdir}/%{name}/plugins/common %{_libdir}/%{name}/plugins/common/*.so %dir %{_libdir}/%{name}/plugins/vmsvc -%{_libdir}/%{name}/plugins/vmsvc/*.so +%{_libdir}/%{name}/plugins/vmsvc/libappInfo.so +%{_libdir}/%{name}/plugins/vmsvc/libdeployPkgPlugin.so +%{_libdir}/%{name}/plugins/vmsvc/libguestInfo.so +%{_libdir}/%{name}/plugins/vmsvc/libpowerOps.so +%{_libdir}/%{name}/plugins/vmsvc/libresolutionKMS.so +%{_libdir}/%{name}/plugins/vmsvc/libtimeSync.so +%{_libdir}/%{name}/plugins/vmsvc/libvmbackup.so + %{_datadir}/%{name}/ %{_udevrulesdir}/99-vmware-scsi-udev.rules %{_unitdir}/%{toolsdaemon}.service %{_unitdir}/%{vgauthdaemon}.service %{_unitdir}/run-vmblock\x2dfuse.mount -/usr/lib/modules-load.d/open-vm-tools.conf +%{_modulesloaddir}/open-vm-tools.conf %files desktop %{_sysconfdir}/xdg/autostart/*.desktop %{_bindir}/vmware-user -%{_bindir}/vmware-user-suid-wrapper +%attr(4755,-,-) %{_bindir}/vmware-user-suid-wrapper %{_bindir}/vmware-vmblock-fuse %{_libdir}/%{name}/plugins/vmusr/ +%files sdmp +%{_libdir}/%{name}/plugins/vmsvc/libserviceDiscovery.so +%{_libdir}/%{name}/serviceDiscovery + %files devel %doc docs/api/build/* %exclude %{_includedir}/libDeployPkg/ @@ -330,19 +362,25 @@ fi %{_bindir}/vmware-vgauth-smoketest %changelog +* Thu Jul 02 2020 Miroslav Rezanina - 11.1.0-2.el8 +- Remove net-tools dependency [bz#1849459] +- Resolves: bz#1849459 + ([ESXi][RHEL8]Incorporate SDMP related fixes and removal of net-tools dependency) + +* Tue May 26 2020 Mirosalv Rezanina - 11.1.0-1.el8 +- Rebase to 11.1.0 [bz#1806677] +- Added open-vm-tools-sdmp package [bz#1833157) +- Resolves: bz#1806677 + ([ESXi][RHEL8]Rebase open-vm-tools to 11.1.0 for RHEL 8.3) +- Resolves: bz#1833157 + ([ESXi][RHEL8]Add new open-vm-tools-sdmp package for RHEL 8.3) + * Tue Apr 21 2020 Miroslav Rezanina - 11.0.5-3.el8 -- ovt-Fix-a-trivial-memory-leak-in-namespacetool.c.patch [bz#1811729] -- ovt-Update-copyright-to-reflect-previous-change.patch [bz#1811729] -- ovt-add-appinfo-plugin.patch [bz#1809751] -- Resolves: bz#1809751 - ([ESXi][RHEL8.2.1]open-vm-tools add appinfo plugin patch) -- Resolves: bz#1811729 - ([ESXi][RHEL8.2.1]open-vm-tools coverity scan issue) +- [ESXi][RHEL8.2.1]open-vm-tools add appinfo plugin patch +- [ESXi][RHEL8.2.1]open-vm-tools coverity scan issue * Wed Apr 08 2020 Miroslav Rezanina - 11.0.5-1.el8 -- Rebase to 11.0.5 (bz#1798285) -- Resolves: bz#1798285 - ([ESXi][RHEL8.2.1]Rebase open-vm-tools to 11.0.5 for 8.2.1) +- Rebase to 11.0.5 * Tue Feb 18 2020 Miroslav Rezanina - 11.0.0-4.el8 - ovt-Rectify-a-log-spew-in-vmsvc-logging-vmware-vmsvc-roo.patch [bz#1800812]