Blob Blame History Raw
From 2c961b4794fe99571b62f2d8f970a97d5f7bb57f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
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