From d232870b2896e4595419e3ca0a8037ed21162ebf Mon Sep 17 00:00:00 2001 From: Johannes 'josch' Schauer Date: Mon, 24 Sep 2018 20:09:08 +0200 Subject: [PATCH] check whether newuidmap and newgidmap are available --- mmdebstrap | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/mmdebstrap b/mmdebstrap index a60e979..f40dd5c 100755 --- a/mmdebstrap +++ b/mmdebstrap @@ -109,6 +109,16 @@ sub test_unshare() { if (($? >> 8) != 0) { return 0; } + # if newuidmap and newgidmap exist, the exit status will be 1 when + # executed without parameters + system "newuidmap 2>/dev/null"; + if (($? >> 8) != 1) { + return 0; + } + system "newgidmap 2>/dev/null"; + if (($? >> 8) != 1) { + return 0; + } return 1; } @@ -1357,6 +1367,22 @@ sub main() { if ($EFFECTIVE_USER_ID == 0) { print STDERR "I: cannot use unshare mode when executing as root\n"; } + system "newuidmap 2>/dev/null"; + if (($? >> 8) != 1) { + if (($? >> 8) == 127) { + print STDERR "I: cannot find newuidmap\n"; + } else { + print STDERR "I: newuidmap returned unknown exit status\n"; + } + } + system "newgidmap 2>/dev/null"; + if (($? >> 8) != 1) { + if (($? >> 8) == 127) { + print STDERR "I: cannot find newgidmap\n"; + } else { + print STDERR "I: newgidmap returned unknown exit status\n"; + } + } my $procfile = '/proc/sys/kernel/unprivileged_userns_clone'; open(my $fh, '<', $procfile) or die "failed to open $procfile: $!"; chomp(my $content = do { local $/; <$fh> });