summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <halfline@gmail.com>2021-02-16 14:22:48 +0000
committerRay Strode <halfline@gmail.com>2021-02-16 14:22:48 +0000
commit9ac7ff544e0074b82716a7c192557f6093a1dc1a (patch)
treec5f83e0f67148ad32405102de336967d67667ef1
parent929de93ddd2277cb7671ca89a63899c8b64ce6f5 (diff)
parent504fec05f9ce504473935f2ae3a5bc22cc49a185 (diff)
downloadgdm-9ac7ff544e0074b82716a7c192557f6093a1dc1a.tar.gz
Merge branch 'mark-max-retries-unavailable' into 'master'
session: Threat PAM max retries error as service unavailable See merge request GNOME/gdm!130
-rw-r--r--daemon/gdm-session-worker-common.h1
-rw-r--r--daemon/gdm-session-worker.c7
-rw-r--r--daemon/gdm-session.c5
3 files changed, 12 insertions, 1 deletions
diff --git a/daemon/gdm-session-worker-common.h b/daemon/gdm-session-worker-common.h
index a55e2b2a..7dab7d4b 100644
--- a/daemon/gdm-session-worker-common.h
+++ b/daemon/gdm-session-worker-common.h
@@ -36,6 +36,7 @@ typedef enum _GdmSessionWorkerError {
GDM_SESSION_WORKER_ERROR_COMMUNICATING,
GDM_SESSION_WORKER_ERROR_WORKER_DIED,
GDM_SESSION_WORKER_ERROR_SERVICE_UNAVAILABLE,
+ GDM_SESSION_WORKER_ERROR_TOO_MANY_RETRIES,
GDM_SESSION_WORKER_ERROR_AUTHENTICATING,
GDM_SESSION_WORKER_ERROR_AUTHORIZING,
GDM_SESSION_WORKER_ERROR_OPENING_LOG_FILE,
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index e4d2e3fa..cb53e461 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -1283,6 +1283,13 @@ gdm_session_worker_authenticate_user (GdmSessionWorker *worker,
GDM_SESSION_WORKER_ERROR_SERVICE_UNAVAILABLE,
"%s", "");
goto out;
+ } else if (error_code == PAM_MAXTRIES) {
+ g_debug ("GdmSessionWorker: authentication service had too many retries");
+ g_set_error_literal (error,
+ GDM_SESSION_WORKER_ERROR,
+ GDM_SESSION_WORKER_ERROR_TOO_MANY_RETRIES,
+ get_friendly_error_message (worker, error_code));
+ goto out;
} else if (error_code != PAM_SUCCESS) {
g_debug ("GdmSessionWorker: authentication returned %d: %s", error_code, pam_strerror (worker->priv->pam_handle, error_code));
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index b07ffa82..a6f00b66 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -220,7 +220,10 @@ report_and_stop_conversation (GdmSession *self,
if (self->user_verifier_interface != NULL) {
if (g_error_matches (error,
GDM_SESSION_WORKER_ERROR,
- GDM_SESSION_WORKER_ERROR_SERVICE_UNAVAILABLE)) {
+ GDM_SESSION_WORKER_ERROR_SERVICE_UNAVAILABLE) ||
+ g_error_matches (error,
+ GDM_SESSION_WORKER_ERROR,
+ GDM_SESSION_WORKER_ERROR_TOO_MANY_RETRIES)) {
gdm_dbus_user_verifier_emit_service_unavailable (self->user_verifier_interface,
service_name,
error->message);