libbb: make xchroot do a chdir("/") after chroot
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 7 Mar 2012 23:28:24 +0000 (00:28 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 7 Mar 2012 23:28:24 +0000 (00:28 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/chroot.c
libbb/xfuncs_printf.c
networking/ftpd.c
procps/sysctl.c
runit/chpst.c
util-linux/switch_root.c

index ab8beb0238f129483aadf8bc5202e1102c3ff6fd..633e66b383e4c23a726b4200d27af4d3b213ac4a 100644 (file)
@@ -31,7 +31,6 @@ int chroot_main(int argc UNUSED_PARAM, char **argv)
        if (!*argv)
                bb_show_usage();
        xchroot(*argv);
-       xchdir("/");
 
        ++argv;
        if (!*argv) { /* no 2nd param (PROG), use shell */
index 56ee459e45ffa4549692642646f7207ac19de5ce..d8a42ba0bccb00a49fd250606965402cd7830c21 100644 (file)
@@ -362,6 +362,7 @@ void FAST_FUNC xchroot(const char *path)
 {
        if (chroot(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.
index e38138c0a85b1b4d8ef0e753597ab323c5113ae9..1c97df564f5601ffa9251f87eca47757eea3d5d9 100644 (file)
@@ -1179,8 +1179,7 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv)
 #endif
 
        if (argv[optind]) {
-               xchdir(argv[optind]);
-               chroot(".");
+               xchroot(argv[optind]);
        }
 
        //umask(077); - admin can set umask before starting us
index cb3b6a25a2fde51250bd314bea3eb4c324e5e405..5296d0f5813c10dfe8fd326177e18e88cf368418 100644 (file)
@@ -224,7 +224,7 @@ static int sysctl_handle_preload_file(const char *filename)
        parser = config_open(filename);
        /* Must do it _after_ config_open(): */
        xchdir("/proc/sys");
-       /* xchroot(".") - if you are paranoid */
+       /* xchroot("/proc/sys") - if you are paranoid */
 
 //TODO: ';' is comment char too
 //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");
        }
        xchdir("/proc/sys");
-       /* xchroot(".") - if you are paranoid */
+       /* xchroot("/proc/sys") - if you are paranoid */
        if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL)) {
                return sysctl_act_recursive(".");
        }
index 9b8c99bdd3babb8ad3d53e9003f2b50f049c3dbe..ac296babf2cc8af193461320ecc58f399b8856b0 100644 (file)
@@ -417,8 +417,7 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
        }
 
        if (opt & OPT_root) {
-               xchdir(root);
-               xchroot(".");
+               xchroot(root);
        }
 
        if (opt & OPT_u) {
index db6ae3542e95f4b9a744643ae036c1dbddbd918f..a301b365b8955bce3f518e051f098fcaed6ab4b6 100644 (file)
@@ -114,7 +114,7 @@ int switch_root_main(int argc UNUSED_PARAM, char **argv)
        }
        xchroot(".");
        // 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 (console) {