Blame SOURCES/0002-manager-session-Add-some-debugging-around-starting-r.patch

81f0aa
From d3b60b5211d804e23c663d053c5b511dede22a28 Mon Sep 17 00:00:00 2001
81f0aa
From: Iain Lane <iainl@gnome.org>
81f0aa
Date: Thu, 31 Jan 2019 10:52:35 +0000
81f0aa
Subject: [PATCH 2/4] manager,session: Add some debugging around starting
81f0aa
 reauthentication
81f0aa
81f0aa
There's a bug right now dealing with timed login and reauthentication,
81f0aa
but it's not clear what's going on by looking at the logs.
81f0aa
81f0aa
This commit sprinkles some more logging throughout the code, to make
81f0aa
the bug easier to track.
81f0aa
---
81f0aa
 daemon/gdm-manager.c | 46 ++++++++++++++++++++++++++++++++++++++------
81f0aa
 daemon/gdm-session.c | 25 ++++++++++++++++++++----
81f0aa
 2 files changed, 61 insertions(+), 10 deletions(-)
81f0aa
81f0aa
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
81f0aa
index b2d0578f5..0cc06a978 100644
81f0aa
--- a/daemon/gdm-manager.c
81f0aa
+++ b/daemon/gdm-manager.c
81f0aa
@@ -340,77 +340,94 @@ session_unlock (GdmManager *manager,
81f0aa
                                              "org.freedesktop.login1.Manager",
81f0aa
                                              "UnlockSession",
81f0aa
                                              g_variant_new ("(s)", ssid),
81f0aa
                                              NULL, /* expected reply */
81f0aa
                                              G_DBUS_CALL_FLAGS_NONE,
81f0aa
                                              -1,
81f0aa
                                              NULL,
81f0aa
                                              &error);
81f0aa
         if (reply == NULL) {
81f0aa
                 g_debug ("GdmManager: logind 'UnlockSession' %s raised:\n %s\n\n",
81f0aa
                          g_dbus_error_get_remote_error (error), error->message);
81f0aa
                 g_error_free (error);
81f0aa
                 return FALSE;
81f0aa
         }
81f0aa
 
81f0aa
         g_variant_unref (reply);
81f0aa
 
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 static GdmSession *
81f0aa
 find_session_for_user_on_seat (GdmManager *manager,
81f0aa
                                const char *username,
81f0aa
                                const char *seat_id,
81f0aa
                                GdmSession *dont_count_session)
81f0aa
 {
81f0aa
         GList *node;
81f0aa
 
81f0aa
         for (node = manager->priv->user_sessions; node != NULL; node = node->next) {
81f0aa
                 GdmSession *candidate_session = node->data;
81f0aa
-                const char *candidate_username, *candidate_seat_id;
81f0aa
+                const char *candidate_username, *candidate_seat_id, *candidate_session_id;
81f0aa
 
81f0aa
-                if (candidate_session == dont_count_session)
81f0aa
+                candidate_session_id = gdm_session_get_session_id (candidate_session);
81f0aa
+
81f0aa
+                if (candidate_session == dont_count_session) {
81f0aa
+                        g_debug ("GdmSession: Ignoring session %s as requested",
81f0aa
+                                 candidate_session_id);
81f0aa
                         continue;
81f0aa
+                }
81f0aa
 
81f0aa
-                if (!gdm_session_is_running (candidate_session))
81f0aa
+                if (!gdm_session_is_running (candidate_session)) {
81f0aa
+                        g_debug ("GdmSession: Ignoring session %s as it isn't running",
81f0aa
+                                 candidate_session_id);
81f0aa
                         continue;
81f0aa
+                }
81f0aa
 
81f0aa
                 candidate_username = gdm_session_get_username (candidate_session);
81f0aa
                 candidate_seat_id = gdm_session_get_display_seat_id (candidate_session);
81f0aa
 
81f0aa
+                g_debug ("GdmManager: Considering session %s on seat %s belonging to user %s",
81f0aa
+                         candidate_session_id,
81f0aa
+                         candidate_seat_id,
81f0aa
+                         candidate_username);
81f0aa
+
81f0aa
                 if (g_strcmp0 (candidate_username, username) == 0 &&
81f0aa
                     g_strcmp0 (candidate_seat_id, seat_id) == 0) {
81f0aa
+                        g_debug ("GdmManager: yes, found session %s", candidate_session_id);
81f0aa
                         return candidate_session;
81f0aa
                 }
81f0aa
+
81f0aa
+                g_debug ("GdmManager: no, will not use session %s", candidate_session_id);
81f0aa
         }
81f0aa
 
81f0aa
+        g_debug ("GdmManager: no matching sessions found");
81f0aa
         return NULL;
81f0aa
 }
81f0aa
 
81f0aa
 static gboolean
81f0aa
 is_remote_session (GdmManager  *self,
81f0aa
                    const char  *session_id,
81f0aa
                    GError     **error)
81f0aa
 {
81f0aa
         char *seat;
81f0aa
         int ret;
81f0aa
         gboolean is_remote;
81f0aa
 
81f0aa
         /* FIXME: The next release of logind is going to have explicit api for
81f0aa
          * checking remoteness.
81f0aa
          */
81f0aa
         seat = NULL;
81f0aa
         ret = sd_session_get_seat (session_id, &seat;;
81f0aa
 
81f0aa
         if (ret < 0 && ret != -ENOENT) {
81f0aa
                 g_debug ("GdmManager: Error while retrieving seat for session %s: %s",
81f0aa
                          session_id, strerror (-ret));
81f0aa
         }
81f0aa
 
81f0aa
         if (seat != NULL) {
81f0aa
                 is_remote = FALSE;
81f0aa
                 free (seat);
81f0aa
         } else {
81f0aa
                 is_remote = TRUE;
81f0aa
         }
81f0aa
 
81f0aa
@@ -840,62 +857,66 @@ gdm_manager_handle_open_session (GdmDBusManager        *manager,
81f0aa
         if (display == NULL) {
81f0aa
                 g_dbus_method_invocation_return_error_literal (invocation,
81f0aa
                                                                G_DBUS_ERROR,
81f0aa
                                                                G_DBUS_ERROR_ACCESS_DENIED,
81f0aa
                                                                _("No session available"));
81f0aa
 
81f0aa
                 return TRUE;
81f0aa
         }
81f0aa
 
81f0aa
 #ifdef HAVE_LIBXDMCP
81f0aa
         if (GDM_IS_XDMCP_CHOOSER_DISPLAY (display)) {
81f0aa
                 GdmLaunchEnvironment *launch_environment;
81f0aa
 
81f0aa
                 g_object_get (display, "launch-environment", &launch_environment, NULL);
81f0aa
 
81f0aa
                 if (launch_environment != NULL) {
81f0aa
                         session = gdm_launch_environment_get_session (launch_environment);
81f0aa
                 }
81f0aa
 
81f0aa
                 if (session == NULL) {
81f0aa
                         g_dbus_method_invocation_return_error_literal (invocation,
81f0aa
                                                                        G_DBUS_ERROR,
81f0aa
                                                                        G_DBUS_ERROR_ACCESS_DENIED,
81f0aa
                                                                        _("Chooser session unavailable"));
81f0aa
                         return TRUE;
81f0aa
                 }
81f0aa
         }
81f0aa
 #endif
81f0aa
         if (session == NULL) {
81f0aa
                 session = get_user_session_for_display (display);
81f0aa
+                g_debug ("GdmSession: Considering session %s for username %s",
81f0aa
+                         gdm_session_get_session_id (session),
81f0aa
+                         gdm_session_get_username (session));
81f0aa
 
81f0aa
                 if (gdm_session_is_running (session)) {
81f0aa
+                        g_debug ("GdmSession: the session is running, and therefore can't be used");
81f0aa
                         g_dbus_method_invocation_return_error_literal (invocation,
81f0aa
                                                                        G_DBUS_ERROR,
81f0aa
                                                                        G_DBUS_ERROR_ACCESS_DENIED,
81f0aa
                                                                        _("Can only be called before user is logged in"));
81f0aa
                         return TRUE;
81f0aa
                 }
81f0aa
         }
81f0aa
 
81f0aa
         allowed_user = gdm_session_get_allowed_user (session);
81f0aa
 
81f0aa
         if (uid != allowed_user) {
81f0aa
                 g_dbus_method_invocation_return_error_literal (invocation,
81f0aa
                                                                G_DBUS_ERROR,
81f0aa
                                                                G_DBUS_ERROR_ACCESS_DENIED,
81f0aa
                                                                _("Caller not GDM"));
81f0aa
                 return TRUE;
81f0aa
         }
81f0aa
 
81f0aa
         address = gdm_session_get_server_address (session);
81f0aa
 
81f0aa
         if (address == NULL) {
81f0aa
                 g_dbus_method_invocation_return_error_literal (invocation,
81f0aa
                                                                G_DBUS_ERROR,
81f0aa
                                                                G_DBUS_ERROR_ACCESS_DENIED,
81f0aa
                                                                _("Unable to open private communication channel"));
81f0aa
                 return TRUE;
81f0aa
         }
81f0aa
 
81f0aa
         gdm_dbus_manager_complete_open_session (GDM_DBUS_MANAGER (manager),
81f0aa
                                                 invocation,
81f0aa
@@ -1017,60 +1038,64 @@ open_temporary_reauthentication_channel (GdmManager            *self,
81f0aa
                                          char                  *seat_id,
81f0aa
                                          char                  *session_id,
81f0aa
                                          GPid                   pid,
81f0aa
                                          uid_t                  uid,
81f0aa
                                          gboolean               is_remote)
81f0aa
 {
81f0aa
         GdmSession *session;
81f0aa
         char **environment;
81f0aa
         const char *display, *auth_file;
81f0aa
         const char *address;
81f0aa
 
81f0aa
         /* Note we're just using a minimal environment here rather than the
81f0aa
          * session's environment because the caller is unprivileged and the
81f0aa
          * associated worker will be privileged */
81f0aa
         environment = g_get_environ ();
81f0aa
         display = "";
81f0aa
         auth_file = "/dev/null";
81f0aa
 
81f0aa
         session = gdm_session_new (GDM_SESSION_VERIFICATION_MODE_REAUTHENTICATE,
81f0aa
                                    uid,
81f0aa
                                    display,
81f0aa
                                    NULL,
81f0aa
                                    NULL,
81f0aa
                                    seat_id,
81f0aa
                                    auth_file,
81f0aa
                                    is_remote == FALSE,
81f0aa
                                    (const char * const *)
81f0aa
                                    environment);
81f0aa
         g_strfreev (environment);
81f0aa
 
81f0aa
+        g_debug ("GdmSession: Created session for temporary reauthentication channel for user %d (seat %s)",
81f0aa
+                 (int) uid,
81f0aa
+                 seat_id);
81f0aa
+
81f0aa
         g_object_set_data_full (G_OBJECT (session),
81f0aa
                                 "caller-session-id",
81f0aa
                                 g_strdup (session_id),
81f0aa
                                 (GDestroyNotify)
81f0aa
                                 g_free);
81f0aa
         g_object_set_data (G_OBJECT (session),
81f0aa
                            "caller-pid",
81f0aa
                            GUINT_TO_POINTER (pid));
81f0aa
         g_hash_table_insert (self->priv->transient_sessions,
81f0aa
                              GINT_TO_POINTER (pid),
81f0aa
                              session);
81f0aa
 
81f0aa
         g_signal_connect (session,
81f0aa
                           "client-connected",
81f0aa
                           G_CALLBACK (on_reauthentication_client_connected),
81f0aa
                           self);
81f0aa
         g_signal_connect (session,
81f0aa
                           "client-disconnected",
81f0aa
                           G_CALLBACK (on_reauthentication_client_disconnected),
81f0aa
                           self);
81f0aa
         g_signal_connect (session,
81f0aa
                           "client-rejected",
81f0aa
                           G_CALLBACK (on_reauthentication_client_rejected),
81f0aa
                           self);
81f0aa
         g_signal_connect (session,
81f0aa
                           "cancelled",
81f0aa
                           G_CALLBACK (on_reauthentication_cancelled),
81f0aa
                           self);
81f0aa
         g_signal_connect (session,
81f0aa
                           "conversation-started",
81f0aa
@@ -1096,65 +1121,67 @@ gdm_manager_handle_open_reauthentication_channel (GdmDBusManager        *manager
81f0aa
                                                   const char            *username)
81f0aa
 {
81f0aa
         GdmManager       *self = GDM_MANAGER (manager);
81f0aa
         const char       *sender;
81f0aa
         GdmDisplay       *display = NULL;
81f0aa
         GdmSession       *session;
81f0aa
         GDBusConnection  *connection;
81f0aa
         char             *seat_id = NULL;
81f0aa
         char             *session_id = NULL;
81f0aa
         GPid              pid = 0;
81f0aa
         uid_t             uid = (uid_t) -1;
81f0aa
         gboolean          is_login_screen = FALSE;
81f0aa
         gboolean          is_remote = FALSE;
81f0aa
 
81f0aa
         g_debug ("GdmManager: trying to open reauthentication channel for user %s", username);
81f0aa
 
81f0aa
         sender = g_dbus_method_invocation_get_sender (invocation);
81f0aa
         connection = g_dbus_method_invocation_get_connection (invocation);
81f0aa
         get_display_and_details_for_bus_sender (self, connection, sender, &display, &seat_id, &session_id, NULL, &pid, &uid, &is_login_screen, &is_remote);
81f0aa
 
81f0aa
         if (session_id == NULL || pid == 0 || uid == (uid_t) -1) {
81f0aa
                 g_dbus_method_invocation_return_error_literal (invocation,
81f0aa
                                                                G_DBUS_ERROR,
81f0aa
                                                                G_DBUS_ERROR_ACCESS_DENIED,
81f0aa
                                                                _("No session available"));
81f0aa
 
81f0aa
                 return TRUE;
81f0aa
         }
81f0aa
 
81f0aa
         if (is_login_screen) {
81f0aa
+                g_debug ("GdmManager: looking for login screen session for user %s on seat %s", username, seat_id);
81f0aa
                 session = find_session_for_user_on_seat (self,
81f0aa
                                                          username,
81f0aa
                                                          seat_id,
81f0aa
                                                          NULL);
81f0aa
         } else {
81f0aa
+                g_debug ("GdmManager: looking for user session on display");
81f0aa
                 session = get_user_session_for_display (display);
81f0aa
         }
81f0aa
 
81f0aa
         if (session != NULL && gdm_session_is_running (session)) {
81f0aa
                 gdm_session_start_reauthentication (session, pid, uid);
81f0aa
                 g_hash_table_insert (self->priv->open_reauthentication_requests,
81f0aa
                                      GINT_TO_POINTER (pid),
81f0aa
                                      invocation);
81f0aa
         } else if (is_login_screen) {
81f0aa
                 g_dbus_method_invocation_return_error_literal (invocation,
81f0aa
                                                                G_DBUS_ERROR,
81f0aa
                                                                G_DBUS_ERROR_ACCESS_DENIED,
81f0aa
                                                                "Login screen only allowed to open reauthentication channels for running sessions");
81f0aa
                 return TRUE;
81f0aa
         } else {
81f0aa
                 char *address;
81f0aa
                 address = open_temporary_reauthentication_channel (self,
81f0aa
                                                                    seat_id,
81f0aa
                                                                    session_id,
81f0aa
                                                                    pid,
81f0aa
                                                                    uid,
81f0aa
                                                                    is_remote);
81f0aa
                 gdm_dbus_manager_complete_open_reauthentication_channel (GDM_DBUS_MANAGER (manager),
81f0aa
                                                                          invocation,
81f0aa
                                                                          address);
81f0aa
                 g_free (address);
81f0aa
         }
81f0aa
 
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
@@ -2087,107 +2114,107 @@ on_session_client_ready_for_session_to_start (GdmSession      *session,
81f0aa
         if (client_is_ready) {
81f0aa
                 g_debug ("GdmManager: Will start session when ready");
81f0aa
         } else {
81f0aa
                 g_debug ("GdmManager: Will start session when ready and told");
81f0aa
         }
81f0aa
 
81f0aa
         waiting_to_start_user_session = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (session),
81f0aa
                                                                        "waiting-to-start"));
81f0aa
 
81f0aa
         g_object_set_data (G_OBJECT (session),
81f0aa
                            "start-when-ready",
81f0aa
                            GINT_TO_POINTER (client_is_ready));
81f0aa
 
81f0aa
         if (client_is_ready && waiting_to_start_user_session) {
81f0aa
                 start_user_session_if_ready (manager, session, service_name);
81f0aa
         }
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 on_session_client_connected (GdmSession      *session,
81f0aa
                              GCredentials    *credentials,
81f0aa
                              GPid             pid_of_client,
81f0aa
                              GdmManager      *manager)
81f0aa
 {
81f0aa
         GdmDisplay *display;
81f0aa
         char    *username;
81f0aa
         int      delay;
81f0aa
         gboolean enabled;
81f0aa
         gboolean allow_timed_login = FALSE;
81f0aa
 
81f0aa
-        g_debug ("GdmManager: client connected");
81f0aa
+        g_debug ("GdmManager: client with pid %d connected", (int) pid_of_client);
81f0aa
 
81f0aa
         display = get_display_for_user_session (session);
81f0aa
 
81f0aa
         if (display == NULL) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         if (!display_is_on_seat0 (display)) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
 #ifdef WITH_PLYMOUTH
81f0aa
         if (manager->priv->plymouth_is_running) {
81f0aa
                 plymouth_quit_with_transition ();
81f0aa
                 manager->priv->plymouth_is_running = FALSE;
81f0aa
         }
81f0aa
 #endif
81f0aa
 
81f0aa
         g_object_get (G_OBJECT (display), "allow-timed-login", &allow_timed_login, NULL);
81f0aa
 
81f0aa
         if (!allow_timed_login) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         enabled = get_timed_login_details (manager, &username, &delay);
81f0aa
 
81f0aa
         if (! enabled) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         gdm_session_set_timed_login_details (session, username, delay);
81f0aa
 
81f0aa
         g_debug ("GdmManager: Starting automatic login conversation (for timed login)");
81f0aa
         gdm_session_start_conversation (session, "gdm-autologin");
81f0aa
 
81f0aa
         g_free (username);
81f0aa
 
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 on_session_client_disconnected (GdmSession   *session,
81f0aa
                                 GCredentials *credentials,
81f0aa
                                 GPid          pid_of_client,
81f0aa
                                 GdmManager   *manager)
81f0aa
 {
81f0aa
-        g_debug ("GdmManager: client disconnected");
81f0aa
+        g_debug ("GdmManager: client with pid %d disconnected", (int) pid_of_client);
81f0aa
 }
81f0aa
 
81f0aa
 typedef struct
81f0aa
 {
81f0aa
         GdmManager *manager;
81f0aa
         GdmSession *session;
81f0aa
         guint idle_id;
81f0aa
 } ResetSessionOperation;
81f0aa
 
81f0aa
 static void
81f0aa
 destroy_reset_session_operation (ResetSessionOperation *operation)
81f0aa
 {
81f0aa
         g_object_set_data (G_OBJECT (operation->session),
81f0aa
                            "reset-session-operation",
81f0aa
                            NULL);
81f0aa
         g_object_unref (operation->session);
81f0aa
         g_slice_free (ResetSessionOperation, operation);
81f0aa
 }
81f0aa
 
81f0aa
 static gboolean
81f0aa
 on_reset_session (ResetSessionOperation *operation)
81f0aa
 {
81f0aa
         gdm_session_reset (operation->session);
81f0aa
 
81f0aa
         destroy_reset_session_operation (operation);
81f0aa
 
81f0aa
         return G_SOURCE_REMOVE;
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
@@ -2200,63 +2227,64 @@ queue_session_reset (GdmManager *manager,
81f0aa
 
81f0aa
         if (operation != NULL) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         operation = g_slice_new0 (ResetSessionOperation);
81f0aa
         operation->manager = manager;
81f0aa
         operation->session = g_object_ref (session);
81f0aa
         operation->idle_id = g_idle_add ((GSourceFunc) on_reset_session, operation);
81f0aa
 
81f0aa
         g_object_set_data (G_OBJECT (session), "reset-session-operation", operation);
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 on_session_cancelled (GdmSession  *session,
81f0aa
                       GdmManager  *manager)
81f0aa
 {
81f0aa
         g_debug ("GdmManager: Session was cancelled");
81f0aa
         queue_session_reset (manager, session);
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 on_session_conversation_started (GdmSession *session,
81f0aa
                                  const char *service_name,
81f0aa
                                  GdmManager *manager)
81f0aa
 {
81f0aa
         GdmDisplay *display;
81f0aa
         gboolean    enabled;
81f0aa
         char       *username;
81f0aa
 
81f0aa
-        g_debug ("GdmManager: session conversation started for service %s", service_name);
81f0aa
+        g_debug ("GdmManager: session conversation started for service %s on session", service_name);
81f0aa
 
81f0aa
         if (g_strcmp0 (service_name, "gdm-autologin") != 0) {
81f0aa
+                g_debug ("GdmManager: ignoring session conversation since its not automatic login conversation");
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         display = get_display_for_user_session (session);
81f0aa
 
81f0aa
         if (display == NULL) {
81f0aa
                 g_debug ("GdmManager: conversation has no associated display");
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         if (!display_is_on_seat0 (display)) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         enabled = get_automatic_login_details (manager, &username);
81f0aa
 
81f0aa
         if (! enabled) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         g_debug ("GdmManager: begin auto login for user '%s'", username);
81f0aa
 
81f0aa
         /* service_name will be "gdm-autologin"
81f0aa
          */
81f0aa
         gdm_session_setup_for_user (session, service_name, username);
81f0aa
 
81f0aa
         g_free (username);
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
@@ -2312,60 +2340,66 @@ create_user_session_for_display (GdmManager *manager,
81f0aa
         char       *display_auth_file = NULL;
81f0aa
         char       *display_seat_id = NULL;
81f0aa
         char       *display_id = NULL;
81f0aa
 #if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER)
81f0aa
         char       *display_session_type = NULL;
81f0aa
         gboolean    greeter_is_wayland;
81f0aa
 #endif
81f0aa
 
81f0aa
         g_object_get (G_OBJECT (display),
81f0aa
                       "id", &display_id,
81f0aa
                       "x11-display-name", &display_name,
81f0aa
                       "is-local", &display_is_local,
81f0aa
                       "remote-hostname", &remote_hostname,
81f0aa
                       "x11-authority-file", &display_auth_file,
81f0aa
                       "seat-id", &display_seat_id,
81f0aa
 #if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER)
81f0aa
                       "session-type", &display_session_type,
81f0aa
 #endif
81f0aa
                       NULL);
81f0aa
         display_device = get_display_device (manager, display);
81f0aa
 
81f0aa
         session = gdm_session_new (GDM_SESSION_VERIFICATION_MODE_LOGIN,
81f0aa
                                    allowed_user,
81f0aa
                                    display_name,
81f0aa
                                    remote_hostname,
81f0aa
                                    display_device,
81f0aa
                                    display_seat_id,
81f0aa
                                    display_auth_file,
81f0aa
                                    display_is_local,
81f0aa
                                    NULL);
81f0aa
+
81f0aa
+        g_debug ("GdmSession: Created user session for user %d on display %s (seat %s)",
81f0aa
+                 (int) allowed_user,
81f0aa
+                 display_id,
81f0aa
+                 display_seat_id);
81f0aa
+
81f0aa
         g_free (display_name);
81f0aa
         g_free (remote_hostname);
81f0aa
         g_free (display_auth_file);
81f0aa
         g_free (display_seat_id);
81f0aa
 
81f0aa
         g_signal_connect (session,
81f0aa
                           "reauthentication-started",
81f0aa
                           G_CALLBACK (on_session_reauthentication_started),
81f0aa
                           manager);
81f0aa
         g_signal_connect (session,
81f0aa
                           "reauthenticated",
81f0aa
                           G_CALLBACK (on_session_reauthenticated),
81f0aa
                           manager);
81f0aa
         g_signal_connect (session,
81f0aa
                           "client-ready-for-session-to-start",
81f0aa
                           G_CALLBACK (on_session_client_ready_for_session_to_start),
81f0aa
                           manager);
81f0aa
         g_signal_connect (session,
81f0aa
                           "client-connected",
81f0aa
                           G_CALLBACK (on_session_client_connected),
81f0aa
                           manager);
81f0aa
         g_signal_connect (session,
81f0aa
                           "client-disconnected",
81f0aa
                           G_CALLBACK (on_session_client_disconnected),
81f0aa
                           manager);
81f0aa
         g_signal_connect (session,
81f0aa
                           "cancelled",
81f0aa
                           G_CALLBACK (on_session_cancelled),
81f0aa
                           manager);
81f0aa
         g_signal_connect (session,
81f0aa
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
81f0aa
index 0f821e390..f23a83c5e 100644
81f0aa
--- a/daemon/gdm-session.c
81f0aa
+++ b/daemon/gdm-session.c
81f0aa
@@ -624,61 +624,64 @@ get_fallback_session_name (GdmSession *self)
81f0aa
 
81f0aa
 static const char *
81f0aa
 get_default_session_name (GdmSession *self)
81f0aa
 {
81f0aa
         if (self->priv->saved_session != NULL) {
81f0aa
                 return self->priv->saved_session;
81f0aa
         }
81f0aa
 
81f0aa
         return get_fallback_session_name (self);
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 gdm_session_defaults_changed (GdmSession *self)
81f0aa
 {
81f0aa
 
81f0aa
         update_session_type (self);
81f0aa
 
81f0aa
         if (self->priv->greeter_interface != NULL) {
81f0aa
                 gdm_dbus_greeter_emit_default_language_name_changed (self->priv->greeter_interface,
81f0aa
                                                                      get_default_language_name (self));
81f0aa
                 gdm_dbus_greeter_emit_default_session_name_changed (self->priv->greeter_interface,
81f0aa
                                                                     get_default_session_name (self));
81f0aa
         }
81f0aa
 }
81f0aa
 
81f0aa
 void
81f0aa
 gdm_session_select_user (GdmSession *self,
81f0aa
                          const char *text)
81f0aa
 {
81f0aa
 
81f0aa
-        g_debug ("GdmSession: Setting user: '%s'", text);
81f0aa
+        g_debug ("GdmSession: selecting user '%s' for session '%s' (%p)",
81f0aa
+                 text,
81f0aa
+                 gdm_session_get_session_id (self),
81f0aa
+                 self);
81f0aa
 
81f0aa
         g_free (self->priv->selected_user);
81f0aa
         self->priv->selected_user = g_strdup (text);
81f0aa
 
81f0aa
         g_free (self->priv->saved_session);
81f0aa
         self->priv->saved_session = NULL;
81f0aa
 
81f0aa
         g_free (self->priv->saved_session_type);
81f0aa
         self->priv->saved_session_type = NULL;
81f0aa
 
81f0aa
         g_free (self->priv->saved_language);
81f0aa
         self->priv->saved_language = NULL;
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 cancel_pending_query (GdmSessionConversation *conversation)
81f0aa
 {
81f0aa
         if (conversation->pending_invocation == NULL) {
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         g_debug ("GdmSession: Cancelling pending query");
81f0aa
 
81f0aa
         g_dbus_method_invocation_return_dbus_error (conversation->pending_invocation,
81f0aa
                                                     GDM_SESSION_DBUS_ERROR_CANCEL,
81f0aa
                                                     "Operation cancelled");
81f0aa
         conversation->pending_invocation = NULL;
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
@@ -1416,117 +1419,121 @@ gdm_session_handle_client_cancel (GdmDBusUserVerifier    *user_verifier_interfac
81f0aa
         gdm_dbus_user_verifier_complete_cancel (user_verifier_interface,
81f0aa
                                                 invocation);
81f0aa
         gdm_session_cancel (self);
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 static gboolean
81f0aa
 gdm_session_handle_client_select_session (GdmDBusGreeter         *greeter_interface,
81f0aa
                                           GDBusMethodInvocation  *invocation,
81f0aa
                                           const char             *session,
81f0aa
                                           GdmSession             *self)
81f0aa
 {
81f0aa
         if (self->priv->greeter_interface != NULL) {
81f0aa
                 gdm_dbus_greeter_complete_select_session (greeter_interface,
81f0aa
                                                           invocation);
81f0aa
         }
81f0aa
         gdm_session_select_session (self, session);
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 static gboolean
81f0aa
 gdm_session_handle_client_select_user (GdmDBusGreeter        *greeter_interface,
81f0aa
                                        GDBusMethodInvocation *invocation,
81f0aa
                                        const char            *username,
81f0aa
                                        GdmSession            *self)
81f0aa
 {
81f0aa
         if (self->priv->greeter_interface != NULL) {
81f0aa
                 gdm_dbus_greeter_complete_select_user (greeter_interface,
81f0aa
                                                        invocation);
81f0aa
         }
81f0aa
+        g_debug ("GdmSession: client selected user '%s' on session (%p)", username, self);
81f0aa
         gdm_session_select_user (self, username);
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 static gboolean
81f0aa
 gdm_session_handle_client_start_session_when_ready (GdmDBusGreeter        *greeter_interface,
81f0aa
                                                     GDBusMethodInvocation *invocation,
81f0aa
                                                     const char            *service_name,
81f0aa
                                                     gboolean               client_is_ready,
81f0aa
                                                     GdmSession            *self)
81f0aa
 {
81f0aa
 
81f0aa
         if (self->priv->greeter_interface != NULL) {
81f0aa
                 gdm_dbus_greeter_complete_start_session_when_ready (greeter_interface,
81f0aa
                                                                     invocation);
81f0aa
         }
81f0aa
         g_signal_emit (G_OBJECT (self),
81f0aa
                        signals [CLIENT_READY_FOR_SESSION_TO_START],
81f0aa
                        0,
81f0aa
                        service_name,
81f0aa
                        client_is_ready);
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 static gboolean
81f0aa
 gdm_session_handle_get_timed_login_details (GdmDBusGreeter        *greeter_interface,
81f0aa
                                             GDBusMethodInvocation *invocation,
81f0aa
                                             GdmSession            *self)
81f0aa
 {
81f0aa
 
81f0aa
         if (self->priv->greeter_interface != NULL) {
81f0aa
                 gdm_dbus_greeter_complete_get_timed_login_details (greeter_interface,
81f0aa
                                                                    invocation,
81f0aa
                                                                    self->priv->timed_login_username != NULL,
81f0aa
                                                                    self->priv->timed_login_username != NULL? self->priv->timed_login_username : "",
81f0aa
                                                                    self->priv->timed_login_delay);
81f0aa
                 if (self->priv->timed_login_username != NULL) {
81f0aa
                         gdm_dbus_greeter_emit_timed_login_requested (self->priv->greeter_interface,
81f0aa
                                                                      self->priv->timed_login_username,
81f0aa
                                                                      self->priv->timed_login_delay);
81f0aa
                 }
81f0aa
         }
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 static gboolean
81f0aa
 gdm_session_handle_client_begin_auto_login (GdmDBusGreeter        *greeter_interface,
81f0aa
                                             GDBusMethodInvocation *invocation,
81f0aa
                                             const char            *username,
81f0aa
                                             GdmSession            *self)
81f0aa
 {
81f0aa
         if (self->priv->greeter_interface != NULL) {
81f0aa
                 gdm_dbus_greeter_complete_begin_auto_login (greeter_interface,
81f0aa
                                                             invocation);
81f0aa
         }
81f0aa
 
81f0aa
-        g_debug ("GdmSession: begin auto login for user '%s'", username);
81f0aa
+        g_debug ("GdmSession: client requesting automatic login for user '%s' on session '%s' (%p)",
81f0aa
+                 username,
81f0aa
+                 gdm_session_get_session_id (self),
81f0aa
+                 self);
81f0aa
 
81f0aa
         gdm_session_setup_for_user (self, "gdm-autologin", username);
81f0aa
 
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 export_user_verifier_interface (GdmSession      *self,
81f0aa
                                 GDBusConnection *connection)
81f0aa
 {
81f0aa
         GdmDBusUserVerifier   *user_verifier_interface;
81f0aa
         user_verifier_interface = GDM_DBUS_USER_VERIFIER (gdm_dbus_user_verifier_skeleton_new ());
81f0aa
 
81f0aa
         g_object_set_data (G_OBJECT (connection), "gdm-session", self);
81f0aa
 
81f0aa
         g_signal_connect (user_verifier_interface,
81f0aa
                           "handle-enable-extensions",
81f0aa
                           G_CALLBACK (gdm_session_handle_client_enable_extensions),
81f0aa
                           connection);
81f0aa
         g_signal_connect (user_verifier_interface,
81f0aa
                           "handle-begin-verification",
81f0aa
                           G_CALLBACK (gdm_session_handle_client_begin_verification),
81f0aa
                           self);
81f0aa
         g_signal_connect (user_verifier_interface,
81f0aa
                           "handle-begin-verification-for-user",
81f0aa
                           G_CALLBACK (gdm_session_handle_client_begin_verification_for_user),
81f0aa
                           self);
81f0aa
         g_signal_connect (user_verifier_interface,
81f0aa
                           "handle-answer-query",
81f0aa
                           G_CALLBACK (gdm_session_handle_client_answer_query),
81f0aa
@@ -1775,61 +1782,63 @@ allow_user_function (GDBusAuthObserver *observer,
81f0aa
 {
81f0aa
         uid_t client_uid;
81f0aa
         GPid  pid_of_client;
81f0aa
 
81f0aa
         client_uid = g_credentials_get_unix_user (credentials, NULL);
81f0aa
         if (client_uid == self->priv->allowed_user) {
81f0aa
                 return TRUE;
81f0aa
         }
81f0aa
 
81f0aa
         g_debug ("GdmSession: User not allowed");
81f0aa
 
81f0aa
         pid_of_client = g_credentials_get_unix_pid (credentials, NULL);
81f0aa
         g_signal_emit (G_OBJECT (self),
81f0aa
                        signals [CLIENT_REJECTED],
81f0aa
                        0,
81f0aa
                        credentials,
81f0aa
                        (guint)
81f0aa
                        pid_of_client);
81f0aa
 
81f0aa
 
81f0aa
         return FALSE;
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 setup_outside_server (GdmSession *self)
81f0aa
 {
81f0aa
         GDBusAuthObserver *observer;
81f0aa
         GDBusServer *server;
81f0aa
         GError *error = NULL;
81f0aa
 
81f0aa
-        g_debug ("GdmSession: Creating D-Bus server for greeters and such");
81f0aa
+         g_debug ("GdmSession: Creating D-Bus server for greeters and such for session %s (%p)",
81f0aa
+                  gdm_session_get_session_id (self),
81f0aa
+                  self);
81f0aa
 
81f0aa
         observer = g_dbus_auth_observer_new ();
81f0aa
         g_signal_connect_object (observer,
81f0aa
                                  "authorize-authenticated-peer",
81f0aa
                                  G_CALLBACK (allow_user_function),
81f0aa
                                  self,
81f0aa
                                  0);
81f0aa
 
81f0aa
         server = gdm_dbus_setup_private_server (observer, &error);
81f0aa
         g_object_unref (observer);
81f0aa
 
81f0aa
         if (server == NULL) {
81f0aa
                 g_warning ("Cannot create greeter D-Bus server for the session: %s",
81f0aa
                            error->message);
81f0aa
                 return;
81f0aa
         }
81f0aa
 
81f0aa
         g_signal_connect_object (server,
81f0aa
                                  "new-connection",
81f0aa
                                  G_CALLBACK (handle_connection_from_outside),
81f0aa
                                  self,
81f0aa
                                  0);
81f0aa
         self->priv->outside_server = server;
81f0aa
 
81f0aa
         g_dbus_server_start (server);
81f0aa
 
81f0aa
         g_debug ("GdmSession: D-Bus server for greeters listening on %s",
81f0aa
         g_dbus_server_get_client_address (self->priv->outside_server));
81f0aa
 }
81f0aa
 
81f0aa
@@ -2160,61 +2169,61 @@ stop_conversation_now (GdmSessionConversation *conversation)
81f0aa
 void
81f0aa
 gdm_session_set_ignore_wayland (GdmSession *self,
81f0aa
                                 gboolean    ignore_wayland)
81f0aa
 {
81f0aa
         self->priv->ignore_wayland = ignore_wayland;
81f0aa
 }
81f0aa
 #endif
81f0aa
 
81f0aa
 gboolean
81f0aa
 gdm_session_start_conversation (GdmSession *self,
81f0aa
                                 const char *service_name)
81f0aa
 {
81f0aa
         GdmSessionConversation *conversation;
81f0aa
 
81f0aa
         g_return_val_if_fail (GDM_IS_SESSION (self), FALSE);
81f0aa
 
81f0aa
         conversation = g_hash_table_lookup (self->priv->conversations,
81f0aa
                                             service_name);
81f0aa
 
81f0aa
         if (conversation != NULL) {
81f0aa
                 if (!conversation->is_stopping) {
81f0aa
                         g_warning ("GdmSession: conversation %s started more than once", service_name);
81f0aa
                         return FALSE;
81f0aa
                 }
81f0aa
                 g_debug ("GdmSession: stopping old conversation %s", service_name);
81f0aa
                 gdm_session_worker_job_stop_now (conversation->job);
81f0aa
                 g_object_unref (conversation->job);
81f0aa
                 conversation->job = NULL;
81f0aa
         }
81f0aa
 
81f0aa
-        g_debug ("GdmSession: starting conversation %s", service_name);
81f0aa
+        g_debug ("GdmSession: starting conversation %s for session (%p)", service_name, self);
81f0aa
 
81f0aa
         conversation = start_conversation (self, service_name);
81f0aa
 
81f0aa
         g_hash_table_insert (self->priv->conversations,
81f0aa
                              g_strdup (service_name), conversation);
81f0aa
         return TRUE;
81f0aa
 }
81f0aa
 
81f0aa
 void
81f0aa
 gdm_session_stop_conversation (GdmSession *self,
81f0aa
                                const char *service_name)
81f0aa
 {
81f0aa
         GdmSessionConversation *conversation;
81f0aa
 
81f0aa
         g_return_if_fail (GDM_IS_SESSION (self));
81f0aa
 
81f0aa
         g_debug ("GdmSession: stopping conversation %s", service_name);
81f0aa
 
81f0aa
         conversation = find_conversation_by_name (self, service_name);
81f0aa
 
81f0aa
         if (conversation != NULL) {
81f0aa
                 stop_conversation (conversation);
81f0aa
         }
81f0aa
 }
81f0aa
 
81f0aa
 static void
81f0aa
 on_initialization_complete_cb (GdmDBusWorker *proxy,
81f0aa
                                GAsyncResult  *res,
81f0aa
                                gpointer       user_data)
81f0aa
 {
81f0aa
@@ -2319,60 +2328,64 @@ initialize (GdmSession *self,
81f0aa
         }
81f0aa
 
81f0aa
         g_free (extensions);
81f0aa
 }
81f0aa
 
81f0aa
 void
81f0aa
 gdm_session_setup (GdmSession *self,
81f0aa
                    const char *service_name)
81f0aa
 {
81f0aa
 
81f0aa
         g_return_if_fail (GDM_IS_SESSION (self));
81f0aa
 
81f0aa
         update_session_type (self);
81f0aa
 
81f0aa
         initialize (self, service_name, NULL, NULL);
81f0aa
         gdm_session_defaults_changed (self);
81f0aa
 }
81f0aa
 
81f0aa
 
81f0aa
 void
81f0aa
 gdm_session_setup_for_user (GdmSession *self,
81f0aa
                             const char *service_name,
81f0aa
                             const char *username)
81f0aa
 {
81f0aa
 
81f0aa
         g_return_if_fail (GDM_IS_SESSION (self));
81f0aa
         g_return_if_fail (username != NULL);
81f0aa
 
81f0aa
         update_session_type (self);
81f0aa
 
81f0aa
+        g_debug ("GdmSession: Set up service %s for username %s on session (%p)",
81f0aa
+                 service_name,
81f0aa
+                 username,
81f0aa
+                 self);
81f0aa
         gdm_session_select_user (self, username);
81f0aa
 
81f0aa
         self->priv->is_program_session = FALSE;
81f0aa
         initialize (self, service_name, self->priv->selected_user, NULL);
81f0aa
         gdm_session_defaults_changed (self);
81f0aa
 }
81f0aa
 
81f0aa
 void
81f0aa
 gdm_session_setup_for_program (GdmSession *self,
81f0aa
                                const char *service_name,
81f0aa
                                const char *username,
81f0aa
                                const char *log_file)
81f0aa
 {
81f0aa
 
81f0aa
         g_return_if_fail (GDM_IS_SESSION (self));
81f0aa
 
81f0aa
         self->priv->is_program_session = TRUE;
81f0aa
         initialize (self, service_name, username, log_file);
81f0aa
 }
81f0aa
 
81f0aa
 void
81f0aa
 gdm_session_authenticate (GdmSession *self,
81f0aa
                           const char *service_name)
81f0aa
 {
81f0aa
         GdmSessionConversation *conversation;
81f0aa
 
81f0aa
         g_return_if_fail (GDM_IS_SESSION (self));
81f0aa
 
81f0aa
         conversation = find_conversation_by_name (self, service_name);
81f0aa
         if (conversation != NULL) {
81f0aa
@@ -2968,60 +2981,64 @@ gdm_session_set_timed_login_details (GdmSession *self,
81f0aa
 
81f0aa
 gboolean
81f0aa
 gdm_session_is_running (GdmSession *self)
81f0aa
 {
81f0aa
         return self->priv->session_pid > 0;
81f0aa
 }
81f0aa
 
81f0aa
 gboolean
81f0aa
 gdm_session_client_is_connected (GdmSession *self)
81f0aa
 {
81f0aa
         g_return_val_if_fail (GDM_IS_SESSION (self), FALSE);
81f0aa
 
81f0aa
         return self->priv->outside_connections != NULL;
81f0aa
 }
81f0aa
 
81f0aa
 uid_t
81f0aa
 gdm_session_get_allowed_user (GdmSession *self)
81f0aa
 {
81f0aa
         return self->priv->allowed_user;
81f0aa
 }
81f0aa
 
81f0aa
 void
81f0aa
 gdm_session_start_reauthentication (GdmSession *session,
81f0aa
                                     GPid        pid_of_caller,
81f0aa
                                     uid_t       uid_of_caller)
81f0aa
 {
81f0aa
         GdmSessionConversation *conversation = session->priv->session_conversation;
81f0aa
 
81f0aa
         g_return_if_fail (conversation != NULL);
81f0aa
 
81f0aa
+        g_debug ("GdmSession: starting reauthentication for session %s for client with pid %d",
81f0aa
+                 conversation->session_id,
81f0aa
+                 (int) uid_of_caller);
81f0aa
+
81f0aa
         conversation->reauth_pid_of_caller = pid_of_caller;
81f0aa
 
81f0aa
         gdm_dbus_worker_call_start_reauthentication (conversation->worker_proxy,
81f0aa
                                                      (int) pid_of_caller,
81f0aa
                                                      (int) uid_of_caller,
81f0aa
                                                      conversation->worker_cancellable,
81f0aa
                                                      (GAsyncReadyCallback) on_reauthentication_started_cb,
81f0aa
                                                      conversation);
81f0aa
 }
81f0aa
 
81f0aa
 const char *
81f0aa
 gdm_session_get_server_address (GdmSession *self)
81f0aa
 {
81f0aa
         g_return_val_if_fail (GDM_IS_SESSION (self), NULL);
81f0aa
 
81f0aa
         return g_dbus_server_get_client_address (self->priv->outside_server);
81f0aa
 }
81f0aa
 
81f0aa
 const char *
81f0aa
 gdm_session_get_username (GdmSession *self)
81f0aa
 {
81f0aa
         g_return_val_if_fail (GDM_IS_SESSION (self), NULL);
81f0aa
 
81f0aa
         return self->priv->selected_user;
81f0aa
 }
81f0aa
 
81f0aa
 const char *
81f0aa
 gdm_session_get_display_device (GdmSession *self)
81f0aa
 {
81f0aa
         g_return_val_if_fail (GDM_IS_SESSION (self), NULL);
81f0aa
-- 
81f0aa
2.21.0
81f0aa