diff -rup open-vm-tools-stable-10.2.0/open-vm-tools/libDeployPkg/linuxDeployment.c open-vm-tools-stable-10.2.0-modified/open-vm-tools/libDeployPkg/linuxDeployment.c --- open-vm-tools-stable-10.2.0/open-vm-tools/libDeployPkg/linuxDeployment.c 2017-12-15 13:11:49.000000000 -0800 +++ open-vm-tools-stable-10.2.0-modified/open-vm-tools/libDeployPkg/linuxDeployment.c 2018-03-21 15:36:36.512716686 -0700 @@ -593,13 +593,17 @@ GetPackageInfo(const char* packageName, close(fd); // Create space and copy the command - *command = malloc(VMWAREDEPLOYPKG_CMD_LENGTH); + *command = malloc(VMWAREDEPLOYPKG_CMD_LENGTH + 1); if (!*command) { SetDeployError("Error allocating memory."); return FALSE; } - memcpy(*command, hdr.command, VMWAREDEPLOYPKG_CMD_LENGTH); + // will pad with '\0' if necessary + strncpy(*command, hdr.command, VMWAREDEPLOYPKG_CMD_LENGTH); + // hdr.command is a structure of fixed length VMWAREDEPLOYPKG_CMD_LENGTH + (*command)[VMWAREDEPLOYPKG_CMD_LENGTH] = '\0'; + *archiveType = hdr.payloadType; *flags = hdr.reserved; @@ -1190,6 +1194,19 @@ Deploy(const char* packageName) free(command); deployStatus = CloudInitSetup(tmpDirPath); } else { + if ((strstr(command, "scripts/Customize.pl") != NULL) || (strstr(command, "scripts/customize.sh") != NULL)) { + free (command); + char PHOTON_OS_LAUNCH_COMMAND[256]; + sprintf(PHOTON_OS_LAUNCH_COMMAND, "/bin/bash /usr/share/open-vm-tools/GOSC/gosc-scripts/imc-shell/imgcust-scripts/customize.sh %s/cust.cfg", tmpDirPath); + + // The command will be parsed alter and can be of arbitrary length + command = strdup(PHOTON_OS_LAUNCH_COMMAND); + if (!command) { + SetDeployError("Error allocating memory."); + return DEPLOY_ERROR; + } + _DeployPkg_SkipReboot(true); + } sLog(log_info, "Executing traditional GOSC workflow"); deploymentResult = ForkExecAndWaitCommand(command); free(command);