void-packages/srcpkgs/xbps-triggers/files/system-accounts

125 lines
2.4 KiB
Bash
Executable file

#!/bin/sh -e
#
# (Un)registers systems accounts (users/groups).
#
# Arguments: $ACTION = [run/targets]
# $TARGET = [post-install/pre-remove]
# $PKGNAME
# $VERSION
# $UPDATE = [yes/no]
#
ACTION="$1"
TARGET="$2"
PKGNAME="$3"
VERSION="$4"
UPDATE="$5"
export PATH="$PATH:/usr/local/bin"
USERADD=usr/sbin/useradd
USERDEL=usr/sbin/userdel
GROUPADD=usr/sbin/groupadd
GROUPDEL=usr/sbin/groupdel
PASSWD=usr/bin/passwd
GETENT=usr/bin/getent
group_add()
{
local grp="$1"
if ! $GETENT group ${grp} >/dev/null; then
$GROUPADD -r ${grp} >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Created ${grp} system group."
else
echo "Failed to create ${grp} system group!"
exit 1
fi
fi
}
case "$ACTION" in
targets)
echo "post-install pre-remove"
;;
run)
if [ ! -x $USERADD -a ! -x $GROUPADD -a ! -x $PASSWD -a ! -x $GETENT ]; then
exit 0
fi
if [ -z "$system_accounts" -a -z "$system_groups" ]; then
exit 0
fi
HOST_ARCH=$(uname -m)
if [ "$XBPS_TARGET_ARCH" != "$HOST_ARCH" ]; then
USERADD=useradd
USERDEL=userdel
GROUPADD=groupadd
GROUPDEL=groupdel
PASSWD=passwd
GETENT=getent
fi
case "$TARGET" in
post-install)
# System groups required by a package.
for grp in ${system_groups}; do
group_add $grp
done
# System user/group required by a package.
for acct in ${system_accounts}; do
eval homedir="\$${acct}_homedir"
eval shell="\$${acct}_shell"
eval descr="\$${acct}_descr"
eval groups="\$${acct}_groups"
[ -z "$homedir" ] && homedir="/"
[ -z "$shell" ] && shell="/sbin/nologin"
[ -z "$descr" ] && descr="$acct unpriviledged user"
[ -n "$groups" ] && user_groups="-G $groups"
group_add $acct
if ! $GETENT passwd ${acct} >/dev/null; then
$USERADD -c "$descr" -d "$homedir" \
-s "$shell" -g ${acct} $user_groups \
-r ${acct} && \
$PASSWD -l ${acct} >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Created ${acct} system user."
else
echo "Failed to create ${acct} system user!"
exit 1
fi
fi
done
;;
pre-remove)
#
# Only unregister if we aren't updating a package.
#
if [ "$UPDATE" = "no" ]; then
for acct in ${system_accounts}; do
$USERDEL ${acct} >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Removed ${acct} system user/group."
fi
done
for grp in ${system_groups}; do
$GROUPDEL ${grp} >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Removed ${grp} system group."
fi
done
fi
;;
esac
;;
*)
exit 1
;;
esac
exit 0