~ob/slock

6fdf8be2044145c11f7e1eb165613f791c514520 — Anselm R. Garbe 13 years ago 1fd4e7b 0.7
final fixes and cleanups
3 files changed, 20 insertions(+), 18 deletions(-)

M README
M config.mk
M slock.c
M README => README +1 -1
@@ 21,4 21,4 @@ necessary as root):

Running slock
-------------
Simply invoke the 'slock' command.
Simply invoke the 'slock' command. To get out of it, enter your password.

M config.mk => config.mk +0 -1
@@ 5,7 5,6 @@ VERSION = 0.7

# paths
PREFIX = /usr/local
MANPREFIX = ${PREFIX}/share/man

X11INC = /usr/X11R6/include
X11LIB = /usr/X11R6/lib

M slock.c => slock.c +19 -16
@@ 7,6 7,7 @@

#include <ctype.h>
#include <pwd.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


@@ 16,15 17,23 @@
#include <X11/Xlib.h>
#include <X11/Xutil.h>

void
eprint(const char *errstr, ...) {
	va_list ap;

	va_start(ap, errstr);
	vfprintf(stderr, errstr, ap);
	va_end(ap);
	exit(EXIT_FAILURE);
}

const char *
get_password() { /* only run as root */
	const char *rval;
	struct passwd *pw;

	if(geteuid() != 0) {
		fputs("slock: cannot retrieve password entry (make sure to suid slock)\n", stderr);
		exit(EXIT_FAILURE);
	}
	if(geteuid() != 0)
		eprint("slock: cannot retrieve password entry (make sure to suid slock)\n");
	pw = getpwuid(getuid());
	endpwent();
	rval =  pw->pw_passwd;


@@ 38,10 47,8 @@ get_password() { /* only run as root */
	}
#endif
	/* drop privileges */
	if(setgid(pw->pw_gid) < 0 || setuid(pw->pw_uid) < 0) {
		fputs("slock: cannot drop privileges\n",stdout);
		exit(EXIT_FAILURE);
	}
	if(setgid(pw->pw_gid) < 0 || setuid(pw->pw_uid) < 0)
		eprint("slock: cannot drop privileges\n");
	return rval;
}



@@ 62,15 69,11 @@ main(int argc, char **argv) {
	XEvent ev;
	XSetWindowAttributes wa;

	if((argc > 1) && !strncmp(argv[1], "-v", 3)) {
		fputs("slock-"VERSION", © 2006-2007 Anselm R. Garbe\n", stdout);
		exit(EXIT_SUCCESS);
	}
	if((argc > 1) && !strncmp(argv[1], "-v", 3))
		eprint("slock-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk\n");
	pws = get_password();
	if(!(dpy = XOpenDisplay(0))) {
		fputs("slock: cannot open display\n", stderr);
		exit(EXIT_FAILURE);
	}
	if(!(dpy = XOpenDisplay(0)))
		eprint("slock: cannot open display\n");
	screen = DefaultScreen(dpy);
	root = RootWindow(dpy, screen);