---
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/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
+#
+# Copyright (c) 2016 Pacman Development Team
+#
+# 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_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:
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
+#
+# 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 $?
}
# 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"
--
2.7.2