| final fixes and cleanups - slock - simple X display locker utility | |
| git clone git://git.suckless.org/slock | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 6fdf8be2044145c11f7e1eb165613f791c514520 | |
| parent 1fd4e7b23e872c16902d222b6c870116c948903c | |
| Author: Anselm R. Garbe <[email protected]> | |
| Date: Sat, 24 Nov 2007 21:17:32 +0100 | |
| final fixes and cleanups | |
| Diffstat: | |
| M README | 2 +- | |
| M config.mk | 1 - | |
| M slock.c | 35 +++++++++++++++++------------… | |
| 3 files changed, 20 insertions(+), 18 deletions(-) | |
| --- | |
| diff --git a/README b/README | |
| @@ -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. | |
| diff --git a/config.mk b/config.mk | |
| @@ -5,7 +5,6 @@ VERSION = 0.7 | |
| # paths | |
| PREFIX = /usr/local | |
| -MANPREFIX = ${PREFIX}/share/man | |
| X11INC = /usr/X11R6/include | |
| X11LIB = /usr/X11R6/lib | |
| diff --git a/slock.c b/slock.c | |
| @@ -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 sui… | |
| - exit(EXIT_FAILURE); | |
| - } | |
| + if(geteuid() != 0) | |
| + eprint("slock: cannot retrieve password entry (make sure to su… | |
| 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", stdou… | |
| - exit(EXIT_SUCCESS); | |
| - } | |
| + if((argc > 1) && !strncmp(argv[1], "-v", 3)) | |
| + eprint("slock-"VERSION", © 2006-2007 Anselm R. Garbe, Sander … | |
| 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); | |