From 548f7b6f1303da1f56023e5eff8e17efbf08f8ff Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Tue, 17 Oct 2017 15:10:57 +0200 Subject: [PATCH] gdm: Prevent login problems with many users The patch works around a problem which sometimes froze gdm after entering the password. It depends on timing with nis and the number of users. Patch description: From: Donald Buczek Date: Tue, 17 Oct 2017 12:38:25 +0200 Subject: [PATCH] GdmSessionWorker: Wait for ActUserManager We implicitly access the (singleton) ActUserManager via GdmSessionSettings. ActUserManager provided by libaccountsservice does asynchronous method invocations via dbus to the account service daemon (accountsdaemon.service). Depending on the number of users and the definition of the user database (which may involve rpc calls in the NIS case), the response to the ListCachedUsers call may take an undefined amount of time. We need to execute our main loop to get the responses for the asynchronous method invocations processed and delivered to ActUserManager. However, the current implementation of the pam services does synchronous method calls over the dbus and we don't return to our main loop while we are waiting for the user to enter the username or the password. If ActUserManger didn't complete its setup before we get into that state and the user needs longer then a dbus specific timeout (several seconds) to enter his data, the dbus daemon will delete the reply and the login process doesn't complete. The fix here is to check that ActUserManager has completed its setup before we switch to the states involving pam. --- gdm.be0 | 1 + 1 file changed, 1 insertion(+) diff --git a/gdm.be0 b/gdm.be0 index b625e5ba3..9a5a652a9 100755 --- a/gdm.be0 +++ b/gdm.be0 @@ -6,6 +6,7 @@ SRCURL[0]="http://ftp.gnome.org/pub/gnome/sources/gdm/${PKGVERSION[2]}/gdm-${PKG PATCHURL[0]="/src/mariux/download/gdm-3.4.1-0002-greeter-disable-handling-of-ESC-in-login-window.patch" PATCHURL[1]="/src/mariux/download/gdm-3.4.1-0003-greeter-never-show-cancel-button-in-login-window.patch" +PATCHURL[2]="/src/mariux/patches/gdm-0001-GdmSessionWorker-Wait-for-ActUserManager.patch" LIBEXECDIR=/usr/lib/gdm LOCALSTATEDIR=/var