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

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