Hello, people!
I use slock for quite a strange purpose from time to time :).
Namely, I run it using cron every 55 minutes, to get away from computer and
stretch my body a little bit. But crontab file does not contain USER
environment variable by default, so I'd spent a lot of time figuring out
why slock crashing, instead of locking my screen.
I had created a little patch, which checks if USER variable is available,
and if not, it shows error message.
Yours,
Ivan
From e116c16170248a39f70755531830b0ea93e8a337 Mon Sep 17 00:00:00 2001
From: Ivan Vershinin <i...@vershinin.net>
Date: Wed, 18 Dec 2013 16:59:43 +0200
Subject: [PATCH] fixed segfault if USER environment variable is empty

---
 slock.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/slock.c b/slock.c
index 467937c..747fc89 100644
--- a/slock.c
+++ b/slock.c
@@ -73,8 +73,12 @@ getpw(void) { /* only run as root */
 
 #if HAVE_SHADOW_H
 	if (strlen(rval) >= 1) { /* kludge, assumes pw placeholder entry has len >= 1 */
+		const char* user;
+		user = getenv("USER");
+		if(!user)
+			die("slock: USER environment variable is empty!\n");
 		struct spwd *sp;
-		sp = getspnam(getenv("USER"));
+		sp = getspnam(user);
 		if(!sp)
 			die("slock: cannot retrieve shadow entry (make sure to suid or sgid slock)\n");
 		endspent();
-- 
1.8.5.1

Reply via email to