aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFRIGN <dev@frign.de>2016-09-11 23:17:53 +0200
committerMarkus Teich <markus.teich@stusta.mhn.de>2016-09-23 18:54:56 +0200
commitdc2e8e839e4d72f5fec36c9a0474e6062a7a8f51 (patch)
tree96a61fe42f121ff860cd2f225472db7c400feba0
parent9a617db716641da8489e2062e04098220954bffe (diff)
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.
-rw-r--r--slock.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/slock.c b/slock.c
index f799174..6dedc69 100644
--- a/slock.c
+++ b/slock.c
@@ -103,14 +103,14 @@ gethash(void)
103#if HAVE_SHADOW_H 103#if HAVE_SHADOW_H
104 if (hash[0] == 'x' && hash[1] == '\0') { 104 if (hash[0] == 'x' && hash[1] == '\0') {
105 struct spwd *sp; 105 struct spwd *sp;
106 if (!(sp = getspnam(getenv("USER")))) 106 if (!(sp = getspnam(pw->pw_name)))
107 die("slock: getspnam: cannot retrieve shadow entry (make sure to suid or sgid slock)\n"); 107 die("slock: getspnam: cannot retrieve shadow entry (make sure to suid or sgid slock)\n");
108 hash = sp->sp_pwdp; 108 hash = sp->sp_pwdp;
109 } 109 }
110#else 110#else
111 if (hash[0] == '*' && hash[1] == '\0') { 111 if (hash[0] == '*' && hash[1] == '\0') {
112#ifdef __OpenBSD__ 112#ifdef __OpenBSD__
113 if (!(pw = getpwnam_shadow(getenv("USER")))) 113 if (!(pw = getpwuid_shadow(getuid())))
114 die("slock: getpwnam_shadow: cannot retrieve shadow entry (make sure to suid or sgid slock)\n"); 114 die("slock: getpwnam_shadow: cannot retrieve shadow entry (make sure to suid or sgid slock)\n");
115 hash = pw->pw_passwd; 115 hash = pw->pw_passwd;
116#else 116#else