]> git.sur5r.net Git - i3/i3lock/commitdiff
Revert "Run authentification in different process"
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 10 Nov 2013 19:03:53 +0000 (20:03 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 10 Nov 2013 19:42:53 +0000 (20:42 +0100)
This reverts commit a305e622a6cad3f9ba267d6810fee54b7c7c86c3.

In the next commit, the same functionality will be achieved in a cleaner
way.

i3lock.c

index 7d1f7b325cbb00c04dcb338e720950dc27ea126a..74e15f262972e0fa53a2debd5bc123fe2dcf7479 100644 (file)
--- a/i3lock.c
+++ b/i3lock.c
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <ev.h>
 #include <sys/mman.h>
-#include <sys/wait.h>
 #include <X11/XKBlib.h>
 #include <X11/extensions/XKBfile.h>
 #include <xkbcommon/xkbcommon.h>
@@ -200,11 +199,27 @@ static void clear_input(void) {
     unlock_state = STATE_KEY_PRESSED;
 }
 
-static void auth_failed(void) {
+static void input_done(void) {
+    if (clear_pam_wrong_timeout) {
+        ev_timer_stop(main_loop, clear_pam_wrong_timeout);
+        free(clear_pam_wrong_timeout);
+        clear_pam_wrong_timeout = NULL;
+    }
+
+    pam_state = STATE_PAM_VERIFY;
+    redraw_screen();
+
+    if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) {
+        DEBUG("successfully authenticated\n");
+        clear_password_memory();
+        exit(0);
+    }
+
     if (debug_mode)
         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
@@ -226,54 +241,6 @@ static void auth_failed(void) {
     }
 }
 
-static void child_cb(EV_P_ ev_child *child_watcher, int revents) {
-    if (child_watcher->rstatus != 0) {
-        DEBUG("Authentication successfull\n");
-        clear_password_memory();
-
-        exit(0);
-    } else {
-        auth_failed();
-    }
-    ev_child_stop(main_loop, child_watcher);
-    free(child_watcher);
-}
-
-static void input_done(void) {
-    if (pam_state == STATE_PAM_VERIFY) {
-        return;
-    }
-
-    if (clear_pam_wrong_timeout) {
-        ev_timer_stop(main_loop, clear_pam_wrong_timeout);
-        free(clear_pam_wrong_timeout);
-        clear_pam_wrong_timeout = NULL;
-    }
-
-    pam_state = STATE_PAM_VERIFY;
-    redraw_screen();
-
-    /* fork to unblock pam_authenticate */
-    pid_t cpid = fork();
-    if (cpid == 0) {
-        exit(pam_authenticate(pam_handle, 0) == PAM_SUCCESS);
-    } else if (cpid > 0) {
-        clear_input();
-        struct ev_child *child_watcher = calloc(sizeof(struct ev_io), 1);
-        ev_child_init(child_watcher, child_cb, cpid, 0);
-        ev_child_set(child_watcher, cpid, 0);
-        ev_child_start(EV_DEFAULT_ child_watcher);
-    } else if (cpid < 0) {
-        DEBUG("Could not fork");
-        if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) {
-            DEBUG("successfully authenticated\n");
-            clear_password_memory();
-            exit(0);
-        }
-        auth_failed();
-    }
-}
-
 /*
  * Called when the user releases a key. We need to leave the Mode_switch
  * state when the user releases the Mode_switch key.