pinosaur
/
slock.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add /etc/passwd support
[slock.git]
/
slock.c
diff --git
a/slock.c
b/slock.c
index
467937c
..
aedee2e
100644
(file)
--- a/
slock.c
+++ b/
slock.c
@@
-65,14
+65,17
@@
getpw(void) { /* only run as root */
const char *rval;
struct passwd *pw;
const char *rval;
struct passwd *pw;
+ errno = 0;
pw = getpwuid(getuid());
pw = getpwuid(getuid());
- if(!pw)
+ if (errno)
+ die("slock: getpwuid: %s\n", strerror(errno));
+ else if (!pw)
die("slock: cannot retrieve password entry (make sure to suid or sgid slock)\n");
endpwent();
rval = pw->pw_passwd;
#if HAVE_SHADOW_H
die("slock: cannot retrieve password entry (make sure to suid or sgid slock)\n");
endpwent();
rval = pw->pw_passwd;
#if HAVE_SHADOW_H
- if (
strlen(rval) >= 1) { /* kludge, assumes pw placeholder entry has len >= 1 */
+ if (
rval[0] == 'x' && rval[1] == '\0') {
struct spwd *sp;
sp = getspnam(getenv("USER"));
if(!sp)
struct spwd *sp;
sp = getspnam(getenv("USER"));
if(!sp)
@@
-144,7
+147,7
@@
readpw(Display *dpy, const char *pws)
--len;
break;
default:
--len;
break;
default:
- if(num && !iscntrl((int) buf[0]) && (len + num < sizeof passwd)) {
+ if(num && !iscntrl((int) buf[0]) && (len + num < sizeof passwd)) {
memcpy(passwd + len, buf, num);
len += num;
}
memcpy(passwd + len, buf, num);
len += num;
}