summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2012-10-09 17:52:23 +0100
committerDaniel P. Berrange <berrange@redhat.com>2012-10-10 16:28:38 +0100
commitc4bfbe104f507236e2f98d6d4aa5966b0b6857bc (patch)
treeb9d86682fd859525325022e1fa4de835db6c298e /src
parentfe485f22de85e84fce2cd63ac37e0a2aa19478c1 (diff)
downloadvirt-viewer-c4bfbe104f507236e2f98d6d4aa5966b0b6857bc.tar.gz
virt-viewer-c4bfbe104f507236e2f98d6d4aa5966b0b6857bc.tar.xz
virt-viewer-c4bfbe104f507236e2f98d6d4aa5966b0b6857bc.zip
Fix check for IPv6 any address
The string '::' is just one of many possible ways to express the IPv6 "any" address. Others include '::0', '0:0:0:0:0:0:0:0', '0::0' and more. Instead of trying to do strcmp, actually try parsing the address with GInetAddress and then simply use an accessor to check what type it is Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/virt-viewer.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 0a4cea7..bada5a9 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -282,6 +282,27 @@ virt_viewer_extract_xpath_string(const gchar *xmldesc,
return port;
}
+
+static gboolean
+virt_viewer_replace_host(const gchar *host)
+{
+ GInetAddress *addr;
+ gboolean ret;
+
+ if (!host)
+ return TRUE;
+
+ addr = g_inet_address_new_from_string(host);
+
+ if (!addr) /* Parsing error means it was probably a hostname */
+ return FALSE;
+
+ ret = g_inet_address_get_is_any(addr);
+ g_object_unref(addr);
+
+ return ret;
+}
+
static gboolean
virt_viewer_extract_connect_info(VirtViewer *self,
virDomainPtr dom)
@@ -351,9 +372,7 @@ virt_viewer_extract_connect_info(VirtViewer *self,
* from a remote host. Instead we fallback to the hostname used in
* the libvirt URI. This isn't perfect but it is better than nothing
*/
- if (!ghost ||
- (strcmp(ghost, "0.0.0.0") == 0 ||
- strcmp(ghost, "::") == 0)) {
+ if (virt_viewer_replace_host(ghost)) {
DEBUG_LOG("Guest graphics listen '%s' is NULL or a wildcard, replacing with '%s'",
ghost ? ghost : "", host);
g_free(ghost);