[gdm/display-configuration: 4/20] Pass session id from SessionToAdd to OpenSession



commit 87d99932e037456ffb6295a40a0609eebebd83ad
Author: Ray Strode <rstrode redhat com>
Date:   Tue Jun 16 14:05:33 2009 -0400

    Pass session id from SessionToAdd to OpenSession
    
    When ConsoleKit requests the display manager open
    a session with the "SessionToAdd" signal, it needs
    to get told during the OpenSession call which session
    is getting opened.

 common/gdm-marshal.list            |    2 +-
 daemon/ck-connector.c              |    1 +
 daemon/gdm-display.c               |   38 +++++++++++++++++++++++++++++++++
 daemon/gdm-display.h               |    3 ++
 daemon/gdm-display.xml             |    3 ++
 daemon/gdm-factory-slave.c         |    4 +++
 daemon/gdm-greeter-session.c       |    2 +
 daemon/gdm-greeter-session.h       |    1 +
 daemon/gdm-local-display-factory.c |   10 ++++++--
 daemon/gdm-simple-slave.c          |    4 +++
 daemon/gdm-slave.c                 |   41 ++++++++++++++++++++++++++++++++++++
 daemon/gdm-welcome-session.c       |   31 +++++++++++++++++++++++++++
 12 files changed, 136 insertions(+), 4 deletions(-)
---
diff --git a/common/gdm-marshal.list b/common/gdm-marshal.list
index 97a7fac..a15b076 100644
--- a/common/gdm-marshal.list
+++ b/common/gdm-marshal.list
@@ -5,4 +5,4 @@ VOID:STRING,STRING
 VOID:UINT,UINT
 VOID:STRING,INT
 VOID:DOUBLE
-VOID:BOOLEAN,STRING,POINTER,STRING,POINTER
+VOID:STRING,BOOLEAN,STRING,POINTER,STRING,POINTER
diff --git a/daemon/ck-connector.c b/daemon/ck-connector.c
index 6f96613..9fb933b 100644
--- a/daemon/ck-connector.c
+++ b/daemon/ck-connector.c
@@ -77,6 +77,7 @@ static struct {
         { "x11-display-device", DBUS_TYPE_STRING },
         { "x11-display",        DBUS_TYPE_STRING },
         { "seat-id",            DBUS_TYPE_STRING },
+        { "session",            DBUS_TYPE_STRING },
         { "remote-host-name",   DBUS_TYPE_STRING },
         { "session-type",       DBUS_TYPE_STRING },
         { "is-local",           DBUS_TYPE_BOOLEAN },
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index 45521ad..0264ded 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -51,6 +51,7 @@ static guint32 display_serial = 1;
 struct GdmDisplayPrivate
 {
         char                 *id;
+        char                 *session_id;
         char                 *seat_id;
 
         char                 *remote_hostname;
@@ -81,6 +82,7 @@ enum {
         PROP_ID,
         PROP_STATUS,
         PROP_SEAT_ID,
+        PROP_SESSION_ID,
         PROP_X11_COMMAND,
         PROP_REMOTE_HOSTNAME,
         PROP_X11_DISPLAY_NUMBER,
@@ -496,6 +498,20 @@ gdm_display_get_seat_id (GdmDisplay *display,
        return TRUE;
 }
 
+gboolean
+gdm_display_get_session_id (GdmDisplay *display,
+                            char      **session_id,
+                            GError    **error)
+{
+       g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
+
+       if (session_id != NULL) {
+               *session_id = g_strdup (display->priv->session_id);
+       }
+
+       return TRUE;
+}
+
 static gboolean
 finish_idle (GdmDisplay *display)
 {
@@ -845,6 +861,14 @@ _gdm_display_set_seat_id (GdmDisplay     *display,
 }
 
 static void
+_gdm_display_set_session_id (GdmDisplay     *display,
+                             const char     *session_id)
+{
+        g_free (display->priv->session_id);
+        display->priv->session_id = g_strdup (session_id);
+}
+
+static void
 _gdm_display_set_remote_hostname (GdmDisplay     *display,
                                   const char     *hostname)
 {
@@ -927,6 +951,9 @@ gdm_display_set_property (GObject        *object,
         case PROP_SEAT_ID:
                 _gdm_display_set_seat_id (self, g_value_get_string (value));
                 break;
+        case PROP_SESSION_ID:
+                _gdm_display_set_session_id (self, g_value_get_string (value));
+                break;
         case PROP_REMOTE_HOSTNAME:
                 _gdm_display_set_remote_hostname (self, g_value_get_string (value));
                 break;
@@ -980,6 +1007,9 @@ gdm_display_get_property (GObject        *object,
         case PROP_SEAT_ID:
                 g_value_set_string (value, self->priv->seat_id);
                 break;
+        case PROP_SESSION_ID:
+                g_value_set_string (value, self->priv->session_id);
+                break;
         case PROP_REMOTE_HOSTNAME:
                 g_value_set_string (value, self->priv->remote_hostname);
                 break;
@@ -1161,6 +1191,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                               NULL,
                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
         g_object_class_install_property (object_class,
+                                         PROP_SESSION_ID,
+                                         g_param_spec_string ("session-id",
+                                                              "session id",
+                                                              "session id",
+                                                              NULL,
+                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+        g_object_class_install_property (object_class,
                                          PROP_X11_COOKIE,
                                          g_param_spec_string ("x11-cookie",
                                                               "cookie",
@@ -1243,6 +1280,7 @@ gdm_display_finalize (GObject *object)
         g_free (display->priv->id);
         g_free (display->priv->x11_command);
         g_free (display->priv->seat_id);
+        g_free (display->priv->session_id);
         g_free (display->priv->remote_hostname);
         g_free (display->priv->x11_display_name);
         g_free (display->priv->x11_cookie);
diff --git a/daemon/gdm-display.h b/daemon/gdm-display.h
index 6f240bb..fffc195 100644
--- a/daemon/gdm-display.h
+++ b/daemon/gdm-display.h
@@ -117,6 +117,9 @@ gboolean            gdm_display_get_x11_display_name           (GdmDisplay *disp
 gboolean            gdm_display_get_seat_id                    (GdmDisplay *display,
                                                                 char      **seat_id,
                                                                 GError    **error);
+gboolean            gdm_display_get_session_id                 (GdmDisplay *display,
+                                                                char      **session_id,
+                                                                GError    **error);
 gboolean            gdm_display_is_local                       (GdmDisplay *display,
                                                                 gboolean   *local,
                                                                 GError    **error);
diff --git a/daemon/gdm-display.xml b/daemon/gdm-display.xml
index 894d5c0..c8bd803 100644
--- a/daemon/gdm-display.xml
+++ b/daemon/gdm-display.xml
@@ -22,6 +22,9 @@
     <method name="GetSeatId">
       <arg name="seat_id" direction="out" type="s"/>
     </method>
+    <method name="GetSessionId">
+      <arg name="session_id" direction="out" type="s"/>
+    </method>
     <method name="GetRemoteHostname">
       <arg name="hostname" direction="out" type="s"/>
     </method>
diff --git a/daemon/gdm-factory-slave.c b/daemon/gdm-factory-slave.c
index f5fe731..5cbcd74 100644
--- a/daemon/gdm-factory-slave.c
+++ b/daemon/gdm-factory-slave.c
@@ -462,6 +462,7 @@ run_greeter (GdmFactorySlave *slave)
         char          *display_id;
         char          *display_name;
         char          *seat_id;
+        char          *session_id;
         char          *display_device;
         char          *display_hostname;
         char          *auth_file;
@@ -474,6 +475,7 @@ run_greeter (GdmFactorySlave *slave)
         display_id = NULL;
         display_name = NULL;
         seat_id = NULL;
+        session_id = NULL;
         auth_file = NULL;
         display_device = NULL;
         display_hostname = NULL;
@@ -484,6 +486,7 @@ run_greeter (GdmFactorySlave *slave)
                       "display-id", &display_id,
                       "display-name", &display_name,
                       "seat-id", &seat_id,
+                      "session-id", &session_id,
                       "display-hostname", &display_hostname,
                       "display-x11-authority-file", &auth_file,
                       NULL);
@@ -541,6 +544,7 @@ run_greeter (GdmFactorySlave *slave)
         g_debug ("GdmFactorySlave: Creating greeter on %s %s", display_name, display_device);
         slave->priv->greeter = gdm_greeter_session_new (display_name,
                                                         seat_id,
+                                                        session_id,
                                                         display_device,
                                                         display_hostname,
                                                         display_is_local,
diff --git a/daemon/gdm-greeter-session.c b/daemon/gdm-greeter-session.c
index eaec1c9..073994b 100644
--- a/daemon/gdm-greeter-session.c
+++ b/daemon/gdm-greeter-session.c
@@ -141,6 +141,7 @@ gdm_greeter_session_finalize (GObject *object)
 GdmGreeterSession *
 gdm_greeter_session_new (const char *display_name,
                          const char *seat_id,
+                         const char *session_id,
                          const char *display_device,
                          const char *display_hostname,
                          gboolean    display_is_local,
@@ -156,6 +157,7 @@ gdm_greeter_session_new (const char *display_name,
                                "register-ck-session", TRUE,
                                "x11-display-name", display_name,
                                "x11-display-seat-id", seat_id,
+                               "x11-display-session-id", session_id,
                                "x11-display-device", display_device,
                                "x11-display-hostname", display_hostname,
                                "x11-display-is-local", display_is_local,
diff --git a/daemon/gdm-greeter-session.h b/daemon/gdm-greeter-session.h
index 284ae24..aa11188 100644
--- a/daemon/gdm-greeter-session.h
+++ b/daemon/gdm-greeter-session.h
@@ -51,6 +51,7 @@ typedef struct
 GType                 gdm_greeter_session_get_type           (void);
 GdmGreeterSession *   gdm_greeter_session_new                (const char        *display_name,
                                                               const char        *seat_id,
+                                                              const char        *session_id,
                                                               const char        *display_device,
                                                               const char        *display_hostname,
                                                               gboolean           display_is_local,
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index e2536b7..5fc1b89 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -481,6 +481,7 @@ strrep (char* in, char** out, char* old, char* new)
 
 static void
 seat_session_to_add (DBusGProxy             *seat_proxy,
+                     const char             *ssid,
                      gboolean                is_dynamic,
                      const char             *type,
                      GHashTable             *display_variables,
@@ -562,6 +563,8 @@ seat_session_to_add (DBusGProxy             *seat_proxy,
                 return;
         }
 
+        g_object_set (display, "session-id", ssid, NULL);
+
         sid = dbus_g_proxy_get_path (seat_proxy);
         if (IS_STR_SET (sid))
                 g_object_set (display, "seat-id", sid, NULL);
@@ -625,15 +628,16 @@ manage_static_sessions_per_seat (GdmLocalDisplayFactory *factory,
                 return;
         }
 
-        dbus_g_object_register_marshaller (gdm_marshal_VOID__BOOLEAN_STRING_POINTER_STRING_POINTER,
+        dbus_g_object_register_marshaller (gdm_marshal_VOID__STRING_BOOLEAN_STRING_POINTER_STRING_POINTER,
                                            G_TYPE_NONE,
-                                           G_TYPE_BOOLEAN, G_TYPE_STRING,
+                                           G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING,
                                            GDM_DBUS_TYPE_G_STRING_STRING_HASHTABLE,
                                            G_TYPE_STRING,
                                            GDM_DBUS_TYPE_G_STRING_STRING_HASHTABLE,
                                            G_TYPE_INVALID);
         dbus_g_proxy_add_signal (proxy,
                                  "SessionToAdd",
+                                 G_TYPE_STRING,
                                  G_TYPE_BOOLEAN,
                                  G_TYPE_STRING,
                                  GDM_DBUS_TYPE_G_STRING_STRING_HASHTABLE,
@@ -642,7 +646,7 @@ manage_static_sessions_per_seat (GdmLocalDisplayFactory *factory,
                                  G_TYPE_INVALID);
         dbus_g_proxy_add_signal (proxy,
                                  "SessionToRemove",
-                                 G_TYPE_INT,
+                                 G_TYPE_STRING,
                                  G_TYPE_INVALID);
         dbus_g_proxy_connect_signal (proxy,
                                      "SessionToAdd",
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index e15cb9c..0f2bd54 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -869,6 +869,7 @@ start_greeter (GdmSimpleSlave *slave)
         char          *display_id;
         char          *display_name;
         char          *seat_id;
+        char          *session_id;
         char          *display_device;
         char          *display_hostname;
         char          *auth_file;
@@ -882,6 +883,7 @@ start_greeter (GdmSimpleSlave *slave)
         display_id = NULL;
         display_name = NULL;
         seat_id = NULL;
+        session_id = NULL;
         auth_file = NULL;
         display_device = NULL;
         display_hostname = NULL;
@@ -892,6 +894,7 @@ start_greeter (GdmSimpleSlave *slave)
                       "display-is-dynamic", &display_is_dynamic,
                       "display-name", &display_name,
                       "display-seat-id", &seat_id,
+                      "display-session-id", &session_id,
                       "display-hostname", &display_hostname,
                       "display-x11-authority-file", &auth_file,
                       NULL);
@@ -974,6 +977,7 @@ start_greeter (GdmSimpleSlave *slave)
         g_debug ("GdmSimpleSlave: Creating greeter on %s %s %s", display_name, display_device, display_hostname);
         slave->priv->greeter = gdm_greeter_session_new (display_name,
                                                         seat_id,
+                                                        session_id,
                                                         display_device,
                                                         display_hostname,
                                                         display_is_local,
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 13864b7..e77a11c 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -85,6 +85,7 @@ struct GdmSlavePrivate
         gboolean         display_is_dynamic;
         gboolean         display_is_parented;
         char            *display_seat_id;
+        char            *display_session_id;
         char            *display_x11_authority_file;
         char            *parent_display_name;
         char            *parent_display_x11_authority_file;
@@ -104,6 +105,7 @@ enum {
         PROP_DISPLAY_IS_LOCAL,
         PROP_DISPLAY_IS_DYNAMIC,
         PROP_DISPLAY_SEAT_ID,
+        PROP_DISPLAY_SESSION_ID,
         PROP_DISPLAY_X11_AUTHORITY_FILE
 };
 
@@ -675,6 +677,24 @@ gdm_slave_real_start (GdmSlave *slave)
                 return FALSE;
         }
 
+        error = NULL;
+        res = dbus_g_proxy_call (slave->priv->display_proxy,
+                                 "GetSessionId",
+                                 &error,
+                                 G_TYPE_INVALID,
+                                 G_TYPE_STRING, &slave->priv->display_session_id,
+                                 G_TYPE_INVALID);
+        if (! res) {
+                if (error != NULL) {
+                        g_warning ("Failed to get value: %s", error->message);
+                        g_error_free (error);
+                } else {
+                        g_warning ("Failed to get value");
+                }
+
+                return FALSE;
+        }
+
         return TRUE;
 }
 
@@ -1231,6 +1251,14 @@ _gdm_slave_set_display_seat_id (GdmSlave   *slave,
 }
 
 static void
+_gdm_slave_set_display_session_id (GdmSlave   *slave,
+                                   const char *id)
+{
+        g_free (slave->priv->display_session_id);
+        slave->priv->display_session_id = g_strdup (id);
+}
+
+static void
 _gdm_slave_set_display_is_local (GdmSlave   *slave,
                                  gboolean    is)
 {
@@ -1270,6 +1298,9 @@ gdm_slave_set_property (GObject      *object,
         case PROP_DISPLAY_SEAT_ID:
                 _gdm_slave_set_display_seat_id (self, g_value_get_string (value));
                 break;
+        case PROP_DISPLAY_SESSION_ID:
+                _gdm_slave_set_display_session_id (self, g_value_get_string (value));
+                break;
         case PROP_DISPLAY_X11_AUTHORITY_FILE:
                 _gdm_slave_set_display_x11_authority_file (self, g_value_get_string (value));
                 break;
@@ -1311,6 +1342,9 @@ gdm_slave_get_property (GObject    *object,
         case PROP_DISPLAY_SEAT_ID:
                 g_value_set_string (value, self->priv->display_seat_id);
                 break;
+        case PROP_DISPLAY_SESSION_ID:
+                g_value_set_string (value, self->priv->display_session_id);
+                break;
         case PROP_DISPLAY_X11_AUTHORITY_FILE:
                 g_value_set_string (value, self->priv->display_x11_authority_file);
                 break;
@@ -1431,6 +1465,13 @@ gdm_slave_class_init (GdmSlaveClass *klass)
                                                               NULL,
                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
         g_object_class_install_property (object_class,
+                                         PROP_DISPLAY_SESSION_ID,
+                                         g_param_spec_string ("display-session-id",
+                                                              "",
+                                                              "",
+                                                              NULL,
+                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+        g_object_class_install_property (object_class,
                                          PROP_DISPLAY_X11_AUTHORITY_FILE,
                                          g_param_spec_string ("display-x11-authority-file",
                                                               "",
diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c
index 14558c1..f8f5216 100644
--- a/daemon/gdm-welcome-session.c
+++ b/daemon/gdm-welcome-session.c
@@ -66,6 +66,7 @@ struct GdmWelcomeSessionPrivate
 
         char           *x11_display_name;
         char           *x11_display_seat_id;
+        char           *x11_display_session_id;
         char           *x11_display_device;
         char           *x11_display_hostname;
         char           *x11_authority_file;
@@ -88,6 +89,7 @@ enum {
         PROP_0,
         PROP_X11_DISPLAY_NAME,
         PROP_X11_DISPLAY_SEAT_ID,
+        PROP_X11_DISPLAY_SESSION_ID,
         PROP_X11_DISPLAY_DEVICE,
         PROP_X11_DISPLAY_HOSTNAME,
         PROP_X11_AUTHORITY_FILE,
@@ -138,6 +140,7 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
         const char    *hostname;
         const char    *x11_display_device;
         const char    *seat_id;
+        const char    *session_id;
         int            res;
         gboolean       ret;
         DBusError      error;
@@ -179,6 +182,12 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
                 seat_id = "";
         }
 
+        if (welcome_session->priv->x11_display_session_id != NULL) {
+                session_id = welcome_session->priv->x11_display_session_id;
+        } else {
+                session_id = "";
+        }
+
         g_debug ("GdmWelcomeSession: Opening ConsoleKit session for user:%d x11-display:'%s' x11-display-device:'%s' remote-host-name:'%s' is-local:%d is-dynamic:%d",
                  pwent->pw_uid,
                  welcome_session->priv->x11_display_name,
@@ -194,6 +203,7 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
                                                          "session-type", &session_type,
                                                          "x11-display", &welcome_session->priv->x11_display_name,
                                                          "seat-id", &seat_id,
+                                                         "session", &session_id,
                                                          "x11-display-device", &x11_display_device,
                                                          "remote-host-name", &hostname,
                                                          "is-local", &welcome_session->priv->x11_display_is_local,
@@ -902,6 +912,14 @@ _gdm_welcome_session_set_x11_display_seat_id (GdmWelcomeSession *welcome_session
 }
 
 static void
+_gdm_welcome_session_set_x11_display_session_id (GdmWelcomeSession *welcome_session,
+                                                 const char        *ssid)
+{
+        g_free (welcome_session->priv->x11_display_session_id);
+        welcome_session->priv->x11_display_session_id = g_strdup (ssid);
+}
+
+static void
 _gdm_welcome_session_set_x11_display_hostname (GdmWelcomeSession *welcome_session,
                                                const char        *name)
 {
@@ -1011,6 +1029,9 @@ gdm_welcome_session_set_property (GObject      *object,
         case PROP_X11_DISPLAY_SEAT_ID:
                 _gdm_welcome_session_set_x11_display_seat_id (self, g_value_get_string (value));
                 break;
+        case PROP_X11_DISPLAY_SESSION_ID:
+                _gdm_welcome_session_set_x11_display_session_id (self, g_value_get_string (value));
+                break;
         case PROP_X11_DISPLAY_HOSTNAME:
                 _gdm_welcome_session_set_x11_display_hostname (self, g_value_get_string (value));
                 break;
@@ -1073,6 +1094,9 @@ gdm_welcome_session_get_property (GObject    *object,
         case PROP_X11_DISPLAY_SEAT_ID:
                 g_value_set_string (value, self->priv->x11_display_seat_id);
                 break;
+        case PROP_X11_DISPLAY_SESSION_ID:
+                g_value_set_string (value, self->priv->x11_display_session_id);
+                break;
         case PROP_X11_DISPLAY_HOSTNAME:
                 g_value_set_string (value, self->priv->x11_display_hostname);
                 break;
@@ -1159,6 +1183,13 @@ gdm_welcome_session_class_init (GdmWelcomeSessionClass *klass)
                                                               NULL,
                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
         g_object_class_install_property (object_class,
+                                         PROP_X11_DISPLAY_SESSION_ID,
+                                         g_param_spec_string ("x11-display-session-id",
+                                                              "session id",
+                                                              "session id",
+                                                              NULL,
+                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+        g_object_class_install_property (object_class,
                                          PROP_X11_DISPLAY_HOSTNAME,
                                          g_param_spec_string ("x11-display-hostname",
                                                               "hostname",



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