]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Added the following miscellaneous checks for the deploypkg plugin.
authorJohn Wolfe <jwolfe@vmware.com>
Tue, 19 Apr 2022 21:30:54 +0000 (14:30 -0700)
committerJohn Wolfe <jwolfe@vmware.com>
Tue, 19 Apr 2022 21:30:54 +0000 (14:30 -0700)
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.

open-vm-tools/services/plugins/deployPkg/deployPkgPlugin.c

index fb1d2be2f26a213eaedaab4daba488cebcdbba2e..8cdece01035c5bf07c50f0606d898f5f8dd63519 100644 (file)
@@ -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
  */
 
 #include <stdlib.h>
+#include <string.h>
 
 #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 &regData;
+   } else {
+      g_info("%s: Do not load DeployPkg plugin because RpcChannel is unavailable.\n",
+         __FUNCTION__);
+   }
 
-   return &regData;
+   return NULL;
 }