|
|
@@ -503,6 +503,14 @@ run_script(const char *username, const char *display, char **envp) |
|
|
|
_exit(EX_OSERR); |
|
|
|
} |
|
|
|
|
|
|
|
static void |
|
|
|
usage(void) |
|
|
|
{ |
|
|
|
fprintf(stderr, "Syntax:\n"); |
|
|
|
fprintf(stderr, " vncsession [-D] <username> <display>\n"); |
|
|
|
exit(EX_USAGE); |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
main(int argc, char **argv) |
|
|
|
{ |
|
|
@@ -511,14 +519,23 @@ main(int argc, char **argv) |
|
|
|
|
|
|
|
const char *username, *display; |
|
|
|
|
|
|
|
if ((argc != 3) || (argv[2][0] != ':')) { |
|
|
|
fprintf(stderr, "Syntax:\n"); |
|
|
|
fprintf(stderr, " %s <username> <display>\n", argv[0]); |
|
|
|
return EX_USAGE; |
|
|
|
int opt, forking = 1; |
|
|
|
|
|
|
|
while ((opt = getopt(argc, argv, "D")) != -1) { |
|
|
|
switch (opt) { |
|
|
|
case 'D': |
|
|
|
forking = 0; |
|
|
|
break; |
|
|
|
default: |
|
|
|
usage(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
username = argv[1]; |
|
|
|
display = argv[2]; |
|
|
|
if ((argc != optind + 2) || (argv[optind +1][0] != ':')) |
|
|
|
usage(); |
|
|
|
|
|
|
|
username = argv[argc - 2]; |
|
|
|
display = argv[argc - 1]; |
|
|
|
|
|
|
|
if (geteuid() != 0) { |
|
|
|
fprintf(stderr, "This program needs to be run as root!\n"); |
|
|
@@ -534,8 +551,10 @@ main(int argc, char **argv) |
|
|
|
return EX_OSERR; |
|
|
|
} |
|
|
|
|
|
|
|
if (begin_daemon() == -1) |
|
|
|
return EX_OSERR; |
|
|
|
if (forking) { |
|
|
|
if (begin_daemon() == -1) |
|
|
|
return EX_OSERR; |
|
|
|
} |
|
|
|
|
|
|
|
openlog("vncsession", LOG_PID, LOG_AUTH); |
|
|
|
|
|
|
@@ -586,7 +605,8 @@ main(int argc, char **argv) |
|
|
|
fclose(f); |
|
|
|
} |
|
|
|
|
|
|
|
finish_daemon(); |
|
|
|
if (forking) |
|
|
|
finish_daemon(); |
|
|
|
|
|
|
|
while (1) { |
|
|
|
int status; |