From 95244c613460d59b2dc9235fe4940979e1c7a4ce Mon Sep 17 00:00:00 2001 From: Vinzenz Feenstra Date: Mar 31 2014 08:08:43 +0000 Subject: Merge branch 'master' into f20 --- diff --git a/0001-Implementation-of-logind-based-session-locking.patch b/0001-Implementation-of-logind-based-session-locking.patch new file mode 100644 index 0000000..72f3e08 --- /dev/null +++ b/0001-Implementation-of-logind-based-session-locking.patch @@ -0,0 +1,155 @@ +From 723de8e6075a255cf49df0d16b03cce185580a21 Mon Sep 17 00:00:00 2001 +From: Vinzenz Feenstra +Date: Tue, 18 Feb 2014 11:28:26 +0100 +Subject: [PATCH] Implementation of logind based session locking + +Support screen lock for logind based systems, since ConsoleKit +is no longer developed in the long run this will be the way to +go. + +Change-Id: Iafc4b88d9c508647e1d09407556359fbefbba34c +Signed-off-by: Vinzenz Feenstra +--- + ovirt-guest-agent/LockActiveSession.py | 95 ++++++++++++++++++++++++++-------- + 1 file changed, 74 insertions(+), 21 deletions(-) + +diff --git a/ovirt-guest-agent/LockActiveSession.py b/ovirt-guest-agent/LockActiveSession.py +index aed5aa0..919e975 100755 +--- a/ovirt-guest-agent/LockActiveSession.py ++++ b/ovirt-guest-agent/LockActiveSession.py +@@ -20,36 +20,87 @@ import logging + import os + + +-def GetActiveSession(): ++class SessionWrapper(object): ++ def __init__(self, session, bus, path): ++ self._bus = bus ++ self._path = path ++ self._session = session ++ self._props = GetInterface(bus, 'login1', '', path, ++ 'org.freedesktop.DBus.Properties') ++ ++ def _getProperty(self, name): ++ return self._props.Get('org.freedesktop.login1.Session', name) ++ ++ def GetId(self): ++ return self._getProperty('Id') ++ ++ def IsActive(self): ++ return self._getProperty('Active') ++ ++ def GetX11Display(self): ++ return self._getProperty('Display') ++ ++ def GetUnixUser(self): ++ return self._getProperty('User')[0] ++ ++ def Lock(self): ++ return self._session.Lock() ++ ++ ++def GetInterface(bus, service, name, path, fname=None): ++ obj = bus.get_object('org.freedesktop.%s' % service, path) ++ iface = fname ++ if not iface: ++ iface = 'org.freedesktop.%s.%s' % (service, name) ++ if not name: ++ iface = iface[:-1] ++ return dbus.Interface(obj, dbus_interface=iface) ++ ++ ++def GetInterfaceByName(bus, service, name, isSub): ++ path = '/org/freedesktop/' + service ++ if isSub: ++ path += '/' + name ++ return GetInterface(bus, service, name, path) ++ ++ ++def GetSessions(manager): ++ try: ++ return manager.GetSessions() ++ except dbus.DBusException: ++ return [x[4] for x in manager.ListSessions()] ++ ++ ++def GetSession(bus, service, managerIsSub, wrapSession): + session = None + try: +- bus = dbus.SystemBus() +- manager = dbus.Interface( +- bus.get_object( +- 'org.freedesktop.ConsoleKit', +- '/org/freedesktop/ConsoleKit/Manager'), +- dbus_interface='org.freedesktop.ConsoleKit.Manager') +- sessions = manager.GetSessions() +- for session_path in sessions: +- s = dbus.Interface( +- bus.get_object( +- 'org.freedesktop.ConsoleKit', session_path), +- dbus_interface='org.freedesktop.ConsoleKit.Session') ++ manager = GetInterfaceByName(bus, service, 'Manager', managerIsSub) ++ for session_path in GetSessions(manager): ++ s = GetInterface(bus, service, 'Session', session_path) ++ s = wrapSession(s, bus, session_path) + if s.IsActive(): + session = s +- except: +- logging.exception("Error retrieving active session (ignore if running " +- "on a system without ConsoleKit installed).") ++ break ++ except dbus.DBusException: ++ logging.exception("%s seems not to be available", service) ++ return session ++ ++ ++def GetActiveSession(): ++ bus = dbus.SystemBus() ++ ARGS = (('ConsoleKit', True, lambda *a: a[0]), ++ ('login1', False, SessionWrapper)) ++ for args in ARGS: ++ session = GetSession(bus, *args) ++ if session: ++ break + return session + + + def GetScreenSaver(): + try: + bus = dbus.SessionBus() +- screensaver = dbus.Interface( +- bus.get_object( +- 'org.freedesktop.ScreenSaver', '/ScreenSaver'), +- dbus_interface='org.freedesktop.ScreenSaver') ++ screensaver = GetInterface(bus, 'ScreenSaver', '', '/ScreenSaver') + except dbus.DBusException: + logging.exception("Error retrieving ScreenSaver interface (ignore if " + "running on GNOME).") +@@ -70,6 +121,7 @@ def LockSession(session): + screensaver.Lock() + exitcode = 0 + else: ++ logging.info("KDE standard interface seems not to be supported") + exitcode = 1 + os._exit(exitcode) + +@@ -78,6 +130,7 @@ def LockSession(session): + + # If our first try failed, try the GNOME "standard" interface. + if result[1] != 0: ++ logging.info("Attempting session lock via ConsoleKit/LoginD") + session.Lock() + + +@@ -87,7 +140,7 @@ def main(): + try: + LockSession(session) + logging.info("Session %s should be locked now.", session.GetId()) +- except: ++ except dbus.DBusException: + logging.exception("Error while trying to lock session.") + else: + logging.error("Error locking session (no active session).") +-- +1.8.5.3 + diff --git a/ovirt-guest-agent.spec b/ovirt-guest-agent.spec index 9ce4c17..695213d 100644 --- a/ovirt-guest-agent.spec +++ b/ovirt-guest-agent.spec @@ -1,5 +1,5 @@ -%global release_version 1 +%global release_version 3 %global _moduledir /%{_lib}/security # Note this is not building any package @@ -12,6 +12,7 @@ Group: Applications/System License: ASL 2.0 URL: http://wiki.ovirt.org/wiki/Category:Ovirt_guest_agent Source0: http://evilissimo.fedorapeople.org/releases/ovirt-guest-agent/%{version}/%{name}-%{version}.tar.bz2 +Patch1: 0001-Implementation-of-logind-based-session-locking.patch BuildRequires: libtool BuildRequires: pam-devel BuildRequires: python2-devel @@ -71,6 +72,7 @@ Requires: kdm %if 0%{?fedora} >= 20 %package gdm-plugin Summary: Files for the GDM plug-in of the oVirt Guest Agent +BuildArch: noarch Requires: %{name} = %{version}-%{release} Requires: %{name}-pam-module = %{version}-%{release} Requires: gdm @@ -105,6 +107,7 @@ oVirt automatic log-in system. %prep %setup -q -n ovirt-guest-agent-%{version} +%patch1 -p1 %build %configure \ @@ -225,6 +228,12 @@ fi %attr (755,root,root) %{_libdir}/kde4/kgreet_ovirtcred.so %changelog +* Mon Mar 31 2014 Vinzenz Feenstra - 1.0.9-3 +- The ovirt-guest-agent-gdm-plugin is now noarch + +* Mon Mar 31 2014 Vinzenz Feenstra - 1.0.9-2 +- Support for logind based session locking + * Mon Jan 20 2014 Vinzenz Feenstra - 1.0.9-1 - Report swap usage of guests - Updated pam conversation approach