提交 26d9748f 编写于 作者: D Daniel P. Berrangé

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: NFabiano Fidêncio <fidencio@redhat.com>
Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 b4d601ba
...@@ -60,7 +60,6 @@ ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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 * ...@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册