From 2c961b4794fe99571b62f2d8f970a97d5f7bb57f Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 20 Nov 2013 14:25:22 -0500 Subject: [PATCH] session: set reauth sessions as such Reauthentication sessions need subtly different behavior than initial login sessions with regard to pam. For instance, we want to refresh existing kerberos credentials instead of establishing new kerberos credentials. GDM has all the code in place to do this properly, but lacks the actual call to mark reauthentication sessions as such. This commit adds the missing call. https://bugzilla.gnome.org/show_bug.cgi?id=691269 --- daemon/gdm-session.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c index d74bed6..e24ec7c 100644 --- a/daemon/gdm-session.c +++ b/daemon/gdm-session.c @@ -1746,60 +1746,62 @@ worker_died (GdmSessionWorkerJob *job, g_debug ("GdmSession: Emitting conversation-stopped signal"); g_signal_emit (self, signals[CONVERSATION_STOPPED], 0, conversation->service_name); if (self->priv->user_verifier_interface != NULL) { gdm_dbus_user_verifier_emit_conversation_stopped (self->priv->user_verifier_interface, conversation->service_name); } g_object_unref (conversation->job); if (conversation->is_stopping) { g_object_unref (conversation->job); conversation->job = NULL; } free_conversation (conversation); } static GdmSessionConversation * start_conversation (GdmSession *self, const char *service_name) { GdmSessionConversation *conversation; char *job_name; conversation = g_new0 (GdmSessionConversation, 1); conversation->session = g_object_ref (self); conversation->service_name = g_strdup (service_name); conversation->worker_pid = -1; conversation->job = gdm_session_worker_job_new (); gdm_session_worker_job_set_server_address (conversation->job, g_dbus_server_get_client_address (self->priv->worker_server)); + gdm_session_worker_job_set_for_reauth (conversation->job, + self->priv->verification_mode == GDM_SESSION_VERIFICATION_MODE_REAUTHENTICATE); if (self->priv->conversation_environment != NULL) { gdm_session_worker_job_set_environment (conversation->job, (const char * const *) self->priv->conversation_environment); } g_signal_connect (conversation->job, "started", G_CALLBACK (worker_started), conversation); g_signal_connect (conversation->job, "exited", G_CALLBACK (worker_exited), conversation); g_signal_connect (conversation->job, "died", G_CALLBACK (worker_died), conversation); job_name = g_strdup_printf ("gdm-session-worker [pam/%s]", service_name); if (!gdm_session_worker_job_start (conversation->job, job_name)) { g_object_unref (conversation->job); g_free (conversation->service_name); g_free (conversation); g_free (job_name); return NULL; } g_free (job_name); -- 1.8.4.2