Blame SOURCES/set-reauth-mode-when-reauthenticating.patch

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