summaryrefslogtreecommitdiffstats
path: root/sys-utils/unshare.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek2013-02-14 03:05:48 +0100
committerKarel Zak2013-02-14 14:42:35 +0100
commit57580694269be36cc52138b0f82e72f09338e192 (patch)
tree1b4f0a31421327529afc83c9d2b16750f465fe49 /sys-utils/unshare.c
parentlibblkid: read whole buffer for iso_volume_descriptor (diff)
downloadkernel-qcow2-util-linux-57580694269be36cc52138b0f82e72f09338e192.tar.gz
kernel-qcow2-util-linux-57580694269be36cc52138b0f82e72f09338e192.tar.xz
kernel-qcow2-util-linux-57580694269be36cc52138b0f82e72f09338e192.zip
unshare,nsenter: spawn shell by default
The behaviour mimics chroot. Possibly it would have been nicer to to query the password database in the new namepace and run the shell of the user there, but it's hard to do correctly. getpwuid() might need to load nss plugins, and the arch in the new namespace might be different (in case of NEWNS mounts), or the hostname might be different, etc. So in general it's not possible to do it reliably. Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Diffstat (limited to 'sys-utils/unshare.c')
-rw-r--r--sys-utils/unshare.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys-utils/unshare.c b/sys-utils/unshare.c
index 62d2fcbbf..2eea165b8 100644
--- a/sys-utils/unshare.c
+++ b/sys-utils/unshare.c
@@ -29,6 +29,7 @@
#include "c.h"
#include "closestream.h"
#include "namespace.h"
+#include "exec_shell.h"
static void usage(int status)
{
@@ -107,13 +108,12 @@ int main(int argc, char *argv[])
}
}
- if(optind >= argc)
- usage(EXIT_FAILURE);
-
if(-1 == unshare(unshare_flags))
err(EXIT_FAILURE, _("unshare failed"));
- execvp(argv[optind], argv + optind);
-
- err(EXIT_FAILURE, _("failed to execute %s"), argv[optind]);
+ if (optind < argc) {
+ execvp(argv[optind], argv + optind);
+ err(EXIT_FAILURE, _("failed to execute %s"), argv[optind]);
+ }
+ exec_shell();
}