gdm r6339 - in trunk: . daemon
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gdm r6339 - in trunk: . daemon
- Date: Thu, 31 Jul 2008 00:32:14 +0000 (UTC)
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]