i3 - improved tiling WM


Fix resetting the password after failed authentications

Patch status: merged

Patch by Sebastian Ullrich

Long description:

This has been broken by commit 661344.

To apply this patch, use:
curl http://cr.i3wm.org/patch/119/raw.patch | git am

b/i3lock.c

14
@@ -172,6 +172,19 @@ static void clear_pam_wrong(EV_P_ ev_timer *w, int revents) {
15
     clear_pam_wrong_timeout = NULL;
16
 }
17
 
18
+static void clear_input(void) {
19
+    input_position = 0;
20
+    clear_password_memory();
21
+    password[input_position] = '\0';
22
+
23
+    /* Hide the unlock indicator after a bit if the password buffer is
24
+     * empty. */
25
+    start_clear_indicator_timeout();
26
+    unlock_state = STATE_BACKSPACE_ACTIVE;
27
+    redraw_screen();
28
+    unlock_state = STATE_KEY_PRESSED;
29
+}
30
+
31
 static void input_done(void) {
32
     if (clear_pam_wrong_timeout) {
33
         ev_timer_stop(main_loop, clear_pam_wrong_timeout);
34
@@ -192,6 +205,7 @@ static void input_done(void) {
35
         fprintf(stderr, "Authentication failure\n");
36
 
37
     pam_state = STATE_PAM_WRONG;
38
+    clear_input();
39
     redraw_screen();
40
 
41
     /* Clear this state after 2 seconds (unless the user enters another
42
@@ -257,20 +271,15 @@ static void handle_key_press(xcb_key_press_event_t *event) {
43
         unlock_state = STATE_KEY_PRESSED;
44
         redraw_screen();
45
         input_done();
46
+        return;
47
+
48
     case XKB_KEY_u:
49
-        if (!ctrl)
50
-            break;
51
-    case XKB_KEY_Escape:
52
-        input_position = 0;
53
-        clear_password_memory();
54
-        password[input_position] = '\0';
55
+        if (ctrl)
56
+            clear_input();
57
+        return;
58
 
59
-        /* Hide the unlock indicator after a bit if the password buffer is
60
-         * empty. */
61
-        start_clear_indicator_timeout();
62
-        unlock_state = STATE_BACKSPACE_ACTIVE;
63
-        redraw_screen();
64
-        unlock_state = STATE_KEY_PRESSED;
65
+    case XKB_KEY_Escape:
66
+        clear_input();
67
         return;
68
 
69
     case XKB_KEY_BackSpace: