gdm r6339 - in trunk: . daemon



Author: mccann
Date: Thu Jul 31 00:32:14 2008
New Revision: 6339
URL: http://svn.gnome.org/viewvc/gdm?rev=6339&view=rev

Log:
2008-07-30  William Jon McCann  <jmccann redhat com>

	* daemon/Makefile.am:
	* daemon/gdm-session-direct.c (setup_session_environment),
	(gdm_session_direct_close):
	* daemon/gdm-session-worker.c (open_ck_session),
	(register_ck_session), (session_worker_child_watch),
	(gdm_session_worker_start_user_session):
	Move ConsoleKit registration into the worker so that
	ConsoleKit can probe the caller (ie. session leader) correctly.



Modified:
   trunk/ChangeLog
   trunk/daemon/Makefile.am
   trunk/daemon/gdm-session-direct.c
   trunk/daemon/gdm-session-worker.c

Modified: trunk/daemon/Makefile.am
==============================================================================
--- trunk/daemon/Makefile.am	(original)
+++ trunk/daemon/Makefile.am	Thu Jul 31 00:32:14 2008
@@ -92,8 +92,6 @@
 
 test_session_SOURCES = 		\
 	test-session.c	 	\
-	ck-connector.h		\
-	ck-connector.c		\
 	gdm-session.c		\
 	gdm-session.h		\
 	gdm-session-private.h	\
@@ -124,12 +122,12 @@
 	simple-slave-main.c 		\
 	gdm-greeter-server.c		\
 	gdm-greeter-server.h		\
+	ck-connector.h			\
+	ck-connector.c			\
 	gdm-welcome-session.c		\
 	gdm-welcome-session.h		\
 	gdm-greeter-session.c		\
 	gdm-greeter-session.h		\
-	ck-connector.h			\
-	ck-connector.c			\
 	gdm-server.c			\
 	gdm-server.h			\
 	gdm-session.c			\
@@ -162,12 +160,12 @@
 	factory-slave-main.c 		\
 	gdm-greeter-server.c		\
 	gdm-greeter-server.h		\
+	ck-connector.h			\
+	ck-connector.c			\
 	gdm-welcome-session.c		\
 	gdm-welcome-session.h		\
 	gdm-greeter-session.c		\
 	gdm-greeter-session.h		\
-	ck-connector.h			\
-	ck-connector.c			\
 	gdm-server.c			\
 	gdm-server.h			\
 	gdm-session.c			\
@@ -195,8 +193,6 @@
 	product-slave-main.c 		\
 	gdm-server.c			\
 	gdm-server.h			\
-	ck-connector.h			\
-	ck-connector.c			\
 	gdm-session.c			\
 	gdm-session.h			\
 	gdm-session-private.h		\
@@ -225,10 +221,10 @@
 
 gdm_xdmcp_chooser_slave_SOURCES = 		\
 	xdmcp-chooser-slave-main.c 		\
-	ck-connector.h				\
-	ck-connector.c				\
 	gdm-chooser-server.c			\
 	gdm-chooser-server.h			\
+	ck-connector.h				\
+	ck-connector.c				\
 	gdm-welcome-session.c			\
 	gdm-welcome-session.h			\
 	gdm-chooser-session.c			\
@@ -248,6 +244,8 @@
 
 gdm_session_worker_SOURCES = 			\
 	session-worker-main.c 			\
+	ck-connector.h				\
+	ck-connector.c				\
 	gdm-session-settings.h			\
 	gdm-session-settings.c			\
 	gdm-session-auditor.h			\

Modified: trunk/daemon/gdm-session-direct.c
==============================================================================
--- trunk/daemon/gdm-session-direct.c	(original)
+++ trunk/daemon/gdm-session-direct.c	Thu Jul 31 00:32:14 2008
@@ -53,8 +53,6 @@
 #include "gdm-session-record.h"
 #include "gdm-session-worker-job.h"
 
-#include "ck-connector.h"
-
 #define GDM_SESSION_DBUS_PATH         "/org/gnome/DisplayManager/Session"
 #define GDM_SESSION_DBUS_INTERFACE    "org.gnome.DisplayManager.Session"
 #define GDM_SESSION_DBUS_ERROR_CANCEL "org.gnome.DisplayManager.Session.Error.Cancel"
@@ -77,7 +75,6 @@
 
         DBusMessage         *message_pending_reply;
         DBusConnection      *worker_connection;
-        CkConnector         *ckc;
 
         GdmSessionWorkerJob *job;
         GPid                 session_pid;
@@ -1928,73 +1925,6 @@
         return command;
 }
 
-static gboolean
-open_ck_session (GdmSessionDirect *session)
-{
-        struct passwd *pwent;
-        gboolean       ret;
-        int            res;
-        DBusError      error;
-        const char     *display_name;
-        const char     *display_device;
-        const char     *display_hostname;
-
-        if (session->priv->display_name != NULL) {
-                display_name = session->priv->display_name;
-        } else {
-                display_name = "";
-        }
-        if (session->priv->display_hostname != NULL) {
-                display_hostname = session->priv->display_hostname;
-        } else {
-                display_hostname = "";
-        }
-        if (session->priv->display_device != NULL) {
-                display_device = session->priv->display_device;
-        } else {
-                display_device = "";
-        }
-
-        g_assert (session->priv->selected_user != NULL);
-
-        pwent = getpwnam (session->priv->selected_user);
-        if (pwent == NULL) {
-                return FALSE;
-        }
-
-        session->priv->ckc = ck_connector_new ();
-        if (session->priv->ckc == NULL) {
-                g_warning ("Couldn't create new ConsoleKit connector");
-                goto out;
-        }
-
-        dbus_error_init (&error);
-        res = ck_connector_open_session_with_parameters (session->priv->ckc,
-                                                         &error,
-                                                         "unix-user", &pwent->pw_uid,
-                                                         "x11-display", &display_name,
-                                                         "x11-display-device", &display_device,
-                                                         "remote-host-name", &display_hostname,
-                                                         "is-local", &session->priv->display_is_local,
-                                                         NULL);
-
-        if (! res) {
-                if (dbus_error_is_set (&error)) {
-                        g_warning ("%s\n", error.message);
-                        dbus_error_free (&error);
-                } else {
-                        g_warning ("cannot open CK session: OOM, D-Bus system bus not available,\n"
-                                   "ConsoleKit not available or insufficient privileges.\n");
-                }
-                goto out;
-        }
-
-        ret = TRUE;
-
- out:
-        return ret;
-}
-
 static void
 gdm_session_direct_set_environment_variable (GdmSessionDirect *session,
                                              const char       *key,
@@ -2013,15 +1943,6 @@
 static void
 setup_session_environment (GdmSessionDirect *session)
 {
-        const char *session_cookie;
-        gboolean    res;
-
-        session_cookie = NULL;
-        res = open_ck_session (session);
-        if (res) {
-                session_cookie = ck_connector_get_cookie (session->priv->ckc);
-        }
-
         gdm_session_direct_set_environment_variable (session,
                                                      "GDMSESSION",
                                                      get_session_name (session));
@@ -2043,11 +1964,6 @@
         gdm_session_direct_set_environment_variable (session,
                                                      "DISPLAY",
                                                      session->priv->display_name);
-        if (session_cookie != NULL) {
-                gdm_session_direct_set_environment_variable (session,
-                                                             "XDG_SESSION_COOKIE",
-                                                             session_cookie);
-        }
 
         if (session->priv->user_x11_authority_file != NULL) {
                 gdm_session_direct_set_environment_variable (session,
@@ -2096,12 +2012,6 @@
 
         g_debug ("GdmSessionDirect: Closing session");
 
-        if (impl->priv->ckc != NULL) {
-                ck_connector_close_session (impl->priv->ckc, NULL);
-                ck_connector_unref (impl->priv->ckc);
-                impl->priv->ckc = NULL;
-        }
-
         if (impl->priv->job != NULL) {
                 if (impl->priv->is_running) {
                         gdm_session_record_logout (impl->priv->session_pid,

Modified: trunk/daemon/gdm-session-worker.c
==============================================================================
--- trunk/daemon/gdm-session-worker.c	(original)
+++ trunk/daemon/gdm-session-worker.c	Thu Jul 31 00:32:14 2008
@@ -45,6 +45,8 @@
 
 #include <X11/Xauth.h>
 
+#include "ck-connector.h"
+
 #include "gdm-session-worker.h"
 #include "gdm-marshal.h"
 
@@ -101,6 +103,7 @@
 
         int               exit_code;
 
+        CkConnector      *ckc;
         pam_handle_t     *pam_handle;
 
         GPid              child_pid;
@@ -160,6 +163,83 @@
         return error_quark;
 }
 
+static gboolean
+open_ck_session (GdmSessionWorker  *worker)
+{
+        struct passwd *pwent;
+        gboolean       ret;
+        int            res;
+        DBusError      error;
+        const char     *display_name;
+        const char     *display_device;
+        const char     *display_hostname;
+        gboolean        is_local;
+
+        if (worker->priv->x11_display_name != NULL) {
+                display_name = worker->priv->x11_display_name;
+        } else {
+                display_name = "";
+        }
+        if (worker->priv->hostname != NULL) {
+                display_hostname = worker->priv->hostname;
+        } else {
+                display_hostname = "";
+        }
+        if (worker->priv->display_device != NULL) {
+                display_device = worker->priv->display_device;
+        } else {
+                display_device = "";
+        }
+
+        g_assert (worker->priv->username != NULL);
+
+        /* FIXME: this isn't very good */
+        if (display_hostname == NULL
+            || display_hostname[0] == '\0'
+            || strcmp (display_hostname, "localhost") == 0) {
+                is_local = TRUE;
+        } else {
+                is_local = FALSE;
+        }
+
+        pwent = getpwnam (worker->priv->username);
+        if (pwent == NULL) {
+                return FALSE;
+        }
+
+        worker->priv->ckc = ck_connector_new ();
+        if (worker->priv->ckc == NULL) {
+                g_warning ("Couldn't create new ConsoleKit connector");
+                goto out;
+        }
+
+        dbus_error_init (&error);
+        res = ck_connector_open_session_with_parameters (worker->priv->ckc,
+                                                         &error,
+                                                         "unix-user", &pwent->pw_uid,
+                                                         "x11-display", &display_name,
+                                                         "x11-display-device", &display_device,
+                                                         "remote-host-name", &display_hostname,
+                                                         "is-local", &is_local,
+                                                         NULL);
+
+        if (! res) {
+                if (dbus_error_is_set (&error)) {
+                        g_warning ("%s\n", error.message);
+                        dbus_error_free (&error);
+                } else {
+                        g_warning ("cannot open CK session: OOM, D-Bus system bus not available,\n"
+                                   "ConsoleKit not available or insufficient privileges.\n");
+                }
+                goto out;
+        }
+
+        ret = TRUE;
+
+ out:
+        return ret;
+}
+
 /* adapted from glib script_execute */
 static void
 script_execute (const gchar *file,
@@ -1480,6 +1560,24 @@
 }
 
 static void
+register_ck_session (GdmSessionWorker *worker)
+{
+        const char *session_cookie;
+        gboolean    res;
+
+        session_cookie = NULL;
+        res = open_ck_session (worker);
+        if (res) {
+                session_cookie = ck_connector_get_cookie (worker->priv->ckc);
+        }
+        if (session_cookie != NULL) {
+                gdm_session_worker_set_environment_variable (worker,
+                                                             "XDG_SESSION_COOKIE",
+                                                             session_cookie);
+        }
+}
+
+static void
 session_worker_child_watch (GPid              pid,
                             int               status,
                             GdmSessionWorker *worker)
@@ -1507,6 +1605,12 @@
                                       num);
         }
 
+        if (worker->priv->ckc != NULL) {
+                ck_connector_close_session (worker->priv->ckc, NULL);
+                ck_connector_unref (worker->priv->ckc);
+                worker->priv->ckc = NULL;
+        }
+
         gdm_session_worker_uninitialize_pam (worker, PAM_SUCCESS);
 
         worker->priv->child_pid = -1;
@@ -1625,6 +1729,8 @@
         g_debug ("GdmSessionWorker: querying pam for user environment");
         gdm_session_worker_update_environment_from_pam (worker);
 
+        register_ck_session (worker);
+
         g_debug ("GdmSessionWorker: opening user session with program '%s'",
                  worker->priv->arguments[0]);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]