summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2014-03-11 23:46:35 -0400
committerRay Strode <rstrode@redhat.com>2014-03-19 14:12:24 -0400
commit51883ec033547e36aff0bd5e9258b078f905c536 (patch)
tree9ffab8fdf1f62c50eb8f12f33e33dce0333f8103
parent22977b5dc8537f3e2cfd56cdf933e0c7d0071647 (diff)
downloadgdm-51883ec033547e36aff0bd5e9258b078f905c536.tar.gz
worker: support authentication without X11 display
At the moment we unconditionally set PAM_XDISPLAY and PAM_XAUTHDATA based on values passed to the worker. In a future commit, those values are going to become stubs, so as a first step, this commit makes PAM_XDISPLAY and PAM_XAUTHDATA optional. https://bugzilla.gnome.org/show_bug.cgi?id=726283
-rw-r--r--daemon/gdm-session-worker.c53
1 files changed, 28 insertions, 25 deletions
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index 88f8439f..b792c58d 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -2037,7 +2037,7 @@ set_up_for_current_vt (GdmSessionWorker *worker,
#ifdef PAM_XAUTHDATA
struct pam_xauth_data *pam_xauth;
#endif
- int error_code;
+ int error_code = PAM_SUCCESS;
char *pam_tty;
/* set TTY */
@@ -2061,36 +2061,39 @@ set_up_for_current_vt (GdmSessionWorker *worker,
#ifdef PAM_XDISPLAY
/* set XDISPLAY */
- error_code = pam_set_item (worker->priv->pam_handle, PAM_XDISPLAY, worker->priv->x11_display_name);
-
- if (error_code != PAM_SUCCESS) {
- g_debug ("error informing authentication system of display string %s: %s",
- worker->priv->x11_display_name,
- pam_strerror (worker->priv->pam_handle, error_code));
- g_set_error (error,
- GDM_SESSION_WORKER_ERROR,
- GDM_SESSION_WORKER_ERROR_AUTHENTICATING,
- "%s", "");
- goto out;
+ if (worker->priv->x11_display_name != NULL && worker->priv->x11_display_name[0] != '\0') {
+ error_code = pam_set_item (worker->priv->pam_handle, PAM_XDISPLAY, worker->priv->x11_display_name);
+ if (error_code != PAM_SUCCESS) {
+ g_debug ("error informing authentication system of display string %s: %s",
+ worker->priv->x11_display_name,
+ pam_strerror (worker->priv->pam_handle, error_code));
+ g_set_error (error,
+ GDM_SESSION_WORKER_ERROR,
+ GDM_SESSION_WORKER_ERROR_AUTHENTICATING,
+ "%s", "");
+ goto out;
+ }
}
#endif
#ifdef PAM_XAUTHDATA
/* set XAUTHDATA */
pam_xauth = _get_xauth_for_pam (worker->priv->x11_authority_file);
- error_code = pam_set_item (worker->priv->pam_handle, PAM_XAUTHDATA, pam_xauth);
- if (error_code != PAM_SUCCESS) {
- g_debug ("error informing authentication system of display string %s: %s",
- worker->priv->x11_display_name,
- pam_strerror (worker->priv->pam_handle, error_code));
- g_free (pam_xauth);
+ if (pam_xauth != NULL) {
+ error_code = pam_set_item (worker->priv->pam_handle, PAM_XAUTHDATA, pam_xauth);
+ if (error_code != PAM_SUCCESS) {
+ g_debug ("error informing authentication system of display string %s: %s",
+ worker->priv->x11_display_name,
+ pam_strerror (worker->priv->pam_handle, error_code));
+ g_free (pam_xauth);
- g_set_error (error,
- GDM_SESSION_WORKER_ERROR,
- GDM_SESSION_WORKER_ERROR_AUTHENTICATING,
- "%s", "");
- goto out;
- }
- g_free (pam_xauth);
+ g_set_error (error,
+ GDM_SESSION_WORKER_ERROR,
+ GDM_SESSION_WORKER_ERROR_AUTHENTICATING,
+ "%s", "");
+ goto out;
+ }
+ g_free (pam_xauth);
+ }
#endif
return TRUE;
out: