767 lines
26 KiB
Diff
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~
|