227 lines
9.7 KiB
Diff
227 lines
9.7 KiB
Diff
From d9d22a1c48a528873e3cc84a73fc868507b8dd4d Mon Sep 17 00:00:00 2001
|
|
From: Iain Lane <iainl@gnome.org>
|
|
Date: Thu, 31 Jan 2019 10:52:35 +0000
|
|
Subject: [PATCH] manager,session: Add some debugging around starting
|
|
reauthentication
|
|
|
|
There's a bug right now dealing with timed login and reauthentication,
|
|
but it's not clear what's going on by looking at the logs.
|
|
|
|
This commit sprinkles some more logging throughout the code, to make
|
|
the bug easier to track.
|
|
---
|
|
daemon/gdm-manager.c | 46 ++++++++++++++++++++++++++++++++++++++------
|
|
daemon/gdm-session.c | 25 ++++++++++++++++++++----
|
|
2 files changed, 61 insertions(+), 10 deletions(-)
|
|
|
|
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
|
|
index dbf64473a..1e5719558 100644
|
|
--- a/daemon/gdm-manager.c
|
|
+++ b/daemon/gdm-manager.c
|
|
@@ -335,23 +335,40 @@ find_session_for_user_on_seat (GdmManager *manager,
|
|
|
|
for (node = manager->priv->user_sessions; node != NULL; node = node->next) {
|
|
GdmSession *candidate_session = node->data;
|
|
- const char *candidate_username, *candidate_seat_id;
|
|
+ const char *candidate_username, *candidate_seat_id, *candidate_session_id;
|
|
|
|
- if (candidate_session == dont_count_session)
|
|
+ candidate_session_id = gdm_session_get_session_id (candidate_session);
|
|
+
|
|
+ if (candidate_session == dont_count_session) {
|
|
+ g_debug ("GdmSession: Ignoring session %s as requested",
|
|
+ candidate_session_id);
|
|
continue;
|
|
+ }
|
|
|
|
- if (!gdm_session_is_running (candidate_session))
|
|
+ if (!gdm_session_is_running (candidate_session)) {
|
|
+ g_debug ("GdmSession: Ignoring session %s as it isn't running",
|
|
+ candidate_session_id);
|
|
continue;
|
|
+ }
|
|
|
|
candidate_username = gdm_session_get_username (candidate_session);
|
|
candidate_seat_id = gdm_session_get_display_seat_id (candidate_session);
|
|
|
|
+ g_debug ("GdmManager: Considering session %s on seat %s belonging to user %s",
|
|
+ candidate_session_id,
|
|
+ candidate_seat_id,
|
|
+ candidate_username);
|
|
+
|
|
if (g_strcmp0 (candidate_username, username) == 0 &&
|
|
g_strcmp0 (candidate_seat_id, seat_id) == 0) {
|
|
+ g_debug ("GdmManager: yes, found session %s", candidate_session_id);
|
|
return candidate_session;
|
|
}
|
|
+
|
|
+ g_debug ("GdmManager: no, will not use session %s", candidate_session_id);
|
|
}
|
|
|
|
+ g_debug ("GdmManager: no matching sessions found");
|
|
return NULL;
|
|
}
|
|
|
|
@@ -835,8 +852,12 @@ gdm_manager_handle_open_session (GdmDBusManager *manager,
|
|
#endif
|
|
if (session == NULL) {
|
|
session = get_user_session_for_display (display);
|
|
+ g_debug ("GdmSession: Considering session %s for username %s",
|
|
+ gdm_session_get_session_id (session),
|
|
+ gdm_session_get_username (session));
|
|
|
|
if (gdm_session_is_running (session)) {
|
|
+ g_debug ("GdmSession: the session is running, and therefore can't be used");
|
|
g_dbus_method_invocation_return_error_literal (invocation,
|
|
G_DBUS_ERROR,
|
|
G_DBUS_ERROR_ACCESS_DENIED,
|
|
@@ -1012,6 +1033,10 @@ open_temporary_reauthentication_channel (GdmManager *self,
|
|
environment);
|
|
g_strfreev (environment);
|
|
|
|
+ g_debug ("GdmSession: Created session for temporary reauthentication channel for user %d (seat %s)",
|
|
+ (int) uid,
|
|
+ seat_id);
|
|
+
|
|
g_object_set_data_full (G_OBJECT (session),
|
|
"caller-session-id",
|
|
g_strdup (session_id),
|
|
@@ -1091,11 +1116,13 @@ gdm_manager_handle_open_reauthentication_channel (GdmDBusManager *manager
|
|
}
|
|
|
|
if (is_login_screen) {
|
|
+ g_debug ("GdmManager: looking for login screen session for user %s on seat %s", username, seat_id);
|
|
session = find_session_for_user_on_seat (self,
|
|
username,
|
|
seat_id,
|
|
NULL);
|
|
} else {
|
|
+ g_debug ("GdmManager: looking for user session on display");
|
|
session = get_user_session_for_display (display);
|
|
}
|
|
|
|
@@ -1918,7 +1945,7 @@ on_session_client_connected (GdmSession *session,
|
|
gboolean enabled;
|
|
gboolean allow_timed_login = FALSE;
|
|
|
|
- g_debug ("GdmManager: client connected");
|
|
+ g_debug ("GdmManager: client with pid %d connected", (int) pid_of_client);
|
|
|
|
display = get_display_for_user_session (session);
|
|
|
|
@@ -1964,7 +1991,7 @@ on_session_client_disconnected (GdmSession *session,
|
|
GPid pid_of_client,
|
|
GdmManager *manager)
|
|
{
|
|
- g_debug ("GdmManager: client disconnected");
|
|
+ g_debug ("GdmManager: client with pid %d disconnected", (int) pid_of_client);
|
|
}
|
|
|
|
typedef struct
|
|
@@ -2031,9 +2058,10 @@ on_session_conversation_started (GdmSession *session,
|
|
gboolean enabled;
|
|
char *username;
|
|
|
|
- g_debug ("GdmManager: session conversation started for service %s", service_name);
|
|
+ g_debug ("GdmManager: session conversation started for service %s on session", service_name);
|
|
|
|
if (g_strcmp0 (service_name, "gdm-autologin") != 0) {
|
|
+ g_debug ("GdmManager: ignoring session conversation since its not automatic login conversation");
|
|
return;
|
|
}
|
|
|
|
@@ -2143,6 +2171,12 @@ create_user_session_for_display (GdmManager *manager,
|
|
display_auth_file,
|
|
display_is_local,
|
|
NULL);
|
|
+
|
|
+ g_debug ("GdmSession: Created user session for user %d on display %s (seat %s)",
|
|
+ (int) allowed_user,
|
|
+ display_id,
|
|
+ display_seat_id);
|
|
+
|
|
g_free (display_name);
|
|
g_free (remote_hostname);
|
|
g_free (display_auth_file);
|
|
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
|
index 04f879a7a..09f471086 100644
|
|
--- a/daemon/gdm-session.c
|
|
+++ b/daemon/gdm-session.c
|
|
@@ -654,7 +654,10 @@ gdm_session_select_user (GdmSession *self,
|
|
const char *text)
|
|
{
|
|
|
|
- g_debug ("GdmSession: Setting user: '%s'", text);
|
|
+ g_debug ("GdmSession: selecting user '%s' for session '%s' (%p)",
|
|
+ text,
|
|
+ gdm_session_get_session_id (self),
|
|
+ self);
|
|
|
|
g_free (self->priv->selected_user);
|
|
self->priv->selected_user = g_strdup (text);
|
|
@@ -1429,6 +1432,7 @@ gdm_session_handle_client_select_user (GdmDBusGreeter *greeter_interface,
|
|
gdm_dbus_greeter_complete_select_user (greeter_interface,
|
|
invocation);
|
|
}
|
|
+ g_debug ("GdmSession: client selected user '%s' on session (%p)", username, self);
|
|
gdm_session_select_user (self, username);
|
|
return TRUE;
|
|
}
|
|
@@ -1485,7 +1489,10 @@ gdm_session_handle_client_begin_auto_login (GdmDBusGreeter *greeter_inter
|
|
invocation);
|
|
}
|
|
|
|
- g_debug ("GdmSession: begin auto login for user '%s'", username);
|
|
+ g_debug ("GdmSession: client requesting automatic login for user '%s' on session '%s' (%p)",
|
|
+ username,
|
|
+ gdm_session_get_session_id (self),
|
|
+ self);
|
|
|
|
gdm_session_setup_for_user (self, "gdm-autologin", username);
|
|
|
|
@@ -1788,7 +1795,9 @@ setup_outside_server (GdmSession *self)
|
|
GDBusServer *server;
|
|
GError *error = NULL;
|
|
|
|
- g_debug ("GdmSession: Creating D-Bus server for greeters and such");
|
|
+ g_debug ("GdmSession: Creating D-Bus server for greeters and such for session %s (%p)",
|
|
+ gdm_session_get_session_id (self),
|
|
+ self);
|
|
|
|
observer = g_dbus_auth_observer_new ();
|
|
g_signal_connect_object (observer,
|
|
@@ -2172,7 +2181,7 @@ gdm_session_start_conversation (GdmSession *self,
|
|
conversation->job = NULL;
|
|
}
|
|
|
|
- g_debug ("GdmSession: starting conversation %s", service_name);
|
|
+ g_debug ("GdmSession: starting conversation %s for session (%p)", service_name, self);
|
|
|
|
conversation = start_conversation (self, service_name);
|
|
|
|
@@ -2331,6 +2340,10 @@ gdm_session_setup_for_user (GdmSession *self,
|
|
|
|
update_session_type (self);
|
|
|
|
+ g_debug ("GdmSession: Set up service %s for username %s on session (%p)",
|
|
+ service_name,
|
|
+ username,
|
|
+ self);
|
|
gdm_session_select_user (self, username);
|
|
|
|
self->priv->is_program_session = FALSE;
|
|
@@ -2961,6 +2974,10 @@ gdm_session_start_reauthentication (GdmSession *session,
|
|
|
|
g_return_if_fail (conversation != NULL);
|
|
|
|
+ g_debug ("GdmSession: starting reauthentication for session %s for client with pid %d",
|
|
+ conversation->session_id,
|
|
+ (int) uid_of_caller);
|
|
+
|
|
conversation->reauth_pid_of_caller = pid_of_caller;
|
|
|
|
gdm_dbus_worker_call_start_reauthentication (conversation->worker_proxy,
|
|
--
|
|
GitLab
|
|
|