On 19/03/16 23:50, Andrew Gregory wrote:
--- scripts/Makefile.am | 2 ++ scripts/libmakepkg/.gitignore | 2 ++ scripts/libmakepkg/sysgroups.sh.in | 60 +++++++++++++++++++++++++++++++++++ scripts/libmakepkg/sysusers.sh.in | 65 ++++++++++++++++++++++++++++++++++++++ scripts/makepkg.sh.in | 4 ++- 5 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 scripts/libmakepkg/sysgroups.sh.in create mode 100644 scripts/libmakepkg/sysusers.sh.in
diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 6f9abb8..a3c1050 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -81,6 +81,8 @@ LIBMAKEPKG_IN = \ libmakepkg/source/hg.sh \ libmakepkg/source/local.sh \ libmakepkg/source/svn.sh \ + libmakepkg/sysgroups.sh \ + libmakepkg/sysusers.sh \
libmakepkg/util/?
libmakepkg/tidy.sh \ libmakepkg/tidy/docs.sh \ libmakepkg/tidy/emptydirs.sh \ diff --git a/scripts/libmakepkg/.gitignore b/scripts/libmakepkg/.gitignore index 2de91e7..7a784d0 100644 --- a/scripts/libmakepkg/.gitignore +++ b/scripts/libmakepkg/.gitignore @@ -4,6 +4,8 @@ lint_pkgbuild.sh lint_pkgbuild/*.sh source.sh source/*.sh +sysusers.sh +sysgroups.sh tidy.sh tidy/*.sh util.sh diff --git a/scripts/libmakepkg/sysgroups.sh.in b/scripts/libmakepkg/sysgroups.sh.in new file mode 100644 index 0000000..095d60e --- /dev/null +++ b/scripts/libmakepkg/sysgroups.sh.in @@ -0,0 +1,60 @@ +#!/bin/bash +# +# source.sh - functions for downloading and extracting sources
Update
+# +# Copyright (c) 2016 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[[ -n "$LIBMAKEPKG_SOURCE_SYSGROUPS" ]] && return
LIBMAKEPKG_SYSGROUPS or LIBMAKEPKG_UTIL_SYSGROUPS
+LIBMAKEPKG_SOURCE_SYSGROUPS=1 + +# field indices +gr_name=0 +gr_passwd=1 +gr_gid=2 +gr_users=3 + +dynamic_gid=101 + +gr_parse_ent() { + IFS=: read -a "$1" +} + +add_fake_group() { + local -a gr fakeuser_args + gr_parse_ent 'gr' <<< "$1" + + if [[ -n ${gr[$gr_gid]} ]]; then + fakeuser_args+=('-g' "${gr[$gr_gid]}") + else + fakeuser_args+=('-g' $(( dynamic_gid++ )) ) + fi + + [[ -n ${gr[$gr_name]} ]] && fakeuser_args+=('-n' "${gr[$gr_name]}") + [[ -n ${gr[$gr_passwd]} ]] && fakeuser_args+=('-p' "${gr[$gr_passwd]}") + [[ -n ${gr[$gr_gid]} ]] && fakeuser_args+=('-g' "${gr[$gr_gid]}") + [[ -n ${gr[$gr_users]} ]] && fakeuser_args+=('-m' "${gr[$gr_gecos]}") + + fakeadd -G "${fakeuser_args[@]}" +} + +add_fake_groups() { + for ent in "${sysgroups[@]}"; do + add_fake_group "$ent" + done +} + +# vim: set noet:
There are no other vim lines in libmakepkg... mostly because I don't use vim! I dislike them due to applying to a single editor. We need to discuss this separately!
diff --git a/scripts/libmakepkg/sysusers.sh.in b/scripts/libmakepkg/sysusers.sh.in new file mode 100644 index 0000000..fbb7328 --- /dev/null +++ b/scripts/libmakepkg/sysusers.sh.in @@ -0,0 +1,65 @@ +#!/bin/bash +# +# source.sh - functions for downloading and extracting sources +# +# Copyright (c) 2016 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +[[ -n "$LIBMAKEPKG_SOURCE_SYSUSERS" ]] && return +LIBMAKEPKG_SOURCE_SYSUSERS=1 + +# field indices +pw_name=0 +pw_passwd=1 +pw_uid=2 +pw_gid=3 +pw_gecos=4 +pw_dir=5 +pw_shell=6 + +dynamic_uid=101 + +pw_parse_ent() { + IFS=: read -a "$1" +} + +add_fake_user() { + local -a pw fakeuser_args + pw_parse_ent 'pw' <<< "$1" + + if [[ -n ${pw[$pw_uid]} ]]; then + fakeuser_args+=('-u' "${pw[$pw_uid]}") + else + fakeuser_args+=('-u' $(( dynamic_uid++ )) ) + fi + + [[ -n ${pw[$pw_name]} ]] && fakeuser_args+=('-n' "${pw[$pw_name]}") + [[ -n ${pw[$pw_passwd]} ]] && fakeuser_args+=('-p' "${pw[$pw_passwd]}") + [[ -n ${pw[$pw_gid]} ]] && fakeuser_args+=('-g' "${pw[$pw_gid]}") + [[ -n ${pw[$pw_gecos]} ]] && fakeuser_args+=('-c' "${pw[$pw_gecos]}") + [[ -n ${pw[$pw_dir]} ]] && fakeuser_args+=('-d' "${pw[$pw_dir]}") + [[ -n ${pw[$pw_shell]} ]] && fakeuser_args+=('-s' "${pw[$pw_shell]}") + + fakeadd -U "${fakeuser_args[@]}" +} + +add_fake_users() { + for ent in "${sysusers[@]}"; do + add_fake_user "$ent" + done +} + +# vim: set noet: diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 2efcc98..a0134f6 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -167,7 +167,7 @@ clean_up() {
enter_fakeroot() { msg "$(gettext "Entering %s environment...")" "fakeroot" - fakeroot -- $0 -F "${ARGLIST[@]}" || exit $? + LD_PRELOAD=/usr/lib/libfakeuser.so fakeroot -- $0 -F "${ARGLIST[@]}" || exit $?
We should probably have a check that fakeuser is installed.
}
# Automatically update pkgver variable if a pkgver() function is provided @@ -2098,6 +2098,8 @@ if (( INFAKEROOT )); then fi
chmod 755 "$pkgdirbase" + add_fake_users + add_fake_groups if (( ! SPLITPKG )); then pkgdir="$pkgdirbase/$pkgname" mkdir "$pkgdir"