Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a6a3471dd9 | ||
|
75dd779245 | ||
|
1460b14f45 | ||
|
c0fdcb8afc | ||
|
cc36050e44 | ||
|
049ccf9a90 | ||
|
4ed35d22dc |
1
.hgtags
1
.hgtags
@@ -5,3 +5,4 @@ f9157b1864388ad8f1920e5fde7c5849e73d8327 0.3
|
|||||||
bd24ea7fcca26b161225c464df23ecbfe85280e1 0.5
|
bd24ea7fcca26b161225c464df23ecbfe85280e1 0.5
|
||||||
dd226a81c09adfa86db232419b3000b7e406df68 0.6
|
dd226a81c09adfa86db232419b3000b7e406df68 0.6
|
||||||
c4635bb35a4581261f0187b347d5e596dd390ca3 0.7
|
c4635bb35a4581261f0187b347d5e596dd390ca3 0.7
|
||||||
|
c0eb8221ba49c6d10becc93c063c45196a3bb1ba 0.8
|
||||||
|
6
Makefile
6
Makefile
@@ -13,7 +13,6 @@ options:
|
|||||||
@echo "CFLAGS = ${CFLAGS}"
|
@echo "CFLAGS = ${CFLAGS}"
|
||||||
@echo "LDFLAGS = ${LDFLAGS}"
|
@echo "LDFLAGS = ${LDFLAGS}"
|
||||||
@echo "CC = ${CC}"
|
@echo "CC = ${CC}"
|
||||||
@echo "LD = ${LD}"
|
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@echo CC $<
|
@echo CC $<
|
||||||
@@ -22,9 +21,8 @@ options:
|
|||||||
${OBJ}: config.mk
|
${OBJ}: config.mk
|
||||||
|
|
||||||
slock: ${OBJ}
|
slock: ${OBJ}
|
||||||
@echo LD $@
|
@echo CC -o $@
|
||||||
@${LD} -o $@ ${OBJ} ${LDFLAGS}
|
@${CC} -o $@ ${OBJ} ${LDFLAGS}
|
||||||
@strip $@
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@echo cleaning
|
@echo cleaning
|
||||||
|
4
README
4
README
@@ -13,8 +13,8 @@ Installation
|
|||||||
Edit config.mk to match your local setup (slock is installed into
|
Edit config.mk to match your local setup (slock is installed into
|
||||||
the /usr/local namespace by default).
|
the /usr/local namespace by default).
|
||||||
|
|
||||||
Afterwards enter the following command to build and install slock (if
|
Afterwards enter the following command to build and install slock
|
||||||
necessary as root):
|
(if necessary as root):
|
||||||
|
|
||||||
make clean install
|
make clean install
|
||||||
|
|
||||||
|
12
config.mk
12
config.mk
@@ -1,5 +1,5 @@
|
|||||||
# slock version
|
# slock version
|
||||||
VERSION = 0.8
|
VERSION = 0.9
|
||||||
|
|
||||||
# Customize below to fit your system
|
# Customize below to fit your system
|
||||||
|
|
||||||
@@ -14,17 +14,15 @@ INCS = -I. -I/usr/include -I${X11INC}
|
|||||||
LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext
|
LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext
|
||||||
|
|
||||||
# flags
|
# flags
|
||||||
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
|
CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
|
||||||
LDFLAGS = ${LIBS}
|
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
|
||||||
#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
|
LDFLAGS = -s ${LIBS}
|
||||||
#LDFLAGS = -g ${LIBS}
|
|
||||||
|
|
||||||
# On *BSD remove -DHAVE_SHADOW_H from CFLAGS and add -DHAVE_BSD_AUTH
|
# On *BSD remove -DHAVE_SHADOW_H from CPPFLAGS and add -DHAVE_BSD_AUTH
|
||||||
# On OpenBSD and Darwin remove -lcrypt from LIBS
|
# On OpenBSD and Darwin remove -lcrypt from LIBS
|
||||||
|
|
||||||
# compiler and linker
|
# compiler and linker
|
||||||
CC = cc
|
CC = cc
|
||||||
LD = ${CC}
|
|
||||||
|
|
||||||
# Install mode. On BSD systems MODE=2755 and GROUP=auth
|
# Install mode. On BSD systems MODE=2755 and GROUP=auth
|
||||||
# On others MODE=4755 and GROUP=root
|
# On others MODE=4755 and GROUP=root
|
||||||
|
31
slock.c
31
slock.c
@@ -1,5 +1,4 @@
|
|||||||
/* © 2006-2008 Anselm R Garbe <garbeam at gmail dot com>
|
/* See LICENSE file for license details. */
|
||||||
* See LICENSE file for license details. */
|
|
||||||
#define _XOPEN_SOURCE 500
|
#define _XOPEN_SOURCE 500
|
||||||
#if HAVE_SHADOW_H
|
#if HAVE_SHADOW_H
|
||||||
#include <shadow.h>
|
#include <shadow.h>
|
||||||
@@ -23,8 +22,8 @@
|
|||||||
#include <bsd_auth.h>
|
#include <bsd_auth.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
static void
|
||||||
eprint(const char *errstr, ...) {
|
die(const char *errstr, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, errstr);
|
va_start(ap, errstr);
|
||||||
@@ -34,13 +33,13 @@ eprint(const char *errstr, ...) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_BSD_AUTH
|
#ifndef HAVE_BSD_AUTH
|
||||||
const char *
|
static const char *
|
||||||
get_password() { /* only run as root */
|
get_password() { /* only run as root */
|
||||||
const char *rval;
|
const char *rval;
|
||||||
struct passwd *pw;
|
struct passwd *pw;
|
||||||
|
|
||||||
if(geteuid() != 0)
|
if(geteuid() != 0)
|
||||||
eprint("slock: cannot retrieve password entry (make sure to suid slock)\n");
|
die("slock: cannot retrieve password entry (make sure to suid slock)\n");
|
||||||
pw = getpwuid(getuid());
|
pw = getpwuid(getuid());
|
||||||
endpwent();
|
endpwent();
|
||||||
rval = pw->pw_passwd;
|
rval = pw->pw_passwd;
|
||||||
@@ -56,7 +55,7 @@ get_password() { /* only run as root */
|
|||||||
|
|
||||||
/* drop privileges */
|
/* drop privileges */
|
||||||
if(setgid(pw->pw_gid) < 0 || setuid(pw->pw_uid) < 0)
|
if(setgid(pw->pw_gid) < 0 || setuid(pw->pw_uid) < 0)
|
||||||
eprint("slock: cannot drop privileges\n");
|
die("slock: cannot drop privileges\n");
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -82,16 +81,16 @@ main(int argc, char **argv) {
|
|||||||
XSetWindowAttributes wa;
|
XSetWindowAttributes wa;
|
||||||
|
|
||||||
if((argc == 2) && !strcmp("-v", argv[1]))
|
if((argc == 2) && !strcmp("-v", argv[1]))
|
||||||
eprint("slock-"VERSION", © 2006-2008 Anselm R Garbe\n");
|
die("slock-"VERSION", © 2006-2008 Anselm R Garbe\n");
|
||||||
else if(argc != 1)
|
else if(argc != 1)
|
||||||
eprint("usage: slock [-v]\n");
|
die("usage: slock [-v]\n");
|
||||||
|
|
||||||
#ifndef HAVE_BSD_AUTH
|
#ifndef HAVE_BSD_AUTH
|
||||||
pws = get_password();
|
pws = get_password();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(!(dpy = XOpenDisplay(0)))
|
if(!(dpy = XOpenDisplay(0)))
|
||||||
eprint("slock: cannot open display\n");
|
die("slock: cannot open display\n");
|
||||||
screen = DefaultScreen(dpy);
|
screen = DefaultScreen(dpy);
|
||||||
root = RootWindow(dpy, screen);
|
root = RootWindow(dpy, screen);
|
||||||
|
|
||||||
@@ -126,11 +125,19 @@ main(int argc, char **argv) {
|
|||||||
|
|
||||||
/* main event loop */
|
/* main event loop */
|
||||||
while(running && !XNextEvent(dpy, &ev)) {
|
while(running && !XNextEvent(dpy, &ev)) {
|
||||||
if(len == 0)
|
if(len == 0 && DPMSCapable(dpy)) {
|
||||||
|
DPMSEnable(dpy);
|
||||||
DPMSForceLevel(dpy, DPMSModeOff);
|
DPMSForceLevel(dpy, DPMSModeOff);
|
||||||
|
}
|
||||||
if(ev.type == KeyPress) {
|
if(ev.type == KeyPress) {
|
||||||
buf[0] = 0;
|
buf[0] = 0;
|
||||||
num = XLookupString(&ev.xkey, buf, sizeof buf, &ksym, 0);
|
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)
|
if(IsFunctionKey(ksym) || IsKeypadKey(ksym)
|
||||||
|| IsMiscFunctionKey(ksym) || IsPFKey(ksym)
|
|| IsMiscFunctionKey(ksym) || IsPFKey(ksym)
|
||||||
|| IsPrivateKeypadKey(ksym))
|
|| IsPrivateKeypadKey(ksym))
|
||||||
@@ -138,13 +145,11 @@ main(int argc, char **argv) {
|
|||||||
switch(ksym) {
|
switch(ksym) {
|
||||||
case XK_Return:
|
case XK_Return:
|
||||||
passwd[len] = 0;
|
passwd[len] = 0;
|
||||||
|
|
||||||
#ifdef HAVE_BSD_AUTH
|
#ifdef HAVE_BSD_AUTH
|
||||||
running = !auth_userokay(getlogin(), NULL, "auth-xlock", passwd);
|
running = !auth_userokay(getlogin(), NULL, "auth-xlock", passwd);
|
||||||
#else
|
#else
|
||||||
running = strcmp(crypt(passwd, pws), pws);
|
running = strcmp(crypt(passwd, pws), pws);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (running != 0)
|
if (running != 0)
|
||||||
XBell(dpy, 100);
|
XBell(dpy, 100);
|
||||||
len = 0;
|
len = 0;
|
||||||
|
Reference in New Issue
Block a user