175c13541SPoul-Henning Kamp #include <stdio.h> 275c13541SPoul-Henning Kamp #include <err.h> 375c13541SPoul-Henning Kamp #include <sys/types.h> 475c13541SPoul-Henning Kamp #include <sys/jail.h> 575c13541SPoul-Henning Kamp #include <netinet/in.h> 675c13541SPoul-Henning Kamp 775c13541SPoul-Henning Kamp int 875c13541SPoul-Henning Kamp main(int argc, char **argv) 975c13541SPoul-Henning Kamp { 1075c13541SPoul-Henning Kamp struct jail j; 1175c13541SPoul-Henning Kamp int i; 1275c13541SPoul-Henning Kamp struct in_addr in; 1375c13541SPoul-Henning Kamp 1475c13541SPoul-Henning Kamp if (argc < 5) 1575c13541SPoul-Henning Kamp errx(1, "Usage: %s path hostname ip command ...\n", argv[0]); 1675c13541SPoul-Henning Kamp i = chdir(argv[1]); 1775c13541SPoul-Henning Kamp if (i) 1875c13541SPoul-Henning Kamp err(1, "chdir %s", argv[1]); 1975c13541SPoul-Henning Kamp j.path = argv[1]; 2075c13541SPoul-Henning Kamp j.hostname = argv[2]; 2175c13541SPoul-Henning Kamp i = inet_aton(argv[3], &in); 2275c13541SPoul-Henning Kamp if (!i) 2375c13541SPoul-Henning Kamp errx(1, "Couldn't make sense if ip number\n"); 2475c13541SPoul-Henning Kamp j.ip_number = in.s_addr; 2575c13541SPoul-Henning Kamp i = jail(&j); 2675c13541SPoul-Henning Kamp if (i) 2775c13541SPoul-Henning Kamp err(1, "Imprisonment failed"); 2875c13541SPoul-Henning Kamp i = execv(argv[4], argv + 4); 2975c13541SPoul-Henning Kamp if (i) 3075c13541SPoul-Henning Kamp err(1, "execv(%s)", argv[4]); 3175c13541SPoul-Henning Kamp exit (0); 3275c13541SPoul-Henning Kamp } 33