1ce5c1cd1SPoul-Henning Kamp /* 2ce5c1cd1SPoul-Henning Kamp * ---------------------------------------------------------------------------- 3ce5c1cd1SPoul-Henning Kamp * "THE BEER-WARE LICENSE" (Revision 42): 4ce5c1cd1SPoul-Henning Kamp * <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you 5ce5c1cd1SPoul-Henning Kamp * can do whatever you want with this stuff. If we meet some day, and you think 6ce5c1cd1SPoul-Henning Kamp * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 7ce5c1cd1SPoul-Henning Kamp * ---------------------------------------------------------------------------- 8ce5c1cd1SPoul-Henning Kamp * 9ce5c1cd1SPoul-Henning Kamp * $Id$ 10ce5c1cd1SPoul-Henning Kamp * 11ce5c1cd1SPoul-Henning Kamp */ 12ce5c1cd1SPoul-Henning Kamp 1375c13541SPoul-Henning Kamp #include <stdio.h> 1475c13541SPoul-Henning Kamp #include <err.h> 1575c13541SPoul-Henning Kamp #include <sys/types.h> 1675c13541SPoul-Henning Kamp #include <sys/jail.h> 1775c13541SPoul-Henning Kamp #include <netinet/in.h> 1875c13541SPoul-Henning Kamp 1975c13541SPoul-Henning Kamp int 2075c13541SPoul-Henning Kamp main(int argc, char **argv) 2175c13541SPoul-Henning Kamp { 2275c13541SPoul-Henning Kamp struct jail j; 2375c13541SPoul-Henning Kamp int i; 2475c13541SPoul-Henning Kamp struct in_addr in; 2575c13541SPoul-Henning Kamp 2675c13541SPoul-Henning Kamp if (argc < 5) 2775c13541SPoul-Henning Kamp errx(1, "Usage: %s path hostname ip command ...\n", argv[0]); 2875c13541SPoul-Henning Kamp i = chdir(argv[1]); 2975c13541SPoul-Henning Kamp if (i) 3075c13541SPoul-Henning Kamp err(1, "chdir %s", argv[1]); 3175c13541SPoul-Henning Kamp j.path = argv[1]; 3275c13541SPoul-Henning Kamp j.hostname = argv[2]; 3375c13541SPoul-Henning Kamp i = inet_aton(argv[3], &in); 3475c13541SPoul-Henning Kamp if (!i) 3575c13541SPoul-Henning Kamp errx(1, "Couldn't make sense if ip number\n"); 36ce5c1cd1SPoul-Henning Kamp j.ip_number = ntohl(in.s_addr); 3775c13541SPoul-Henning Kamp i = jail(&j); 3875c13541SPoul-Henning Kamp if (i) 3975c13541SPoul-Henning Kamp err(1, "Imprisonment failed"); 4075c13541SPoul-Henning Kamp i = execv(argv[4], argv + 4); 4175c13541SPoul-Henning Kamp if (i) 4275c13541SPoul-Henning Kamp err(1, "execv(%s)", argv[4]); 4375c13541SPoul-Henning Kamp exit (0); 4475c13541SPoul-Henning Kamp } 45