diff options
author | Ray Strode <rstrode@redhat.com> | 2011-05-18 16:11:32 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2011-05-19 11:53:16 -0400 |
commit | 29020f729640983f5604f90b2a8a792f26b1d33e (patch) | |
tree | 1ff1360acab2a4641a89cf96b205a2ba2fe451fb /daemon | |
parent | 20ddf1aa6f455221c340d973f8e49d6a4e823147 (diff) | |
download | gdm-29020f729640983f5604f90b2a8a792f26b1d33e.tar.gz |
daemon,greeter: login after PAM has had time to talk to user
The greeter currently gives the go ahead for the session to start
as soon as the user has been authorized. Then the slave quickly
runs through the remaining hoops and the greeter gets promptly
killed.
This commit changes the logic so that the slave doesn't get the
go ahead to start the session until all the hoops have been
run through, and potential messages have been queued, and displayed.
https://bugzilla.gnome.org/show_bug.cgi?id=583856
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/gdm-greeter-server.c | 6 | ||||
-rw-r--r-- | daemon/gdm-simple-slave.c | 52 |
2 files changed, 29 insertions, 29 deletions
diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c index 6a021d1a..1fe3aa2d 100644 --- a/daemon/gdm-greeter-server.c +++ b/daemon/gdm-greeter-server.c @@ -289,9 +289,9 @@ gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server, } void -gdm_greeter_server_user_authorized (GdmGreeterServer *greeter_server) +gdm_greeter_server_session_opened (GdmGreeterServer *greeter_server) { - send_dbus_void_signal (greeter_server, "UserAuthorized"); + send_dbus_void_signal (greeter_server, "SessionOpened"); } /* Note: Use abstract sockets like dbus does by default on Linux. Abstract @@ -732,7 +732,7 @@ do_introspect (DBusConnection *connection, " </signal>\n" " <signal name=\"AuthenticationFailed\">\n" " </signal>\n" - " <signal name=\"UserAuthorized\">\n" + " <signal name=\"SessionOpened\">\n" " </signal>\n" " </interface>\n"); diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c index ddf7a63e..1feef466 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c @@ -106,6 +106,7 @@ G_DEFINE_TYPE (GdmSimpleSlave, gdm_simple_slave, GDM_TYPE_SLAVE) static void create_new_session (GdmSimpleSlave *slave); static void destroy_session (GdmSimpleSlave *slave); static void start_greeter (GdmSimpleSlave *slave); +static void queue_start_session (GdmSimpleSlave *slave); static void on_session_started (GdmSession *session, @@ -359,28 +360,11 @@ on_session_authentication_failed (GdmSession *session, } static void -gdm_simple_slave_accredit_when_ready (GdmSimpleSlave *slave) +gdm_simple_slave_start_session_when_ready (GdmSimpleSlave *slave) { if (slave->priv->start_session_when_ready) { - char *ssid; - char *username; - int cred_flag; - slave->priv->waiting_to_start_session = FALSE; - - username = gdm_session_direct_get_username (slave->priv->session); - - ssid = gdm_slave_get_primary_session_id_for_user (GDM_SLAVE (slave), username); - if (ssid != NULL && ssid [0] != '\0') { - /* FIXME: we don't yet support refresh */ - cred_flag = GDM_SESSION_CRED_ESTABLISH; - } else { - cred_flag = GDM_SESSION_CRED_ESTABLISH; - } - g_free (ssid); - g_free (username); - - gdm_session_accredit (GDM_SESSION (slave->priv->session), cred_flag); + queue_start_session (slave); } else { slave->priv->waiting_to_start_session = TRUE; } @@ -390,13 +374,23 @@ static void on_session_authorized (GdmSession *session, GdmSimpleSlave *slave) { - if (slave->priv->greeter_server != NULL) { - gdm_greeter_server_user_authorized (slave->priv->greeter_server); - gdm_simple_slave_accredit_when_ready (slave); + char *ssid; + char *username; + int cred_flag; + + username = gdm_session_direct_get_username (slave->priv->session); + + ssid = gdm_slave_get_primary_session_id_for_user (GDM_SLAVE (slave), username); + if (ssid != NULL && ssid [0] != '\0') { + /* FIXME: we don't yet support refresh */ + cred_flag = GDM_SESSION_CRED_ESTABLISH; } else { - slave->priv->start_session_when_ready = TRUE; - gdm_simple_slave_accredit_when_ready (slave); + cred_flag = GDM_SESSION_CRED_ESTABLISH; } + g_free (ssid); + g_free (username); + + gdm_session_accredit (GDM_SESSION (slave->priv->session), cred_flag); } static void @@ -554,7 +548,13 @@ on_session_opened (GdmSession *session, gdm_simple_slave_grant_console_permissions (slave); #endif /* HAVE_LOGINDEVPERM */ - queue_start_session (slave); + if (slave->priv->greeter_server != NULL) { + gdm_greeter_server_session_opened (slave->priv->greeter_server); + gdm_simple_slave_start_session_when_ready (slave); + } else { + slave->priv->start_session_when_ready = TRUE; + gdm_simple_slave_start_session_when_ready (slave); + } } static void @@ -1078,7 +1078,7 @@ on_start_session_when_ready (GdmGreeterServer *session, slave->priv->start_session_when_ready = TRUE; if (slave->priv->waiting_to_start_session) { - gdm_simple_slave_accredit_when_ready (slave); + gdm_simple_slave_start_session_when_ready (slave); } } |