9 |
|
|
10 |
/* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */ |
/* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */ |
11 |
|
|
12 |
#include "busybox.h" |
#include "libbb.h" |
13 |
|
|
14 |
|
int chroot_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
15 |
int chroot_main(int argc, char **argv) |
int chroot_main(int argc, char **argv) |
16 |
{ |
{ |
17 |
if (argc < 2) { |
if (argc < 2) { |
19 |
} |
} |
20 |
|
|
21 |
++argv; |
++argv; |
22 |
if (chroot(*argv)) { |
xchroot(*argv); |
|
bb_perror_msg_and_die("cannot change root directory to %s", *argv); |
|
|
} |
|
23 |
xchdir("/"); |
xchdir("/"); |
24 |
|
|
25 |
++argv; |
++argv; |
26 |
if (argc == 2) { |
if (argc == 2) { |
27 |
argv -= 2; |
argv -= 2; |
28 |
if (!(*argv = getenv("SHELL"))) { |
argv[0] = getenv("SHELL"); |
29 |
*argv = (char *) DEFAULT_SHELL; |
if (!argv[0]) { |
30 |
|
argv[0] = (char *) DEFAULT_SHELL; |
31 |
} |
} |
32 |
argv[1] = (char *) "-i"; |
argv[1] = (char *) "-i"; |
33 |
} |
} |
34 |
|
|
35 |
execvp(*argv, argv); |
BB_EXECVP(*argv, argv); |
36 |
bb_perror_msg_and_die("cannot execute %s", *argv); |
bb_perror_msg_and_die("cannot execute %s", *argv); |
37 |
} |
} |