|
|
1.1 root 1: /*
2: * Copyright (c) 1988 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted provided
6: * that: (1) source distributions retain this entire copyright notice and
7: * comment, and (2) distributions including binaries display the following
8: * acknowledgement: ``This product includes software developed by the
9: * University of California, Berkeley and its contributors'' in the
10: * documentation or other materials provided with the distribution and in
11: * all advertising materials mentioning features or use of this software.
12: * Neither the name of the University nor the names of its contributors may
13: * be used to endorse or promote products derived from this software without
14: * specific prior written permission.
15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
16: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
17: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18: */
19:
20: #ifndef lint
21: char copyright[] =
22: "@(#) Copyright (c) 1988 The Regents of the University of California.\n\
23: All rights reserved.\n";
24: #endif /* not lint */
25:
26: #ifndef lint
27: static char sccsid[] = "@(#)chroot.c 5.8 (Berkeley) 6/1/90";
28: #endif /* not lint */
29:
30: #include <stdio.h>
31: #include <paths.h>
32:
33: main(argc, argv)
34: int argc;
35: char **argv;
36: {
37: extern int errno;
38: char *shell, *getenv(), *strerror();
39:
40: if (argc < 2) {
41: (void)fprintf(stderr, "usage: chroot newroot [command]\n");
42: exit(1);
43: }
44: if (chdir(argv[1]) || chroot("."))
45: fatal(argv[1]);
46: if (argv[2]) {
47: execvp(argv[2], &argv[2]);
48: fatal(argv[2]);
49: } else {
50: if (!(shell = getenv("SHELL")))
51: shell = _PATH_BSHELL;
52: execlp(shell, shell, "-i", (char *)NULL);
53: fatal(shell);
54: }
55: /* NOTREACHED */
56: }
57:
58: fatal(msg)
59: char *msg;
60: {
61: extern int errno;
62:
63: (void)fprintf(stderr, "chroot: %s: %s\n", msg, strerror(errno));
64: exit(1);
65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.