summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Wolneykien <manowar@altlinux.org>2017-10-20 03:38:20 +0300
committerRobert Ancell <robert.ancell@gmail.com>2022-11-21 11:04:04 +1300
commitcac805d87fc6d894b06b4f078cf4e3049495f1e6 (patch)
tree11e50789df44ebae626b9187024623ffc2711f25
parentde09f2c34175b44e12c4a49c87905812576f9661 (diff)
downloadlightdm-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.c15
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