Hi suckless folks,

I fresh adopted the maintaince for the suckless-tools package in debian.
Its debian-policy to avoid setuid root binaries wherever this is possible,
so I patched slock to not demant root-rights, but just checks,
if the password-query commands are successfull.
I also patched the Makefile to do not setuid root but setgid shadow instead.

I think, may the patch can go to upstream, so I send it here
Index: suckless-tools-39/slock/Makefile
===================================================================
--- suckless-tools-39.orig/slock/Makefile       2012-01-23 11:59:50.186494839 
+0100
+++ suckless-tools-39/slock/Makefile    2012-01-23 11:59:54.258583809 +0100
@@ -41,7 +41,8 @@
        @mkdir -p ${DESTDIR}${PREFIX}/bin
        @cp -f slock ${DESTDIR}${PREFIX}/bin
        @chmod 755 ${DESTDIR}${PREFIX}/bin/slock
-       @chmod u+s ${DESTDIR}${PREFIX}/bin/slock
+       @chgrp shadow ${DESTDIR}${PREFIX}/bin/slock
+       @chmod g+s ${DESTDIR}${PREFIX}/bin/slock
 
 uninstall:
        @echo removing executable file from ${DESTDIR}${PREFIX}/bin
Index: suckless-tools-39/slock/slock.c
===================================================================
--- suckless-tools-39.orig/slock/slock.c        2008-07-29 20:22:46.000000000 
+0200
+++ suckless-tools-39/slock/slock.c     2012-01-23 13:03:08.275556534 +0100
@@ -38,16 +38,17 @@
        const char *rval;
        struct passwd *pw;
 
-       if(geteuid() != 0)
-               die("slock: cannot retrieve password entry (make sure to suid 
slock)\n");
        pw = getpwuid(getuid());
+       if(!pw)
+               die("slock: cannot retrieve password entry (may you need to 
suid or sgid slock?)\n");
        endpwent();
        rval =  pw->pw_passwd;
-
-#if HAVE_SHADOW_H
+#ifdef HAVE_SHADOW_H
        {
                struct spwd *sp;
                sp = getspnam(getenv("USER"));
+               if(!sp)
+                       die("slock: cannot retrieve shadow entry (may you need 
to suid or sgid slock?)\n");
                endspent();
                rval = sp->sp_pwdp;
        }

Reply via email to