X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=slock.c;h=c81f5dd8e9cd66b216d5a8fb66e5ddcc7f46b3f7;hb=bd069b08c5fe4fea3c78f6991a849b19ed40cbe0;hp=f79917468021ca414a174a50e71372b4f59deda9;hpb=9a617db716641da8489e2062e04098220954bffe;p=slock.git diff --git a/slock.c b/slock.c index f799174..c81f5dd 100644 --- a/slock.c +++ b/slock.c @@ -103,14 +103,14 @@ gethash(void) #if HAVE_SHADOW_H if (hash[0] == 'x' && hash[1] == '\0') { struct spwd *sp; - if (!(sp = getspnam(getenv("USER")))) + if (!(sp = getspnam(pw->pw_name))) die("slock: getspnam: cannot retrieve shadow entry (make sure to suid or sgid slock)\n"); hash = sp->sp_pwdp; } #else if (hash[0] == '*' && hash[1] == '\0') { #ifdef __OpenBSD__ - if (!(pw = getpwnam_shadow(getenv("USER")))) + if (!(pw = getpwuid_shadow(getuid()))) die("slock: getpwnam_shadow: cannot retrieve shadow entry (make sure to suid or sgid slock)\n"); hash = pw->pw_passwd; #else @@ -137,10 +137,6 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, running = 1; failure = 0; - /* As "slock" stands for "Simple X display locker", the DPMS settings - * had been removed and you can set it with "xset" or some other - * utility. This way the user can easily set a customized DPMS - * timeout. */ while (running && !XNextEvent(dpy, &ev)) { if (ev.type == KeyPress) { explicit_bzero(&buf, sizeof(buf)); @@ -321,8 +317,9 @@ main(int argc, char **argv) { #endif hash = gethash(); - if (strlen(hash) < 2) - die("slock: failed to get user password hash.\n"); + errno = 0; + if (!crypt("", hash)) + die("slock: crypt: %s\n", strerror(errno)); if (!(dpy = XOpenDisplay(NULL))) die("slock: cannot open display\n");