libbb: make xchroot do a chdir("/") after chroot
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
39c2cb2e93
commit
0687a5b496
@ -31,7 +31,6 @@ int chroot_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (!*argv)
|
if (!*argv)
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
xchroot(*argv);
|
xchroot(*argv);
|
||||||
xchdir("/");
|
|
||||||
|
|
||||||
++argv;
|
++argv;
|
||||||
if (!*argv) { /* no 2nd param (PROG), use shell */
|
if (!*argv) { /* no 2nd param (PROG), use shell */
|
||||||
|
@ -362,6 +362,7 @@ void FAST_FUNC xchroot(const char *path)
|
|||||||
{
|
{
|
||||||
if (chroot(path))
|
if (chroot(path))
|
||||||
bb_perror_msg_and_die("can't change root directory to %s", path);
|
bb_perror_msg_and_die("can't change root directory to %s", path);
|
||||||
|
xchdir("/");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print a warning message if opendir() fails, but don't die.
|
// Print a warning message if opendir() fails, but don't die.
|
||||||
|
@ -1179,8 +1179,7 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (argv[optind]) {
|
if (argv[optind]) {
|
||||||
xchdir(argv[optind]);
|
xchroot(argv[optind]);
|
||||||
chroot(".");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//umask(077); - admin can set umask before starting us
|
//umask(077); - admin can set umask before starting us
|
||||||
|
@ -224,7 +224,7 @@ static int sysctl_handle_preload_file(const char *filename)
|
|||||||
parser = config_open(filename);
|
parser = config_open(filename);
|
||||||
/* Must do it _after_ config_open(): */
|
/* Must do it _after_ config_open(): */
|
||||||
xchdir("/proc/sys");
|
xchdir("/proc/sys");
|
||||||
/* xchroot(".") - if you are paranoid */
|
/* xchroot("/proc/sys") - if you are paranoid */
|
||||||
|
|
||||||
//TODO: ';' is comment char too
|
//TODO: ';' is comment char too
|
||||||
//TODO: comment may be only at line start. "var=1 #abc" - "1 #abc" is the value
|
//TODO: comment may be only at line start. "var=1 #abc" - "1 #abc" is the value
|
||||||
@ -260,7 +260,7 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
return sysctl_handle_preload_file(*argv ? *argv : "/etc/sysctl.conf");
|
return sysctl_handle_preload_file(*argv ? *argv : "/etc/sysctl.conf");
|
||||||
}
|
}
|
||||||
xchdir("/proc/sys");
|
xchdir("/proc/sys");
|
||||||
/* xchroot(".") - if you are paranoid */
|
/* xchroot("/proc/sys") - if you are paranoid */
|
||||||
if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL)) {
|
if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL)) {
|
||||||
return sysctl_act_recursive(".");
|
return sysctl_act_recursive(".");
|
||||||
}
|
}
|
||||||
|
@ -417,8 +417,7 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opt & OPT_root) {
|
if (opt & OPT_root) {
|
||||||
xchdir(root);
|
xchroot(root);
|
||||||
xchroot(".");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt & OPT_u) {
|
if (opt & OPT_u) {
|
||||||
|
@ -114,7 +114,7 @@ int switch_root_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
xchroot(".");
|
xchroot(".");
|
||||||
// The chdir is needed to recalculate "." and ".." links
|
// The chdir is needed to recalculate "." and ".." links
|
||||||
xchdir("/");
|
/*xchdir("/"); - done in xchroot */
|
||||||
|
|
||||||
// If a new console specified, redirect stdin/stdout/stderr to it
|
// If a new console specified, redirect stdin/stdout/stderr to it
|
||||||
if (console) {
|
if (console) {
|
||||||
|
Loading…
Reference in New Issue
Block a user