diff options
author | mjn3 <mjn3@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2003-03-19 09:13:01 +0000 |
---|---|---|
committer | mjn3 <mjn3@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2003-03-19 09:13:01 +0000 |
commit | e901c15d890dbbdce4c086963cb1513653fc46b5 (patch) | |
tree | a318d0f03aa076c74b576ea45dc543a5669e8e91 /coreutils/chroot.c | |
parent | 40758c00616c3b2c85d83eb4afdeb04b1f65c9f1 (diff) | |
download | busybox-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.c | 50 |
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 | ||
30 | int chroot_main(int argc, char **argv) | 32 | int 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 | /* | ||
69 | Local Variables: | ||
70 | c-file-style: "linux" | ||
71 | c-basic-offset: 4 | ||
72 | tab-width: 4 | ||
73 | End: | ||
74 | */ | ||