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; }