Accepting request 783558 from home:bfrogers:branches:Virtualization

- Update to 0.20.0
  * Add gio-unix and gobject dependency >= 2.50
  * Bump gtk+ >= 3.22 (optional dependency)
  * Last release with gtk+ being optional
  * !4 - Race fixes between client and guest clipboard
  * !2 - Fix session lookup for new GNOME versions
  * !3 - Now using GMainLoop and GIO to handle I/O of messages
  * Several minor covscan fixes
- Discovered GLib dependency is now >= 2.58
- Patch dropped (contained in update):
  vdagentd-Fix-session-lookup-for-new-GNOME-versions.patch

OBS-URL: https://build.opensuse.org/request/show/783558
OBS-URL: https://build.opensuse.org/package/show/Virtualization/spice-vdagent?expand=0&rev=35
This commit is contained in:
Bruce Rogers 2020-03-10 22:20:01 +00:00 committed by Git OBS Bridge
parent f6b249a456
commit 8a309ff688
7 changed files with 27 additions and 112 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:63a77c611c84f8120519a78a30256e43e159085831ac82de71643db643972f65
size 151356

Binary file not shown.

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2e6b7222675ee19ea38c52165abe4d836c2ac5d5bf902d4dfca13da1ec143359
size 152510

Binary file not shown.

View File

@ -1,3 +1,18 @@
-------------------------------------------------------------------
Tue Mar 10 21:19:18 UTC 2020 - Bruce Rogers <brogers@suse.com>
- Update to 0.20.0
* Add gio-unix and gobject dependency >= 2.50
* Bump gtk+ >= 3.22 (optional dependency)
* Last release with gtk+ being optional
* !4 - Race fixes between client and guest clipboard
* !2 - Fix session lookup for new GNOME versions
* !3 - Now using GMainLoop and GIO to handle I/O of messages
* Several minor covscan fixes
- Discovered GLib dependency is now >= 2.58
- Patch dropped (contained in update):
vdagentd-Fix-session-lookup-for-new-GNOME-versions.patch
-------------------------------------------------------------------
Thu Dec 19 15:18:43 UTC 2019 - Dominique Leuenberger <dimstar@opensuse.org>

View File

@ -18,7 +18,7 @@
Name: spice-vdagent
Version: 0.19.0
Version: 0.20.0
Release: 0
Summary: Agent for Spice guests
License: GPL-3.0-or-later
@ -27,20 +27,21 @@ URL: http://spice-space.org/
Source: http://spice-space.org/download/releases/%{name}-%{version}.tar.bz2
Source1: http://spice-space.org/download/releases/%{name}-%{version}.tar.bz2.sig
Source2: %{name}.keyring
Patch0: vdagentd-Fix-session-lookup-for-new-GNOME-versions.patch
BuildRequires: alsa-devel >= 1.0.22
BuildRequires: desktop-file-utils
BuildRequires: glib2-devel
BuildRequires: libXfixes-devel
BuildRequires: libXinerama-devel
BuildRequires: libXrandr-devel
BuildRequires: libdrm-devel
BuildRequires: libpciaccess-devel
BuildRequires: libXrandr-devel >= 1.3
BuildRequires: libpciaccess-devel >= 0.10
BuildRequires: libtool
BuildRequires: spice-protocol-devel >= 0.12.8
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(glib-2.0) >= 2.34
BuildRequires: pkgconfig(gio-2.0) >= 2.50
BuildRequires: pkgconfig(glib-2.0) >= 2.58
BuildRequires: pkgconfig(gobject-2.0) >= 2.50
BuildRequires: pkgconfig(gtk+-3.0) >= 3.22
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(spice-protocol) >= 0.14.1
BuildRequires: pkgconfig(systemd)
BuildRequires: pkgconfig(udev)
Supplements: modalias(xorg-x11-server:virtio:d00000003v*)
@ -60,7 +61,6 @@ Features:
%prep
%setup -q
%patch0 -p1
%build
%configure \

View File

@ -1,100 +0,0 @@
From b67ff71f1b30992f5b8d4583cc93adb789d247fa Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Fri, 13 Sep 2019 17:00:27 +0200
Subject: [PATCH] vdagentd: Fix session lookup for new GNOME versions
New GNOME versions have started to manage the session using the systemd
user instance. The effect of this is that the spice-vdagent running in
the user session is forked off (indirectly) from the systemd user
instance and does technically not belong to any session.
The correct way of handling this situation is to simply assume that the
process belongs to the users graphical session. Add a heuristic to find
the graphical session based on the UID, fixing spice-vdagent running on
GNOME 3.34 with systemd integration.
Acked-by: Victor Toso <victortoso@redhat.com>
[BR: boo#1157235]
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/vdagentd/systemd-login.c | 59 +++++++++++++++++++++++++++++++++---
1 file changed, 55 insertions(+), 4 deletions(-)
diff --git a/src/vdagentd/systemd-login.c b/src/vdagentd/systemd-login.c
index a11b66d..0b8f3c1 100644
--- a/src/vdagentd/systemd-login.c
+++ b/src/vdagentd/systemd-login.c
@@ -286,15 +286,66 @@ const char *session_info_get_active_session(struct session_info *si)
char *session_info_session_for_pid(struct session_info *si, uint32_t pid)
{
+ int i;
int r;
+ GStrv sessions = NULL;
char *session = NULL;
+ uid_t uid;
r = sd_pid_get_session(pid, &session);
- if (r < 0)
- syslog(LOG_ERR, "Error getting session for pid %u: %s",
- pid, strerror(-r));
- else if (si->verbose)
+ if (r >= 0) {
+ goto out;
+ }
+
+ /* If we could not get a session for the pid then the agent is probably
+ * running in a systemd managed session. In that case we simply assume
+ * it is actually part of the newest graphical session we can find. */
+ r = sd_pid_get_owner_uid(pid, &uid);
+ if (r < 0) {
+ syslog(LOG_ERR, "Error getting owner UID for pid %u: %s",
+ pid, strerror(-r));
+ goto out;
+ }
+
+ r = sd_uid_get_sessions(uid, 0, &sessions);
+ if (r < 0) {
+ syslog(LOG_ERR, "Error getting sessions for UID %d: %s",
+ (int) uid, strerror(-r));
+ goto out;
+ }
+
+ for (i = 0; sessions[i] != NULL; i++) {
+ char *session_type = NULL;
+
+ r = sd_session_get_type(sessions[i], &session_type);
+
+ if (r < 0) {
+ syslog(LOG_ERR, "Error getting session type for session %s: %s",
+ sessions[i], strerror(-r));
+ continue;
+ }
+
+ if (g_strcmp0(session_type, "wayland") == 0 ||
+ g_strcmp0(session_type, "x11") == 0 ||
+ g_strcmp0(session_type, "mir") == 0) {
+
+ /* We prefer the newest session (i.e. last entry) from the
+ * user, assuming that any old session that still exist has
+ * just not yet died properly. */
+ if (session != NULL)
+ free (session);
+ session = g_strdup(sessions[i]);
+ }
+
+ free(session_type);
+ }
+
+ g_strfreev(sessions);
+
+out:
+ if (session != NULL && si->verbose) {
syslog(LOG_INFO, "Session for pid %u: %s", pid, session);
+ }
return session;
}
--
2.24.0