diff options
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | config.mk | 4 | ||||
| -rw-r--r-- | explicit_bzero.c | 19 | ||||
| -rw-r--r-- | slock.c | 8 | ||||
| -rw-r--r-- | util.h | 2 | 
5 files changed, 34 insertions, 5 deletions
@@ -3,7 +3,7 @@  include config.mk -SRC = slock.c +SRC = slock.c ${COMPATSRC}  OBJ = ${SRC:.c=.o}  all: options slock @@ -35,8 +35,8 @@ clean:  dist: clean  	@echo creating dist tarball  	@mkdir -p slock-${VERSION} -	@cp -R LICENSE Makefile README config.def.h config.mk ${SRC} slock.1 \ -		slock-${VERSION} +	@cp -R LICENSE Makefile README config.def.h config.mk ${SRC} \ +		explicit_bzero.c slock.1 slock-${VERSION}  	@tar -cf slock-${VERSION}.tar slock-${VERSION}  	@gzip slock-${VERSION}.tar  	@rm -rf slock-${VERSION} @@ -18,9 +18,13 @@ LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr  CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H  CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}  LDFLAGS = -s ${LIBS} +COMPATSRC = explicit_bzero.c  # On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS and add -DHAVE_BSD_AUTH  # On OpenBSD and Darwin remove -lcrypt from LIBS +#LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lXext -lXrandr +#CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_BSD_AUTH -D_BSD_SOURCE +#COMPATSRC =  # compiler and linker  CC = cc diff --git a/explicit_bzero.c b/explicit_bzero.c new file mode 100644 index 0000000..3e33ca8 --- /dev/null +++ b/explicit_bzero.c @@ -0,0 +1,19 @@ +/*	$OpenBSD: explicit_bzero.c,v 1.3 2014/06/21 02:34:26 matthew Exp $ */ +/* + * Public domain. + * Written by Matthew Dempsky. + */ + +#include <string.h> + +__attribute__((weak)) void +__explicit_bzero_hook(void *buf, size_t len) +{ +} + +void +explicit_bzero(void *buf, size_t len) +{ +	memset(buf, 0, len); +	__explicit_bzero_hook(buf, len); +} @@ -23,6 +23,8 @@  #include <bsd_auth.h>  #endif +#include "util.h" +  enum {  	INIT,  	INPUT, @@ -135,7 +137,7 @@ readpw(Display *dpy, const char *pws)  	 * timeout. */  	while (running && !XNextEvent(dpy, &ev)) {  		if (ev.type == KeyPress) { -			buf[0] = 0; +			explicit_bzero(&buf, sizeof(buf));  			num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0);  			if (IsKeypadKey(ksym)) {  				if (ksym == XK_KP_Enter) @@ -161,14 +163,16 @@ readpw(Display *dpy, const char *pws)  					XBell(dpy, 100);  					failure = True;  				} +				explicit_bzero(&passwd, sizeof(passwd));  				len = 0;  				break;  			case XK_Escape: +				explicit_bzero(&passwd, sizeof(passwd));  				len = 0;  				break;  			case XK_BackSpace:  				if (len) -					--len; +					passwd[len--] = 0;  				break;  			default:  				if (num && !iscntrl((int)buf[0]) && (len + num < sizeof(passwd))) { @@ -0,0 +1,2 @@ +#undef explicit_bzero +void explicit_bzero(void *, size_t);  | 
