#!/bin/sh # # (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" 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 _grname _gid use_gid _grname="${1%:*}" _gid="${1#*:}" if [ "${_gid}" != "${_grname}" ]; then use_gid="gid ${_gid}" fi if ! $GETENT group ${_grname} >/dev/null; then if [ -n "$use_gid" ]; then $GROUPADD -r ${_grname} -g ${_gid} >/dev/null 2>&1 else $GROUPADD -r ${_grname} >/dev/null 2>&1 fi if [ $? -eq 0 ]; then echo "Created ${_grname} ($use_gid) system group." else echo "Failed to create ${_grname} ($use_gid) 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 [ -n "$XBPS_TARGET_ARCH" -a "$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 if [ ! -x "$GROUPADD" ]; then echo "WARNING: cannot create ${grp} system group (missing groupadd)" continue fi group_add $grp done # System user/group required by a package. for acct in ${system_accounts}; do if [ ! -x "$USERADD" ]; then echo "WARNING: cannot create ${acct} system user/group (missing useradd)" continue fi 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 if [ ! -x "$USERDEL" ]; then echo "WARNING: cannot remove ${acct} system user/group (missing userdel)" continue fi $USERDEL ${acct} >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "Removed ${acct} system user/group." fi done for grp in ${system_groups}; do if [ ! -x "$GROUPDEL" ]; then echo "WARNING: cannot remove ${acct} system group (missing groupdel)" continue fi $GROUPDEL ${grp} >/dev/null 2>&1 if [ $? -eq 0 ]; then echo "Removed ${grp} system group." fi done fi ;; esac ;; *) exit 1 ;; esac exit 0