mirror of
https://github.com/Raymo111/i3lock-color.git
synced 2025-02-24 16:06:26 -05:00
Revert "Run authentification in different process"
This reverts commit a305e622a6
.
In the next commit, the same functionality will be achieved in a cleaner
way.
This commit is contained in:
parent
df760b6e9e
commit
d7fd058f0c
1 changed files with 17 additions and 50 deletions
67
i3lock.c
67
i3lock.c
|
@ -22,7 +22,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ev.h>
|
#include <ev.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <X11/XKBlib.h>
|
#include <X11/XKBlib.h>
|
||||||
#include <X11/extensions/XKBfile.h>
|
#include <X11/extensions/XKBfile.h>
|
||||||
#include <xkbcommon/xkbcommon.h>
|
#include <xkbcommon/xkbcommon.h>
|
||||||
|
@ -200,11 +199,27 @@ static void clear_input(void) {
|
||||||
unlock_state = STATE_KEY_PRESSED;
|
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)
|
if (debug_mode)
|
||||||
fprintf(stderr, "Authentication failure\n");
|
fprintf(stderr, "Authentication failure\n");
|
||||||
|
|
||||||
pam_state = STATE_PAM_WRONG;
|
pam_state = STATE_PAM_WRONG;
|
||||||
|
clear_input();
|
||||||
redraw_screen();
|
redraw_screen();
|
||||||
|
|
||||||
/* Clear this state after 2 seconds (unless the user enters another
|
/* 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
|
* Called when the user releases a key. We need to leave the Mode_switch
|
||||||
* state when the user releases the Mode_switch key.
|
* state when the user releases the Mode_switch key.
|
||||||
|
|
Loading…
Add table
Reference in a new issue