提交 4ddde38e 编写于 作者: P Pavel Hrdina

virsh: domdisplay: if listen is 0.0.0.0 or [::] print address from URI

Currently if a guest has listen address 0.0.0.0 or [::] and you run
"virsh domdisplay $domain" you always get "spice://localhost:$port".

We want to print better address if someone is connected from a different
computer using "virsh -c qemu+ssh://some.host/system".  This patch fixes the
behavior of virsh to print in this case "spice://some.host:$port".

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1332446Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
上级 407c6909
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#include "virtypedparam.h" #include "virtypedparam.h"
#include "virxml.h" #include "virxml.h"
#include "virsh-nodedev.h" #include "virsh-nodedev.h"
#include "viruri.h"
/* Gnulib doesn't guarantee SA_SIGINFO support. */ /* Gnulib doesn't guarantee SA_SIGINFO support. */
#ifndef SA_SIGINFO #ifndef SA_SIGINFO
...@@ -10617,6 +10618,30 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd) ...@@ -10617,6 +10618,30 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
VIR_FREE(xpath); VIR_FREE(xpath);
} }
/* If listen_addr is 0.0.0.0 or [::] we should try to parse URI and set
* listen_addr based on current URI. */
if (listen_addr) {
if (virSocketAddrParse(&addr, listen_addr, AF_UNSPEC) > 0 &&
virSocketAddrIsWildcard(&addr)) {
virConnectPtr conn = ((virshControlPtr)(ctl->privData))->conn;
char *uriStr = virConnectGetURI(conn);
virURIPtr uri = NULL;
if (uriStr) {
uri = virURIParse(uriStr);
VIR_FREE(uriStr);
}
/* It's safe to free the listen_addr even if parsing of URI
* fails, if there is no listen_addr we will print "localhost". */
VIR_FREE(listen_addr);
if (uri && VIR_STRDUP(listen_addr, uri->server) < 0)
goto cleanup;
}
}
/* We can query this info for all the graphics types since we'll /* We can query this info for all the graphics types since we'll
* get nothing for the unsupported ones (just rdp for now). * get nothing for the unsupported ones (just rdp for now).
* Also the parameter '--include-password' was already taken * Also the parameter '--include-password' was already taken
...@@ -10638,9 +10663,7 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd) ...@@ -10638,9 +10663,7 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
virBufferAsprintf(&buf, ":%s@", passwd); virBufferAsprintf(&buf, ":%s@", passwd);
/* Then host name or IP */ /* Then host name or IP */
if (!listen_addr || if (!listen_addr)
(virSocketAddrParse(&addr, listen_addr, AF_UNSPEC) > 0 &&
virSocketAddrIsWildcard(&addr)))
virBufferAddLit(&buf, "localhost"); virBufferAddLit(&buf, "localhost");
else if (strchr(listen_addr, ':')) else if (strchr(listen_addr, ':'))
virBufferAsprintf(&buf, "[%s]", listen_addr); virBufferAsprintf(&buf, "[%s]", listen_addr);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册