It's possible to create a domain which will only use a TLS port and will not have a non-TLS port set by using: <graphics type='spice' autoport='yes' defaultMode='secure'/> In such a setup, the 'graphics' node for the running domain will be: <graphics type='spice' tlsPort='5900' autoport='yes' listen='127.0.0.1' defaultMode='secure'> However, cmdDomDisplay loops over all the 'graphics' node, and it ignores nodes which don't have a 'port' attribute. This means 'virsh domdisplay' will only return an empty string for domains as the one above. This commit looks for both 'port' and 'tlsPort' before deciding to ignore a graphics node. It also makes sure 'port' is not printed when it's not set. This makes 'virsh domdisplay' return 'spice://127.0.0.1?tls-port=5900' for domains using only a TLS port. Signed-off-by: Christophe Fergeau <cfergeau@xxxxxxxxxx> --- tools/virsh-domain.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 856e888..5e9d784 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -9073,6 +9073,20 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd) /* If there is no port number for this type, then jump to the next * scheme */ if (tmp) + port = 0; + + /* Create our XPATH lookup for TLS Port (automatically skipped + * for unsupported schemes */ + if (virAsprintf(&xpath, xpath_fmt, scheme[iter], "tlsPort") < 0) + goto cleanup; + + /* Attempt to get the TLS port number */ + tmp = virXPathInt(xpath, ctxt, &tls_port); + VIR_FREE(xpath); + if (tmp) + tls_port = 0; + + if (!port && !tls_port) continue; /* Create our XPATH lookup for the current display's address */ @@ -9103,17 +9117,6 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd) port -= 5900; } - /* Create our XPATH lookup for TLS Port (automatically skipped - * for unsupported schemes */ - if (virAsprintf(&xpath, xpath_fmt, scheme[iter], "tlsPort") < 0) - goto cleanup; - - /* Attempt to get the TLS port number */ - tmp = virXPathInt(xpath, ctxt, &tls_port); - VIR_FREE(xpath); - if (tmp) - tls_port = 0; - /* Build up the full URI, starting with the scheme */ virBufferAsprintf(&buf, "%s://", scheme[iter]); @@ -9128,7 +9131,8 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd) virBufferAsprintf(&buf, "%s", listen_addr); /* Add the port */ - virBufferAsprintf(&buf, ":%d", port); + if (port) + virBufferAsprintf(&buf, ":%d", port); /* TLS Port */ if (tls_port) { -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list