From d56151fe12bba6c5ddf2760c107dcb54fea98c59 Mon Sep 17 00:00:00 2001 From: klein panic Date: Wed, 5 Mar 2025 20:34:38 -0500 Subject: [PATCH] updated keys to include slock usage --- KleinDwm/dwm | Bin 114264 -> 114272 bytes KleinDwm/dwm.o | Bin 128080 -> 128144 bytes KleinDwm/keys.h | 5 +- slock/LICENSE | 25 +++ slock/Makefile | 46 +++++ slock/README | 24 +++ slock/arg.h | 65 +++++++ slock/config.def.h | 12 ++ slock/config.h | 12 ++ slock/config.mk | 29 +++ slock/explicit_bzero.c | 19 ++ slock/explicit_bzero.o | Bin 0 -> 1296 bytes slock/slock | Bin 0 -> 19000 bytes slock/slock.1 | 45 +++++ slock/slock.c | 395 +++++++++++++++++++++++++++++++++++++++++ slock/slock.o | Bin 0 -> 10896 bytes slock/util.h | 2 + 17 files changed, 676 insertions(+), 3 deletions(-) create mode 100644 slock/LICENSE create mode 100644 slock/Makefile create mode 100644 slock/README create mode 100644 slock/arg.h create mode 100644 slock/config.def.h create mode 100644 slock/config.h create mode 100644 slock/config.mk create mode 100644 slock/explicit_bzero.c create mode 100644 slock/explicit_bzero.o create mode 100755 slock/slock create mode 100644 slock/slock.1 create mode 100644 slock/slock.c create mode 100644 slock/slock.o create mode 100644 slock/util.h diff --git a/KleinDwm/dwm b/KleinDwm/dwm index 9a35285680c18563baf9418db365f9ad9a6f0a81..e2e9701cc853874d19c2a2ac48b63bea2fa3470b 100755 GIT binary patch delta 9377 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 bBz}kOmb*b+ZO(ko&czrxx$vX7 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 o<%}z~Ykp#^XJqR diff --git a/KleinDwm/keys.h b/KleinDwm/keys.h index b6c59c0..1c9b2dd 100644 --- a/KleinDwm/keys.h +++ b/KleinDwm/keys.h @@ -28,8 +28,6 @@ static const char *termcmd[] = { TERMINAL, NULL }; static const char *inc_light[] = { "brightness", "-a", "up", NULL}; static const char *dec_light[] = { "brightness", "-a", "down", NULL }; -/*xrandr control gui wrapper*/ -static const char *xrandrwrap[] = { "xrandrwrap", NULL }; /* screenshot command */ static const char *scrotselcmd[] = { "scrot", "-s", "/home/klein/Pictures/screenshots/Screenshot_%Y-%m-%d_%H-%M-%S.png", NULL }; @@ -100,7 +98,8 @@ static const Key keys[] = { { 0, -1, XK_F10, spawn, { .v = scrotselcmd } }, { 0, -1, XF86XK_MonBrightnessUp, spawn, { .v = inc_light } }, { 0, -1, XF86XK_MonBrightnessDown, spawn, { .v = dec_light } }, - { 0, -1, XK_F8, spawn, { .v = xrandrwrap } }, + { MODKEY|ShiftMask, -1, XK_l, spawn, SHCMD("slock") } + }; /* button definitions */ diff --git a/slock/LICENSE b/slock/LICENSE new file mode 100644 index 0000000..cb52dba --- /dev/null +++ b/slock/LICENSE @@ -0,0 +1,25 @@ +MIT/X Consortium License + +© 2015-2016 Markus Teich +© 2014 Dimitris Papastamos +© 2006-2014 Anselm R Garbe +© 2014-2016 Laslo Hunhold +© 2016-2023 Hiltjo Posthuma + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/slock/Makefile b/slock/Makefile new file mode 100644 index 0000000..6d74b21 --- /dev/null +++ b/slock/Makefile @@ -0,0 +1,46 @@ +# slock - simple screen locker +# See LICENSE file for copyright and license details. + +include config.mk + +SRC = slock.c ${COMPATSRC} +OBJ = ${SRC:.c=.o} + +all: slock + +.c.o: + ${CC} -c ${CFLAGS} $< + +${OBJ}: config.h config.mk arg.h util.h + +config.h: + cp config.def.h $@ + +slock: ${OBJ} + ${CC} -o $@ ${OBJ} ${LDFLAGS} + +clean: + rm -f slock ${OBJ} slock-${VERSION}.tar.gz + +dist: clean + mkdir -p slock-${VERSION} + cp -R LICENSE Makefile README slock.1 config.mk \ + ${SRC} config.def.h arg.h util.h slock-${VERSION} + tar -cf slock-${VERSION}.tar slock-${VERSION} + gzip slock-${VERSION}.tar + rm -rf slock-${VERSION} + +install: all + mkdir -p ${DESTDIR}${PREFIX}/bin + cp -f slock ${DESTDIR}${PREFIX}/bin + chmod 755 ${DESTDIR}${PREFIX}/bin/slock + chmod u+s ${DESTDIR}${PREFIX}/bin/slock + mkdir -p ${DESTDIR}${MANPREFIX}/man1 + sed "s/VERSION/${VERSION}/g" ${DESTDIR}${MANPREFIX}/man1/slock.1 + chmod 644 ${DESTDIR}${MANPREFIX}/man1/slock.1 + +uninstall: + rm -f ${DESTDIR}${PREFIX}/bin/slock + rm -f ${DESTDIR}${MANPREFIX}/man1/slock.1 + +.PHONY: all clean dist install uninstall diff --git a/slock/README b/slock/README new file mode 100644 index 0000000..dcacd01 --- /dev/null +++ b/slock/README @@ -0,0 +1,24 @@ +slock - simple screen locker +============================ +simple screen locker utility for X. + + +Requirements +------------ +In order to build slock you need the Xlib header files. + + +Installation +------------ +Edit config.mk to match your local setup (slock is installed into +the /usr/local namespace by default). + +Afterwards enter the following command to build and install slock +(if necessary as root): + + make clean install + + +Running slock +------------- +Simply invoke the 'slock' command. To get out of it, enter your password. diff --git a/slock/arg.h b/slock/arg.h new file mode 100644 index 0000000..0b23c53 --- /dev/null +++ b/slock/arg.h @@ -0,0 +1,65 @@ +/* + * Copy me if you can. + * by 20h + */ + +#ifndef ARG_H__ +#define ARG_H__ + +extern char *argv0; + +/* use main(int argc, char *argv[]) */ +#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ + argv[0] && argv[0][0] == '-'\ + && argv[0][1];\ + argc--, argv++) {\ + char argc_;\ + char **argv_;\ + int brk_;\ + if (argv[0][1] == '-' && argv[0][2] == '\0') {\ + argv++;\ + argc--;\ + break;\ + }\ + for (brk_ = 0, argv[0]++, argv_ = argv;\ + argv[0][0] && !brk_;\ + argv[0]++) {\ + if (argv_ != argv)\ + break;\ + argc_ = argv[0][0];\ + switch (argc_) + +/* Handles obsolete -NUM syntax */ +#define ARGNUM case '0':\ + case '1':\ + case '2':\ + case '3':\ + case '4':\ + case '5':\ + case '6':\ + case '7':\ + case '8':\ + case '9' + +#define ARGEND }\ + } + +#define ARGC() argc_ + +#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX)) + +#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ + ((x), abort(), (char *)0) :\ + (brk_ = 1, (argv[0][1] != '\0')?\ + (&argv[0][1]) :\ + (argc--, argv++, argv[0]))) + +#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\ + (char *)0 :\ + (brk_ = 1, (argv[0][1] != '\0')?\ + (&argv[0][1]) :\ + (argc--, argv++, argv[0]))) + +#define LNGARG() &argv[0][0] + +#endif diff --git a/slock/config.def.h b/slock/config.def.h new file mode 100644 index 0000000..9855e21 --- /dev/null +++ b/slock/config.def.h @@ -0,0 +1,12 @@ +/* user and group to drop privileges to */ +static const char *user = "nobody"; +static const char *group = "nogroup"; + +static const char *colorname[NUMCOLS] = { + [INIT] = "black", /* after initialization */ + [INPUT] = "#005577", /* during input */ + [FAILED] = "#CC3333", /* wrong password */ +}; + +/* treat a cleared input like a wrong password (color) */ +static const int failonclear = 1; diff --git a/slock/config.h b/slock/config.h new file mode 100644 index 0000000..9855e21 --- /dev/null +++ b/slock/config.h @@ -0,0 +1,12 @@ +/* user and group to drop privileges to */ +static const char *user = "nobody"; +static const char *group = "nogroup"; + +static const char *colorname[NUMCOLS] = { + [INIT] = "black", /* after initialization */ + [INPUT] = "#005577", /* during input */ + [FAILED] = "#CC3333", /* wrong password */ +}; + +/* treat a cleared input like a wrong password (color) */ +static const int failonclear = 1; diff --git a/slock/config.mk b/slock/config.mk new file mode 100644 index 0000000..514c236 --- /dev/null +++ b/slock/config.mk @@ -0,0 +1,29 @@ +# slock version +VERSION = 1.5 + +# Customize below to fit your system + +# paths +PREFIX = /usr/local +MANPREFIX = ${PREFIX}/share/man + +X11INC = /usr/X11R6/include +X11LIB = /usr/X11R6/lib + +# includes and libs +INCS = -I. -I/usr/include -I${X11INC} +LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr + +# flags +CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H +CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} +LDFLAGS = -s ${LIBS} +COMPATSRC = explicit_bzero.c + +# On OpenBSD and Darwin remove -lcrypt from LIBS +#LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lXext -lXrandr +# On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS +# On NetBSD add -D_NETBSD_SOURCE to CPPFLAGS +#CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_NETBSD_SOURCE +# On OpenBSD set COMPATSRC to empty +#COMPATSRC = diff --git a/slock/explicit_bzero.c b/slock/explicit_bzero.c new file mode 100644 index 0000000..3e33ca8 --- /dev/null +++ b/slock/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 + +__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); +} diff --git a/slock/explicit_bzero.o b/slock/explicit_bzero.o new file mode 100644 index 0000000000000000000000000000000000000000..3aa6961dfa35bb9d6da9f01261cab864bfd4474e GIT binary patch literal 1296 zcmb<-^>JfjWMqH=Mg}_u1P><4z#zbcU^{@B4h%dD+zf{e4|sHb^yvKcd6h@!^_O57 zcV}lS1r3+fq|C%T1w$h}BRvCMLlaFX6RdkeC6KEd-@;Q6RUoFns)vO`aKx&p_rWA&GOkTQsTBn| znaPV5_40b)=^A>`~z|;8=6UwG{e9kj3y3J zi!3C~00|?QdYD`WRG|b^fRlj%95))`s1%qA29uZs)L6KL4g&)N$V_te z8$#`erB|52F#AE_0}}($F#BP&6;wY+4jC6CbCB3DeJ~+^sD4nIfr)|W3J}4-zbCyFv0hKm-E=1I!&<(0l;1AEqBJd6W?*122XT-vR2VKI2sIZj0A*}|DvX5kVH8vt#$^BidKg?- literal 0 HcmV?d00001 diff --git a/slock/slock b/slock/slock new file mode 100755 index 0000000000000000000000000000000000000000..59aebfb7dadaa9929a0146e1d7abe61ba6c01dcb GIT binary patch literal 19000 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 Uvm066e5n1Pb0m<(VftWV09=
t<8 literal 0 HcmV?d00001 diff --git a/slock/slock.1 b/slock/slock.1 new file mode 100644 index 0000000..40c15e1 --- /dev/null +++ b/slock/slock.1 @@ -0,0 +1,45 @@ +.Dd October 6, 2023 +.Dt SLOCK 1 +.Os +.Sh NAME +.Nm slock +.Nd simple X screen locker +.Sh SYNOPSIS +.Nm +.Op Fl v +.Op Ar cmd Op Ar arg ... +.Sh DESCRIPTION +.Nm +is a simple X screen locker. +If provided, +.Ar cmd +is executed after the screen has been locked. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl v +Print version information to stdout and exit. +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +$ +.Nm +/usr/sbin/s2ram +.Sh SECURITY CONSIDERATIONS +To make sure a locked screen can not be bypassed by switching VTs +or killing the X server with Ctrl+Alt+Backspace, it is recommended +to disable both in +.Xr xorg.conf 5 +for maximum security: +.Bd -literal +Section "ServerFlags" + Option "DontVTSwitch" "True" + Option "DontZap" "True" +EndSection +.Ed +.Sh CUSTOMIZATION +.Nm +can be customized by creating a custom config.h from config.def.h and +(re)compiling the source code. +This keeps it fast, secure and simple. diff --git a/slock/slock.c b/slock/slock.c new file mode 100644 index 0000000..b2f14e3 --- /dev/null +++ b/slock/slock.c @@ -0,0 +1,395 @@ +/* See LICENSE file for license details. */ +#define _XOPEN_SOURCE 500 +#if HAVE_SHADOW_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "arg.h" +#include "util.h" + +char *argv0; + +enum { + INIT, + INPUT, + FAILED, + NUMCOLS +}; + +struct lock { + int screen; + Window root, win; + Pixmap pmap; + unsigned long colors[NUMCOLS]; +}; + +struct xrandr { + int active; + int evbase; + int errbase; +}; + +#include "config.h" + +static void +die(const char *errstr, ...) +{ + va_list ap; + + va_start(ap, errstr); + vfprintf(stderr, errstr, ap); + va_end(ap); + exit(1); +} + +#ifdef __linux__ +#include +#include + +static void +dontkillme(void) +{ + FILE *f; + const char oomfile[] = "/proc/self/oom_score_adj"; + + if (!(f = fopen(oomfile, "w"))) { + if (errno == ENOENT) + return; + die("slock: fopen %s: %s\n", oomfile, strerror(errno)); + } + fprintf(f, "%d", OOM_SCORE_ADJ_MIN); + if (fclose(f)) { + if (errno == EACCES) + die("slock: unable to disable OOM killer. " + "Make sure to suid or sgid slock.\n"); + else + die("slock: fclose %s: %s\n", oomfile, strerror(errno)); + } +} +#endif + +static const char * +gethash(void) +{ + const char *hash; + struct passwd *pw; + + /* Check if the current user has a password entry */ + errno = 0; + if (!(pw = getpwuid(getuid()))) { + if (errno) + die("slock: getpwuid: %s\n", strerror(errno)); + else + die("slock: cannot retrieve password entry\n"); + } + hash = pw->pw_passwd; + +#if HAVE_SHADOW_H + if (!strcmp(hash, "x")) { + struct spwd *sp; + if (!(sp = getspnam(pw->pw_name))) + die("slock: getspnam: cannot retrieve shadow entry. " + "Make sure to suid or sgid slock.\n"); + hash = sp->sp_pwdp; + } +#else + if (!strcmp(hash, "*")) { +#ifdef __OpenBSD__ + if (!(pw = getpwuid_shadow(getuid()))) + die("slock: getpwnam_shadow: cannot retrieve shadow entry. " + "Make sure to suid or sgid slock.\n"); + hash = pw->pw_passwd; +#else + die("slock: getpwuid: cannot retrieve shadow entry. " + "Make sure to suid or sgid slock.\n"); +#endif /* __OpenBSD__ */ + } +#endif /* HAVE_SHADOW_H */ + + return hash; +} + +static void +readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, + const char *hash) +{ + XRRScreenChangeNotifyEvent *rre; + char buf[32], passwd[256], *inputhash; + int num, screen, running, failure, oldc; + unsigned int len, color; + KeySym ksym; + XEvent ev; + + len = 0; + running = 1; + failure = 0; + oldc = INIT; + + while (running && !XNextEvent(dpy, &ev)) { + if (ev.type == KeyPress) { + explicit_bzero(&buf, sizeof(buf)); + num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0); + if (IsKeypadKey(ksym)) { + if (ksym == XK_KP_Enter) + ksym = XK_Return; + else if (ksym >= XK_KP_0 && ksym <= XK_KP_9) + ksym = (ksym - XK_KP_0) + XK_0; + } + if (IsFunctionKey(ksym) || + IsKeypadKey(ksym) || + IsMiscFunctionKey(ksym) || + IsPFKey(ksym) || + IsPrivateKeypadKey(ksym)) + continue; + switch (ksym) { + case XK_Return: + passwd[len] = '\0'; + errno = 0; + if (!(inputhash = crypt(passwd, hash))) + fprintf(stderr, "slock: crypt: %s\n", strerror(errno)); + else + running = !!strcmp(inputhash, hash); + if (running) { + XBell(dpy, 100); + failure = 1; + } + explicit_bzero(&passwd, sizeof(passwd)); + len = 0; + break; + case XK_Escape: + explicit_bzero(&passwd, sizeof(passwd)); + len = 0; + break; + case XK_BackSpace: + if (len) + passwd[--len] = '\0'; + break; + default: + if (num && !iscntrl((int)buf[0]) && + (len + num < sizeof(passwd))) { + memcpy(passwd + len, buf, num); + len += num; + } + break; + } + color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT); + if (running && oldc != color) { + for (screen = 0; screen < nscreens; screen++) { + XSetWindowBackground(dpy, + locks[screen]->win, + locks[screen]->colors[color]); + XClearWindow(dpy, locks[screen]->win); + } + oldc = color; + } + } else if (rr->active && ev.type == rr->evbase + RRScreenChangeNotify) { + rre = (XRRScreenChangeNotifyEvent*)&ev; + for (screen = 0; screen < nscreens; screen++) { + if (locks[screen]->win == rre->window) { + if (rre->rotation == RR_Rotate_90 || + rre->rotation == RR_Rotate_270) + XResizeWindow(dpy, locks[screen]->win, + rre->height, rre->width); + else + XResizeWindow(dpy, locks[screen]->win, + rre->width, rre->height); + XClearWindow(dpy, locks[screen]->win); + break; + } + } + } else { + for (screen = 0; screen < nscreens; screen++) + XRaiseWindow(dpy, locks[screen]->win); + } + } +} + +static struct lock * +lockscreen(Display *dpy, struct xrandr *rr, int screen) +{ + char curs[] = {0, 0, 0, 0, 0, 0, 0, 0}; + int i, ptgrab, kbgrab; + struct lock *lock; + XColor color, dummy; + XSetWindowAttributes wa; + Cursor invisible; + + if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct lock)))) + return NULL; + + lock->screen = screen; + lock->root = RootWindow(dpy, lock->screen); + + for (i = 0; i < NUMCOLS; i++) { + XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), + colorname[i], &color, &dummy); + lock->colors[i] = color.pixel; + } + + /* init */ + wa.override_redirect = 1; + wa.background_pixel = lock->colors[INIT]; + lock->win = XCreateWindow(dpy, lock->root, 0, 0, + DisplayWidth(dpy, lock->screen), + DisplayHeight(dpy, lock->screen), + 0, DefaultDepth(dpy, lock->screen), + CopyFromParent, + DefaultVisual(dpy, lock->screen), + CWOverrideRedirect | CWBackPixel, &wa); + lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8); + invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, + &color, &color, 0, 0); + XDefineCursor(dpy, lock->win, invisible); + + /* Try to grab mouse pointer *and* keyboard for 600ms, else fail the lock */ + for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) { + if (ptgrab != GrabSuccess) { + ptgrab = XGrabPointer(dpy, lock->root, False, + ButtonPressMask | ButtonReleaseMask | + PointerMotionMask, GrabModeAsync, + GrabModeAsync, None, invisible, CurrentTime); + } + if (kbgrab != GrabSuccess) { + kbgrab = XGrabKeyboard(dpy, lock->root, True, + GrabModeAsync, GrabModeAsync, CurrentTime); + } + + /* input is grabbed: we can lock the screen */ + if (ptgrab == GrabSuccess && kbgrab == GrabSuccess) { + XMapRaised(dpy, lock->win); + if (rr->active) + XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask); + + XSelectInput(dpy, lock->root, SubstructureNotifyMask); + return lock; + } + + /* retry on AlreadyGrabbed but fail on other errors */ + if ((ptgrab != AlreadyGrabbed && ptgrab != GrabSuccess) || + (kbgrab != AlreadyGrabbed && kbgrab != GrabSuccess)) + break; + + usleep(100000); + } + + /* we couldn't grab all input: fail out */ + if (ptgrab != GrabSuccess) + fprintf(stderr, "slock: unable to grab mouse pointer for screen %d\n", + screen); + if (kbgrab != GrabSuccess) + fprintf(stderr, "slock: unable to grab keyboard for screen %d\n", + screen); + return NULL; +} + +static void +usage(void) +{ + die("usage: slock [-v] [cmd [arg ...]]\n"); +} + +int +main(int argc, char **argv) { + struct xrandr rr; + struct lock **locks; + struct passwd *pwd; + struct group *grp; + uid_t duid; + gid_t dgid; + const char *hash; + Display *dpy; + int s, nlocks, nscreens; + + ARGBEGIN { + case 'v': + puts("slock-"VERSION); + return 0; + default: + usage(); + } ARGEND + + /* validate drop-user and -group */ + errno = 0; + if (!(pwd = getpwnam(user))) + die("slock: getpwnam %s: %s\n", user, + errno ? strerror(errno) : "user entry not found"); + duid = pwd->pw_uid; + errno = 0; + if (!(grp = getgrnam(group))) + die("slock: getgrnam %s: %s\n", group, + errno ? strerror(errno) : "group entry not found"); + dgid = grp->gr_gid; + +#ifdef __linux__ + dontkillme(); +#endif + + hash = gethash(); + errno = 0; + if (!crypt("", hash)) + die("slock: crypt: %s\n", strerror(errno)); + + if (!(dpy = XOpenDisplay(NULL))) + die("slock: cannot open display\n"); + + /* drop privileges */ + if (setgroups(0, NULL) < 0) + die("slock: setgroups: %s\n", strerror(errno)); + if (setgid(dgid) < 0) + die("slock: setgid: %s\n", strerror(errno)); + if (setuid(duid) < 0) + die("slock: setuid: %s\n", strerror(errno)); + + /* check for Xrandr support */ + rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase); + + /* get number of screens in display "dpy" and blank them */ + nscreens = ScreenCount(dpy); + if (!(locks = calloc(nscreens, sizeof(struct lock *)))) + die("slock: out of memory\n"); + for (nlocks = 0, s = 0; s < nscreens; s++) { + if ((locks[s] = lockscreen(dpy, &rr, s)) != NULL) + nlocks++; + else + break; + } + XSync(dpy, 0); + + /* did we manage to lock everything? */ + if (nlocks != nscreens) + return 1; + + /* run post-lock command */ + if (argc > 0) { + switch (fork()) { + case -1: + die("slock: fork failed: %s\n", strerror(errno)); + case 0: + if (close(ConnectionNumber(dpy)) < 0) + die("slock: close: %s\n", strerror(errno)); + execvp(argv[0], argv); + fprintf(stderr, "slock: execvp %s: %s\n", argv[0], strerror(errno)); + _exit(1); + } + } + + /* everything is now blank. Wait for the correct password */ + readpw(dpy, &rr, locks, nscreens, hash); + + return 0; +} diff --git a/slock/slock.o b/slock/slock.o new file mode 100644 index 0000000000000000000000000000000000000000..957a99b442e09635dec65851cf64076a0469e519 GIT binary patch literal 10896 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 a84j`!BoD)&Haj-`8Bq5xgeip5==uS!nayGV literal 0 HcmV?d00001 diff --git a/slock/util.h b/slock/util.h new file mode 100644 index 0000000..6f748b8 --- /dev/null +++ b/slock/util.h @@ -0,0 +1,2 @@ +#undef explicit_bzero +void explicit_bzero(void *, size_t);