diff options
author | Paul Wolneykien <manowar@altlinux.org> | 2017-10-20 03:38:20 +0300 |
---|---|---|
committer | Robert Ancell <robert.ancell@gmail.com> | 2022-11-21 11:04:04 +1300 |
commit | cac805d87fc6d894b06b4f078cf4e3049495f1e6 (patch) | |
tree | 11e50789df44ebae626b9187024623ffc2711f25 | |
parent | de09f2c34175b44e12c4a49c87905812576f9661 (diff) | |
download | lightdm-git-cac805d87fc6d894b06b4f078cf4e3049495f1e6.tar.gz |
Fix: Don't disconnect signals on cancel before the session actually ends
Otherwise, no completion message is sent to the greeter leaving it in
the 'in_authentication' state
Signed-off-by: Paul Wolneykien <manowar@altlinux.org>
-rw-r--r-- | src/greeter.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/greeter.c b/src/greeter.c index 75fe9ff6..36672667 100644 --- a/src/greeter.c +++ b/src/greeter.c @@ -63,6 +63,9 @@ typedef struct /* API version the client can speak */ guint32 api_version; + /* TRUE if the PAM session is being cancelled */ + gboolean cancelling; + /* TRUE if a the greeter can handle a reset; else we will just kill it instead */ gboolean resettable; @@ -462,6 +465,8 @@ greeter_reset (Greeter *greeter) write_message (greeter, message, offset); } +static void reset_session (Greeter *greeter); + static void authentication_complete_cb (Session *session, Greeter *greeter) { @@ -481,6 +486,11 @@ authentication_complete_cb (Session *session, Greeter *greeter) } } + if (priv->cancelling) + reset_session (greeter); + else + priv->cancelling = FALSE; + send_end_authentication (greeter, priv->authentication_sequence_number, session_get_username (session), result); } @@ -500,6 +510,7 @@ reset_session (Greeter *greeter) priv->guest_account_authenticated = FALSE; priv->have_sent_end_authentication = FALSE; + priv->cancelling = FALSE; } static void @@ -712,7 +723,8 @@ handle_cancel_authentication (Greeter *greeter) return; g_debug ("Cancel authentication"); - reset_session (greeter); + priv->cancelling = TRUE; + session_stop (priv->authentication_session); } static void @@ -1078,6 +1090,7 @@ greeter_init (Greeter *greeter) priv->use_secure_memory = config_get_boolean (config_get_instance (), "LightDM", "lock-memory"); priv->to_greeter_input = -1; priv->from_greeter_output = -1; + priv->cancelling = FALSE; } static void |