[gnome-lirc-properties] Port to PolicyKit 1.0
- From: Bastien Nocera <hadess src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-lirc-properties] Port to PolicyKit 1.0
- Date: Tue, 15 Sep 2009 09:46:29 +0000 (UTC)
commit 4587a7037d05f4113b2e860afd634d01ec425d9e
Author: Bastien Nocera <hadess hadess net>
Date: Fri Sep 11 16:34:45 2009 +0100
Port to PolicyKit 1.0
- Port backend and policykit code to PolicyKit 1.0
- Rename mechanism's configuration file, as PolicyKit would
ignore it otherwise
Makefile.am | 2 +-
configure.ac | 5 +--
data/Makefile.am | 6 ++--
... org.gnome.lirc-properties.mechanism.policy.in} | 2 +-
gnome_lirc_properties/backend.py | 23 +++++++------
gnome_lirc_properties/policykit.py | 34 ++++++++-----------
6 files changed, 34 insertions(+), 38 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index b8dcf64..b4b2a55 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -20,7 +20,7 @@ DISTCLEANFILES = \
intltool-update
DISTCHECK_CONFIGURE_FLAGS = \
- --disable-scrollkeeper --disable-policy-kit
+ --disable-scrollkeeper
# Build ChangeLog from GIT history
ChangeLog:
diff --git a/configure.ac b/configure.ac
index 17551a4..97188c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -36,8 +36,7 @@ AC_ARG_ENABLE([policy-kit],
if test "$enable_policy_kit" != no
then
- PKG_CHECK_MODULES([POLICY_KIT], [polkit >= 0.7
- polkit-gnome >= 0.7])
+ PKG_CHECK_MODULES([POLICY_KIT], [polkit-backend-1])
ENABLE_POLICY_KIT=True
enable_policy_kit=yes
else
@@ -184,7 +183,7 @@ dnl generate files ===
AC_CONFIG_FILES([Makefile
data/Makefile
data/gnome-lirc-properties.desktop.in
- data/gnome-lirc-properties-mechanism.policy
+ data/org.gnome.lirc-properties.mechanism.policy
data/org.gnome.LircProperties.Mechanism.service
data/icons/Makefile
data/icons/16x16/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 8e98529..537f42b 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -5,9 +5,9 @@ SUBDIRS = icons
dbusconfdir = $(sysconfdir)/dbus-1/system.d
dbusconf_DATA = org.gnome.LircProperties.Mechanism.conf
-policykitpolicydir = $(datadir)/PolicyKit/policy
-policykitpolicy_in_files = gnome-lirc-properties-mechanism.policy.in
-policykitpolicy_DATA = gnome-lirc-properties-mechanism.policy
+policykitpolicydir = $(datadir)/polkit-1/actions
+policykitpolicy_in_files = org.gnome.lirc-properties.mechanism.policy.in
+policykitpolicy_DATA = org.gnome.lirc-properties.mechanism.policy
# The .service file is generated from a .service.in file
# so that the install location can be inserted.
diff --git a/data/gnome-lirc-properties-mechanism.policy.in b/data/org.gnome.lirc-properties.mechanism.policy.in
similarity index 92%
rename from data/gnome-lirc-properties-mechanism.policy.in
rename to data/org.gnome.lirc-properties.mechanism.policy.in
index e99b880..9677d36 100644
--- a/data/gnome-lirc-properties-mechanism.policy.in
+++ b/data/org.gnome.lirc-properties.mechanism.policy.in
@@ -15,7 +15,7 @@
<message>Changing the LIRC configuration requires privileges.</message>
<defaults>
<allow_inactive>no</allow_inactive>
- <allow_active>auth_self_keep_always</allow_active>
+ <allow_active>auth_self_keep</allow_active>
</defaults>
</action>
diff --git a/gnome_lirc_properties/backend.py b/gnome_lirc_properties/backend.py
index 881b7df..2475b21 100644
--- a/gnome_lirc_properties/backend.py
+++ b/gnome_lirc_properties/backend.py
@@ -63,17 +63,20 @@ class PolicyKitService(dbus.service.Object):
try:
if sender:
- kit = dbus.SystemBus().get_object('org.freedesktop.PolicyKit', '/')
- kit = dbus.Interface(kit, 'org.freedesktop.PolicyKit')
-
- # Note that we don't use IsProcessAuthorized because we have
- # no ways to get the PID of the front-end, so we're left
- # with checking that its bus name is authorised instead
- # See http://bugzilla.gnome.org/show_bug.cgi?id=540912
- granted = kit.IsSystemBusNameAuthorized(action, sender, False)
+ kit = dbus.SystemBus().get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
+ kit = dbus.Interface(kit, 'org.freedesktop.PolicyKit1.Authority')
+
+ # Note that we don't use CheckAuthorization with bus name
+ # details because we have no ways to get the PID of the
+ # front-end, so we're left with checking that its bus name
+ # is authorised instead
+ # See http://bugzilla.gnome.org/show_bug.cgi?id=540912
+ (granted, _, details) = kit.CheckAuthorization(
+ ('system-bus-name', {'name': sender}),
+ action, {}, dbus.UInt32(1), '', timeout=600)
logging.info('authorization of system bus name \'%s\': %r', sender, granted)
- if 'yes' != granted:
+ if not granted:
raise AccessDeniedException('Session not authorized by PolicyKit')
except AccessDeniedException:
@@ -484,7 +487,7 @@ class BackendService(PolicyKitService):
INTERFACE_NAME = 'org.gnome.LircProperties.Mechanism'
SERVICE_NAME = 'org.gnome.LircProperties.Mechanism'
- IDLE_TIMEOUT = 30
+ IDLE_TIMEOUT = 300
# These are extra fields set by our GUI:
diff --git a/gnome_lirc_properties/policykit.py b/gnome_lirc_properties/policykit.py
index f60c1f8..750883c 100644
--- a/gnome_lirc_properties/policykit.py
+++ b/gnome_lirc_properties/policykit.py
@@ -39,42 +39,36 @@ class PolicyKitAuthentication(object):
return True
# Check whether the process is authorized:
- pid = dbus.UInt32(os.getpid())
- authorized = self.policy_kit.IsProcessAuthorized(action_id, pid, False)
- logging.debug('%s: authorized=%r', action_id, authorized)
+ pid = os.getpid()
+ (is_auth, _, details) = self.policy_kit.CheckAuthorization(
+ ('unix-process', {'pid': dbus.UInt32(pid, variant_level=1)}),
+ action_id, {}, dbus.UInt32(0), '', timeout=600)
+ logging.debug('%s: authorized=%r', action_id, is_auth)
- return ('yes' == authorized)
+ return bool(is_auth)
def obtain_authorization(self, widget, action_id=config.POLICY_KIT_ACTION):
'''
- Try to obtain authoriztation for the specified action.
+ Try to obtain authorization for the specified action.
'''
if not config.ENABLE_POLICY_KIT:
return True
- xid = (widget and widget.get_toplevel().window.xid or 0)
- xid, pid = dbus.UInt32(xid), dbus.UInt32(os.getpid())
+ pid = os.getpid()
+ (granted, _, details) = self.policy_kit.CheckAuthorization(
+ ('unix-process', {'pid': dbus.UInt32(pid, variant_level=1)}),
+ action_id, {}, dbus.UInt32(1), '', timeout=600)
- granted = self.auth_agent.ObtainAuthorization(action_id, xid, pid)
logging.debug('%s: granted=%r', action_id, granted)
return bool(granted)
def __get_policy_kit(self):
- '''Retreive the D-Bus interface of PolicyKit.'''
+ '''Retrieve the D-Bus interface of PolicyKit.'''
# retreiving the interface raises DBusException on error:
- service = dbus.SystemBus().get_object('org.freedesktop.PolicyKit', '/')
- return dbus.Interface(service, 'org.freedesktop.PolicyKit')
+ service = dbus.SystemBus().get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
+ return dbus.Interface(service, 'org.freedesktop.PolicyKit1.Authority')
- def __get_auth_agent(self):
- '''Retreive the D-Bus interface of the PolicyKit authentication agent.'''
-
- # retreiving the interface raises DBusException on error:
- return dbus.SessionBus().get_object(
- 'org.freedesktop.PolicyKit.AuthenticationAgent', '/',
- 'org.gnome.PolicyKit.AuthorizationManager.SingleInstance')
-
- auth_agent = property(__get_auth_agent)
policy_kit = property(__get_policy_kit)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]