xref: /freebsd/usr.sbin/jail/jail.c (revision 75c13541908625d7ee0894cc03f96ab773f7dae2)
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