@ -325,7 +325,7 @@ sub test_unshare_userns {
}
}
sub read_subuid_subgid() {
sub read_subuid_subgid() {
my $username = getpwuid $< ;
my $username = getpwuid $REAL_USER_ID ;
my ($subid, $num_subid, $fh, $n);
my ($subid, $num_subid, $fh, $n);
my @result = ();
my @result = ();
@ -364,29 +364,40 @@ sub read_subuid_subgid() {
return;
return;
}
}
my $groupname = getgrgid $REAL_GROUP_ID;
if (!-e "/etc/subgid") {
warning "/etc/subgid doesn't exist";
return;
}
if (!-r "/etc/subgid") {
warning "/etc/subgid is not readable";
return;
}
open $fh, "<", "/etc/subgid"
open $fh, "<", "/etc/subgid"
or error "cannot open /etc/subgid for reading: $!";
or error "cannot open /etc/subgid for reading: $!";
while (my $line = <$fh>) {
while (my $line = <$fh>) {
($n, $subid, $num_subid) = split(/:/, $line, 3);
($n, $subid, $num_subid) = split(/:/, $line, 3);
last if ($n eq $username);
last if ($n eq $group name);
}
}
close $fh;
close $fh;
if (!length $subid) {
if (!length $subid) {
warning "/etc/subgid is empty";
warning "/etc/subgid is empty";
return;
return;
}
}
if ($n ne $user name) {
if ($n ne $group name) {
warning "no entry in /etc/subgid for $user name";
warning "no entry in /etc/subgid for $group name";
return;
return;
}
}
push @result, ["g", 0, $subid, $num_subid];
push @result, ["g", 0, $subid, $num_subid];
if (scalar(@result) < 2) {
if (scalar(@result) < 2) {
warning "/etc/subgid does not contain an entry for $user name";
warning "/etc/subgid does not contain an entry for $group name";
return;
return;
}
}
if (scalar(@result) > 2) {
if (scalar(@result) > 2) {
warning "/etc/subgid contains multiple entries for $user name";
warning "/etc/subgid contains multiple entries for $group name";
return;
return;
}
}