From 704e07ba9563d52711076ee1730379a628cf2401 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Sun, 29 Mar 2009 16:05:01 +0100 Subject: [PATCH] Fixed dbus auth functions, now takes a more brute force attempt if PolicyKit object is acting up (bug?) --- oblogout/dbushandler.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/oblogout/dbushandler.py b/oblogout/dbushandler.py index 4a6217b..b69f551 100755 --- a/oblogout/dbushandler.py +++ b/oblogout/dbushandler.py @@ -31,30 +31,36 @@ class DbusController (object): def __check_perms(self, id): """ Check if we have permissions for a action """ - + + self.logger.debug('Checking permissions for %s' % id) + kit = dbus.SystemBus().get_object('org.freedesktop.PolicyKit','/') if(kit == None): print("Error: Could not get PolicyKit D-Bus Interface\n") return False - if kit.IsProcessAuthorized(id, dbus.UInt32(os.getpid()), False): + try: + res = kit.IsProcessAuthorized(id, dbus.UInt32(os.getpid()), False) + except: + return False + + if res: self.logging.debug("Authorised to use %s" % id) return True def __auth_perms(self, id): - """ Check if we have permissions for a action, if not, try to obtain them via PolicyKit """ if self.__check_perms(id): return True else: - kit = dbus.SystemBus().get_object('org.freedesktop.PolicyKit','/') + kit = dbus.SessionBus().get_object('org.freedesktop.PolicyKit.AuthenticationAgent','/') if(kit == None): print("Error: Could not get PolicyKit D-Bus Interface\n") return False - - return kit.ObtainAuthorization(id, (dbus.UInt32)(xid), (dbus.UInt32)(os.getpid())) + + return kit.ObtainAuthorization(id, dbus.UInt32(0), dbus.UInt32(os.getpid())) def __get_sessions(self): """ Using DBus and ConsoleKit, get the number of sessions. This is used by PolicyKit to dictate the @@ -98,7 +104,7 @@ class DbusController (object): if self.__auth_perms("org.freedesktop.hal.power-management.reboot-multiple-sessions"): dbus_hal = dbus.SystemBus().get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer") pm = dbus.Interface(dbus_hal, "org.freedesktop.Hal.Device.SystemPowerManagement") - return pm.Reboot() + #return pm.Reboot() else: return False @@ -110,7 +116,7 @@ class DbusController (object): dbus_hal = dbus.SystemBus().get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer") pm = dbus.Interface(dbus_hal, "org.freedesktop.Hal.Device.SystemPowerManagement") - return pm.Shutdown() + #return pm.Shutdown() else: return False @@ -130,9 +136,8 @@ if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) - t = DbusController() - t.restart() + print t.restart()