From d8a1083e983478818e2d7b139cf0ab809c10b1b4 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 8 Jan 2014 11:46:24 -0500 Subject: [PATCH] worker: ignore '' username Some PAM modules set a "" username to mean "user not set yet", apparently, instead of NULL. This commit guards against that to prevent a crash. Red-Hat-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=965370 https://bugzilla.gnome.org/show_bug.cgi?id=721803 --- daemon/gdm-session-worker.c | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c index dd58af7..ad1b077 100644 --- a/daemon/gdm-session-worker.c +++ b/daemon/gdm-session-worker.c @@ -628,60 +628,61 @@ gdm_session_worker_update_username (GdmSessionWorker *worker) username = NULL; res = gdm_session_worker_get_username (worker, &username); if (res) { g_debug ("GdmSessionWorker: old-username='%s' new-username='%s'", worker->priv->username != NULL ? worker->priv->username : "", username != NULL ? username : ""); gdm_session_auditor_set_username (worker->priv->auditor, worker->priv->username); if ((worker->priv->username == username) || ((worker->priv->username != NULL) && (username != NULL) && (strcmp (worker->priv->username, username) == 0))) goto out; g_debug ("GdmSessionWorker: setting username to '%s'", username); g_free (worker->priv->username); worker->priv->username = username; username = NULL; gdm_dbus_worker_emit_username_changed (GDM_DBUS_WORKER (worker), worker->priv->username); /* We have a new username to try. If we haven't been able to * read user settings up until now, then give it a go now * (see the comment in do_setup for rationale on why it's useful * to keep trying to read settings) */ if (worker->priv->username != NULL && + worker->priv->username[0] != '\0' && !gdm_session_settings_is_loaded (worker->priv->user_settings)) { attempt_to_load_user_settings (worker, worker->priv->username); } } out: g_free (username); } static gboolean gdm_session_worker_ask_question (GdmSessionWorker *worker, const char *question, char **answerp) { return gdm_dbus_worker_manager_call_info_query_sync (worker->priv->manager, worker->priv->service, question, answerp, NULL, NULL); } static gboolean gdm_session_worker_ask_for_secret (GdmSessionWorker *worker, const char *question, char **answerp) { return gdm_dbus_worker_manager_call_secret_info_query_sync (worker->priv->manager, worker->priv->service, question, -- 1.8.4.2