mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-24 15:43:25 +00:00
build: add user/group ID resolve function
With the introduction of `./tmp/userids` the `ipkg-build` script can now resolve values of "PKG_FILE_MODES", allowing users to set names rather than numeric values. Signed-off-by: Paul Spooren <mail@aparcar.org>
This commit is contained in:
parent
34cc2c9a99
commit
51ec51871f
@ -68,6 +68,40 @@ pkg_appears_sane() {
|
|||||||
return $PKG_ERROR
|
return $PKG_ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolve_file_mode_id() {
|
||||||
|
type="$1"
|
||||||
|
name="$2"
|
||||||
|
position=1
|
||||||
|
if [ "$type" = "group" ]; then
|
||||||
|
position=2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# root is always 0
|
||||||
|
if [ "$name" = "root" ]; then
|
||||||
|
echo 0
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# return numeric names
|
||||||
|
if [ "$name" -eq "$name" 2>/dev/null ]; then
|
||||||
|
echo "$name"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ids=$(grep "$name" "$TOPDIR/tmp/userids")
|
||||||
|
for id in $ids; do
|
||||||
|
resolved_name=$(echo "$id" | cut -d ":" -f "$position" | cut -d "=" -f 1)
|
||||||
|
resolved_id=$(echo "$id" | cut -d ":" -f "$position" | cut -d "=" -f 2)
|
||||||
|
if [ "$resolved_name" = "$name" ]; then
|
||||||
|
echo "$resolved_id"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
>&2 echo "No $type ID found for $name"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
# ipkg-build "main"
|
# ipkg-build "main"
|
||||||
###
|
###
|
||||||
@ -142,10 +176,14 @@ for file_mode in $file_modes; do
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
path=$(echo "$file_mode" | cut -d ':' -f 1)
|
path=$(echo "$file_mode" | cut -d ':' -f 1)
|
||||||
user_group=$(echo "$file_mode" | cut -d ':' -f 2-3)
|
user=$(echo "$file_mode" | cut -d ':' -f 2)
|
||||||
|
group=$(echo "$file_mode" | cut -d ':' -f 3)
|
||||||
mode=$(echo "$file_mode" | cut -d ':' -f 4)
|
mode=$(echo "$file_mode" | cut -d ':' -f 4)
|
||||||
|
|
||||||
chown "$user_group" "$pkg_dir/$path"
|
uid=$(resolve_file_mode_id user "$user")
|
||||||
|
gid=$(resolve_file_mode_id group "$group")
|
||||||
|
|
||||||
|
chown "$uid:$gid" "$pkg_dir/$path"
|
||||||
chmod "$mode" "$pkg_dir/$path"
|
chmod "$mode" "$pkg_dir/$path"
|
||||||
done
|
done
|
||||||
$TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz
|
$TAR -X $tmp_dir/tarX --format=gnu --sort=name -cpf - --mtime="$TIMESTAMP" . | $GZIP -n - > $tmp_dir/data.tar.gz
|
||||||
|
Loading…
Reference in New Issue
Block a user