[gdm/multi-stack: 11/35] Return a different error code for "service won't work" than "auth failed"
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm/multi-stack: 11/35] Return a different error code for "service won't work" than "auth failed"
- Date: Wed, 23 Feb 2011 14:38:58 +0000 (UTC)
commit b221145b95a6b612091f5d81db9fbff796351c32
Author: Ray Strode <rstrode redhat com>
Date: Wed Oct 28 16:05:14 2009 -0400
Return a different error code for "service won't work" than "auth failed"
If we bubble it up to the greeter then we should be able to have
a more sensible UI when e.g. fingerprinting isn't enabled.
daemon/gdm-session-worker.c | 14 +++++++++++---
daemon/gdm-session-worker.h | 1 +
2 files changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index 4e95b0a..e9f6158 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -1285,8 +1285,8 @@ gdm_session_worker_initialize_pam (GdmSessionWorker *worker,
*/
g_set_error (error,
GDM_SESSION_WORKER_ERROR,
- GDM_SESSION_WORKER_ERROR_AUTHENTICATING,
- _("error initiating conversation with authentication system: %s"),
+ GDM_SESSION_WORKER_ERROR_SERVICE_UNAVAILABLE,
+ _("error initiating conversation with authentication system - %s"),
error_code == PAM_ABORT? _("general failure") :
error_code == PAM_BUF_ERR? _("out of memory") :
error_code == PAM_SYSTEM_ERR? _("application programmer error") :
@@ -1397,7 +1397,15 @@ gdm_session_worker_authenticate_user (GdmSessionWorker *worker,
/* blocking call, does the actual conversation */
error_code = pam_authenticate (worker->priv->pam_handle, authentication_flags);
- if (error_code != PAM_SUCCESS) {
+ if (error_code == PAM_AUTHINFO_UNAVAIL) {
+ g_debug ("GdmSessionWorker: authentication service unavailable");
+
+ g_set_error (error,
+ GDM_SESSION_WORKER_ERROR,
+ GDM_SESSION_WORKER_ERROR_SERVICE_UNAVAILABLE,
+ "%s", pam_strerror (worker->priv->pam_handle, 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-worker.h b/daemon/gdm-session-worker.h
index ee5465a..b1c8285 100644
--- a/daemon/gdm-session-worker.h
+++ b/daemon/gdm-session-worker.h
@@ -41,6 +41,7 @@ typedef enum _GdmSessionWorkerError {
GDM_SESSION_WORKER_ERROR_OPENING_MESSAGE_PIPE,
GDM_SESSION_WORKER_ERROR_COMMUNICATING,
GDM_SESSION_WORKER_ERROR_WORKER_DIED,
+ GDM_SESSION_WORKER_ERROR_SERVICE_UNAVAILABLE,
GDM_SESSION_WORKER_ERROR_AUTHENTICATING,
GDM_SESSION_WORKER_ERROR_AUTHORIZING,
GDM_SESSION_WORKER_ERROR_OPENING_LOG_FILE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]