mirror of https://gitee.com/openkylin/libvirt.git
util: replace gethostname() with g_get_hostname()
Note the glib function returns a const string because it caches the hostname using a one time thread initializer function. Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
b4d601ba87
commit
26d9748ff1
|
@ -60,7 +60,6 @@
|
||||||
VIR_LOG_INIT("util.log");
|
VIR_LOG_INIT("util.log");
|
||||||
|
|
||||||
static GRegex *virLogRegex;
|
static GRegex *virLogRegex;
|
||||||
static char virLogHostname[HOST_NAME_MAX+1];
|
|
||||||
|
|
||||||
|
|
||||||
#define VIR_LOG_DATE_REGEX "[0-9]{4}-[0-9]{2}-[0-9]{2}"
|
#define VIR_LOG_DATE_REGEX "[0-9]{4}-[0-9]{2}-[0-9]{2}"
|
||||||
|
@ -253,8 +252,6 @@ virLogPriorityString(virLogPriority lvl)
|
||||||
static int
|
static int
|
||||||
virLogOnceInit(void)
|
virLogOnceInit(void)
|
||||||
{
|
{
|
||||||
int r;
|
|
||||||
|
|
||||||
if (virMutexInit(&virLogMutex) < 0)
|
if (virMutexInit(&virLogMutex) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -263,19 +260,13 @@ virLogOnceInit(void)
|
||||||
|
|
||||||
virLogRegex = g_regex_new(VIR_LOG_REGEX, G_REGEX_OPTIMIZE, 0, NULL);
|
virLogRegex = g_regex_new(VIR_LOG_REGEX, G_REGEX_OPTIMIZE, 0, NULL);
|
||||||
|
|
||||||
/* We get and remember the hostname early, because at later time
|
/* GLib caches the hostname using a one time thread initializer.
|
||||||
|
* We want to prime this cache early though, because at later time
|
||||||
* it might not be possible to load NSS modules via getaddrinfo()
|
* it might not be possible to load NSS modules via getaddrinfo()
|
||||||
* (e.g. at container startup the host filesystem will not be
|
* (e.g. at container startup the host filesystem will not be
|
||||||
* accessible anymore.
|
* accessible anymore.
|
||||||
* Must not use virGetHostname though as that causes re-entrancy
|
|
||||||
* problems if it triggers logging codepaths
|
|
||||||
*/
|
*/
|
||||||
r = gethostname(virLogHostname, sizeof(virLogHostname));
|
ignore_value(g_get_host_name());
|
||||||
if (r == -1) {
|
|
||||||
ignore_value(virStrcpyStatic(virLogHostname, "(unknown)"));
|
|
||||||
} else {
|
|
||||||
NUL_TERMINATE(virLogHostname);
|
|
||||||
}
|
|
||||||
|
|
||||||
virLogUnlock();
|
virLogUnlock();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -471,7 +462,7 @@ virLogHostnameString(char **rawmsg,
|
||||||
{
|
{
|
||||||
char *hoststr;
|
char *hoststr;
|
||||||
|
|
||||||
hoststr = g_strdup_printf("hostname: %s", virLogHostname);
|
hoststr = g_strdup_printf("hostname: %s", g_get_host_name());
|
||||||
|
|
||||||
virLogFormatString(msg, 0, NULL, VIR_LOG_INFO, hoststr);
|
virLogFormatString(msg, 0, NULL, VIR_LOG_INFO, hoststr);
|
||||||
*rawmsg = hoststr;
|
*rawmsg = hoststr;
|
||||||
|
|
|
@ -503,17 +503,11 @@ static char *
|
||||||
virGetHostnameImpl(bool quiet)
|
virGetHostnameImpl(bool quiet)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
char hostname[HOST_NAME_MAX+1], *result = NULL;
|
const char *hostname;
|
||||||
|
char *result = NULL;
|
||||||
struct addrinfo hints, *info;
|
struct addrinfo hints, *info;
|
||||||
|
|
||||||
r = gethostname(hostname, sizeof(hostname));
|
hostname = g_get_host_name();
|
||||||
if (r == -1) {
|
|
||||||
if (!quiet)
|
|
||||||
virReportSystemError(errno,
|
|
||||||
"%s", _("failed to determine host name"));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
NUL_TERMINATE(hostname);
|
|
||||||
|
|
||||||
if (STRPREFIX(hostname, "localhost") || strchr(hostname, '.')) {
|
if (STRPREFIX(hostname, "localhost") || strchr(hostname, '.')) {
|
||||||
/* in this case, gethostname returned localhost (meaning we can't
|
/* in this case, gethostname returned localhost (meaning we can't
|
||||||
|
|
Loading…
Reference in New Issue