If the hostname of the current virtualization machine
could not be resolved, then libvirtd would fail to
start. However, for disconnected operation (on a laptop,
for instance) the hostname may very legitimately not
be resolvable. This patch makes it so that if we can't
resolve the hostname, avahi doesn't fail, it just uses
a less useful MDNS string.
Signed-off-by: Chris Lalancette <clalance(a)redhat.com>
---
daemon/libvirtd.c | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 863bf21..4533f40 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -998,22 +998,34 @@ static int qemudNetworkInit(struct qemud_server *server) {
struct libvirtd_mdns_group *group;
struct qemud_socket *sock;
int port = 0;
+ int ret;
server->mdns = libvirtd_mdns_new();
if (!mdns_name) {
- char groupname[64], *localhost, *tmp;
- /* Extract the host part of the potentially FQDN */
+ char *groupname, *localhost, *tmp;
+
localhost = virGetHostname(NULL);
if (localhost == NULL)
+ /* we couldn't resolve the hostname; assume that we are
+ * running in disconnected operation, and report a less
+ * useful Avahi string
+ */
+ ret = virAsprintf(&groupname, "Virtualization Host");
+ else {
+ /* Extract the host part of the potentially FQDN */
+ if ((tmp = strchr(localhost, '.')))
+ *tmp = '\0';
+ ret = virAsprintf(&groupname, "Virtualization Host %s",
+ localhost);
+ }
+ VIR_FREE(localhost);
+ if (ret < 0) {
+ virReportOOMError();
goto cleanup;
-
- if ((tmp = strchr(localhost, '.')))
- *tmp = '\0';
- snprintf(groupname, sizeof(groupname)-1, "Virtualization Host %s",
localhost);
- groupname[sizeof(groupname)-1] = '\0';
+ }
group = libvirtd_mdns_add_group(server->mdns, groupname);
- VIR_FREE(localhost);
+ VIR_FREE(groupname);
} else {
group = libvirtd_mdns_add_group(server->mdns, mdns_name);
}
--
1.6.6.1