diff options
author | Ray Strode <rstrode@redhat.com> | 2009-06-16 14:05:33 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2009-08-03 15:50:57 -0400 |
commit | 87d99932e037456ffb6295a40a0609eebebd83ad (patch) | |
tree | 9e42e364ffa9b47446681fcdacd6a48aec0d0f28 | |
parent | a9788c2f3b0287697811351146be5313a7c0a810 (diff) | |
download | gdm-87d99932e037456ffb6295a40a0609eebebd83ad.tar.gz |
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.
-rw-r--r-- | common/gdm-marshal.list | 2 | ||||
-rw-r--r-- | daemon/ck-connector.c | 1 | ||||
-rw-r--r-- | daemon/gdm-display.c | 38 | ||||
-rw-r--r-- | daemon/gdm-display.h | 3 | ||||
-rw-r--r-- | daemon/gdm-display.xml | 3 | ||||
-rw-r--r-- | daemon/gdm-factory-slave.c | 4 | ||||
-rw-r--r-- | daemon/gdm-greeter-session.c | 2 | ||||
-rw-r--r-- | daemon/gdm-greeter-session.h | 1 | ||||
-rw-r--r-- | daemon/gdm-local-display-factory.c | 10 | ||||
-rw-r--r-- | daemon/gdm-simple-slave.c | 4 | ||||
-rw-r--r-- | daemon/gdm-slave.c | 41 | ||||
-rw-r--r-- | 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 97a7facd..a15b076b 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 6f966137..9fb933ba 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 45521ad5..0264dedc 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 6f240bbb..fffc1956 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 894d5c01..c8bd803d 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 f5fe731b..5cbcd742 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 eaec1c9e..073994b1 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 284ae247..aa111884 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 e2536b75..5fc1b897 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 e15cb9ca..0f2bd542 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 13864b77..e77a11cf 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 14558c13..f8f52166 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", |