Xinqi Bao's Git

error out early on crypt() fail
[slock.git] / slock.c
diff --git a/slock.c b/slock.c
index f799174..2d57e81 100644 (file)
--- 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 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__
                        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
                        die("slock: getpwnam_shadow: cannot retrieve shadow entry (make sure to suid or sgid slock)\n");
                hash = pw->pw_passwd;
 #else
@@ -321,8 +321,9 @@ main(int argc, char **argv) {
 #endif
 
        hash = gethash();
 #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");
 
        if (!(dpy = XOpenDisplay(NULL)))
                die("slock: cannot open display\n");