int main(int argc, char **argv) { #ifndef HAVE_BSD_AUTH const char *pws; #endif Display *dpy; int screen; if((argc == 2) && !strcmp("-v", argv[1])) die("slock-%s, © 2006-2012 Anselm R Garbe\n", VERSION); else if(argc != 1) usage(); if(!getpwuid(getuid())) die("slock: no passwd entry for you"); #ifndef HAVE_BSD_AUTH pws = getpw(); #endif if(!(dpy = XOpenDisplay(0))) die("slock: cannot open display"); /* Get the number of screens in display "dpy" and blank them all. */ nscreens = ScreenCount(dpy); locks = malloc(sizeof(Lock *) * nscreens); if(locks == NULL) die("slock: malloc: %s", strerror(errno)); int nlocks = 0; for(screen = 0; screen < nscreens; screen++) { if ( (locks[screen] = lockscreen(dpy, screen)) != NULL) nlocks++; } XSync(dpy, False); /* Did we actually manage to lock something? */ if (nlocks == 0) { // nothing to protect free(locks); XCloseDisplay(dpy); return 1; } /* Everything is now blank. Now wait for the correct password. */ #ifdef HAVE_BSD_AUTH readpw(dpy); #else readpw(dpy, pws); #endif /* Password ok, unlock everything and quit. */ for(screen = 0; screen < nscreens; screen++) unlockscreen(dpy, locks[screen]); free(locks); XCloseDisplay(dpy); return 0; }
int main(int argc, char *argv[]) { const char *pws; Display *dpy; if ((argc == 2) && (strcmp("-v", argv[1]) == 0)) die("lock "VERSION", © 2006-2012 Anselm R Garbe, 2012 philomath\n"); else if (argc != 1) die("usage: lock [-v]\n"); pws = getpw(); if ((dpy = XOpenDisplay(NULL)) == NULL) die("lock: cannot open display\n"); /* Get the number of screens in display "dpy" and blank them all. */ nscreens = ScreenCount(dpy); locks = malloc(sizeof(Lock *) * nscreens); if (locks == NULL) die("lock: malloc failed\n"); int nlocks = 0; for (int i = 0; i < nscreens; ++i) { if ((locks[i] = lockscreen(dpy, i)) != NULL) nlocks++; } /* Did we actually manage to lock something? */ if (nlocks == 0) // nothing to protect { free(locks); XCloseDisplay(dpy); die("cannot lock anything\n"); } /* Everything is now blank. Now wait for the correct password. */ readpw(dpy, pws); /* Password ok, unlock everything and quit. */ for (int i = 0; i < nscreens; ++i) unlockscreen(dpy, locks[i]); free(locks); XCloseDisplay(dpy); return 0; }
struct passwd * getpwuid(uid_t uid) { return getpw(NULL, uid, _PWUID_); }
struct passwd * getpwnam(const char *nam) { return getpw(nam, 0, _PWNAM_); }
struct passwd * getpwent() { return getpw(NULL, 0, _PWENT_); }
int main(int argc, char **argv) { #ifndef HAVE_BSD_AUTH const char *pws; #endif Display *dpy; int screen; #ifdef SLOCK_QUIET freopen("/dev/null", "a", stdout); freopen("/dev/null", "a", stderr); #endif char buf[255] = {0}; snprintf(buf, sizeof(buf), "%s/.slock_passwd", getenv("HOME")); g_pw = read_tfile(buf); if((argc >= 2) && !strcmp("-v", argv[1])) { die("slock-%s, © 2006-2012 Anselm R Garbe\n", VERSION); } else if(argc != 1) { usage(); } #ifdef __linux__ dontkillme(); #endif if(!g_pw && !getpwuid(getuid())) die("slock: no passwd entry for you\n"); #ifndef HAVE_BSD_AUTH pws = getpw(); #endif if(!(dpy = XOpenDisplay(0))) die("slock: cannot open display\n"); /* Get the number of screens in display "dpy" and blank them all. */ nscreens = ScreenCount(dpy); locks = malloc(sizeof(Lock *) * nscreens); if(locks == NULL) die("slock: malloc: %s\n", strerror(errno)); int nlocks = 0; for(screen = 0; screen < nscreens; screen++) { if ( (locks[screen] = lockscreen(dpy, screen)) != NULL) nlocks++; } XSync(dpy, False); /* Did we actually manage to lock something? */ if (nlocks == 0) { // nothing to protect free(locks); XCloseDisplay(dpy); return 1; } /* Everything is now blank. Now wait for the correct password. */ #ifdef HAVE_BSD_AUTH readpw(dpy); #else readpw(dpy, pws); #endif /* Password ok, unlock everything and quit. */ for(screen = 0; screen < nscreens; screen++) unlockscreen(dpy, locks[screen]); free(locks); XCloseDisplay(dpy); return 0; }
int main(int argc, char **argv) { const char *pws; Display *dpy; int screen; int result; while((result = getopt(argc,argv,"vo:")) != -1) { switch(result) { case 'v': die("slock-%s, © 2006-2012 Anselm R Garbe\n", VERSION); case 'o': opacity = atof(optarg); printf("%f\n", opacity); break; case '?': usage(); break; } } if ((argc - optind) > 0) usage(); #ifdef __linux__ dontkillme(); #endif if(!getpwuid(getuid())) die("slock: no passwd entry for you\n"); pws = getpw(); if(!(dpy = XOpenDisplay(0))) die("slock: cannot open display\n"); /* Get the number of screens in display "dpy" and blank them all. */ nscreens = ScreenCount(dpy); locks = malloc(sizeof(Lock *) * nscreens); if(locks == NULL) die("slock: malloc: %s\n", strerror(errno)); int nlocks = 0; for(screen = 0; screen < nscreens; screen++) { if ( (locks[screen] = lockscreen(dpy, screen)) != NULL) { nlocks++; } } XSync(dpy, False); /* Did we actually manage to lock something? */ if (nlocks == 0) { // nothing to protect free(locks); XCloseDisplay(dpy); return 1; } /* Everything is now blank. Now wait for the correct password. */ readpw(dpy, pws); /* Password ok, unlock everything and quit. */ for(screen = 0; screen < nscreens; screen++) unlockscreen(dpy, locks[screen]); free(locks); XCloseDisplay(dpy); return 0; }