libbb: make xchroot do a chdir("/") after chroot

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2012-03-08 00:28:24 +01:00
parent 39c2cb2e93
commit 0687a5b496
6 changed files with 6 additions and 8 deletions

View File

@ -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 */

View File

@ -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.

View File

@ -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

View File

@ -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(".");
} }

View File

@ -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) {

View File

@ -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) {