[virt-tools-list] [virt-viewer PATCH v3] Prefer virDomainOpenGraphicsFD for --attach
Fabiano Fidêncio
fidencio at redhat.com
Wed Oct 1 16:59:01 UTC 2014
On Wed, 2014-10-01 at 15:36 +0200, Ján Tomko wrote:
> The virDomainOpenGraphics API cannot label the socket
> we pass to it. Prefer virDomainOpenGraphicsFD (if building
> with libvirt 1.2.8 or later) which creates the socket for us
> and works with SELinux too.
>
> Fall back to the old API if the new one is unsupported
> (i.e. the libvirtd on the host is older than the libvirt version
> virt-viewer was compiled against).
>
> Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1141228
>
> Signed-off-by: Ján Tomko <jtomko at redhat.com>
> ---
> configure.ac | 8 ++++++++
> src/virt-viewer.c | 15 ++++++++++++++-
> 2 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/configure.ac b/configure.ac
> index 5f7786d..91ce0e7 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -117,6 +117,14 @@ AS_IF([test "x$have_libvirt" = "xyes"],
> ])
> AM_CONDITIONAL([HAVE_LIBVIRT], [test "x$have_libvirt" = "xyes"])
>
> +old_LIBS=$LIBS
> +LIBS=$LIBVIRT_LIBS
> +# virDomainOpenGraphicsFD was introduced in libvirt 1.2.8
> +AC_CHECK_LIB([virt],
> + [virDomainOpenGraphicsFD],
> + [AC_DEFINE([HAVE_VIR_DOMAIN_OPEN_GRAPHICS_FD], 1, [Have virDomainOpenGraphicsFD?])])
> +LIBS=$old_LIBS
> +
> AC_MSG_CHECKING([which gtk+ version to compile against])
> AC_ARG_WITH([gtk],
> [AS_HELP_STRING([--with-gtk=2.0|3.0],[which gtk+ version to compile against (default: 3.0)])],
> diff --git a/src/virt-viewer.c b/src/virt-viewer.c
> index c6066c5..4b90a59 100644
> --- a/src/virt-viewer.c
> +++ b/src/virt-viewer.c
> @@ -428,18 +428,31 @@ virt_viewer_open_connection(VirtViewerApp *self G_GNUC_UNUSED, int *fd)
> VirtViewer *viewer = VIRT_VIEWER(self);
> VirtViewerPrivate *priv = viewer->priv;
> int pair[2];
> + virErrorPtr err;
> #endif
> *fd = -1;
> #if defined(HAVE_SOCKETPAIR)
> if (!priv->dom)
> return TRUE;
>
> +#ifdef HAVE_VIR_DOMAIN_OPEN_GRAPHICS_FD
> + if ((*fd = virDomainOpenGraphicsFD(priv->dom, 0,
> + VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH)) >= 0)
> + return TRUE;
> +
> + err = virGetLastError();
> + if (err && err->code != VIR_ERR_NO_SUPPORT) {
> + g_debug("Error %s", err->message ? err->message : "Unknown");
> + return TRUE;
> + }
> +#endif
> +
> if (socketpair(PF_UNIX, SOCK_STREAM, 0, pair) < 0)
> return FALSE;
>
> if (virDomainOpenGraphics(priv->dom, 0, pair[0],
> VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH) < 0) {
> - virErrorPtr err = virGetLastError();
> + err = virGetLastError();
> g_debug("Error %s", err && err->message ? err->message : "Unknown");
> close(pair[0]);
> close(pair[1]);
ACK!
Pushed as bb44ce0a1faaf7c7dbff2ca520b7ab83bda5b6ea
Best Regards,
--
Fabiano Fidêncio
More information about the virt-tools-list
mailing list