[gdm] slave: pass seat id from product/simple slave to worker, via the direct session



commit 54abef19f0b338d7c57c4629f6ca2cf441bcb553
Author: Lennart Poettering <lennart poettering net>
Date:   Wed Jul 27 01:30:09 2011 +0200

    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)

 daemon/gdm-product-slave.c   |    3 ++
 daemon/gdm-session-direct.c  |   60 ++++++++++++++++++++++++++++++++++++++++++
 daemon/gdm-session-direct.h  |    2 +
 daemon/gdm-session-worker.c  |   12 +++++++-
 daemon/gdm-simple-slave.c    |    3 ++
 daemon/gdm-welcome-session.c |    1 +
 daemon/test-session.c        |    1 +
 7 files changed, 81 insertions(+), 1 deletions(-)
---
diff --git a/daemon/gdm-product-slave.c b/daemon/gdm-product-slave.c
index d56a74b..629c6e7 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 bb2bff8..9f750f2 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 8023bf9..e35fa35 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 c402e6c..1fe0aaf 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 b9165fd..873b7f9 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 8721fe7..26af552 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 fe78230..f75d5ed 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");



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