16935
|
1 |
diff --git a/src/ck-manager.c b/src/ck-manager.c
|
|
2 |
index 99693a3..6bda488 100644
|
|
3 |
--- a/src/ck-manager.c
|
|
4 |
+++ b/src/ck-manager.c
|
|
5 |
@@ -1026,9 +1026,10 @@ get_system_num_users (CkManager *manager)
|
|
6 |
}
|
|
7 |
|
|
8 |
#ifdef ENABLE_RBAC_SHUTDOWN
|
|
9 |
-static void
|
|
10 |
+static gboolean
|
|
11 |
check_rbac_permissions (CkManager *manager,
|
|
12 |
DBusGMethodInvocation *context,
|
|
13 |
+ const char *action,
|
|
14 |
AuthorizedCallback callback)
|
|
15 |
{
|
|
16 |
const char *sender;
|
|
17 |
@@ -1050,7 +1051,7 @@ check_rbac_permissions (CkManager *manager,
|
|
18 |
username = get_user_name (uid);
|
|
19 |
|
|
20 |
if (username == NULL ||
|
|
21 |
- !chkauthattr (RBAC_SHUTDOWN_KEY, username)) {
|
|
22 |
+ !chkauthattr (action, username)) {
|
|
23 |
res = FALSE;
|
|
24 |
goto out;
|
|
25 |
}
|
|
26 |
@@ -1065,9 +1066,11 @@ out:
|
|
27 |
|
|
28 |
g_free (username);
|
|
29 |
|
|
30 |
- if (res) {
|
|
31 |
+ if (res && callback) {
|
|
32 |
callback (manager, context);
|
|
33 |
}
|
|
34 |
+
|
|
35 |
+ return res;
|
|
36 |
}
|
|
37 |
#endif
|
|
38 |
|
|
39 |
@@ -1126,7 +1129,7 @@ ck_manager_restart (CkManager *manager,
|
|
40 |
#if defined HAVE_POLKIT
|
|
41 |
check_polkit_permissions (manager, context, action, do_restart);
|
|
42 |
#elif defined ENABLE_RBAC_SHUTDOWN
|
|
43 |
- check_rbac_permissions (manager, context, do_restart);
|
|
44 |
+ check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY, do_restart);
|
|
45 |
#else
|
|
46 |
g_warning ("Compiled without PolicyKit or RBAC support!");
|
|
47 |
#endif
|
|
48 |
@@ -1146,7 +1149,12 @@ ck_manager_can_restart (CkManager *manager,
|
|
49 |
#if defined HAVE_POLKIT
|
|
50 |
get_polkit_permissions (manager, action, context);
|
|
51 |
#else
|
|
52 |
- dbus_g_method_return (context, TRUE);
|
|
53 |
+ if (check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY,
|
|
54 |
+ NULL)) {
|
|
55 |
+ dbus_g_method_return (context, TRUE);
|
|
56 |
+ } else {
|
|
57 |
+ dbus_g_method_return (context, FALSE);
|
|
58 |
+ }
|
|
59 |
#endif
|
|
60 |
|
|
61 |
return TRUE;
|
|
62 |
@@ -1197,7 +1205,7 @@ ck_manager_stop (CkManager *manager,
|
|
63 |
#if defined HAVE_POLKIT
|
|
64 |
check_polkit_permissions (manager, context, action, do_stop);
|
|
65 |
#elif defined ENABLE_RBAC_SHUTDOWN
|
|
66 |
- check_rbac_permissions (manager, context, do_stop);
|
|
67 |
+ check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY, do_stop);
|
|
68 |
#else
|
|
69 |
g_warning ("Compiled without PolicyKit or RBAC support!");
|
|
70 |
#endif
|
|
71 |
@@ -1216,7 +1224,12 @@ ck_manager_can_stop (CkManager *manager,
|
|
72 |
#if defined HAVE_POLKIT
|
|
73 |
get_polkit_permissions (manager, action, context);
|
|
74 |
#else
|
|
75 |
- dbus_g_method_return (context, TRUE);
|
|
76 |
+ if (check_rbac_permissions (manager, context, RBAC_SHUTDOWN_KEY,
|
|
77 |
+ NULL)) {
|
|
78 |
+ dbus_g_method_return (context, TRUE);
|
|
79 |
+ } else {
|
|
80 |
+ dbus_g_method_return (context, FALSE);
|
|
81 |
+ }
|
|
82 |
#endif
|
|
83 |
|
|
84 |
return TRUE;
|