Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
65cb721c9e | ||
|
|
890eaf6343 | ||
|
|
b04f4d0810 | ||
|
|
55d985a354 | ||
|
|
3791a996e2 | ||
|
|
bf0a5577ac | ||
|
|
e3fb34364e | ||
|
|
a70d5d2429 | ||
|
|
a34d8fb432 | ||
|
|
e8bca65d62 | ||
|
|
ca6f30f621 | ||
|
|
2fec14c567 | ||
|
|
5678764412 | ||
|
|
aecfb3f680 |
No files matched your search
@@ -1,5 +1,6 @@
|
|||||||
MIT/X Consortium License
|
MIT/X Consortium License
|
||||||
|
|
||||||
|
© 2016-2026 Hiltjo Posthuma <hiltjo@codemadness.org>
|
||||||
© 2015-2016 Markus Teich <markus.teich@stusta.mhn.de>
|
© 2015-2016 Markus Teich <markus.teich@stusta.mhn.de>
|
||||||
© 2014 Dimitris Papastamos <sin@2f30.org>
|
© 2014 Dimitris Papastamos <sin@2f30.org>
|
||||||
© 2006-2014 Anselm R Garbe <anselm@garbe.us>
|
© 2006-2014 Anselm R Garbe <anselm@garbe.us>
|
||||||
|
|||||||
@@ -6,56 +6,41 @@ include config.mk
|
|||||||
SRC = slock.c ${COMPATSRC}
|
SRC = slock.c ${COMPATSRC}
|
||||||
OBJ = ${SRC:.c=.o}
|
OBJ = ${SRC:.c=.o}
|
||||||
|
|
||||||
all: options slock
|
all: slock
|
||||||
|
|
||||||
options:
|
|
||||||
@echo slock build options:
|
|
||||||
@echo "CFLAGS = ${CFLAGS}"
|
|
||||||
@echo "LDFLAGS = ${LDFLAGS}"
|
|
||||||
@echo "CC = ${CC}"
|
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@echo CC $<
|
${CC} -c ${CFLAGS} $<
|
||||||
@${CC} -c ${CFLAGS} $<
|
|
||||||
|
|
||||||
${OBJ}: config.h config.mk arg.h util.h
|
${OBJ}: config.h config.mk util.h
|
||||||
|
|
||||||
config.h:
|
config.h:
|
||||||
@echo creating $@ from config.def.h
|
cp config.def.h $@
|
||||||
@cp config.def.h $@
|
|
||||||
|
|
||||||
slock: ${OBJ}
|
slock: ${OBJ}
|
||||||
@echo CC -o $@
|
${CC} -o $@ ${OBJ} ${LDFLAGS}
|
||||||
@${CC} -o $@ ${OBJ} ${LDFLAGS}
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@echo cleaning
|
rm -f slock ${OBJ} slock-${VERSION}.tar.gz
|
||||||
@rm -f slock ${OBJ} slock-${VERSION}.tar.gz
|
|
||||||
|
|
||||||
dist: clean
|
dist: clean
|
||||||
@echo creating dist tarball
|
mkdir -p slock-${VERSION}
|
||||||
@mkdir -p slock-${VERSION}
|
cp -R LICENSE Makefile README slock.1 config.mk \
|
||||||
@cp -R LICENSE Makefile README slock.1 config.mk \
|
${SRC} config.def.h util.h slock-${VERSION}
|
||||||
${SRC} config.def.h arg.h util.h slock-${VERSION}
|
tar -cf slock-${VERSION}.tar slock-${VERSION}
|
||||||
@tar -cf slock-${VERSION}.tar slock-${VERSION}
|
gzip slock-${VERSION}.tar
|
||||||
@gzip slock-${VERSION}.tar
|
rm -rf slock-${VERSION}
|
||||||
@rm -rf slock-${VERSION}
|
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
@echo installing executable file to ${DESTDIR}${PREFIX}/bin
|
mkdir -p ${DESTDIR}${PREFIX}/bin
|
||||||
@mkdir -p ${DESTDIR}${PREFIX}/bin
|
cp -f slock ${DESTDIR}${PREFIX}/bin
|
||||||
@cp -f slock ${DESTDIR}${PREFIX}/bin
|
chmod 755 ${DESTDIR}${PREFIX}/bin/slock
|
||||||
@chmod 755 ${DESTDIR}${PREFIX}/bin/slock
|
chmod u+s ${DESTDIR}${PREFIX}/bin/slock
|
||||||
@chmod u+s ${DESTDIR}${PREFIX}/bin/slock
|
mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
||||||
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1
|
sed "s/VERSION/${VERSION}/g" <slock.1 >${DESTDIR}${MANPREFIX}/man1/slock.1
|
||||||
@mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
chmod 644 ${DESTDIR}${MANPREFIX}/man1/slock.1
|
||||||
@sed "s/VERSION/${VERSION}/g" <slock.1 >${DESTDIR}${MANPREFIX}/man1/slock.1
|
|
||||||
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/slock.1
|
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
@echo removing executable file from ${DESTDIR}${PREFIX}/bin
|
rm -f ${DESTDIR}${PREFIX}/bin/slock
|
||||||
@rm -f ${DESTDIR}${PREFIX}/bin/slock
|
rm -f ${DESTDIR}${MANPREFIX}/man1/slock.1
|
||||||
@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1
|
|
||||||
@rm -f ${DESTDIR}${MANPREFIX}/man1/slock.1
|
|
||||||
|
|
||||||
.PHONY: all options clean dist install uninstall
|
.PHONY: all clean dist install uninstall
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# slock version
|
# slock version
|
||||||
VERSION = 1.5
|
VERSION = 1.7
|
||||||
|
|
||||||
# Customize below to fit your system
|
# Customize below to fit your system
|
||||||
|
|
||||||
@@ -27,6 +27,3 @@ COMPATSRC = explicit_bzero.c
|
|||||||
#CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_NETBSD_SOURCE
|
#CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_NETBSD_SOURCE
|
||||||
# On OpenBSD set COMPATSRC to empty
|
# On OpenBSD set COMPATSRC to empty
|
||||||
#COMPATSRC =
|
#COMPATSRC =
|
||||||
|
|
||||||
# compiler and linker
|
|
||||||
CC = cc
|
|
||||||
@@ -1,39 +1,36 @@
|
|||||||
.Dd 2016-08-23
|
.Dd September 5, 2026
|
||||||
.Dt SLOCK 1
|
.Dt SLOCK 1
|
||||||
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
.Nm slock
|
.Nm slock
|
||||||
.Nd simple X screen locker
|
.Nd simple X screen locker
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Op Fl v
|
.Op Fl v
|
||||||
.Op Ar cmd Op Ar arg ...
|
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
.Nm
|
.Nm
|
||||||
is a simple X screen locker. If provided,
|
is a simple X screen locker.
|
||||||
.Ar cmd Op Ar arg ...
|
The options are as follows:
|
||||||
is executed after the screen has been locked.
|
|
||||||
.Sh OPTIONS
|
|
||||||
.Bl -tag -width Ds
|
.Bl -tag -width Ds
|
||||||
.It Fl v
|
.It Fl v
|
||||||
Print version information to stdout and exit.
|
Print version information to stdout and exit.
|
||||||
.El
|
.El
|
||||||
|
.Sh EXIT STATUS
|
||||||
|
.Ex -std
|
||||||
.Sh SECURITY CONSIDERATIONS
|
.Sh SECURITY CONSIDERATIONS
|
||||||
To make sure a locked screen can not be bypassed by switching VTs
|
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
|
or killing the X server with Ctrl+Alt+Backspace, it is recommended
|
||||||
to disable both in
|
to disable both in
|
||||||
.Xr xorg.conf 5
|
.Xr xorg.conf 5
|
||||||
for maximum security:
|
for maximum security:
|
||||||
.Bd -literal -offset left
|
.Bd -literal
|
||||||
Section "ServerFlags"
|
Section "ServerFlags"
|
||||||
Option "DontVTSwitch" "True"
|
Option "DontVTSwitch" "True"
|
||||||
Option "DontZap" "True"
|
Option "DontZap" "True"
|
||||||
EndSection
|
EndSection
|
||||||
.Ed
|
.Ed
|
||||||
.Sh EXAMPLES
|
|
||||||
$
|
|
||||||
.Nm
|
|
||||||
/usr/sbin/s2ram
|
|
||||||
.Sh CUSTOMIZATION
|
.Sh CUSTOMIZATION
|
||||||
.Nm
|
.Nm
|
||||||
can be customized by creating a custom config.h from config.def.h and
|
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.
|
(re)compiling the source code.
|
||||||
|
This keeps it fast, secure and simple.
|
||||||
@@ -19,7 +19,6 @@
|
|||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
#include "arg.h"
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
char *argv0;
|
char *argv0;
|
||||||
@@ -180,10 +179,13 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
|
|||||||
passwd[--len] = '\0';
|
passwd[--len] = '\0';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (num && !iscntrl((int)buf[0]) &&
|
if (num && !iscntrl((unsigned char)buf[0]) &&
|
||||||
(len + num < sizeof(passwd))) {
|
(len + num < sizeof(passwd))) {
|
||||||
memcpy(passwd + len, buf, num);
|
memcpy(passwd + len, buf, num);
|
||||||
len += num;
|
len += num;
|
||||||
|
} else if (buf[0] == '\025') { /* ctrl-u clears input */
|
||||||
|
explicit_bzero(&passwd, sizeof(passwd));
|
||||||
|
len = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -300,7 +302,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)
|
|||||||
static void
|
static void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
die("usage: slock [-v] [cmd [arg ...]]\n");
|
die("usage: slock [-v]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -315,13 +317,12 @@ main(int argc, char **argv) {
|
|||||||
Display *dpy;
|
Display *dpy;
|
||||||
int s, nlocks, nscreens;
|
int s, nlocks, nscreens;
|
||||||
|
|
||||||
ARGBEGIN {
|
if (argc > 1 && !strcmp(argv[1], "-v")) {
|
||||||
case 'v':
|
puts("slock-"VERSION);
|
||||||
fprintf(stderr, "slock-"VERSION"\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
} else if (argc > 1) {
|
||||||
usage();
|
usage();
|
||||||
} ARGEND
|
}
|
||||||
|
|
||||||
/* validate drop-user and -group */
|
/* validate drop-user and -group */
|
||||||
errno = 0;
|
errno = 0;
|
||||||
@@ -374,20 +375,6 @@ main(int argc, char **argv) {
|
|||||||
if (nlocks != nscreens)
|
if (nlocks != nscreens)
|
||||||
return 1;
|
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 */
|
/* everything is now blank. Wait for the correct password */
|
||||||
readpw(dpy, &rr, locks, nscreens, hash);
|
readpw(dpy, &rr, locks, nscreens, hash);
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user