Stop using $USER for shadow entries - slock - simple X display locker utility | |
git clone git://git.suckless.org/slock | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit dc2e8e839e4d72f5fec36c9a0474e6062a7a8f51 | |
parent 9a617db716641da8489e2062e04098220954bffe | |
Author: FRIGN <[email protected]> | |
Date: Sun, 11 Sep 2016 23:17:53 +0200 | |
Stop using $USER for shadow entries | |
This was extremely bad practice, effectively making the program behave | |
different depending on which architecture you are running it on. | |
OpenBSD offers getpwuid_shadow, but there is no getspuid for getspnam, | |
so we resort to using the pw_name entry in the struct passwd we filled | |
earlier. | |
This prevents slock from crashing when $USER is empty (easy to do). If | |
you want to run slock as a different user, don't use | |
$ USER="tom" slock | |
but doas or sudo which were designed for this purpose. | |
Diffstat: | |
M slock.c | 4 ++-- | |
1 file changed, 2 insertions(+), 2 deletions(-) | |
--- | |
diff --git 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 (ma… | |
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 en… | |
hash = pw->pw_passwd; | |
#else |