summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-07-27 01:30:09 +0200
committerLennart Poettering <lennart@poettering.net>2012-02-07 22:57:10 +0100
commit54abef19f0b338d7c57c4629f6ca2cf441bcb553 (patch)
treec76aa34c88d5828062ecf8a87113378b191564ec
parentc77c03e6ca67ea670de89babbbfd9648b2fec9bd (diff)
downloadgdm-54abef19f0b338d7c57c4629f6ca2cf441bcb553.tar.gz
slave: pass seat id from product/simple slave to worker, via the direct session
Pass seat id from product and simple slave to the direct sessions created by it (along with the other display meta data we pass already). Pass seat id from session to worker (via D-Bus) along with the other display meta data. We need the seat information for the PAM conversation (later patch) hence we need to pass it from the slaves down to the workers. (Note that the seat ID has always been passed from the display to the slave, we just need to pass it on the worker now, so that the chain is complete: display → slave → session → worker)
-rw-r--r--daemon/gdm-product-slave.c3
-rw-r--r--daemon/gdm-session-direct.c60
-rw-r--r--daemon/gdm-session-direct.h2
-rw-r--r--daemon/gdm-session-worker.c12
-rw-r--r--daemon/gdm-simple-slave.c3
-rw-r--r--daemon/gdm-welcome-session.c1
-rw-r--r--daemon/test-session.c1
7 files changed, 81 insertions, 1 deletions
diff --git a/daemon/gdm-product-slave.c b/daemon/gdm-product-slave.c
index d56a74bc..629c6e7a 100644
--- a/daemon/gdm-product-slave.c
+++ b/daemon/gdm-product-slave.c
@@ -998,6 +998,7 @@ create_new_session (GdmProductSlave *slave)
char *display_name;
char *display_hostname;
char *display_device;
+ char *display_seat_id;
char *display_x11_authority_file;
g_debug ("GdmProductSlave: Creating new session");
@@ -1008,6 +1009,7 @@ create_new_session (GdmProductSlave *slave)
"display-hostname", &display_hostname,
"display-is-local", &display_is_local,
"display-x11-authority-file", &display_x11_authority_file,
+ "display-seat-id", &display_seat_id,
NULL);
/* FIXME: we don't yet have a display device! */
@@ -1017,6 +1019,7 @@ create_new_session (GdmProductSlave *slave)
display_name,
display_hostname,
display_device,
+ display_seat_id,
display_x11_authority_file,
display_is_local);
g_free (display_id);
diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index bb2bff83..9f750f25 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -103,6 +103,7 @@ struct _GdmSessionDirectPrivate
char *display_name;
char *display_hostname;
char *display_device;
+ char *display_seat_id;
char *display_x11_authority_file;
gboolean display_is_local;
@@ -121,6 +122,7 @@ enum {
PROP_DISPLAY_HOSTNAME,
PROP_DISPLAY_IS_LOCAL,
PROP_DISPLAY_DEVICE,
+ PROP_DISPLAY_SEAT_ID,
PROP_DISPLAY_X11_AUTHORITY_FILE,
PROP_USER_X11_AUTHORITY_FILE,
};
@@ -1389,6 +1391,7 @@ do_introspect (DBusConnection *connection,
" <arg name=\"service_name\" type=\"s\"/>\n"
" <arg name=\"x11_display_name\" type=\"s\"/>\n"
" <arg name=\"display_device\" type=\"s\"/>\n"
+ " <arg name=\"display_seat\" type=\"s\"/>\n"
" <arg name=\"hostname\" type=\"s\"/>\n"
" <arg name=\"x11_authority_file\" type=\"s\"/>\n"
" </signal>\n"
@@ -1396,6 +1399,7 @@ do_introspect (DBusConnection *connection,
" <arg name=\"service_name\" type=\"s\"/>\n"
" <arg name=\"x11_display_name\" type=\"s\"/>\n"
" <arg name=\"display_device\" type=\"s\"/>\n"
+ " <arg name=\"display_seat\" type=\"s\"/>\n"
" <arg name=\"hostname\" type=\"s\"/>\n"
" <arg name=\"x11_authority_file\" type=\"s\"/>\n"
" <arg name=\"username\" type=\"s\"/>\n"
@@ -1404,6 +1408,7 @@ do_introspect (DBusConnection *connection,
" <arg name=\"service_name\" type=\"s\"/>\n"
" <arg name=\"x11_display_name\" type=\"s\"/>\n"
" <arg name=\"display_device\" type=\"s\"/>\n"
+ " <arg name=\"display_seat\" type=\"s\"/>\n"
" <arg name=\"hostname\" type=\"s\"/>\n"
" <arg name=\"x11_authority_file\" type=\"s\"/>\n"
" <arg name=\"log_file\" type=\"s\"/>\n"
@@ -1975,6 +1980,7 @@ send_setup (GdmSessionDirect *session,
DBusMessageIter iter;
const char *display_name;
const char *display_device;
+ const char *display_seat_id;
const char *display_hostname;
const char *display_x11_authority_file;
GdmSessionConversation *conversation;
@@ -1996,6 +2002,11 @@ send_setup (GdmSessionDirect *session,
} else {
display_device = "";
}
+ if (session->priv->display_seat_id != NULL) {
+ display_seat_id = session->priv->display_seat_id;
+ } else {
+ display_seat_id = "";
+ }
if (session->priv->display_x11_authority_file != NULL) {
display_x11_authority_file = session->priv->display_x11_authority_file;
} else {
@@ -2012,6 +2023,7 @@ send_setup (GdmSessionDirect *session,
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_seat_id);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_hostname);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_x11_authority_file);
@@ -2031,6 +2043,7 @@ send_setup_for_user (GdmSessionDirect *session,
DBusMessageIter iter;
const char *display_name;
const char *display_device;
+ const char *display_seat_id;
const char *display_hostname;
const char *display_x11_authority_file;
const char *selected_user;
@@ -2053,6 +2066,11 @@ send_setup_for_user (GdmSessionDirect *session,
} else {
display_device = "";
}
+ if (session->priv->display_seat_id != NULL) {
+ display_seat_id = session->priv->display_seat_id;
+ } else {
+ display_seat_id = "";
+ }
if (session->priv->display_x11_authority_file != NULL) {
display_x11_authority_file = session->priv->display_x11_authority_file;
} else {
@@ -2074,6 +2092,7 @@ send_setup_for_user (GdmSessionDirect *session,
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_seat_id);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_hostname);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_x11_authority_file);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &selected_user);
@@ -2095,6 +2114,7 @@ send_setup_for_program (GdmSessionDirect *session,
DBusMessageIter iter;
const char *display_name;
const char *display_device;
+ const char *display_seat_id;
const char *display_hostname;
const char *display_x11_authority_file;
GdmSessionConversation *conversation;
@@ -2116,6 +2136,11 @@ send_setup_for_program (GdmSessionDirect *session,
} else {
display_device = "";
}
+ if (session->priv->display_seat_id != NULL) {
+ display_seat_id = session->priv->display_seat_id;
+ } else {
+ display_seat_id = "";
+ }
if (session->priv->display_x11_authority_file != NULL) {
display_x11_authority_file = session->priv->display_x11_authority_file;
} else {
@@ -2132,6 +2157,7 @@ send_setup_for_program (GdmSessionDirect *session,
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_seat_id);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_hostname);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_x11_authority_file);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &log_file);
@@ -2587,6 +2613,14 @@ gdm_session_direct_get_display_device (GdmSessionDirect *session)
return g_strdup (session->priv->display_device);
}
+char *
+gdm_session_direct_get_display_seat_id (GdmSessionDirect *session)
+{
+ g_return_val_if_fail (session != NULL, NULL);
+
+ return g_strdup (session->priv->display_seat_id);
+}
+
gboolean
gdm_session_direct_bypasses_xsession (GdmSessionDirect *session_direct)
{
@@ -2754,6 +2788,14 @@ _gdm_session_direct_set_display_device (GdmSessionDirect *session,
}
static void
+_gdm_session_direct_set_display_seat_id (GdmSessionDirect *session,
+ const char *name)
+{
+ g_free (session->priv->display_seat_id);
+ session->priv->display_seat_id = g_strdup (name);
+}
+
+static void
_gdm_session_direct_set_user_x11_authority_file (GdmSessionDirect *session,
const char *name)
{
@@ -2799,6 +2841,9 @@ gdm_session_direct_set_property (GObject *object,
case PROP_DISPLAY_DEVICE:
_gdm_session_direct_set_display_device (self, g_value_get_string (value));
break;
+ case PROP_DISPLAY_SEAT_ID:
+ _gdm_session_direct_set_display_seat_id (self, g_value_get_string (value));
+ break;
case PROP_USER_X11_AUTHORITY_FILE:
_gdm_session_direct_set_user_x11_authority_file (self, g_value_get_string (value));
break;
@@ -2837,6 +2882,9 @@ gdm_session_direct_get_property (GObject *object,
case PROP_DISPLAY_DEVICE:
g_value_set_string (value, self->priv->display_device);
break;
+ case PROP_DISPLAY_SEAT_ID:
+ g_value_set_string (value, self->priv->display_seat_id);
+ break;
case PROP_USER_X11_AUTHORITY_FILE:
g_value_set_string (value, self->priv->user_x11_authority_file);
break;
@@ -2875,6 +2923,9 @@ gdm_session_direct_dispose (GObject *object)
g_free (session->priv->display_device);
session->priv->display_device = NULL;
+ g_free (session->priv->display_seat_id);
+ session->priv->display_seat_id = NULL;
+
g_free (session->priv->display_x11_authority_file);
session->priv->display_x11_authority_file = NULL;
@@ -3063,6 +3114,13 @@ gdm_session_direct_class_init (GdmSessionDirectClass *session_class)
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_DISPLAY_SEAT_ID,
+ g_param_spec_string ("display-seat-id",
+ "display seat id",
+ "display seat id",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
dbus_g_object_type_install_info (GDM_TYPE_SESSION_DIRECT, &dbus_glib_gdm_session_direct_object_info);
}
@@ -3072,6 +3130,7 @@ gdm_session_direct_new (const char *display_id,
const char *display_name,
const char *display_hostname,
const char *display_device,
+ const char *display_seat_id,
const char *display_x11_authority_file,
gboolean display_is_local)
{
@@ -3082,6 +3141,7 @@ gdm_session_direct_new (const char *display_id,
"display-name", display_name,
"display-hostname", display_hostname,
"display-device", display_device,
+ "display-seat-id", display_seat_id,
"display-x11-authority-file", display_x11_authority_file,
"display-is-local", display_is_local,
NULL);
diff --git a/daemon/gdm-session-direct.h b/daemon/gdm-session-direct.h
index 8023bf93..e35fa35a 100644
--- a/daemon/gdm-session-direct.h
+++ b/daemon/gdm-session-direct.h
@@ -52,11 +52,13 @@ GdmSessionDirect * gdm_session_direct_new (const char *disp
const char *display_name,
const char *display_hostname,
const char *display_device,
+ const char *display_seat_id,
const char *display_x11_authority_file,
gboolean display_is_local) G_GNUC_MALLOC;
char * gdm_session_direct_get_username (GdmSessionDirect *session_direct);
char * gdm_session_direct_get_display_device (GdmSessionDirect *session_direct);
+char * gdm_session_direct_get_display_seat_id (GdmSessionDirect *session_direct);
gboolean gdm_session_direct_bypasses_xsession (GdmSessionDirect *session_direct);
/* Exported methods */
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index c402e6c2..1fe0aaf5 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -118,6 +118,7 @@ struct GdmSessionWorkerPrivate
char *x11_display_name;
char *x11_authority_file;
char *display_device;
+ char *display_seat_id;
char *hostname;
char *username;
char *log_file;
@@ -2494,6 +2495,7 @@ on_setup (GdmSessionWorker *worker,
const char *x11_display_name;
const char *x11_authority_file;
const char *console;
+ const char *seat_id;
const char *hostname;
dbus_bool_t res;
@@ -2508,6 +2510,7 @@ on_setup (GdmSessionWorker *worker,
DBUS_TYPE_STRING, &service,
DBUS_TYPE_STRING, &x11_display_name,
DBUS_TYPE_STRING, &console,
+ DBUS_TYPE_STRING, &seat_id,
DBUS_TYPE_STRING, &hostname,
DBUS_TYPE_STRING, &x11_authority_file,
DBUS_TYPE_INVALID);
@@ -2516,6 +2519,7 @@ on_setup (GdmSessionWorker *worker,
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
worker->priv->display_device = g_strdup (console);
+ worker->priv->display_seat_id = g_strdup (seat_id);
worker->priv->hostname = g_strdup (hostname);
worker->priv->username = NULL;
@@ -2536,6 +2540,7 @@ on_setup_for_user (GdmSessionWorker *worker,
const char *x11_display_name;
const char *x11_authority_file;
const char *console;
+ const char *seat_id;
const char *hostname;
const char *username;
dbus_bool_t res;
@@ -2551,6 +2556,7 @@ on_setup_for_user (GdmSessionWorker *worker,
DBUS_TYPE_STRING, &service,
DBUS_TYPE_STRING, &x11_display_name,
DBUS_TYPE_STRING, &console,
+ DBUS_TYPE_STRING, &seat_id,
DBUS_TYPE_STRING, &hostname,
DBUS_TYPE_STRING, &x11_authority_file,
DBUS_TYPE_STRING, &username,
@@ -2560,6 +2566,7 @@ on_setup_for_user (GdmSessionWorker *worker,
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
worker->priv->display_device = g_strdup (console);
+ worker->priv->display_seat_id = g_strdup (seat_id);
worker->priv->hostname = g_strdup (hostname);
worker->priv->username = g_strdup (username);
@@ -2598,6 +2605,7 @@ on_setup_for_program (GdmSessionWorker *worker,
char *service;
char *x11_display_name;
char *console;
+ char *seat_id;
char *hostname;
char *x11_authority_file;
char *log_file;
@@ -2614,6 +2622,7 @@ on_setup_for_program (GdmSessionWorker *worker,
DBUS_TYPE_STRING, &service,
DBUS_TYPE_STRING, &x11_display_name,
DBUS_TYPE_STRING, &console,
+ DBUS_TYPE_STRING, &seat_id,
DBUS_TYPE_STRING, &hostname,
DBUS_TYPE_STRING, &x11_authority_file,
DBUS_TYPE_STRING, &log_file,
@@ -2627,6 +2636,7 @@ on_setup_for_program (GdmSessionWorker *worker,
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->hostname = g_strdup (hostname);
worker->priv->display_device = g_strdup (console);
+ worker->priv->display_seat_id = g_strdup (seat_id);
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
worker->priv->log_file = g_strdup (log_file);
worker->priv->is_program_session = TRUE;
@@ -2945,6 +2955,7 @@ gdm_session_worker_finalize (GObject *object)
g_free (worker->priv->x11_display_name);
g_free (worker->priv->x11_authority_file);
g_free (worker->priv->display_device);
+ g_free (worker->priv->display_seat_id);
g_free (worker->priv->hostname);
g_free (worker->priv->username);
g_free (worker->priv->server_address);
@@ -2964,4 +2975,3 @@ gdm_session_worker_new (const char *address)
return GDM_SESSION_WORKER (object);
}
-
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index b9165fd1..873b7f97 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -750,6 +750,7 @@ create_new_session (GdmSimpleSlave *slave)
char *display_name;
char *display_hostname;
char *display_device;
+ char *display_seat_id;
char *display_x11_authority_file;
g_debug ("GdmSimpleSlave: Creating new session");
@@ -760,6 +761,7 @@ create_new_session (GdmSimpleSlave *slave)
"display-hostname", &display_hostname,
"display-is-local", &display_is_local,
"display-x11-authority-file", &display_x11_authority_file,
+ "display-seat-id", &display_seat_id,
NULL);
display_device = NULL;
@@ -771,6 +773,7 @@ create_new_session (GdmSimpleSlave *slave)
display_name,
display_hostname,
display_device,
+ display_seat_id,
display_x11_authority_file,
display_is_local);
g_free (display_id);
diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c
index 8721fe72..26af552b 100644
--- a/daemon/gdm-welcome-session.c
+++ b/daemon/gdm-welcome-session.c
@@ -849,6 +849,7 @@ gdm_welcome_session_start (GdmWelcomeSession *welcome_session)
welcome_session->priv->x11_display_name,
welcome_session->priv->x11_display_hostname,
welcome_session->priv->x11_display_device,
+ welcome_session->priv->x11_display_seat_id,
welcome_session->priv->x11_authority_file,
welcome_session->priv->x11_display_is_local));
diff --git a/daemon/test-session.c b/daemon/test-session.c
index fe78230f..f75d5ed9 100644
--- a/daemon/test-session.c
+++ b/daemon/test-session.c
@@ -268,6 +268,7 @@ main (int argc,
":0",
g_get_host_name (),
ttyname (STDIN_FILENO),
+ "",
getenv("XAUTHORITY"),
TRUE);
g_debug ("GdmSessionDirect object created successfully");