diff options
| author | Daniel P. Berrange <berrange@redhat.com> | 2012-10-09 17:52:23 +0100 |
|---|---|---|
| committer | Daniel P. Berrange <berrange@redhat.com> | 2012-10-10 16:28:38 +0100 |
| commit | c4bfbe104f507236e2f98d6d4aa5966b0b6857bc (patch) | |
| tree | b9d86682fd859525325022e1fa4de835db6c298e /src | |
| parent | fe485f22de85e84fce2cd63ac37e0a2aa19478c1 (diff) | |
| download | virt-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.c | 25 |
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); |
