mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-11 04:15:49 +00:00
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=1332446 Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
407c6909bc
commit
4ddde38e2d
@ -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)
|
|||||||
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)
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user