gnome-session-07-logout-dialog.diff revision 16889
13859N/Adiff -Nur gnome-session-2.23.6-orig/gnome-session/gsm-logout-dialog.c gnome-session-2.23.6/gnome-session/gsm-logout-dialog.c
13859N/A--- gnome-session-2.23.6-orig/gnome-session/gsm-logout-dialog.c 2008-08-07 12:32:18.469687950 +0800
13859N/A+++ gnome-session-2.23.6/gnome-session/gsm-logout-dialog.c 2008-08-07 12:32:53.941874874 +0800
13859N/A@@ -26,6 +26,7 @@
13859N/A
13859N/A #include <glib/gi18n.h>
13859N/A #include <gtk/gtk.h>
13859N/A+#include <gdk/gdkx.h>
13859N/A
13859N/A #include "gsm-logout-dialog.h"
13859N/A #include "gsm-power-manager.h"
13859N/A@@ -210,11 +211,30 @@
13859N/A }
13859N/A
13859N/A static gboolean
13859N/A+vt_is_available (void)
13859N/A+{
13859N/A+ Display *xdisplay;
13859N/A+ GdkDisplay *gdisplay;
13859N/A+ Atom prop;
13859N/A+
13859N/A+ gdisplay = gdk_display_get_default ();
13859N/A+ xdisplay = gdk_x11_display_get_xdisplay (gdisplay);
13859N/A+
13859N/A+ prop = XInternAtom (xdisplay, "XFree86_VT", TRUE);
13859N/A+
13859N/A+ return (prop == None ? FALSE : TRUE);
13859N/A+}
13859N/A+
13859N/A+static gboolean
13859N/A gsm_logout_supports_switch_user (GsmLogoutDialog *logout_dialog)
13859N/A {
13859N/A gboolean ret;
13859N/A
13859N/A+#if defined(sun) && defined(__SVR4)
13859N/A+ ret = gdm_is_available () && vt_is_available ();
13859N/A+#else
13859N/A ret = gsm_consolekit_can_switch_user (logout_dialog->priv->consolekit);
13859N/A+#endif
13859N/A
13859N/A return ret;
13859N/A }
16889N/Adiff -Nur gnome-session-2.27.4-orig/gnome-session/gsm-consolekit.c gnome-session-2.27.4/gnome-session/gsm-consolekit.c
16889N/A--- gnome-session-2.27.4/gnome-session/gsm-consolekit.c 2009-07-01 20:45:30.000000000 +0800
16889N/A+++ gnome-session-2.27.4-new/gnome-session/gsm-consolekit.c 2009-07-28 16:13:40.265207175 +0800
16889N/A@@ -23,6 +23,10 @@
16889N/A #include <errno.h>
16889N/A #include <string.h>
16889N/A #include <unistd.h>
16415N/A+#include <pwd.h>
16889N/A+#include <secdb.h>
16889N/A+#include <sys/types.h>
16889N/A+#include <auth_attr.h>
13859N/A
16889N/A #include <glib.h>
16889N/A #include <glib-object.h>
16889N/A@@ -1200,6 +1204,30 @@ gsm_consolekit_get_privileges_for_action
16889N/A }
16889N/A #endif
16889N/A
16889N/A+#if defined (__sun) && defined (__SVR4)
16889N/A+static gboolean
16889N/A+gsm_consolekit_check_solaris_shutdown (GsmConsolekit *manager, gboolean emit)
13859N/A+{
16889N/A+ struct passwd *pw;
16889N/A+ uid_t uid;
16889N/A+ gboolean ret = FALSE;
13859N/A+
16889N/A+ uid = getuid();
16889N/A+ pw = getpwuid(uid);
16889N/A+ if (pw) {
16889N/A+ ret = (gboolean)chkauthattr("solaris.system.shutdown",
16889N/A+ pw->pw_name);
16889N/A+ if (ret && emit)
16889N/A+ g_signal_emit (G_OBJECT (manager),
16889N/A+ signals [PRIVILEGES_COMPLETED],
16889N/A+ 0, TRUE, FALSE, NULL);
13859N/A+
16889N/A+ }
13859N/A+
16889N/A+ return ret;
13859N/A+}
16889N/A+#endif
16889N/A+
16889N/A gboolean
16889N/A gsm_consolekit_get_restart_privileges (GsmConsolekit *manager)
13859N/A {
16889N/A@@ -1207,6 +1236,8 @@ gsm_consolekit_get_restart_privileges (G
16889N/A return gsm_consolekit_get_privileges_for_actions (manager,
16889N/A "org.freedesktop.consolekit.system.restart",
16889N/A "org.freedesktop.consolekit.system.restart-multiple-users");
16889N/A+#elif defined (__sun) && defined (__SVR4)
16889N/A+ gsm_consolekit_check_solaris_shutdown (manager, TRUE);
16889N/A #else
16889N/A g_debug ("GsmConsolekit: built without PolicyKit-gnome support");
16889N/A return FALSE;
16889N/A@@ -1220,6 +1251,8 @@ gsm_consolekit_get_stop_privileges (GsmC
16889N/A return gsm_consolekit_get_privileges_for_actions (manager,
16889N/A "org.freedesktop.consolekit.system.stop",
16889N/A "org.freedesktop.consolekit.system.stop-multiple-users");
16889N/A+#elif defined (__sun) && defined (__SVR4)
16889N/A+ gsm_consolekit_check_solaris_shutdown (manager, TRUE);
16889N/A #else
16889N/A g_debug ("GsmConsolekit: built without PolicyKit-gnome support");
16889N/A return FALSE;
16889N/A@@ -1232,6 +1265,8 @@ gsm_consolekit_can_restart (GsmConsoleki
16889N/A #ifdef HAVE_POLKIT_GNOME
16889N/A return gsm_consolekit_can_do_action (manager, "org.freedesktop.consolekit.system.restart") ||
16889N/A gsm_consolekit_can_do_action (manager, "org.freedesktop.consolekit.system.restart-multiple-users");
16889N/A+#elif defined (__sun) && defined (__SVR4)
16889N/A+ gsm_consolekit_check_solaris_shutdown (manager, FALSE);
16889N/A #else
16889N/A g_debug ("GsmConsolekit: built without PolicyKit-gnome support - cannot restart system");
16889N/A return FALSE;
16889N/A@@ -1244,6 +1279,8 @@ gsm_consolekit_can_stop (GsmConsolekit *
16889N/A #ifdef HAVE_POLKIT_GNOME
16889N/A return gsm_consolekit_can_do_action (manager, "org.freedesktop.consolekit.system.stop") ||
16889N/A gsm_consolekit_can_do_action (manager, "org.freedesktop.consolekit.system.stop-multiple-users");
16889N/A+#elif defined (__sun) && defined (__SVR4)
16889N/A+ gsm_consolekit_check_solaris_shutdown (manager, FALSE);
16889N/A #else
16889N/A g_debug ("GsmConsolekit: built without PolicyKit-gnome support - cannot stop system");
16889N/A return FALSE;