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