From 1ca08bdee02c438de68da021c9d0cfc1150ea5eb Mon Sep 17 00:00:00 2001 From: Gustaf Rydholm Date: Sun, 16 Jan 2022 13:28:58 +0100 Subject: Revert "Apply pam patch" This reverts commit 4e7c6e5ace7eeb47c8252d9d24899959032b31dd. --- config.def.h | 4 ---- config.mk | 2 +- slock.c | 63 +++++++----------------------------------------------------- 3 files changed, 8 insertions(+), 61 deletions(-) diff --git a/config.def.h b/config.def.h index d631a8d..a0305fb 100644 --- a/config.def.h +++ b/config.def.h @@ -7,15 +7,11 @@ static const char *colorname[NUMCOLS] = { [INIT] = "black", /* after initialization */ [INPUT] = "#005577", /* during input */ [FAILED] = "#CC3333", /* wrong password */ - [PAM] = "#9400D3", /* waiting for PAM */ }; /* treat a cleared input like a wrong password (color) */ static const int failonclear = 1; -/* PAM service that's used for authentication */ -static const char* pam_service = "login"; - /* time in seconds to cancel lock with mouse movement */ static const int timetocancel = 4; diff --git a/config.mk b/config.mk index 1826ca1..08356e8 100644 --- a/config.mk +++ b/config.mk @@ -20,7 +20,7 @@ FREETYPEINC = /usr/include/freetype2 # includes and libs INCS = -I. -I/usr/include -I${X11INC} -I${FREETYPEINC} -LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXext -lXrandr -lpam +LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXext -lXrandr # flags CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H ${XINERAMAFLAGS} diff --git a/slock.c b/slock.c index 85c530d..c273e62 100644 --- a/slock.c +++ b/slock.c @@ -25,16 +25,11 @@ #include #include #include -#include -#include #include "arg.h" #include "util.h" char *argv0; -static int pam_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); -struct pam_conv pamc = {pam_conv, NULL}; -char passwd[256]; static time_t locktime; @@ -43,7 +38,6 @@ enum { INIT, INPUT, FAILED, - PAM, NUMCOLS }; @@ -78,31 +72,6 @@ die(const char *errstr, ...) exit(1); } -static int -pam_conv(int num_msg, const struct pam_message **msg, - struct pam_response **resp, void *appdata_ptr) -{ - int retval = PAM_CONV_ERR; - for(int i=0; imsg_style == PAM_PROMPT_ECHO_OFF && - strncmp(msg[i]->msg, "Password: ", 10) == 0) { - struct pam_response *resp_msg = malloc(sizeof(struct pam_response)); - if (!resp_msg) - die("malloc failed\n"); - char *password = malloc(strlen(passwd) + 1); - if (!password) - die("malloc failed\n"); - memset(password, 0, strlen(passwd) + 1); - strcpy(password, passwd); - resp_msg->resp_retcode = 0; - resp_msg->resp = password; - resp[i] = resp_msg; - retval = PAM_SUCCESS; - } - } - return retval; -} - #ifdef __linux__ #include #include @@ -167,8 +136,6 @@ gethash(void) } #endif /* HAVE_SHADOW_H */ - /* pam, store user name */ - hash = pw->pw_name; return hash; } @@ -203,12 +170,11 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, const char *hash) { XRRScreenChangeNotifyEvent *rre; - char buf[32]; - int num, screen, running, failure, oldc, retval; + char buf[32], passwd[256], *inputhash; + int num, screen, running, failure, oldc; unsigned int len, color; KeySym ksym; XEvent ev; - pam_handle_t *pamh; len = 0; running = 1; @@ -236,26 +202,10 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, case XK_Return: passwd[len] = '\0'; errno = 0; - retval = pam_start(pam_service, hash, &pamc, &pamh); - color = PAM; - for (screen = 0; screen < nscreens; screen++) { - XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[color]); - XClearWindow(dpy, locks[screen]->win); - XRaiseWindow(dpy, locks[screen]->win); - } - XSync(dpy, False); - - if (retval == PAM_SUCCESS) - retval = pam_authenticate(pamh, 0); - if (retval == PAM_SUCCESS) - retval = pam_acct_mgmt(pamh, 0); - - running = 1; - if (retval == PAM_SUCCESS) - running = 0; + if (!(inputhash = crypt(passwd, hash))) + fprintf(stderr, "slock: crypt: %s\n", strerror(errno)); else - fprintf(stderr, "slock: %s\n", pam_strerror(pamh, retval)); - pam_end(pamh, retval); + running = !!strcmp(inputhash, hash); if (running) { XBell(dpy, 100); failure = 1; @@ -457,9 +407,10 @@ main(int argc, char **argv) { dontkillme(); #endif - /* the contents of hash are used to transport the current user name */ hash = gethash(); errno = 0; + if (!crypt("", hash)) + die("slock: crypt: %s\n", strerror(errno)); if (!(dpy = XOpenDisplay(NULL))) die("slock: cannot open display\n"); -- cgit v1.2.3-70-g09d2