Introduction
Introduction Statistics Contact Development Disclaimer Help
applied two patches, BSD_AUTH patch and Gottox' DPMS support patch - slock - si…
git clone git://git.suckless.org/slock
Log
Files
Refs
README
LICENSE
---
commit 98e2fef63d2e6dbda63929867db70bee1f8b55f5
parent a430a647e48a894499143b03da86e5707b4127df
Author: Anselm R Garbe <[email protected]>
Date: Fri, 22 Feb 2008 10:13:12 +0000
applied two patches, BSD_AUTH patch and Gottox' DPMS support patch
Diffstat:
M LICENSE | 2 +-
M config.mk | 11 ++++++++---
M slock.c | 34 +++++++++++++++++++++++++++--…
3 files changed, 39 insertions(+), 8 deletions(-)
---
diff --git a/LICENSE b/LICENSE
@@ -1,6 +1,6 @@
MIT/X Consortium License
-© 2006-2007 Anselm R. Garbe <garbeam at gmail dot com>
+© 2006-2008 Anselm R Garbe <garbeam at gmail dot com>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
diff --git a/config.mk b/config.mk
@@ -11,17 +11,22 @@ X11LIB = /usr/X11R6/lib
# includes and libs
INCS = -I. -I/usr/include -I${X11INC}
-LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11
+LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext
# flags
-CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
+CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
LDFLAGS = ${LIBS}
#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
#LDFLAGS = -g ${LIBS}
-# On *BSD remove -DHAVE_SHADOW_H from CFLAGS
+# On *BSD remove -DHAVE_SHADOW_H from CFLAGS and add -DHAVE_BSD_AUTH
# On OpenBSD and Darwin remove -lcrypt from LIBS
# compiler and linker
CC = cc
LD = ${CC}
+
+# Install mode. On BSD systems MODE=2755 and GROUP=auth
+# On others MODE=4755 and GROUP=root
+#MODE=2755
+#GROUP=auth
diff --git a/slock.c b/slock.c
@@ -1,4 +1,4 @@
-/* © 2006-2007 Anselm R. Garbe <garbeam at gmail dot com>
+/* © 2006-2008 Anselm R Garbe <garbeam at gmail dot com>
* See LICENSE file for license details. */
#define _XOPEN_SOURCE 500
#if HAVE_SHADOW_H
@@ -16,6 +16,12 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
+#include <X11/extensions/dpms.h>
+
+#if HAVE_BSD_AUTH
+#include <login_cap.h>
+#include <bsd_auth.h>
+#endif
void
eprint(const char *errstr, ...) {
@@ -27,6 +33,7 @@ eprint(const char *errstr, ...) {
exit(EXIT_FAILURE);
}
+#ifndef HAVE_BSD_AUTH
const char *
get_password() { /* only run as root */
const char *rval;
@@ -46,18 +53,23 @@ get_password() { /* only run as root */
rval = sp->sp_pwdp;
}
#endif
+
/* drop privileges */
if(setgid(pw->pw_gid) < 0 || setuid(pw->pw_uid) < 0)
eprint("slock: cannot drop privileges\n");
return rval;
}
+#endif
int
main(int argc, char **argv) {
char curs[] = {0, 0, 0, 0, 0, 0, 0, 0};
char buf[32], passwd[256];
int num, screen;
+
+#ifndef HAVE_BSD_AUTH
const char *pws;
+#endif
unsigned int len;
Bool running = True;
Cursor invisible;
@@ -70,10 +82,14 @@ main(int argc, char **argv) {
XSetWindowAttributes wa;
if((argc == 2) && !strcmp("-v", argv[1]))
- eprint("slock-"VERSION", © 2006-2007 Anselm R. Garbe\n");
+ eprint("slock-"VERSION", © 2006-2008 Anselm R Garbe\n");
else if(argc != 1)
eprint("usage: slock [-v]\n");
+
+#ifndef HAVE_BSD_AUTH
pws = get_password();
+#endif
+
if(!(dpy = XOpenDisplay(0)))
eprint("slock: cannot open display\n");
screen = DefaultScreen(dpy);
@@ -109,7 +125,9 @@ main(int argc, char **argv) {
XSync(dpy, False);
/* main event loop */
- while(running && !XNextEvent(dpy, &ev))
+ while(running && !XNextEvent(dpy, &ev)) {
+ if(len == 0)
+ DPMSForceLevel(dpy, DPMSModeOff);
if(ev.type == KeyPress) {
buf[0] = 0;
num = XLookupString(&ev.xkey, buf, sizeof buf, &ksym, …
@@ -120,7 +138,14 @@ main(int argc, char **argv) {
switch(ksym) {
case XK_Return:
passwd[len] = 0;
- if((running = strcmp(crypt(passwd, pws), pws))…
+
+#ifdef HAVE_BSD_AUTH
+ running = !auth_userokay(getlogin(), NULL, "au…
+#else
+ running = strcmp(crypt(passwd, pws), pws);
+#endif
+
+ if (running != 0)
XBell(dpy, 100);
len = 0;
break;
@@ -139,6 +164,7 @@ main(int argc, char **argv) {
break;
}
}
+ }
XUngrabPointer(dpy, CurrentTime);
XFreePixmap(dpy, pmap);
XDestroyWindow(dpy, w);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.