diff options
Diffstat (limited to 'srcx/jstart.c')
-rw-r--r-- | srcx/jstart.c | 150 |
1 files changed, 76 insertions, 74 deletions
diff --git a/srcx/jstart.c b/srcx/jstart.c index 288b444..770d41f 100644 --- a/srcx/jstart.c +++ b/srcx/jstart.c @@ -61,89 +61,91 @@ #endif #define START_SCRIPT "/etc/rc" -static char* START_ARGS[] = { _PATH_BSHELL, START_SCRIPT }; +static char* START_ARGS[] = { _PATH_BSHELL, START_SCRIPT }; static void usage(); int main(int argc, char* argv[]) { - int ch, jid; - struct jail j; - int printjid = 0; - struct in_addr in; - - while((ch = getopt(argc, argv, "i")) != -1) - { - switch(ch) - { - case 'i': - printjid = 1; - break; - - case '?': - default: - usage(); - } - } - - argc -= optind; - argv += optind; - - if(argc < 3) - usage(); - - if(getuid() != 0) - errx(1, "must be run as root"); - - if(chdir(argv[0]) != 0) - err(1, "couldn't change to jail directory: %s", argv[0]); - - if(inet_aton(argv[2], &in) != 1) - errx(1, "invalid ip address: %s", argv[2]); - - memset(&j, 0, sizeof(j)); - j.version = 0; - j.path = argv[0]; - j.hostname = argv[1]; - j.ip_number = ntohl(in.s_addr); - - /* Here's where we actually go into the jail */ - jid = jail(&j); - if(jid == -1) - err(1, "couldn't create jail"); - - if(printjid) - { - printf("%d\n", jid); - fflush(stdout); - } - - argc -= 3; - argv += 3; - - if(argc == 0) - { - if(!check_jail_command(NULL, START_SCRIPT)) - exit(1); - - run_jail_command(NULL, START_ARGS[0], START_ARGS, JAIL_RUN_CONSOLE | JAIL_RUN_STDOUT); - } - - else - { - if(!check_jail_command(NULL, argv[0])) - exit(1); - - run_jail_command(NULL, argv[0], argv, JAIL_RUN_CONSOLE | JAIL_RUN_STDOUT); - } - - return 0; + int ch, jid; + struct jail j; + int printjid = 0; + struct in_addr in; + + while((ch = getopt(argc, argv, "i")) != -1) + { + switch(ch) + { + case 'i': + printjid = 1; + break; + + case '?': + default: + usage(); + } + } + + argc -= optind; + argv += optind; + + if(argc < 3) + usage(); + + if(getuid() != 0) + errx(1, "must be run as root"); + + if(chdir(argv[0]) != 0) + err(1, "couldn't change to jail directory: %s", argv[0]); + + if(inet_aton(argv[2], &in) != 1) + errx(1, "invalid ip address: %s", argv[2]); + + memset(&j, 0, sizeof(j)); + j.version = 0; + j.path = argv[0]; + j.hostname = argv[1]; + j.ip_number = ntohl(in.s_addr); + + /* Here's where we actually go into the jail */ + jid = jail(&j); + if(jid == -1) + err(1, "couldn't create jail"); + + if(printjid) + { + printf("%d\n", jid); + fflush(stdout); + } + + argc -= 3; + argv += 3; + + if(argc == 0) + { + if(!check_jail_command(NULL, START_SCRIPT)) + exit(1); + + run_jail_command(NULL, START_ARGS[0], START_ARGS, + JAIL_RUN_CONSOLE | JAIL_RUN_STDOUT); + } + + else + { + if(!check_jail_command(NULL, argv[0])) + exit(1); + + run_jail_command(NULL, argv[0], argv, + JAIL_RUN_CONSOLE | JAIL_RUN_STDOUT); + } + + return 0; } static void usage() { - fprintf(stderr, "usage: jstart [-i] path hostname ip-number [command ...]\n"); - exit(2); + fprintf(stderr, "usage: jstart [-i] path hostname ip-number [command ...]\n"); + exit(2); } |