mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-28 01:06:17 +00:00
ed8027772f
- Allow user to override UID/GID PR: ports/107654 Submitted by: Robin Breathe <robin@isometry.net> (maintainer)
108 lines
3.1 KiB
Bash
108 lines
3.1 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
# ex:ts=4
|
|
|
|
ask() {
|
|
local question default answer
|
|
|
|
question=$1
|
|
default=$2
|
|
if [ -z "${PACKAGE_BUILDING}" -a -z "${BATCH}" ]; then
|
|
read -p "${question} [${default}]? " answer
|
|
fi
|
|
echo ${answer:-${default}}
|
|
}
|
|
|
|
yesno() {
|
|
local question default answer
|
|
|
|
question=$1
|
|
default=$2
|
|
while :; do
|
|
answer=$(ask "${question}" "${default}")
|
|
case "${answer}" in
|
|
[Yy]*) return 0;;
|
|
[Nn]*) return 1;;
|
|
esac
|
|
echo "Please answer yes or no."
|
|
done
|
|
}
|
|
|
|
create_account() {
|
|
local port user uid group gid gcos home shell
|
|
|
|
port=$1
|
|
user=${2%:*}
|
|
uid=${2#*:}
|
|
group=${3%:*}
|
|
gid=${3#*:}
|
|
gcos=$4
|
|
home=$5
|
|
shell=$6
|
|
|
|
pw_user_uid=$(pw usershow -n "${user}" 2>/dev/null | cut -d: -f3)
|
|
pw_uid_user=$(pw usershow -u "${uid}" 2>/dev/null | cut -d: -f1)
|
|
pw_group_gid=$(pw groupshow -n "${group}" 2>/dev/null | cut -d: -f3)
|
|
pw_gid_group=$(pw groupshow -g "${gid}" 2>/dev/null | cut -d: -f1)
|
|
|
|
if [ -z "${pw_group_gid}" -a -z "${pw_gid_group}" ]; then
|
|
echo "You need a ${group} group; creating it..."
|
|
pw groupadd "${group}" -g "${gid}" || exit
|
|
echo "Done."
|
|
elif [ "${gid}" = "${pw_group_gid}" -a "${group}" = "${pw_gid_group}" ]; then
|
|
echo "Using existing ${group} group."
|
|
else
|
|
echo "${port} has reserved the groupname '${group}' and gid '${gid}':"
|
|
[ -n "${pw_group_gid}" -a "${gid}" != "${pw_group_gid}" ] \
|
|
&& echo "ERROR: groupname '${group}' already in use by gid '${pw_group_gid}'"
|
|
[ -n "${pw_gid_group}" -a "${group}" != "${pw_gid_group}" ] \
|
|
&& echo "ERROR: gid '${gid}' already in use by group '${pw_gid_group}'"
|
|
echo "Please resolve these issues and try again:"
|
|
echo "Either remove the conflicting group or if you wish to continue using a legacy group override DOVECOT_GID."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${pw_user_uid}" -a -z "${pw_uid_user}" ]; then
|
|
echo "You need a ${user} user; creating it..."
|
|
pw useradd "${user}" -u "${uid}" -g "${group}" -c "${gcos}" -d "${home}" -s "${shell}"
|
|
echo "Done."
|
|
elif [ "${uid}" = "${pw_user_uid}" -a "${user}" = "${pw_uid_user}" ]; then
|
|
echo "Using existing ${user} user."
|
|
else
|
|
echo "${port} has reserved the username '${user}' and uid '${uid}':"
|
|
[ -n "${pw_user_uid}" -a "${uid}" != "${pw_user_uid}" ] \
|
|
&& echo "ERROR: username '${user}' already in use by uid '${pw_user_uid}'"
|
|
[ -n "${pw_uid_user}" -a "${user}" != "${pw_uid_user}" ] \
|
|
&& echo "ERROR: uid '${uid}' already in use by user '${pw_uid_user}'"
|
|
echo "Please resolve these issues and try again:"
|
|
echo "Either remove the conflicting user or if you wish to continue using a legacy user override DOVECOT_UID."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
case $2 in
|
|
|
|
PRE-INSTALL)
|
|
create_account Dovecot dovecot:${DOVECOT_UID:-143} dovecot:${DOVECOT_GID:-143} "Dovecot User" /var/empty /sbin/nologin
|
|
;;
|
|
|
|
POST-INSTALL)
|
|
base=/var/run/dovecot
|
|
DIRLIST="${base} ${base}/login"
|
|
echo "Fixing ownerships and modes in \"${base}\"."
|
|
for directory in ${DIRLIST}; do
|
|
if [ ! -d "${directory}" ]; then
|
|
mkdir -p ${directory}
|
|
echo "Created directory: ${directory}"
|
|
fi
|
|
done
|
|
chown -R root:wheel ${base}
|
|
chmod -R 0755 ${base}
|
|
chown -R root:dovecot ${base}/login
|
|
chmod -R 0750 ${base}/login
|
|
;;
|
|
|
|
esac
|