Cursor cursor;
Pixmap csr_source,csr_mask;
XColor csr_fg, csr_bg, dummy, black;
- int ret, screen, blank = 0;
+ int ret, screen, blank = 0, fork_after = 0;
#ifdef SHADOW_PWD
struct spwd *sp;
#endif
struct timeval tv;
int tvt, gs;
- if ((argc == 2) && (strcmp(argv[1], "-b") == 0)) {
- blank = 1;
- } else if (argc > 1) {
- fprintf(stderr,"xtrlock (version %s); usage: xtrlock [-b]\n",
- program_version);
- exit(1);
+ while (argc > 1) {
+ if ((strcmp(argv[1], "-b") == 0)) {
+ blank = 1;
+ argc--;
+ argv++;
+ } else if ((strcmp(argv[1], "-f") == 0)) {
+ fork_after = 1;
+ argc--;
+ argv++;
+ } else {
+ fprintf(stderr,"xtrlock (version %s); usage: xtrlock [-b] [-f]\n",
+ program_version);
+ exit(1);
+ }
}
errno=0; pw= getpwuid(getuid());
/* logically, if we need to do the following then the same
applies to being installed setgid shadow.
we do this first, because of a bug in linux. --jdamery */
- setgid(getgid());
+ if (setgid(getgid())) { perror("setgid"); exit(1); }
/* we can be installed setuid root to support shadow passwords,
and we don't need root privileges any longer. --marekm */
- setuid(getuid());
+ if (setuid(getuid())) { perror("setuid"); exit(1); }
if (strlen(pw->pw_passwd) < 13) {
fputs("password entry has no pwd\n",stderr); exit(1);
exit(1);
}
+ if (fork_after) {
+ pid_t pid = fork();
+ if (pid < 0) {
+ fprintf(stderr,"xtrlock (version %s): cannot fork: %s\n",
+ program_version, strerror(errno));
+ exit(1);
+ } else if (pid > 0) {
+ exit(0);
+ }
+ }
+
for (;;) {
XNextEvent(display,&ev);
switch (ev.type) {