From 1495903e5d72ddd7fbc1adb699b609feee435c83 Mon Sep 17 00:00:00 2001 From: Sebastian Ullrich Date: Fri, 29 Mar 2013 00:43:43 +0100 Subject: [PATCH] Fix resetting the password after failed authentications This has been broken by commit 661344. --- i3lock.c | 33 +++++++++++++++++++++------------ 1 file 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: