patches/ConsoleKit-08-can-stop.diff
author rohinis
Tue, 29 Nov 2011 17:32:55 +0000
branchs11express-2010-11
changeset 22234 c23e64da3e06
parent 16935 c1b9badaf07d
permissions -rw-r--r--
2011-11-29 Rohini S <[email protected]> * patches/Python26-22-audio.diff: Fixes CVE-2010-1634 * specs/SUNWPython26.spec: Fixes CR 7085446

diff --git a/src/ck-manager.c b/src/ck-manager.c
index 99693a3..6bda488 100644
--- a/src/ck-manager.c
+++ b/src/ck-manager.c
@@ -1026,9 +1026,10 @@ get_system_num_users (CkManager *manager)
 }
 
 #ifdef ENABLE_RBAC_SHUTDOWN
-static void
+static gboolean
 check_rbac_permissions (CkManager             *manager,
                         DBusGMethodInvocation *context,
+                        const char            *action,
                         AuthorizedCallback     callback)
 {
         const char *sender;
@@ -1050,7 +1051,7 @@ check_rbac_permissions (CkManager             *manager,
         username = get_user_name (uid);
 
         if (username == NULL ||
-            !chkauthattr (RBAC_SHUTDOWN_KEY, username)) {
+            !chkauthattr (action, username)) {
                 res = FALSE;
                 goto out;
         }
@@ -1065,9 +1066,11 @@ out:
 
         g_free (username);
 
-        if (res) {
+        if (res && callback) {
                 callback (manager, context);
         }
+
+        return res;
 }
 #endif
 
@@ -1126,7 +1129,7 @@ ck_manager_restart (CkManager             *manager,
 #if defined HAVE_POLKIT
         check_polkit_permissions (manager, context, action, do_restart);
 #elif defined ENABLE_RBAC_SHUTDOWN
-        check_rbac_permissions (manager, context, do_restart);
+        check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY, do_restart);
 #else
         g_warning ("Compiled without PolicyKit or RBAC support!");
 #endif
@@ -1146,7 +1149,12 @@ ck_manager_can_restart (CkManager  *manager,
 #if defined HAVE_POLKIT
         get_polkit_permissions (manager, action, context);
 #else
-        dbus_g_method_return (context, TRUE);
+        if (check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY,
+                                        NULL)) {
+                dbus_g_method_return (context, TRUE);
+        } else {
+                dbus_g_method_return (context, FALSE);
+        }
 #endif
 
         return TRUE;
@@ -1197,7 +1205,7 @@ ck_manager_stop (CkManager             *manager,
 #if defined HAVE_POLKIT
         check_polkit_permissions (manager, context, action, do_stop);
 #elif defined  ENABLE_RBAC_SHUTDOWN
-        check_rbac_permissions (manager, context, do_stop);
+        check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY, do_stop);
 #else
         g_warning ("Compiled without PolicyKit or RBAC support!");
 #endif
@@ -1216,7 +1224,12 @@ ck_manager_can_stop (CkManager  *manager,
 #if defined HAVE_POLKIT
         get_polkit_permissions (manager, action, context);
 #else
-        dbus_g_method_return (context, TRUE);
+        if (check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY,
+                                        NULL)) {
+                dbus_g_method_return (context, TRUE);
+        } else {
+                dbus_g_method_return (context, FALSE);
+        }
 #endif
 
         return TRUE;