~kris/suckless

slock

9a617db716641da8489e2062e04098220954bffe — FRIGN 10 years ago b00f444
Rename getpw() and pws to gethash() and hash
1 files changed, 16 insertions(+), 16 deletions(-)

M slock.c
M slock.c => slock.c +16 -16
@@ 85,9 85,9 @@ dontkillme(void)
#endif

static const char *
getpw(void)
gethash(void)
{
	const char *rval;
	const char *hash;
	struct passwd *pw;

	/* Check if the current user has a password entry */


@@ 98,35 98,35 @@ getpw(void)
		else
			die("slock: cannot retrieve password entry\n");
	}
	rval = pw->pw_passwd;
	hash = pw->pw_passwd;

#if HAVE_SHADOW_H
	if (rval[0] == 'x' && rval[1] == '\0') {
	if (hash[0] == 'x' && hash[1] == '\0') {
		struct spwd *sp;
		if (!(sp = getspnam(getenv("USER"))))
			die("slock: getspnam: cannot retrieve shadow entry (make sure to suid or sgid slock)\n");
		rval = sp->sp_pwdp;
		hash = sp->sp_pwdp;
	}
#else
	if (rval[0] == '*' && rval[1] == '\0') {
	if (hash[0] == '*' && hash[1] == '\0') {
#ifdef __OpenBSD__
		if (!(pw = getpwnam_shadow(getenv("USER"))))
			die("slock: getpwnam_shadow: cannot retrieve shadow entry (make sure to suid or sgid slock)\n");
		rval = pw->pw_passwd;
		hash = pw->pw_passwd;
#else
		die("slock: getpwuid: cannot retrieve shadow entry (make sure to suid or sgid slock)\n");
#endif /* __OpenBSD__ */
	}
#endif /* HAVE_SHADOW_H */

	return rval;
	return hash;
}

static void
readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
       const char *pws)
       const char *hash)
{
	char buf[32], passwd[256], *encrypted;
	char buf[32], passwd[256], *inputhash;
	int num, screen, running, failure;
	unsigned int len, color;
	KeySym ksym;


@@ 161,10 161,10 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
			case XK_Return:
				passwd[len] = 0;
				errno = 0;
				if (!(encrypted = crypt(passwd, pws)))
				if (!(inputhash = crypt(passwd, hash)))
					fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
				else
					running = !!strcmp(encrypted, pws);
					running = !!strcmp(inputhash, hash);
				if (running) {
					XBell(dpy, 100);
					failure = True;


@@ 292,7 292,7 @@ main(int argc, char **argv) {
	struct group *grp;
	uid_t duid;
	gid_t dgid;
	const char *pws;
	const char *hash;
	Display *dpy;
	int s, nlocks, nscreens;



@@ 320,8 320,8 @@ main(int argc, char **argv) {
	dontkillme();
#endif

	pws = getpw();
	if (strlen(pws) < 2)
	hash = gethash();
	if (strlen(hash) < 2)
		die("slock: failed to get user password hash.\n");

	if (!(dpy = XOpenDisplay(NULL)))


@@ 370,7 370,7 @@ main(int argc, char **argv) {
	}

	/* everything is now blank. Wait for the correct password */
	readpw(dpy, &rr, locks, nscreens, pws);
	readpw(dpy, &rr, locks, nscreens, hash);

	return 0;
}