]> git.sur5r.net Git - i3/i3lock/commitdiff
Fix resetting the password after failed authentications
authorSebastian Ullrich <sebasti@nullri.ch>
Thu, 28 Mar 2013 23:43:43 +0000 (00:43 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 29 Mar 2013 09:02:35 +0000 (10:02 +0100)
This has been broken by commit 661344.

i3lock.c

index c555ee85cf0936fed065d94a10a6be3fc8637a2c..08f78c7fc0f4197e3d8b215ff3e843d99a07922f 100644 (file)
--- 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: