slock

My build of the suckless screenlocker.
Log | Files | Refs | README | LICENSE

commit 0f1157d7e6cabe0394ffc35a0a58a30507af8ebd
parent 2fa12210c9b6795f51a3227aaf417afe7f94fbce
Author: Anselm R. Garbe <arg@10kloc.org>
Date:   Thu, 12 Oct 2006 08:11:08 +0200

applied BSD support patch
Diffstat:
Mconfig.mk | 5++++-
Mslock.c | 22+++++++++++++++++++++-
2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/config.mk b/config.mk @@ -15,11 +15,14 @@ INCS = -I. -I/usr/include -I${X11INC} LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 # flags -CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" +CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H LDFLAGS = ${LIBS} #CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" #LDFLAGS = -g ${LIBS} +# On *BSD remove -DHAVE_SHADOW_H from CFLAGS +# On OpenBSD remove -lcrypt from LIBS + # compiler and linker CC = cc LD = ${CC} diff --git a/slock.c b/slock.c @@ -2,7 +2,13 @@ * See LICENSE file for license details. */ #define _XOPEN_SOURCE + +#if HAVE_SHADOW_H #include <shadow.h> +#else +#include <pwd.h> +#endif + #include <stdlib.h> #include <stdio.h> #include <string.h> @@ -17,7 +23,11 @@ main(int argc, char **argv) { char curs[] = {0, 0, 0, 0, 0, 0, 0, 0}; char buf[32], passwd[256]; int num, prev_nitem, screen; +#if HAVE_SHADOW_H struct spwd *sp; +#else + struct passwd *pw; +#endif unsigned int i, len; Bool running = True; Cursor invisible; @@ -33,11 +43,17 @@ main(int argc, char **argv) { fputs("slock-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); exit(EXIT_SUCCESS); } - if(!(sp = getspnam(getenv("USER")))) { + if(geteuid() != 0) { fputs("slock: cannot retrieve password entry (make sure to suid slock)\n", stderr); exit(EXIT_FAILURE); } +#if HAVE_SHADOW_H + sp = getspnam(getenv("USER")); endspent(); +#else + pw = getpwuid(getuid()); + endpwent(); +#endif if(!(dpy = XOpenDisplay(0))) { fputs("slock: cannot open display\n", stderr); exit(EXIT_FAILURE); @@ -87,7 +103,11 @@ main(int argc, char **argv) { } switch(ksym) { case XK_Return: +#if HAVE_SHADOW_H if((running = strncmp(crypt(passwd, sp->sp_pwdp), sp->sp_pwdp, sizeof(passwd)))) +#else + if((running = strncmp(crypt(passwd, pw->pw_passwd), pw->pw_passwd, sizeof(passwd)))) +#endif XBell(dpy, 100); passwd[0] = 0; break;