[Xfce4-commits] <xfce4-session:master> Don't use "unix-session" authorization with PolicyKit (bug #6817).

Jannis Pohlmann noreply at xfce.org
Sat Nov 13 13:00:02 CET 2010


Updating branch refs/heads/master
         to 394a43c96387ec1c294105b6fa8ea610d5e381dc (commit)
       from 70bd65ab94c5935bd3cfa2beab1d2af4ec60e938 (commit)

commit 394a43c96387ec1c294105b6fa8ea610d5e381dc
Author: Jannis Pohlmann <jannis at xfce.org>
Date:   Sat Nov 13 12:57:19 2010 +0100

    Don't use "unix-session" authorization with PolicyKit (bug #6817).
    
    This fixes suspend/hibernate in xfce4-session-logout. For some reason
    PolicyKit either has a broken "unix-session" implementation or no
    implementation at all. So most GNOME apps seem to use "unix-process".

 NEWS                                 |    6 ++
 xfce4-session/xfsm-shutdown-helper.c |  135 ++++++++--------------------------
 2 files changed, 37 insertions(+), 104 deletions(-)

diff --git a/NEWS b/NEWS
index 7b4724c..91ea154 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+4.7.2
+=====
+- Do not try "unix-session" authorization with PolicyKit as this 
+  seems to be either broken or not implemented in PolicyKit (bug #6817).
+  This fixes suspend/hibernate in xfce4-session-logout.
+
 4.7.1
 =====
 - Add support for new gnome-keyring (bugs #5912, #5137 and #6073).
diff --git a/xfce4-session/xfsm-shutdown-helper.c b/xfce4-session/xfsm-shutdown-helper.c
index e6c2817..9f902ad 100644
--- a/xfce4-session/xfsm-shutdown-helper.c
+++ b/xfce4-session/xfsm-shutdown-helper.c
@@ -331,11 +331,9 @@ init_dbus_gtypes (void)
 static gboolean
 xfsm_shutdown_helper_init_polkit_data (XfsmShutdownHelper *helper)
 {
-#ifdef ENABLE_CONSOLE_KIT
-  const gchar *consolekit_cookie;
-#endif
   GValue hash_elem = { 0 };
-  gboolean subject_created = FALSE;
+  guint64 start_time;
+  gint pid;
 
   helper->polkit_proxy =
     dbus_g_proxy_new_for_name (helper->system_bus,
@@ -346,112 +344,41 @@ xfsm_shutdown_helper_init_polkit_data (XfsmShutdownHelper *helper)
   if (!helper->polkit_proxy)
     return FALSE;
 
-#ifdef ENABLE_CONSOLE_KIT
-  /**
-   * This variable should be set by the session manager or by
-   * the login manager (gdm?). under clean Xfce environment
-   * it is set by the session manager (4.8 and above)
-   * since we don't have a login manager, yet!
-   **/
-  consolekit_cookie = g_getenv ("XDG_SESSION_COOKIE");
-
-  if (consolekit_cookie)
-    {
-      DBusGProxy *proxy;
-      GError *error = NULL;
-      gboolean ret;
-      gchar *consolekit_session;
-
-      proxy  = dbus_g_proxy_new_for_name (helper->system_bus,
-                                          "org.freedesktop.ConsoleKit",
-                                          "/org/freedesktop/ConsoleKit/Manager",
-                                          "org.freedesktop.ConsoleKit.Manager");
+  pid = getpid ();
 
-      if (proxy)
-        {
-          ret = dbus_g_proxy_call (proxy, "GetSessionForCookie", &error,
-                                   G_TYPE_STRING, consolekit_cookie,
-                                   G_TYPE_INVALID,
-                                   DBUS_TYPE_G_OBJECT_PATH, &consolekit_session,
-                                   G_TYPE_INVALID);
+  start_time = get_start_time_for_pid (pid);
 
-          if (G_LIKELY (ret))
-            {
-              GValue val  = { 0 };
+  if (G_LIKELY (start_time != 0))
+    {
+      GValue val = { 0 }, pid_val = { 0 }, start_time_val = { 0 };
 
-              helper->polkit_subject = g_value_array_new (2);
-              helper->polkit_subject_hash = g_hash_table_new_full (g_str_hash,
-                                                                   g_str_equal,
-                                                                   g_free, NULL);
-              g_value_init (&val, G_TYPE_STRING);
-              g_value_set_string (&val, "unix-session");
-              g_value_array_append (helper->polkit_subject, &val);
+      helper->polkit_subject = g_value_array_new (2);
+      helper->polkit_subject_hash = g_hash_table_new_full (g_str_hash,
+                                                           g_str_equal,
+                                                           g_free, NULL);
+      g_value_init (&val, G_TYPE_STRING);
+      g_value_set_string (&val, "unix-process");
+      g_value_array_append (helper->polkit_subject, &val);
 
-              g_value_unset (&val);
-              g_value_init (&val, G_TYPE_STRING);
-              g_value_set_string (&val, consolekit_session);
+      g_value_unset (&val);
 
-              g_hash_table_insert (helper->polkit_subject_hash, g_strdup ("session-id"), &val);
+      g_value_init (&pid_val, G_TYPE_UINT);
+      g_value_set_uint (&pid_val, pid);
+      g_hash_table_insert (helper->polkit_subject_hash, g_strdup ("pid"), &pid_val);
 
-              g_free (consolekit_session);
-              subject_created = TRUE;
-            }
-          else if (error)
-            {
-              g_warning ("'GetSessionForCookie' failed : %s", error->message);
-              g_error_free (error);
-            }
-          g_object_unref (proxy);
-        }
+      g_value_init (&start_time_val, G_TYPE_UINT64);
+      g_value_set_uint64 (&start_time_val, start_time);
+      g_hash_table_insert (helper->polkit_subject_hash, g_strdup ("start-time"), &start_time_val);
     }
-#endif
-
-  /**
-   * We failed to get valid session data, then we try
-   * to check authentication using the pid.
-   **/
-  if (subject_created == FALSE)
+  else
     {
-      gint pid;
-      guint64 start_time;
-
-      pid = getpid ();
-
-      start_time = get_start_time_for_pid (pid);
-
-      if (G_LIKELY (start_time != 0))
-        {
-          GValue val = { 0 }, pid_val = { 0 }, start_time_val = { 0 };
-
-          helper->polkit_subject = g_value_array_new (2);
-          helper->polkit_subject_hash = g_hash_table_new_full (g_str_hash,
-                                                               g_str_equal,
-                                                               g_free, NULL);
-          g_value_init (&val, G_TYPE_STRING);
-          g_value_set_string (&val, "unix-process");
-          g_value_array_append (helper->polkit_subject, &val);
-
-          g_value_unset (&val);
-
-          g_value_init (&pid_val, G_TYPE_UINT);
-          g_value_set_uint (&pid_val, pid);
-          g_hash_table_insert (helper->polkit_subject_hash, g_strdup ("pid"), &pid_val);
-
-          g_value_init (&start_time_val, G_TYPE_UINT64);
-          g_value_set_uint64 (&start_time_val, start_time);
-          g_hash_table_insert (helper->polkit_subject_hash, g_strdup ("start-time"), &start_time_val);
-        }
-      else
-        {
-          g_warning ("Unable to create Polkit subject");
-          return FALSE;
-        }
+      g_warning ("Unable to create Polkit subject");
+      return FALSE;
     }
+  
 
-  g_value_init (&hash_elem,
-  dbus_g_type_get_map ("GHashTable",
-                       G_TYPE_STRING,
-                       G_TYPE_VALUE));
+  g_value_init (&hash_elem, 
+                dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE));
 
   g_value_set_static_boxed (&hash_elem, helper->polkit_subject_hash);
   g_value_array_append (helper->polkit_subject, &hash_elem);



More information about the Xfce4-commits mailing list