install correct aliases file
[unix-history] / usr / src / usr.sbin / chroot / chroot.c
CommitLineData
94a602c5
KB
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
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 */
17
18#ifndef lint
19char copyright[] =
20"@(#) Copyright (c) 1988 The Regents of the University of California.\n\
21 All rights reserved.\n";
22#endif /* not lint */
23
24#ifndef lint
d4f5e936 25static char sccsid[] = "@(#)chroot.c 5.3 (Berkeley) %G%";
94a602c5
KB
26#endif /* not lint */
27
28#include <stdio.h>
29
30main(argc, argv)
31 int argc;
32 char **argv;
397de7ad 33{
d4f5e936
KB
34 extern int errno;
35 char *shell, *getenv(), *strerror();
94a602c5 36
d4f5e936
KB
37 if (argc < 2) {
38 fprintf(stderr, "usage: chroot newroot [command]\n");
94a602c5
KB
39 exit(1);
40 }
d4f5e936
KB
41 if (chdir(argv[1]) || chroot(argv[1]))
42 fatal(argv[1]);
397de7ad 43 setuid(getuid());
d4f5e936
KB
44 if (argv[2]) {
45 execvp(argv[2], &argv[2]);
46 fatal(argv[2]);
47 } else {
48 if (!(shell = getenv("SHELL")))
49 shell = "/bin/sh";
50 execlp(shell, shell, "-i", (char *)NULL);
51 fatal(shell);
52 }
53 /* NOTREACHED */
54}
55
56fatal(msg)
57 char *msg;
58{
59 extern int errno;
60
61 fprintf(stderr, "chroot: %s: %s\n", msg, strerror(errno));
94a602c5 62 exit(1);
397de7ad 63}