[libvirt PATCH 1/3] conf: add support for VNC power control setting
Ján Tomko
jtomko at redhat.com
Tue Feb 16 14:26:07 UTC 2021
On a Tuesday in 2021, Daniel P. Berrangé wrote:
>The <graphics type="vnc" .... powerControl="on"/> option instructs the
>VNC server to enable an extension that lets the client perform a
>graceful shutdown, reboot and hard reset.
>
>This is enabled by default since it cannot be assumed that the VNC
>client user has administrator rights over the guest OS. In the case
>where the VNC user is a guest administrator though, it is reasonable
>to allow direct power control host side too.
>
>Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
>---
> docs/formatdomain.rst | 5 +++++
> docs/schemas/domaincommon.rng | 5 +++++
> src/conf/domain_conf.c | 12 ++++++++++++
> src/conf/domain_conf.h | 1 +
> 4 files changed, 23 insertions(+)
>
>diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
>index eafd6b3396..580319365c 100644
>--- a/docs/formatdomain.rst
>+++ b/docs/formatdomain.rst
>@@ -5791,6 +5791,11 @@ interaction with the admin.
> ``autoport`` having no effect due to security reasons) :since:`Since
> 1.0.6` .
>
>+ For VNC, the ``powerControl`` attribute can be used to enable VM shutdown,
>+ reboot and reset power control features for the VNC client. This is
>+ appropriate if the authenticated VNC client user already has administrator
>+ privileges in the guest :since:`Since 7.1.0`.
>+
> Although VNC doesn't support OpenGL natively, it can be paired with
> graphics type ``egl-headless`` (see below) which will instruct QEMU to
> open and use drm nodes for OpenGL rendering.
>diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
>index e6de934456..49dc4b5130 100644
>--- a/docs/schemas/domaincommon.rng
>+++ b/docs/schemas/domaincommon.rng
>@@ -3663,6 +3663,11 @@
> </choice>
> </attribute>
> </optional>
>+ <optional>
>+ <attribute name="powerControl">
>+ <ref name="virYesNo"/>
>+ </attribute>
>+ </optional>
> </group>
> <group>
> <optional>
>diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>index b731744f04..91933bf292 100644
>--- a/src/conf/domain_conf.c
>+++ b/src/conf/domain_conf.c
>@@ -13150,6 +13150,7 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def,
> g_autofree char *websocketGenerated = virXMLPropString(node, "websocketGenerated");
> g_autofree char *sharePolicy = virXMLPropString(node, "sharePolicy");
> g_autofree char *autoport = virXMLPropString(node, "autoport");
>+ g_autofree char *powerControl = virXMLPropString(node, "powerControl");
>
> if (virDomainGraphicsListensParseXML(def, node, ctxt, flags) < 0)
> return -1;
>@@ -13206,6 +13207,13 @@ virDomainGraphicsDefParseXMLVNC(virDomainGraphicsDefPtr def,
> }
> }
>
>+ if (powerControl &&
>+ virStringParseYesNo(powerControl, &def->data.vnc.powerControl) < 0) {
>+ virReportError(VIR_ERR_INTERNAL_ERROR,
>+ _("cannot parse vnc power control '%s'"), powerControl);
>+ return -1;
>+ }
>+
> def->data.vnc.keymap = virXMLPropString(node, "keymap");
>
> if (virDomainGraphicsAuthDefParseXML(node, &def->data.vnc.auth,
>@@ -27148,6 +27156,10 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
> virDomainGraphicsVNCSharePolicyTypeToString(
> def->data.vnc.sharePolicy));
>
>+ if (def->data.vnc.powerControl)
>+ virBufferAsprintf(buf, " powerControl='%s'",
>+ def->data.vnc.powerControl ? "yes" : "no");
The "no" branch is dead code. If you don't want to format "no" unless it
was explicitly requested, use virTristateBool.
Jano
>+
> virDomainGraphicsAuthDefFormatAttr(buf, &def->data.vnc.auth, flags);
> break;
>
>diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
>index 930eed60de..544ec1b2fa 100644
>--- a/src/conf/domain_conf.h
>+++ b/src/conf/domain_conf.h
>@@ -1712,6 +1712,7 @@ struct _virDomainGraphicsDef {
> char *keymap;
> virDomainGraphicsAuthDef auth;
> int sharePolicy;
>+ bool powerControl;
> } vnc;
> struct {
> char *display;
>--
>2.29.2
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210216/d09a8fd7/attachment-0001.sig>
More information about the libvir-list
mailing list