diff options
author | Ray Strode <rstrode@redhat.com> | 2014-03-11 23:46:35 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2014-03-19 14:12:24 -0400 |
commit | 51883ec033547e36aff0bd5e9258b078f905c536 (patch) | |
tree | 9ffab8fdf1f62c50eb8f12f33e33dce0333f8103 | |
parent | 22977b5dc8537f3e2cfd56cdf933e0c7d0071647 (diff) | |
download | gdm-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.c | 53 |
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: |