diff options
Diffstat (limited to 'tools/hv/hv_kvp_daemon.c')
-rw-r--r-- | tools/hv/hv_kvp_daemon.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c index 8fd9ec66121c..21bd7d4574fc 100644 --- a/tools/hv/hv_kvp_daemon.c +++ b/tools/hv/hv_kvp_daemon.c | |||
@@ -89,6 +89,7 @@ static char *processor_arch; | |||
89 | static char *os_build; | 89 | static char *os_build; |
90 | static char *os_version; | 90 | static char *os_version; |
91 | static char *lic_version = "Unknown version"; | 91 | static char *lic_version = "Unknown version"; |
92 | static char full_domain_name[HV_KVP_EXCHANGE_MAX_VALUE_SIZE]; | ||
92 | static struct utsname uts_buf; | 93 | static struct utsname uts_buf; |
93 | 94 | ||
94 | /* | 95 | /* |
@@ -1367,7 +1368,7 @@ setval_error: | |||
1367 | } | 1368 | } |
1368 | 1369 | ||
1369 | 1370 | ||
1370 | static int | 1371 | static void |
1371 | kvp_get_domain_name(char *buffer, int length) | 1372 | kvp_get_domain_name(char *buffer, int length) |
1372 | { | 1373 | { |
1373 | struct addrinfo hints, *info ; | 1374 | struct addrinfo hints, *info ; |
@@ -1381,12 +1382,12 @@ kvp_get_domain_name(char *buffer, int length) | |||
1381 | 1382 | ||
1382 | error = getaddrinfo(buffer, NULL, &hints, &info); | 1383 | error = getaddrinfo(buffer, NULL, &hints, &info); |
1383 | if (error != 0) { | 1384 | if (error != 0) { |
1384 | strcpy(buffer, "getaddrinfo failed\n"); | 1385 | snprintf(buffer, length, "getaddrinfo failed: 0x%x %s", |
1385 | return error; | 1386 | error, gai_strerror(error)); |
1387 | return; | ||
1386 | } | 1388 | } |
1387 | strcpy(buffer, info->ai_canonname); | 1389 | snprintf(buffer, length, "%s", info->ai_canonname); |
1388 | freeaddrinfo(info); | 1390 | freeaddrinfo(info); |
1389 | return error; | ||
1390 | } | 1391 | } |
1391 | 1392 | ||
1392 | static int | 1393 | static int |
@@ -1453,6 +1454,11 @@ int main(void) | |||
1453 | * Retrieve OS release information. | 1454 | * Retrieve OS release information. |
1454 | */ | 1455 | */ |
1455 | kvp_get_os_info(); | 1456 | kvp_get_os_info(); |
1457 | /* | ||
1458 | * Cache Fully Qualified Domain Name because getaddrinfo takes an | ||
1459 | * unpredictable amount of time to finish. | ||
1460 | */ | ||
1461 | kvp_get_domain_name(full_domain_name, sizeof(full_domain_name)); | ||
1456 | 1462 | ||
1457 | if (kvp_file_init()) { | 1463 | if (kvp_file_init()) { |
1458 | syslog(LOG_ERR, "Failed to initialize the pools"); | 1464 | syslog(LOG_ERR, "Failed to initialize the pools"); |
@@ -1671,8 +1677,7 @@ int main(void) | |||
1671 | 1677 | ||
1672 | switch (hv_msg->body.kvp_enum_data.index) { | 1678 | switch (hv_msg->body.kvp_enum_data.index) { |
1673 | case FullyQualifiedDomainName: | 1679 | case FullyQualifiedDomainName: |
1674 | kvp_get_domain_name(key_value, | 1680 | strcpy(key_value, full_domain_name); |
1675 | HV_KVP_EXCHANGE_MAX_VALUE_SIZE); | ||
1676 | strcpy(key_name, "FullyQualifiedDomainName"); | 1681 | strcpy(key_name, "FullyQualifiedDomainName"); |
1677 | break; | 1682 | break; |
1678 | case IntegrationServicesVersion: | 1683 | case IntegrationServicesVersion: |