From: John Wolfe Date: Tue, 19 Apr 2022 21:30:54 +0000 (-0700) Subject: Added the following miscellaneous checks for the deploypkg plugin. X-Git-Tag: stable-12.1.0~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b4db25a65153bd2c1c5a725303bf22a61ac931f;p=thirdparty%2Fopen-vm-tools.git Added the following miscellaneous checks for the deploypkg plugin. 1. Check if the plugin is running in a VMware VM. 2. Check if the plugin is loaded by the main tools service. 3. Check if the underlying hypervisor is ESXi. --- diff --git a/open-vm-tools/services/plugins/deployPkg/deployPkgPlugin.c b/open-vm-tools/services/plugins/deployPkg/deployPkgPlugin.c index fb1d2be2f..8cdece010 100644 --- a/open-vm-tools/services/plugins/deployPkg/deployPkgPlugin.c +++ b/open-vm-tools/services/plugins/deployPkg/deployPkgPlugin.c @@ -1,5 +1,5 @@ /********************************************************* - * Copyright (C) 2008-2016 VMware, Inc. All rights reserved. + * Copyright (C) 2008-2016,2022 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 @@ -23,9 +23,11 @@ */ #include +#include #include "vm_basic_defs.h" #include "deployPkgInt.h" +#include "vmcheck.h" #include "vmware/tools/plugin.h" #include "vmware/tools/utils.h" @@ -52,17 +54,56 @@ ToolsOnLoad(ToolsAppCtx *ctx) NULL }; - RpcChannelCallback rpcs[] = { - { "deployPkg.begin", DeployPkg_TcloBegin, NULL, NULL, NULL, 0 }, - { "deployPkg.deploy", DeployPkg_TcloDeploy, NULL, NULL, NULL, 0 } - }; - ToolsAppReg regs[] = { - { TOOLS_APP_GUESTRPC, VMTools_WrapArray(rpcs, sizeof *rpcs, ARRAYSIZE(rpcs)) } - }; + 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("%s: Not running in a VMware VM.\n", __FUNCTION__); + 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("%s, VM is not running on ESX host.\n", __FUNCTION__); + return NULL; + } + + /* + * Return NULL to disable the plugin if not running in vmsvc daemon. + */ + if (!TOOLS_IS_MAIN_SERVICE(ctx)) { + g_info("%s: Not running in vmsvc daemon: container name='%s'.\n", + __FUNCTION__, ctx->name); + return NULL; + } + + /* + * RpcChannel is neccessary for DeployPkg plugin. + */ + if (ctx->rpc != NULL) { + RpcChannelCallback rpcs[] = { + { "deployPkg.begin", DeployPkg_TcloBegin, NULL, NULL, NULL, 0 }, + { "deployPkg.deploy", DeployPkg_TcloDeploy, NULL, NULL, NULL, 0 } + }; + ToolsAppReg regs[] = { + { TOOLS_APP_GUESTRPC, VMTools_WrapArray(rpcs, sizeof *rpcs, ARRAYSIZE(rpcs)) } + }; + + srand(time(NULL)); + regData.regs = VMTools_WrapArray(regs, sizeof *regs, ARRAYSIZE(regs)); - srand(time(NULL)); - regData.regs = VMTools_WrapArray(regs, sizeof *regs, ARRAYSIZE(regs)); + return ®Data; + } else { + g_info("%s: Do not load DeployPkg plugin because RpcChannel is unavailable.\n", + __FUNCTION__); + } - return ®Data; + return NULL; }