SHA256
1
0
forked from pool/gdm
gdm/gdm-2.8.0.7-halt-needs-root.patch

767 lines
26 KiB
Diff

diff -upr gdm-2.16.1-pre/daemon/gdm.c gdm-2.16.1-post/daemon/gdm.c
--- gdm-2.16.1-pre/daemon/gdm.c 2006-09-11 15:36:16.000000000 -0500
+++ gdm-2.16.1-post/daemon/gdm.c 2006-11-07 19:19:53.000000000 -0600
@@ -2347,6 +2347,9 @@ gdm_handle_message (GdmConnection *conn,
return;
d = gdm_display_lookup (slave_pid);
+ if (!gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ return;
+
gdm_info (_("Master suspending..."));
sysmenu = gdm_get_value_bool_per_display (d->name, GDM_KEY_SYSTEM_MENU);
@@ -3242,21 +3245,24 @@ gdm_handle_user_message (GdmConnection *
if (logout_action == GDM_LOGOUT_ACTION_NONE)
logout_action = safe_logout_action;
- if (sysmenu && disp->attached &&
+ if (sysmenu && disp->attached && gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ !gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) &&
! ve_string_empty (gdm_get_value_string (GDM_KEY_HALT))) {
g_string_append_printf (msg, "%s%s", sep, GDM_SUP_LOGOUT_ACTION_HALT);
if (logout_action == GDM_LOGOUT_ACTION_HALT)
g_string_append (msg, "!");
sep = ";";
}
- if (sysmenu && disp->attached &&
+ if (sysmenu && disp->attached && gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ !gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) &&
! ve_string_empty (gdm_get_value_string (GDM_KEY_REBOOT))) {
g_string_append_printf (msg, "%s%s", sep, GDM_SUP_LOGOUT_ACTION_REBOOT);
if (logout_action == GDM_LOGOUT_ACTION_REBOOT)
g_string_append (msg, "!");
sep = ";";
}
- if (sysmenu && disp->attached &&
+ if (sysmenu && disp->attached && gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ !gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) &&
! ve_string_empty (gdm_get_value_string (GDM_KEY_SUSPEND))) {
g_string_append_printf (msg, "%s%s", sep, GDM_SUP_LOGOUT_ACTION_SUSPEND);
if (logout_action == GDM_LOGOUT_ACTION_SUSPEND)
@@ -3292,21 +3298,24 @@ gdm_handle_user_message (GdmConnection *
disp->logout_action = GDM_LOGOUT_ACTION_NONE;
was_ok = TRUE;
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_HALT) == 0) {
- if (sysmenu && disp->attached &&
+ if (sysmenu && disp->attached && gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ !gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) &&
! ve_string_empty (gdm_get_value_string (GDM_KEY_HALT))) {
disp->logout_action =
GDM_LOGOUT_ACTION_HALT;
was_ok = TRUE;
}
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_REBOOT) == 0) {
- if (sysmenu && disp->attached &&
+ if (sysmenu && disp->attached && gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ !gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) &&
! ve_string_empty (gdm_get_value_string (GDM_KEY_REBOOT))) {
disp->logout_action =
GDM_LOGOUT_ACTION_REBOOT;
was_ok = TRUE;
}
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_SUSPEND) == 0) {
- if (sysmenu && disp->attached &&
+ if (sysmenu && disp->attached && gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ !gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) &&
! ve_string_empty (gdm_get_value_string (GDM_KEY_SUSPEND))) {
disp->logout_action =
GDM_LOGOUT_ACTION_SUSPEND;
diff -upr gdm-2.16.1-pre/daemon/gdmconfig.c gdm-2.16.1-post/daemon/gdmconfig.c
--- gdm-2.16.1-pre/daemon/gdmconfig.c 2006-07-17 13:43:51.000000000 -0500
+++ gdm-2.16.1-post/daemon/gdmconfig.c 2006-11-07 23:19:19.000000000 -0600
@@ -251,6 +251,8 @@ static gboolean GdmGraphicalThemeRand;
static gboolean GdmBroadcast;
static gboolean GdmAllowAdd;
static gboolean GdmRestartBackgroundProgram;
+static gboolean GdmAllowShutdown;
+static gboolean GdmSecureShutdown;
/**
* gdm_config_add_hash
@@ -418,6 +420,8 @@ gdm_config_init (void)
gdm_config_add_hash (GDM_KEY_SOUND_ON_LOGIN, &GdmSoundOnLogin, &bool_type);
gdm_config_add_hash (GDM_KEY_RESTART_BACKGROUND_PROGRAM,
&GdmRestartBackgroundProgram, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ALLOW_SHUTDOWN, &GdmAllowShutdown, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SECURE_SHUTDOWN, &GdmSecureShutdown, &bool_type);
/* string values */
gdm_config_add_hash (GDM_KEY_PATH, &GdmPath, &string_type);
@@ -1277,6 +1281,10 @@ _gdm_set_value_bool (gchar *key, gboolea
notify_displays_int (GDM_NOTIFY_ADD_GTK_MODULES, *setting);
else if (is_key (key, GDM_KEY_TIMED_LOGIN_ENABLE))
notify_displays_int (GDM_NOTIFY_TIMED_LOGIN_ENABLE, *setting);
+ else if (is_key (key, GDM_KEY_ALLOW_SHUTDOWN))
+ notify_displays_int (GDM_NOTIFY_ALLOW_SHUTDOWN, *setting);
+ else if (is_key (key, GDM_KEY_SECURE_SHUTDOWN))
+ notify_displays_int (GDM_NOTIFY_SECURE_SHUTDOWN, *setting);
}
if (*setting)
diff -upr gdm-2.16.1-pre/daemon/gdm.h gdm-2.16.1-post/daemon/gdm.h
--- gdm-2.16.1-pre/daemon/gdm.h 2006-11-07 18:31:11.000000000 -0600
+++ gdm-2.16.1-post/daemon/gdm.h 2006-11-07 20:04:54.000000000 -0600
@@ -123,6 +123,8 @@ enum {
/* Different login interruptions */
#define GDM_INTERRUPT_TIMED_LOGIN 'T'
#define GDM_INTERRUPT_CONFIGURE 'C'
+#define GDM_INTERRUPT_HALT 'K'
+#define GDM_INTERRUPT_REBOOT 'B'
#define GDM_INTERRUPT_SUSPEND 'S'
#define GDM_INTERRUPT_SELECT_USER 'U'
#define GDM_INTERRUPT_LOGIN_SOUND 'L'
@@ -418,6 +420,9 @@ enum {
#define GDM_KEY_SHOW_XTERM_FAILSAFE "greeter/ShowXtermFailsafeSession=true"
#define GDM_KEY_SHOW_LAST_SESSION "greeter/ShowLastSession=true"
+#define GDM_KEY_ALLOW_SHUTDOWN "security/AllowShutdown=true"
+#define GDM_KEY_SECURE_SHUTDOWN "security/SecureShutdown=false"
+
#define GDM_SESSION_FAILSAFE_GNOME "GDM_Failsafe.GNOME"
#define GDM_SESSION_FAILSAFE_XTERM "GDM_Failsafe.XTERM"
@@ -733,6 +738,8 @@ void gdm_final_cleanup (void);
#define GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE "SoundOnLoginFailureFile" /* <sound file> */
#define GDM_NOTIFY_ADD_GTK_MODULES "AddGtkModules" /* <true/false as int> */
#define GDM_NOTIFY_GTK_MODULES_LIST "GtkModulesList" /* <modules list> */
+#define GDM_NOTIFY_ALLOW_SHUTDOWN "AllowShutdown" /* <true/false as int> */
+#define GDM_NOTIFY_SECURE_SHUTDOWN "SecureShutdown" /* <true/false as int> */
/* commands, seel GDM_SLAVE_NOTIFY_COMMAND */
#define GDM_NOTIFY_DIRTY_SERVERS "DIRTY_SERVERS"
diff -upr gdm-2.16.1-pre/daemon/slave.c gdm-2.16.1-post/daemon/slave.c
--- gdm-2.16.1-pre/daemon/slave.c 2006-11-07 18:31:11.000000000 -0600
+++ gdm-2.16.1-post/daemon/slave.c 2006-11-07 19:56:06.000000000 -0600
@@ -101,6 +101,8 @@ static gboolean do_timed_login = FALSE;
login the timed login */
static gboolean do_configurator = FALSE; /* if this is true, login as root
* and start the configurator */
+static gboolean do_system_halt = FALSE;
+static gboolean do_system_reboot = FALSE;
static gboolean do_cancel = FALSE; /* if this is true, go back to
username entry & unselect face
browser (if present) */
@@ -1893,6 +1895,97 @@ play_login_sound (const char *sound_file
return TRUE;
}
+static gboolean
+get_root_auth (const gchar *message, struct passwd **pwent)
+{
+ gboolean oldAllowRoot;
+
+ /* clear any error */
+ gdm_slave_greeter_ctl_no_ret (GDM_ERRBOX, "");
+ gdm_slave_greeter_ctl_no_ret (GDM_MSG, message);
+
+ /* we always allow root for this */
+ oldAllowRoot = gdm_get_value_bool (GDM_KEY_ALLOW_ROOT);
+ gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, TRUE);
+
+ *pwent = getpwuid (0);
+ if G_UNLIKELY (*pwent == NULL) {
+ /* what? no "root" ?? */
+ gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
+ gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, oldAllowRoot);
+ return FALSE; /* continue */
+ }
+
+ gdm_slave_greeter_ctl_no_ret (GDM_SETLOGIN, (*pwent)->pw_name);
+ login = gdm_verify_user (d,
+ (*pwent)->pw_name,
+ d->name,
+ d->attached);
+ gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, oldAllowRoot);
+
+ /* Clear message */
+ gdm_slave_greeter_ctl_no_ret (GDM_MSG, "");
+
+ if G_UNLIKELY (do_restart_greeter) {
+ g_free (login);
+ login = NULL;
+ do_restart_greeter = FALSE;
+ restart_the_greeter ();
+ return FALSE; /* continue */
+ }
+
+ check_notifies_now ();
+
+ /* The wanker can't remember his password */
+ if (login == NULL) {
+ gdm_debug ("gdm_slave_wait_for_login: No login/Bad login");
+ gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
+ return FALSE; /* continue */
+ }
+
+ /* Wipe the login */
+ g_free (login);
+ login = NULL;
+
+ /* Note that this can still fall through to
+ * the timed login if the user doesn't type in the
+ * password fast enough and there is timed login
+ * enabled */
+ if (do_timed_login) {
+ return FALSE; /* break; */
+ }
+
+ /* The user is a wanker */
+ if G_UNLIKELY (do_configurator || do_system_halt || do_system_reboot) {
+ do_configurator = FALSE;
+ do_system_halt = FALSE;
+ do_system_reboot = FALSE;
+ gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
+ return FALSE; /* continue */
+ }
+
+ /* Now running as root */
+
+ /* Get the root pwent */
+ *pwent = getpwuid (0);
+
+ if G_UNLIKELY (*pwent == NULL) {
+ /* What? No "root" ?? This is not possible
+ * since we logged in, but I'm paranoid */
+ gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
+ return FALSE; /* continue */
+ }
+
+ d->logged_in = TRUE;
+ logged_in_uid = 0;
+ logged_in_gid = 0;
+ gdm_slave_send_num (GDM_SOP_LOGGED_IN, TRUE);
+ /* Note: nobody really logged in */
+ gdm_slave_send_string (GDM_SOP_LOGIN, "");
+
+ return TRUE;
+}
+
static void
gdm_slave_wait_for_login (void)
{
@@ -1949,88 +2042,13 @@ gdm_slave_wait_for_login (void)
do_configurator = FALSE;
g_free (login);
login = NULL;
- /* clear any error */
- gdm_slave_greeter_ctl_no_ret (GDM_ERRBOX, "");
- gdm_slave_greeter_ctl_no_ret
- (GDM_MSG,
- _("You must authenticate as root to run configuration."));
-
- /* we always allow root for this */
- oldAllowRoot = gdm_get_value_bool (GDM_KEY_ALLOW_ROOT);
- gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, TRUE);
-
- pwent = getpwuid (0);
- if G_UNLIKELY (pwent == NULL) {
- /* what? no "root" ?? */
- gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
- continue;
- }
- gdm_slave_greeter_ctl_no_ret (GDM_SETLOGIN, pwent->pw_name);
- login = gdm_verify_user (d,
- pwent->pw_name,
- d->name,
- d->attached);
- gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, oldAllowRoot);
-
- /* Clear message */
- gdm_slave_greeter_ctl_no_ret (GDM_MSG, "");
-
- if G_UNLIKELY (do_restart_greeter) {
- g_free (login);
- login = NULL;
- do_restart_greeter = FALSE;
- restart_the_greeter ();
+ if (!get_root_auth (_("You must authenticate as root to run configuration."), &pwent)) {
+ if (do_timed_login)
+ break;
continue;
}
- check_notifies_now ();
-
- /* The wanker can't remember his password */
- if (login == NULL) {
- gdm_debug ("gdm_slave_wait_for_login: No login/Bad login");
- gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
- continue;
- }
-
- /* Wipe the login */
- g_free (login);
- login = NULL;
-
- /* Note that this can still fall through to
- * the timed login if the user doesn't type in the
- * password fast enough and there is timed login
- * enabled */
- if (do_timed_login) {
- break;
- }
-
- /* The user is a wanker */
- if G_UNLIKELY (do_configurator) {
- do_configurator = FALSE;
- gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
- continue;
- }
-
- /* Now running as root */
-
- /* Get the root pwent */
- pwent = getpwuid (0);
-
- if G_UNLIKELY (pwent == NULL) {
- /* What? No "root" ?? This is not possible
- * since we logged in, but I'm paranoid */
- gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
- continue;
- }
-
- d->logged_in = TRUE;
- logged_in_uid = 0;
- logged_in_gid = 0;
- gdm_slave_send_num (GDM_SOP_LOGGED_IN, TRUE);
- /* Note: nobody really logged in */
- gdm_slave_send_string (GDM_SOP_LOGIN, "");
-
/* Disable the login screen, we don't want people to
* log in in the meantime */
gdm_slave_greeter_ctl_no_ret (GDM_DISABLE, "");
@@ -2069,6 +2087,49 @@ gdm_slave_wait_for_login (void)
continue;
}
+ if (do_system_halt) {
+ struct passwd *pwent;
+
+ do_system_halt = FALSE;
+ g_free (login);
+ login = NULL;
+
+ if (!gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ continue;
+
+ if (!gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) ||
+ get_root_auth (_("You must authenticate as root to shut down."), &pwent)) {
+ exit_code_to_use = DISPLAY_HALT;
+ term_quit ();
+ } else if (do_timed_login) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (do_system_reboot) {
+ struct passwd *pwent;
+
+ do_system_reboot = FALSE;
+ g_free (login);
+ login = NULL;
+
+ if (!gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ continue;
+
+ if (!gdm_get_value_bool (GDM_KEY_SECURE_SHUTDOWN) ||
+ get_root_auth (_("You must authenticate as root to restart the computer."), &pwent)) {
+ exit_code_to_use = DISPLAY_REBOOT;
+ term_quit ();
+ } else if (do_timed_login) {
+ break;
+ }
+
+ continue;
+ }
+
+
/* The user timed out into a timed login during the
* conversation */
if (do_timed_login) {
@@ -4943,9 +5004,20 @@ check_for_interruption (const char *msg)
do_configurator = TRUE;
}
break;
+ case GDM_INTERRUPT_HALT:
+ if (d->attached) {
+ do_system_halt = TRUE;
+ }
+ break;
+ case GDM_INTERRUPT_REBOOT:
+ if (d->attached) {
+ do_system_reboot = TRUE;
+ }
+ break;
case GDM_INTERRUPT_SUSPEND:
if (d->attached &&
gdm_get_value_bool_per_display (d->name, GDM_KEY_SYSTEM_MENU) &&
+ gdm_get_value_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
! ve_string_empty (gdm_get_value_string (GDM_KEY_SUSPEND))) {
gchar *msg = g_strdup_printf ("%s %ld",
GDM_SOP_SUSPEND_MACHINE,
@@ -5358,6 +5430,8 @@ gdm_slave_action_pending (void)
{
if (do_timed_login ||
do_configurator ||
+ do_system_halt ||
+ do_system_reboot ||
do_restart_greeter ||
do_cancel)
return FALSE;
@@ -5629,6 +5703,12 @@ gdm_slave_handle_notify (const char *msg
remanage_asap = TRUE;
}
}
+ } else if (sscanf (msg, GDM_NOTIFY_ALLOW_SHUTDOWN " %d", &val) == 1) {
+ gdm_set_value_bool (GDM_KEY_ALLOW_SHUTDOWN, val);
+ if (d->greetpid > 1)
+ kill (d->greetpid, SIGHUP);
+ } else if (sscanf (msg, GDM_NOTIFY_SECURE_SHUTDOWN " %d", &val) == 1) {
+ gdm_set_value_bool (GDM_KEY_SECURE_SHUTDOWN, val);
}
}
diff -upr gdm-2.16.1-pre/gui/gdmlogin.c gdm-2.16.1-post/gui/gdmlogin.c
--- gdm-2.16.1-pre/gui/gdmlogin.c 2006-07-21 12:56:26.000000000 -0500
+++ gdm-2.16.1-post/gui/gdmlogin.c 2006-11-07 21:19:38.000000000 -0600
@@ -658,14 +658,20 @@ gdm_run_gdmconfig (GtkWidget *w, gpointe
static void
gdm_login_restart_handler (void)
{
- if (gdm_wm_warn_dialog (
- _("Are you sure you want to restart the computer?"), "",
- _("_Restart"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ if (!gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ return;
- closelog ();
+ if (!gdm_config_get_bool (GDM_KEY_SECURE_SHUTDOWN)) {
+ if (gdm_wm_warn_dialog (_("Are you sure you want to restart the computer?"), "",
+ _("_Restart"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ closelog ();
- gdm_kill_thingies ();
- _exit (DISPLAY_REBOOT);
+ gdm_kill_thingies ();
+ _exit (DISPLAY_REBOOT);
+ }
+ } else {
+ printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_REBOOT);
+ fflush (stdout);
}
}
@@ -673,14 +679,20 @@ gdm_login_restart_handler (void)
static void
gdm_login_halt_handler (void)
{
- if (gdm_wm_warn_dialog (
- _("Are you sure you want to Shut Down the computer?"), "",
- _("Shut _Down"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ if (!gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ return;
- closelog ();
+ if (!gdm_config_get_bool (GDM_KEY_SECURE_SHUTDOWN)) {
+ if (gdm_wm_warn_dialog (_("Are you sure you want to Shut Down the computer?"), "",
+ _("Shut _Down"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ closelog ();
- gdm_kill_thingies ();
- _exit (DISPLAY_HALT);
+ gdm_kill_thingies ();
+ _exit (DISPLAY_HALT);
+ }
+ } else {
+ printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_HALT);
+ fflush (stdout);
}
}
@@ -696,11 +708,17 @@ gdm_login_use_chooser_handler (void)
static void
gdm_login_suspend_handler (void)
{
- if (gdm_wm_warn_dialog (
- _("Are you sure you want to suspend the computer?"), "",
- _("_Suspend"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ if (!gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ return;
- /* suspend interruption */
+ if (!gdm_config_get_bool (GDM_KEY_SECURE_SHUTDOWN)) {
+ if (gdm_wm_warn_dialog (_("Are you sure you want to suspend the computer?"), "",
+ _("_Suspend"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ /* suspend interruption */
+ printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_SUSPEND);
+ fflush (stdout);
+ }
+ } else {
printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_SUSPEND);
fflush (stdout);
}
@@ -2369,7 +2387,8 @@ gdm_login_gui_init (void)
got_anything = TRUE;
}
- if (gdm_working_command_exists (gdm_config_get_string (GDM_KEY_REBOOT))) {
+ if (gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ gdm_working_command_exists (gdm_config_get_string (GDM_KEY_REBOOT))) {
item = gtk_menu_item_new_with_mnemonic (_("_Restart"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
g_signal_connect (G_OBJECT (item), "activate",
@@ -2379,7 +2398,8 @@ gdm_login_gui_init (void)
got_anything = TRUE;
}
- if (gdm_working_command_exists (gdm_config_get_string (GDM_KEY_HALT))) {
+ if (gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ gdm_working_command_exists (gdm_config_get_string (GDM_KEY_HALT))) {
item = gtk_menu_item_new_with_mnemonic (_("Shut _Down"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
g_signal_connect (G_OBJECT (item), "activate",
@@ -2389,7 +2409,8 @@ gdm_login_gui_init (void)
got_anything = TRUE;
}
- if (gdm_working_command_exists (gdm_config_get_string (GDM_KEY_SUSPEND))) {
+ if (gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN) &&
+ gdm_working_command_exists (gdm_config_get_string (GDM_KEY_SUSPEND))) {
item = gtk_menu_item_new_with_mnemonic (_("_Suspend"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
g_signal_connect (G_OBJECT (item), "activate",
Only in gdm-2.16.1-post/gui: gdmlogin.c~
diff -upr gdm-2.16.1-pre/gui/gdmsetup.c gdm-2.16.1-post/gui/gdmsetup.c
--- gdm-2.16.1-pre/gui/gdmsetup.c 2006-11-07 18:31:11.000000000 -0600
+++ gdm-2.16.1-post/gui/gdmsetup.c 2006-11-07 21:23:24.000000000 -0600
@@ -1670,9 +1670,6 @@ setup_intspin (const char *name,
g_object_set_data_full (G_OBJECT (spin),
"key", g_strdup (key),
(GDestroyNotify) g_free);
- g_object_set_data_full (G_OBJECT (toggle),
- "notify_key", g_strdup (key),
- (GDestroyNotify) g_free);
gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), val);
Only in gdm-2.16.1-post/gui: gdmsetup.c~
diff -upr gdm-2.16.1-pre/gui/greeter/greeter_item.c gdm-2.16.1-post/gui/greeter/greeter_item.c
--- gdm-2.16.1-pre/gui/greeter/greeter_item.c 2006-11-07 18:31:11.000000000 -0600
+++ gdm-2.16.1-post/gui/greeter/greeter_item.c 2006-11-07 21:28:38.000000000 -0600
@@ -196,15 +196,15 @@ greeter_item_is_visible (GreeterItemInfo
strcmp (info->show_type, "system") == 0)
return FALSE;
- if (( ! sysmenu || ! GdmHaltFound) &&
+ if (( ! sysmenu || ! GdmHaltFound || !gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN)) &&
(info->show_type != NULL &&
strcmp (info->show_type, "halt") == 0))
return FALSE;
- if (( ! sysmenu || ! GdmRebootFound) &&
+ if (( ! sysmenu || ! GdmRebootFound || !gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN)) &&
(info->show_type != NULL &&
strcmp (info->show_type, "reboot") == 0))
return FALSE;
- if (( ! sysmenu || ! GdmSuspendFound) &&
+ if (( ! sysmenu || ! GdmSuspendFound || !gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN)) &&
(info->show_type != NULL &&
strcmp (info->show_type, "suspend") == 0))
return FALSE;
Only in gdm-2.16.1-post/gui/greeter: greeter_item.c~
diff -upr gdm-2.16.1-pre/gui/greeter/greeter_system.c gdm-2.16.1-post/gui/greeter/greeter_system.c
--- gdm-2.16.1-pre/gui/greeter/greeter_system.c 2006-08-02 21:32:39.000000000 -0500
+++ gdm-2.16.1-post/gui/greeter/greeter_system.c 2006-11-07 21:26:35.000000000 -0600
@@ -68,61 +68,63 @@ bin_exists (const char *command)
* cannot depend on callback data being passed in.
*/
static void
-query_greeter_restart_handler (void)
+greeter_restart_handler (void)
{
- if (gdm_wm_warn_dialog (_("Are you sure you want to restart the computer?"), "",
- _("_Restart"), NULL, TRUE) == GTK_RESPONSE_YES) {
- closelog ();
+ if (!gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ return;
+
+ if (!gdm_config_get_bool (GDM_KEY_SECURE_SHUTDOWN)) {
+ if (gdm_wm_warn_dialog (_("Are you sure you want to restart the computer?"), "",
+ _("_Restart"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ closelog ();
- _exit (DISPLAY_REBOOT);
+ _exit (DISPLAY_REBOOT);
+ }
+ } else {
+ printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_REBOOT);
+ fflush (stdout);
}
}
static void
-query_greeter_halt_handler (void)
+greeter_halt_handler (void)
{
- if (gdm_wm_warn_dialog (_("Are you sure you want to Shut Down the computer?"), "",
- _("Shut _Down"), NULL, TRUE) == GTK_RESPONSE_YES) {
- closelog ();
+ if (!gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ return;
- _exit (DISPLAY_HALT);
+ if (!gdm_config_get_bool (GDM_KEY_SECURE_SHUTDOWN)) {
+ if (gdm_wm_warn_dialog (_("Are you sure you want to Shut Down the computer?"), "",
+ _("Shut _Down"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ closelog ();
+
+ _exit (DISPLAY_HALT);
+ }
+ } else {
+ printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_HALT);
+ fflush (stdout);
}
}
static void
-query_greeter_suspend_handler (void)
+greeter_suspend_handler (void)
{
- if (gdm_wm_warn_dialog (_("Are you sure you want to suspend the computer?"), "",
- _("_Suspend"), NULL, TRUE) == GTK_RESPONSE_YES) {
- /* suspend interruption */
+ if (!gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN))
+ return;
+
+ if (!gdm_config_get_bool (GDM_KEY_SECURE_SHUTDOWN)) {
+ if (gdm_wm_warn_dialog (_("Are you sure you want to suspend the computer?"), "",
+ _("_Suspend"), NULL, TRUE) == GTK_RESPONSE_YES) {
+ /* suspend interruption */
+ printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_SUSPEND);
+ fflush (stdout);
+ }
+ } else {
printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_SUSPEND);
fflush (stdout);
}
}
static void
-greeter_restart_handler (void)
-{
- closelog ();
- _exit (DISPLAY_REBOOT);
-}
-
-
-static void
-greeter_halt_handler (void)
-{
- closelog ();
- _exit (DISPLAY_HALT);
-}
-
-static void
-greeter_suspend_handler (void)
-{
- printf ("%c%c%c\n", STX, BEL, GDM_INTERRUPT_SUSPEND);
- fflush (stdout);
-}
-
-static void
greeter_config_handler (void)
{
greeter_item_ulist_disable ();
@@ -174,36 +176,36 @@ greeter_system_append_system_menu (GtkWi
NULL);
}
- if (GdmRebootFound || GdmHaltFound || GdmSuspendFound) {
+ if (gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN) && (GdmRebootFound || GdmHaltFound || GdmSuspendFound)) {
sep = gtk_separator_menu_item_new ();
gtk_menu_shell_append (GTK_MENU_SHELL (menu), sep);
gtk_widget_show (sep);
}
- if (GdmRebootFound) {
+ if (gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN) && GdmRebootFound) {
w = gtk_menu_item_new_with_mnemonic (_("_Restart"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), w);
gtk_widget_show (GTK_WIDGET (w));
g_signal_connect (G_OBJECT (w), "activate",
- G_CALLBACK (query_greeter_restart_handler),
+ G_CALLBACK (greeter_restart_handler),
NULL);
}
- if (GdmHaltFound) {
+ if (gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN) && GdmHaltFound) {
w = gtk_menu_item_new_with_mnemonic (_("Shut _Down"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), w);
gtk_widget_show (GTK_WIDGET (w));
g_signal_connect (G_OBJECT (w), "activate",
- G_CALLBACK (query_greeter_halt_handler),
+ G_CALLBACK (greeter_halt_handler),
NULL);
}
- if (GdmSuspendFound) {
+ if (gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN) && GdmSuspendFound) {
w = gtk_menu_item_new_with_mnemonic (_("Sus_pend"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), w);
gtk_widget_show (GTK_WIDGET (w));
g_signal_connect (G_OBJECT (w), "activate",
- G_CALLBACK (query_greeter_suspend_handler),
+ G_CALLBACK (greeter_suspend_handler),
NULL);
}
}
@@ -281,7 +283,7 @@ greeter_system_handler (GreeterItemInfo
vbox,
TRUE, TRUE, 0);
- if (GdmHaltFound) {
+ if (GdmHaltFound && gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN)) {
if (group_radio != NULL)
radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (group_radio));
halt_radio = gtk_radio_button_new_with_mnemonic (radio_group,
@@ -299,7 +301,7 @@ greeter_system_handler (GreeterItemInfo
gtk_widget_show (halt_radio);
}
- if (GdmRebootFound) {
+ if (GdmRebootFound && gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN)) {
if (group_radio != NULL)
radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (group_radio));
restart_radio = gtk_radio_button_new_with_mnemonic (radio_group,
@@ -316,7 +318,7 @@ greeter_system_handler (GreeterItemInfo
gtk_widget_show (restart_radio);
}
- if (GdmSuspendFound) {
+ if (GdmSuspendFound && gdm_config_get_bool (GDM_KEY_ALLOW_SHUTDOWN)) {
if (group_radio != NULL)
radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (group_radio));
suspend_radio = gtk_radio_button_new_with_mnemonic (radio_group,
@@ -414,13 +416,13 @@ void
greeter_item_system_setup (void)
{
greeter_item_register_action_callback ("reboot_button",
- (ActionFunc)query_greeter_restart_handler,
+ (ActionFunc)greeter_restart_handler,
NULL);
greeter_item_register_action_callback ("halt_button",
- (ActionFunc)query_greeter_halt_handler,
+ (ActionFunc)greeter_halt_handler,
NULL);
greeter_item_register_action_callback ("suspend_button",
- (ActionFunc)query_greeter_suspend_handler,
+ (ActionFunc)greeter_suspend_handler,
NULL);
greeter_item_register_action_callback ("system_button",
(ActionFunc)greeter_system_handler,
Only in gdm-2.16.1-post/gui/greeter: greeter_system.c~