summaryrefslogtreecommitdiff
path: root/i3lock.c
diff options
context:
space:
mode:
authorSebastian Ullrich <sebasti@nullri.ch>2013-03-29 00:43:43 +0100
committerMichael Stapelberg <michael@stapelberg.de>2013-03-29 10:02:35 +0100
commit1495903e5d72ddd7fbc1adb699b609feee435c83 (patch)
treedb43f8f4b9ef0eedba492204d50b3c4179642379 /i3lock.c
parent661344463aadbccf85120d056d30f486838c0dbd (diff)
Fix resetting the password after failed authentications
This has been broken by commit 661344.
Diffstat (limited to 'i3lock.c')
-rw-r--r--i3lock.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/i3lock.c b/i3lock.c
index c555ee8..08f78c7 100644
--- a/i3lock.c
+++ b/i3lock.c
@@ -172,6 +172,19 @@ static void clear_pam_wrong(EV_P_ ev_timer *w, int revents) {
clear_pam_wrong_timeout = NULL;
}
+static void clear_input(void) {
+ input_position = 0;
+ clear_password_memory();
+ password[input_position] = '\0';
+
+ /* Hide the unlock indicator after a bit if the password buffer is
+ * empty. */
+ start_clear_indicator_timeout();
+ unlock_state = STATE_BACKSPACE_ACTIVE;
+ redraw_screen();
+ unlock_state = STATE_KEY_PRESSED;
+}
+
static void input_done(void) {
if (clear_pam_wrong_timeout) {
ev_timer_stop(main_loop, clear_pam_wrong_timeout);
@@ -192,6 +205,7 @@ static void input_done(void) {
fprintf(stderr, "Authentication failure\n");
pam_state = STATE_PAM_WRONG;
+ clear_input();
redraw_screen();
/* Clear this state after 2 seconds (unless the user enters another
@@ -257,20 +271,15 @@ static void handle_key_press(xcb_key_press_event_t *event) {
unlock_state = STATE_KEY_PRESSED;
redraw_screen();
input_done();
+ return;
+
case XKB_KEY_u:
- if (!ctrl)
- break;
- case XKB_KEY_Escape:
- input_position = 0;
- clear_password_memory();
- password[input_position] = '\0';
+ if (ctrl)
+ clear_input();
+ return;
- /* Hide the unlock indicator after a bit if the password buffer is
- * empty. */
- start_clear_indicator_timeout();
- unlock_state = STATE_BACKSPACE_ACTIVE;
- redraw_screen();
- unlock_state = STATE_KEY_PRESSED;
+ case XKB_KEY_Escape:
+ clear_input();
return;
case XKB_KEY_BackSpace: