[virt-tools-list] [virt-viewer] virt-viewer: Allow TLS-only SPICE connections
Christophe Fergeau
cfergeau at redhat.com
Wed Jul 10 16:25:34 UTC 2013
When trying to connect to a VM which uses SPICE with only a tls port
set:
<graphics type='spice' tlsPort='-1' autoport='no' listen='0' keymap='en-us'>
<listen type='address' address='0'/>
</graphics>
the connection will fail with
"Cannot determine the graphic address for the guest spice"
virt_viewer_extract_connect_info() indeed assumes that if no
non-TLS port is set, then this means we are trying to connect through
an already open socket, and otherwise the connection fails.
The presence of a TLS port is only checked when a non-TLS port is set.
This commit reworks that logic to start by extracting both the non-TLS
and TLS ports (only when using SPICE for the latter), and by only trying
to parse the socket to use if none of these 2 ports is set
This fixes rhbz#982840
---
src/virt-viewer.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 951a42b..207c9ca 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -335,24 +335,24 @@ virt_viewer_extract_connect_info(VirtViewer *self,
goto cleanup;
xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@port)", type);
- if ((gport = virt_viewer_extract_xpath_string(xmldesc, xpath)) == NULL) {
- free(xpath);
+ gport = virt_viewer_extract_xpath_string(xmldesc, xpath);
+ g_free(xpath);
+ if (g_str_equal(type, "spice")) {
+ xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@tlsPort)", type);
+ gtlsport = virt_viewer_extract_xpath_string(xmldesc, xpath);
+ g_free(xpath);
+ }
+
+ if (gport || gtlsport) {
+ xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@listen)", type);
+ ghost = virt_viewer_extract_xpath_string(xmldesc, xpath);
+ } else {
xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@socket)", type);
if ((unixsock = virt_viewer_extract_xpath_string(xmldesc, xpath)) == NULL) {
virt_viewer_app_simple_message_dialog(app, _("Cannot determine the graphic address for the guest %s"),
priv->domkey);
goto cleanup;
}
- } else {
- if (g_str_equal(type, "spice")) {
- free(xpath);
- xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@tlsPort)", type);
- gtlsport = virt_viewer_extract_xpath_string(xmldesc, xpath);
- }
-
- free(xpath);
- xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@listen)", type);
- ghost = virt_viewer_extract_xpath_string(xmldesc, xpath);
}
if (ghost && gport)
--
1.8.3.1
More information about the virt-tools-list
mailing list