mirror of
https://github.com/openwrt/openwrt.git
synced 2025-02-02 09:18:05 +00:00
base-files, metadata: support additional group membership
Some packages may require additional group membership for the system user added by that package. Allow defining additional groups as third member of the ':'-separated tuple, allowing to specify multiple ','-separated groups with optional GID. Example: USERID:=foouser=1000:foogroup=1000:addg1=1001,addg2=1002,addg3 Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
parent
db639238f2
commit
b2aca61360
@ -209,10 +209,10 @@ add_group_and_user() {
|
|||||||
if [ -n "$rusers" ]; then
|
if [ -n "$rusers" ]; then
|
||||||
local tuple oIFS="$IFS"
|
local tuple oIFS="$IFS"
|
||||||
for tuple in $rusers; do
|
for tuple in $rusers; do
|
||||||
local uid gid uname gname
|
local uid gid uname gname addngroups addngroup addngname addngid
|
||||||
|
|
||||||
IFS=":"
|
IFS=":"
|
||||||
set -- $tuple; uname="$1"; gname="$2"
|
set -- $tuple; uname="$1"; gname="$2"; addngroups="$3"
|
||||||
IFS="="
|
IFS="="
|
||||||
set -- $uname; uname="$1"; uid="$2"
|
set -- $uname; uname="$1"; uid="$2"
|
||||||
set -- $gname; gname="$1"; gid="$2"
|
set -- $gname; gname="$1"; gid="$2"
|
||||||
@ -232,7 +232,24 @@ add_group_and_user() {
|
|||||||
group_add_user "$gname" "$uname"
|
group_add_user "$gname" "$uname"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset uid gid uname gname
|
if [ -n "$uname" ] && [ -n "$addngroups" ]; then
|
||||||
|
oIFS="$IFS"
|
||||||
|
IFS=","
|
||||||
|
for addngroup in $addngroups ; do
|
||||||
|
IFS="="
|
||||||
|
set -- $addngroup; addngname="$1"; addngid="$2"
|
||||||
|
if [ -n "$addngid" ]; then
|
||||||
|
group_exists "$addngname" || group_add "$addngname" "$addngid"
|
||||||
|
else
|
||||||
|
group_add_next "$addngname"
|
||||||
|
fi
|
||||||
|
|
||||||
|
group_add_user "$addngname" "$uname"
|
||||||
|
done
|
||||||
|
IFS="$oIFS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset uid gid uname gname addngroups addngroup addngname addngid
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -295,13 +295,19 @@ sub parse_package_metadata($) {
|
|||||||
my @ugspecs = split /\s+/, $1;
|
my @ugspecs = split /\s+/, $1;
|
||||||
|
|
||||||
for my $ugspec (@ugspecs) {
|
for my $ugspec (@ugspecs) {
|
||||||
my @ugspec = split /:/, $ugspec, 2;
|
my @ugspec = split /:/, $ugspec, 3;
|
||||||
if ($ugspec[0]) {
|
if ($ugspec[0]) {
|
||||||
parse_package_metadata_usergroup($src->{makefile}, "user", \%usernames, \%userids, $ugspec[0]) or return 0;
|
parse_package_metadata_usergroup($src->{makefile}, "user", \%usernames, \%userids, $ugspec[0]) or return 0;
|
||||||
}
|
}
|
||||||
if ($ugspec[1]) {
|
if ($ugspec[1]) {
|
||||||
parse_package_metadata_usergroup($src->{makefile}, "group", \%groupnames, \%groupids, $ugspec[1]) or return 0;
|
parse_package_metadata_usergroup($src->{makefile}, "group", \%groupnames, \%groupids, $ugspec[1]) or return 0;
|
||||||
}
|
}
|
||||||
|
if ($ugspec[2]) {
|
||||||
|
my @addngroups = split /,/, $ugspec[2];
|
||||||
|
for my $addngroup (@addngroups) {
|
||||||
|
parse_package_metadata_usergroup($src->{makefile}, "group", \%groupnames, \%groupids, $addngroup) or return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user