From: Katy Feng Date: Thu, 16 Nov 2023 17:21:20 +0000 (-0800) Subject: Send guest detailed data to VMX even when short-name is set in tools.conf. X-Git-Tag: stable-12.4.0~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d3bce5781e8c869fcdd398d2bb1fcceb4ef84076;p=thirdparty%2Fopen-vm-tools.git Send guest detailed data to VMX even when short-name is set in tools.conf. --- diff --git a/open-vm-tools/services/plugins/guestInfo/guestInfoServer.c b/open-vm-tools/services/plugins/guestInfo/guestInfoServer.c index 86080e1d1..9077e6b3e 100644 --- a/open-vm-tools/services/plugins/guestInfo/guestInfoServer.c +++ b/open-vm-tools/services/plugins/guestInfo/guestInfoServer.c @@ -546,6 +546,10 @@ GuestInfoGather(gpointer data) gchar *osNameFullOverride; Bool maxNicsError = FALSE; static uint32 logThrottleCount = 0; + Bool sendOsNames = FALSE; + char *osName = NULL; + char *osFullName = NULL; + char *detailedGosData = NULL; g_debug("Entered guest info gather.\n"); @@ -581,44 +585,48 @@ GuestInfoGather(gpointer data) g_free(osNameFullOverride); } - /* Only use override if at least the short OS name is provided */ - if (osNameOverride == NULL) { - Bool sendOsNames = FALSE; - char *osName = NULL; - char *osFullName = NULL; - char *detailedGosData = NULL; + /* Gather all the relevant guest information. */ + osFullName = Hostinfo_GetOSName(); + osName = Hostinfo_GetOSGuestString(); - /* Gather all the relevant guest information. */ - osFullName = Hostinfo_GetOSName(); - osName = Hostinfo_GetOSGuestString(); - - if (gSendDetailedGosData) { - detailedGosData = Hostinfo_GetOSDetailedData(); - } + if (gSendDetailedGosData) { + detailedGosData = Hostinfo_GetOSDetailedData(); + } - if (detailedGosData == NULL) { - g_debug("No detailed data.\n"); - sendOsNames = TRUE; - gSendDetailedGosData = FALSE; + if (detailedGosData == NULL) { + g_debug("No detailed data.\n"); + sendOsNames = TRUE; + gSendDetailedGosData = FALSE; + } else { + /* Build and attempt to send the detailed data */ + HostinfoDetailedDataHeader *detailedDataHeader = NULL; + size_t infoHeaderSize; + size_t detailedGosDataLen; + size_t infoSize; + + g_debug("Sending detailed data.\n"); + detailedGosDataLen = strlen(detailedGosData); + infoHeaderSize = sizeof *detailedDataHeader; + infoSize = infoHeaderSize + detailedGosDataLen + 1; // cover NUL + + detailedDataHeader = g_malloc(infoSize); + /* Clear struct and memory allocated for detailed data */ + memset(detailedDataHeader, 0, infoSize); + + /* Set the version of the detailed data header used */ + detailedDataHeader->version = HOSTINFO_STRUCT_HEADER_VERSION; + + if (osNameOverride) { + Str_Strcpy(detailedDataHeader->shortName, osNameOverride, + sizeof detailedDataHeader->shortName); + if (osNameFullOverride == NULL) { + g_debug(CONFNAME_GUESTOSINFO_LONGNAME " was not set in " + "tools.conf.\n"); + } else { + Str_Strcpy(detailedDataHeader->fullName, osNameFullOverride, + sizeof detailedDataHeader->fullName); + } } else { - /* Build and attempt to send the detailed data */ - HostinfoDetailedDataHeader *detailedDataHeader = NULL; - size_t infoHeaderSize; - size_t detailedGosDataLen; - size_t infoSize; - - g_debug("Sending detailed data.\n"); - detailedGosDataLen = strlen(detailedGosData); - infoHeaderSize = sizeof *detailedDataHeader; - infoSize = infoHeaderSize + detailedGosDataLen + 1; // cover NUL - - detailedDataHeader = g_malloc(infoSize); - /* Clear struct and memory allocated for detailed data */ - memset(detailedDataHeader, 0, infoSize); - - /* Set the version of the detailed data header used */ - detailedDataHeader->version = HOSTINFO_STRUCT_HEADER_VERSION; - if (osName == NULL) { g_warning("Failed to get OS name.\n"); } else { @@ -631,27 +639,46 @@ GuestInfoGather(gpointer data) Str_Strcpy(detailedDataHeader->fullName, osFullName, sizeof detailedDataHeader->fullName); } + } - Str_Strcpy((char *)detailedDataHeader + infoHeaderSize, - detailedGosData, infoSize - infoHeaderSize); + Str_Strcpy((char *)detailedDataHeader + infoHeaderSize, + detailedGosData, infoSize - infoHeaderSize); - if (GuestInfoUpdateVMX(ctx, INFO_OS_DETAILED, detailedDataHeader, - infoSize)) { - GuestInfoFreeDetailedData(gInfoCache.detailedData); - gInfoCache.detailedData = detailedDataHeader; - g_debug("Detailed data was sent successfully.\n"); - } else { - /* - * Only send the OS Name if the VMX failed to receive the detailed - * data - */ - gSendDetailedGosData = FALSE; - sendOsNames = TRUE; - g_debug("Detailed data was not sent successfully.\n"); - } + if (GuestInfoUpdateVMX(ctx, INFO_OS_DETAILED, detailedDataHeader, + infoSize)) { + GuestInfoFreeDetailedData(gInfoCache.detailedData); + gInfoCache.detailedData = detailedDataHeader; + g_debug("Detailed data was sent successfully.\n"); + } else { + /* + * Only send the OS Name if the VMX failed to receive the detailed + * data + */ + gSendDetailedGosData = FALSE; + sendOsNames = TRUE; + g_debug("Detailed data was not sent successfully.\n"); } + } - if (sendOsNames) { + if (sendOsNames) { + if (osNameOverride) { + /* Use osName and osNameFull provided in config file */ + if (osNameFullOverride == NULL) { + g_debug(CONFNAME_GUESTOSINFO_LONGNAME " was not set in " + "tools.conf, using empty string.\n"); + } + if (!GuestInfoUpdateVMX(ctx, + INFO_OS_NAME_FULL, + (osNameFullOverride == NULL) ? "" : + osNameFullOverride, + 0)) { + g_warning("Failed to send INFO_OS_NAME_FULL\n"); + } + if (!GuestInfoUpdateVMX(ctx, INFO_OS_NAME, osNameOverride, 0)) { + g_warning("Failed to send INFO_OS_NAME\n"); + } + g_debug("Using values in tools.conf to override OS Name.\n"); + } else { g_debug("Sending the short and long name\n"); if (osFullName == NULL) { g_warning("Failed to get OS info.\n"); @@ -668,32 +695,14 @@ GuestInfoGather(gpointer data) } } } - - free(detailedGosData); - free(osFullName); - free(osName); - } else { - /* Use osName and osNameFull provided in config file */ - if (osNameFullOverride == NULL) { - g_warning(CONFNAME_GUESTOSINFO_LONGNAME " was not set in " - "tools.conf, using empty string.\n"); - } - if (!GuestInfoUpdateVMX(ctx, - INFO_OS_NAME_FULL, - (osNameFullOverride == NULL) ? "" : - osNameFullOverride, - 0)) { - g_warning("Failed to send INFO_OS_NAME_FULL\n"); - } - g_free(osNameFullOverride); - - if (!GuestInfoUpdateVMX(ctx, INFO_OS_NAME, osNameOverride, 0)) { - g_warning("Failed to send INFO_OS_NAME\n"); - } - g_free(osNameOverride); - g_debug("Using values in tools.conf to override OS Name.\n"); } + free(detailedGosData); + free(osFullName); + free(osName); + g_free(osNameFullOverride); + g_free(osNameOverride); + #if !defined(USERWORLD) disableQueryDiskInfo = g_key_file_get_boolean(ctx->config, CONFGROUPNAME_GUESTINFO,