aboutsummaryrefslogtreecommitdiff
path: root/coreutils/chroot.c
diff options
context:
space:
mode:
authormjn3 <mjn3@69ca8d6d-28ef-0310-b511-8ec308f3f277>2003-03-19 09:13:01 +0000
committermjn3 <mjn3@69ca8d6d-28ef-0310-b511-8ec308f3f277>2003-03-19 09:13:01 +0000
commite901c15d890dbbdce4c086963cb1513653fc46b5 (patch)
treea318d0f03aa076c74b576ea45dc543a5669e8e91 /coreutils/chroot.c
parent40758c00616c3b2c85d83eb4afdeb04b1f65c9f1 (diff)
downloadbusybox-w32-e901c15d890dbbdce4c086963cb1513653fc46b5.tar.gz
busybox-w32-e901c15d890dbbdce4c086963cb1513653fc46b5.tar.bz2
busybox-w32-e901c15d890dbbdce4c086963cb1513653fc46b5.zip
Major coreutils update.
git-svn-id: svn://busybox.net/trunk/busybox@6751 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'coreutils/chroot.c')
-rw-r--r--coreutils/chroot.c50
1 files changed, 15 insertions, 35 deletions
diff --git a/coreutils/chroot.c b/coreutils/chroot.c
index ba3e5f864..01e4d564c 100644
--- a/coreutils/chroot.c
+++ b/coreutils/chroot.c
@@ -21,6 +21,8 @@
21 * 21 *
22 */ 22 */
23 23
24/* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
25
24#include <stdlib.h> 26#include <stdlib.h>
25#include <stdio.h> 27#include <stdio.h>
26#include <unistd.h> 28#include <unistd.h>
@@ -29,46 +31,24 @@
29 31
30int chroot_main(int argc, char **argv) 32int chroot_main(int argc, char **argv)
31{ 33{
32 char *prog; 34 if (argc < 2) {
33 35 bb_show_usage();
34 if ((argc < 2) || (**(argv + 1) == '-')) {
35 show_usage();
36 } 36 }
37 argc--;
38 argv++;
39 37
38 ++argv;
40 if (chroot(*argv) || (chdir("/"))) { 39 if (chroot(*argv) || (chdir("/"))) {
41 perror_msg_and_die("cannot change root directory to %s", *argv); 40 bb_perror_msg_and_die("cannot change root directory to %s", *argv);
42 } 41 }
43 42
44 argc--; 43 ++argv;
45 argv++; 44 if (argc == 2) {
46 if (argc >= 1) { 45 argv -= 2;
47 prog = *argv; 46 if (!(*argv = getenv("SHELL"))) {
48 execvp(*argv, argv); 47 *argv = (char *) "/bin/sh";
49 } else { 48 }
50#if defined shell_main && defined CONFIG_FEATURE_SH_STANDALONE_SHELL 49 argv[1] = (char *) "-i";
51 char shell[] = "/bin/sh";
52 char *shell_argv[2] = { shell, NULL };
53 applet_name = shell;
54 shell_main(1, shell_argv);
55 return EXIT_SUCCESS;
56#else
57 prog = getenv("SHELL");
58 if (!prog)
59 prog = "/bin/sh";
60 execlp(prog, prog, NULL);
61#endif
62 } 50 }
63 perror_msg_and_die("cannot execute %s", prog);
64 51
52 execvp(*argv, argv);
53 bb_perror_msg_and_die("cannot execute %s", *argv);
65} 54}
66
67
68/*
69Local Variables:
70c-file-style: "linux"
71c-basic-offset: 4
72tab-width: 4
73End:
74*/