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 @@ | |||
| 3 | 3 | ||
| 4 | include config.mk | 4 | include config.mk |
| 5 | 5 | ||
| 6 | SRC = slock.c | 6 | SRC = slock.c ${COMPATSRC} |
| 7 | OBJ = ${SRC:.c=.o} | 7 | OBJ = ${SRC:.c=.o} |
| 8 | 8 | ||
| 9 | all: options slock | 9 | all: options slock |
| @@ -35,8 +35,8 @@ clean: | |||
| 35 | dist: clean | 35 | dist: clean |
| 36 | @echo creating dist tarball | 36 | @echo creating dist tarball |
| 37 | @mkdir -p slock-${VERSION} | 37 | @mkdir -p slock-${VERSION} |
| 38 | @cp -R LICENSE Makefile README config.def.h config.mk ${SRC} slock.1 \ | 38 | @cp -R LICENSE Makefile README config.def.h config.mk ${SRC} \ |
| 39 | slock-${VERSION} | 39 | explicit_bzero.c slock.1 slock-${VERSION} |
| 40 | @tar -cf slock-${VERSION}.tar slock-${VERSION} | 40 | @tar -cf slock-${VERSION}.tar slock-${VERSION} |
| 41 | @gzip slock-${VERSION}.tar | 41 | @gzip slock-${VERSION}.tar |
| 42 | @rm -rf slock-${VERSION} | 42 | @rm -rf slock-${VERSION} |
| @@ -18,9 +18,13 @@ LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr | |||
| 18 | CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H | 18 | CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H |
| 19 | CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} | 19 | CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} |
| 20 | LDFLAGS = -s ${LIBS} | 20 | LDFLAGS = -s ${LIBS} |
| 21 | COMPATSRC = explicit_bzero.c | ||
| 21 | 22 | ||
| 22 | # On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS and add -DHAVE_BSD_AUTH | 23 | # On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS and add -DHAVE_BSD_AUTH |
| 23 | # On OpenBSD and Darwin remove -lcrypt from LIBS | 24 | # On OpenBSD and Darwin remove -lcrypt from LIBS |
| 25 | #LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lXext -lXrandr | ||
| 26 | #CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_BSD_AUTH -D_BSD_SOURCE | ||
| 27 | #COMPATSRC = | ||
| 24 | 28 | ||
| 25 | # compiler and linker | 29 | # compiler and linker |
| 26 | CC = cc | 30 | 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 @@ | |||
| 1 | /* $OpenBSD: explicit_bzero.c,v 1.3 2014/06/21 02:34:26 matthew Exp $ */ | ||
| 2 | /* | ||
| 3 | * Public domain. | ||
| 4 | * Written by Matthew Dempsky. | ||
| 5 | */ | ||
| 6 | |||
| 7 | #include <string.h> | ||
| 8 | |||
| 9 | __attribute__((weak)) void | ||
| 10 | __explicit_bzero_hook(void *buf, size_t len) | ||
| 11 | { | ||
| 12 | } | ||
| 13 | |||
| 14 | void | ||
| 15 | explicit_bzero(void *buf, size_t len) | ||
| 16 | { | ||
| 17 | memset(buf, 0, len); | ||
| 18 | __explicit_bzero_hook(buf, len); | ||
| 19 | } | ||
| @@ -23,6 +23,8 @@ | |||
| 23 | #include <bsd_auth.h> | 23 | #include <bsd_auth.h> |
| 24 | #endif | 24 | #endif |
| 25 | 25 | ||
| 26 | #include "util.h" | ||
| 27 | |||
| 26 | enum { | 28 | enum { |
| 27 | INIT, | 29 | INIT, |
| 28 | INPUT, | 30 | INPUT, |
| @@ -135,7 +137,7 @@ readpw(Display *dpy, const char *pws) | |||
| 135 | * timeout. */ | 137 | * timeout. */ |
| 136 | while (running && !XNextEvent(dpy, &ev)) { | 138 | while (running && !XNextEvent(dpy, &ev)) { |
| 137 | if (ev.type == KeyPress) { | 139 | if (ev.type == KeyPress) { |
| 138 | buf[0] = 0; | 140 | explicit_bzero(&buf, sizeof(buf)); |
| 139 | num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0); | 141 | num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0); |
| 140 | if (IsKeypadKey(ksym)) { | 142 | if (IsKeypadKey(ksym)) { |
| 141 | if (ksym == XK_KP_Enter) | 143 | if (ksym == XK_KP_Enter) |
| @@ -161,14 +163,16 @@ readpw(Display *dpy, const char *pws) | |||
| 161 | XBell(dpy, 100); | 163 | XBell(dpy, 100); |
| 162 | failure = True; | 164 | failure = True; |
| 163 | } | 165 | } |
| 166 | explicit_bzero(&passwd, sizeof(passwd)); | ||
| 164 | len = 0; | 167 | len = 0; |
| 165 | break; | 168 | break; |
| 166 | case XK_Escape: | 169 | case XK_Escape: |
| 170 | explicit_bzero(&passwd, sizeof(passwd)); | ||
| 167 | len = 0; | 171 | len = 0; |
| 168 | break; | 172 | break; |
| 169 | case XK_BackSpace: | 173 | case XK_BackSpace: |
| 170 | if (len) | 174 | if (len) |
| 171 | --len; | 175 | passwd[len--] = 0; |
| 172 | break; | 176 | break; |
| 173 | default: | 177 | default: |
| 174 | if (num && !iscntrl((int)buf[0]) && (len + num < sizeof(passwd))) { | 178 | if (num && !iscntrl((int)buf[0]) && (len + num < sizeof(passwd))) { |
| @@ -0,0 +1,2 @@ | |||
| 1 | #undef explicit_bzero | ||
| 2 | void explicit_bzero(void *, size_t); | ||
