[ovirt-guest-agent] Implementation for logind based session locking
Vinzenz Feenstra
evilissimo at fedoraproject.org
Mon Mar 31 07:55:47 UTC 2014
commit c4b5bc2e118b7d6bcb29779ffb04523a71cd1b73
Author: Vinzenz Feenstra <vfeenstr at redhat.com>
Date: Mon Mar 31 09:55:36 2014 +0200
Implementation for logind based session locking
Signed-off-by: Vinzenz Feenstra <vfeenstr at redhat.com>
...mentation-of-logind-based-session-locking.patch | 155 ++++++++++++++++++++
ovirt-guest-agent.spec | 7 +-
2 files changed, 161 insertions(+), 1 deletions(-)
---
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 <vfeenstr at redhat.com>
+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 <vfeenstr at redhat.com>
+---
+ 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 bc988cf..7a414d4 100644
--- a/ovirt-guest-agent.spec
+++ b/ovirt-guest-agent.spec
@@ -1,5 +1,5 @@
-%global release_version 1
+%global release_version 2
%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
@@ -105,6 +106,7 @@ oVirt automatic log-in system.
%prep
%setup -q -n ovirt-guest-agent-%{version}
+%patch1 -p1
%build
%configure \
@@ -225,6 +227,9 @@ fi
%attr (755,root,root) %{_libdir}/kde4/kgreet_ovirtcred.so
%changelog
+* Mon Mar 31 2014 Vinzenz Feenstra <evilissimo at redhat.com> - 1.0.9-2
+- Support for logind based session locking
+
* Mon Jan 20 2014 Vinzenz Feenstra <evilissimo at redhat.com> - 1.0.9-1
- Report swap usage of guests
- Updated pam conversation approach
More information about the scm-commits
mailing list