131 lines
4.3 KiB
Diff
131 lines
4.3 KiB
Diff
|
diff -up gdm-2.21.10/gui/simple-greeter/gdm-greeter-login-window.c.ck-multi gdm-2.21.10/gui/simple-greeter/gdm-greeter-login-window.c
|
||
|
--- gdm-2.21.10/gui/simple-greeter/gdm-greeter-login-window.c.ck-multi 2008-04-05 20:39:49.000000000 -0400
|
||
|
+++ gdm-2.21.10/gui/simple-greeter/gdm-greeter-login-window.c 2008-04-05 20:42:23.000000000 -0400
|
||
|
@@ -1036,20 +1036,41 @@ static PolKitAction *
|
||
|
get_action_from_error (GError *error)
|
||
|
{
|
||
|
PolKitAction *action;
|
||
|
- const char *paction;
|
||
|
+ char *paction;
|
||
|
+ char *p;
|
||
|
|
||
|
action = polkit_action_new ();
|
||
|
|
||
|
paction = NULL;
|
||
|
if (g_str_has_prefix (error->message, "Not privileged for action: ")) {
|
||
|
- paction = error->message + strlen ("Not privileged for action: ");
|
||
|
+ paction = g_strdup (error->message + strlen ("Not privileged for action: "));
|
||
|
+ p = strchr (paction, ' ');
|
||
|
+ if (p)
|
||
|
+ *p = '\0';
|
||
|
}
|
||
|
g_debug ("GdmGreeterLoginWindow: Requesting priv for '%s'", paction);
|
||
|
|
||
|
polkit_action_set_action_id (action, paction);
|
||
|
|
||
|
+ g_free (paction);
|
||
|
+
|
||
|
return action;
|
||
|
}
|
||
|
+
|
||
|
+static PolKitResult
|
||
|
+get_result_from_error (GError *error)
|
||
|
+{
|
||
|
+ PolKitResult result = POLKIT_RESULT_UNKNOWN;
|
||
|
+ const char *p;
|
||
|
+
|
||
|
+ p = strrchr (error->message, ' ');
|
||
|
+ if (p) {
|
||
|
+ p++;
|
||
|
+ polkit_result_from_string_representation (p, &result);
|
||
|
+ }
|
||
|
+
|
||
|
+ return result;
|
||
|
+}
|
||
|
#endif
|
||
|
|
||
|
static void
|
||
|
@@ -1076,11 +1097,40 @@ do_system_restart (GdmGreeterLoginWindow
|
||
|
|
||
|
if (dbus_g_error_has_name (error, "org.freedesktop.ConsoleKit.Manager.NotPrivileged")) {
|
||
|
PolKitAction *action;
|
||
|
+ PolKitAction *action2;
|
||
|
+ PolKitResult result;
|
||
|
+ GtkWidget *dialog;
|
||
|
guint xid;
|
||
|
pid_t pid;
|
||
|
|
||
|
+ result = get_result_from_error (error);
|
||
|
action = get_action_from_error (error);
|
||
|
|
||
|
+ if (result == POLKIT_RESULT_NO) {
|
||
|
+ action2 = polkit_action_new ();
|
||
|
+ polkit_action_set_action_id (action2,
|
||
|
+ "org.freedesktop.consolekit.system.restart-multiple-users");
|
||
|
+ dialog = gtk_message_dialog_new (GTK_WINDOW (login_window),
|
||
|
+ GTK_DIALOG_MODAL,
|
||
|
+ GTK_MESSAGE_ERROR,
|
||
|
+ GTK_BUTTONS_OK,
|
||
|
+ _("Failed to restart computer"));
|
||
|
+ if (polkit_action_equal (action, action2)) {
|
||
|
+ gtk_message_dialog_format_secondary_text (dialog,
|
||
|
+ _("You are not allowed to restart the computer "
|
||
|
+ "because multiple users are logged in"));
|
||
|
+ }
|
||
|
+ gtk_dialog_run (GTK_DIALOG (dialog));
|
||
|
+ gtk_widget_destroy (dialog);
|
||
|
+
|
||
|
+ polkit_action_unref (action);
|
||
|
+ polkit_action_unref (action2);
|
||
|
+
|
||
|
+ g_error_free (error);
|
||
|
+
|
||
|
+ return;
|
||
|
+ }
|
||
|
+
|
||
|
xid = 0;
|
||
|
pid = getpid ();
|
||
|
|
||
|
@@ -1128,14 +1178,41 @@ do_system_stop (GdmGreeterLoginWindow *l
|
||
|
|
||
|
if (dbus_g_error_has_name (error, "org.freedesktop.ConsoleKit.Manager.NotPrivileged")) {
|
||
|
PolKitAction *action;
|
||
|
+ PolKitAction *action2;
|
||
|
+ PolKitResult result;
|
||
|
+ GtkWidget *dialog;
|
||
|
guint xid;
|
||
|
pid_t pid;
|
||
|
|
||
|
xid = 0;
|
||
|
pid = getpid ();
|
||
|
|
||
|
+ result = get_result_from_error (error);
|
||
|
action = get_action_from_error (error);
|
||
|
|
||
|
+ if (result == POLKIT_RESULT_NO) {
|
||
|
+ action2 = polkit_action_new ();
|
||
|
+ polkit_action_set_action_id (action2,
|
||
|
+ "org.freedesktop.consolekit.system.stop-multiple-users");
|
||
|
+ dialog = gtk_message_dialog_new (GTK_WINDOW (login_window),
|
||
|
+ GTK_DIALOG_MODAL,
|
||
|
+ GTK_MESSAGE_ERROR,
|
||
|
+ GTK_BUTTONS_OK,
|
||
|
+ _("Failed to stop computer"));
|
||
|
+ if (polkit_action_equal (action, action2)) {
|
||
|
+ gtk_message_dialog_format_secondary_text (dialog,
|
||
|
+ _("You are not allowed to stop the computer "
|
||
|
+ "because multiple users are logged in"));
|
||
|
+ }
|
||
|
+ gtk_dialog_run (GTK_DIALOG (dialog));
|
||
|
+ gtk_widget_destroy (dialog);
|
||
|
+
|
||
|
+ polkit_action_unref (action);
|
||
|
+ polkit_action_unref (action2);
|
||
|
+
|
||
|
+ return;
|
||
|
+ }
|
||
|
+
|
||
|
g_error_free (error);
|
||
|
error = NULL;
|
||
|
res = polkit_gnome_auth_obtain (action,
|