Partial revert #1864 (#1877)

This commit is contained in:
Georg Lauterbach 2021-03-31 16:45:16 +02:00 committed by GitHub
parent 359696cba9
commit bc5bc51c02
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 51 deletions

View file

@ -162,7 +162,7 @@ function _usage
\e[94mCOMMAND\e[39m email \e[31m:=\e[39m \e[94mCOMMAND\e[39m email \e[31m:=\e[39m
${0} email add <EMAIL ADDRESS> [<PASSWORD>] ${0} email add <EMAIL ADDRESS> [<PASSWORD>]
${0} email update <EMAIL ADDRESS> [<PASSWORD>] ${0} email update <EMAIL ADDRESS> [<PASSWORD>]
${0} email del [ OPTIONS\e[31m...\e[39m ] <EMAIL ADDRESS> ${0} email del [ OPTIONS\e[31m...\e[39m ] <EMAIL ADDRESS> [ <EMAIL ADDRESS>\e[31m...\e[39m ]
${0} email restrict <add\e[31m|\e[39mdel\e[31m|\e[39mlist> <send\e[31m|\e[39mreceive> [<EMAIL ADDRESS>] ${0} email restrict <add\e[31m|\e[39mdel\e[31m|\e[39mlist> <send\e[31m|\e[39mreceive> [<EMAIL ADDRESS>]
${0} email list ${0} email list

View file

@ -21,7 +21,7 @@ function __usage
delmailuser - delete a user and related data delmailuser - delete a user and related data
\e[38;5;214mSYNOPSIS\e[39m \e[38;5;214mSYNOPSIS\e[39m
./setup.sh email del [ OPTIONS ] { <MAIL ADDRESS> \e[31m|\e[39m help } ./setup.sh email del [ OPTIONS ] { <MAIL ADDRESS> [<MAIL ADDRESS>\e[31m...\e[39m] \e[31m|\e[39m help }
\e[38;5;214mDESCRIPTION\e[39m \e[38;5;214mDESCRIPTION\e[39m
Delete a mail user, aliases, quotas and mail data. Delete a mail user, aliases, quotas and mail data.
@ -38,7 +38,7 @@ function __usage
Delete the mail user, quotas and aliases, but ask Delete the mail user, quotas and aliases, but ask
again whether mailbox data should be deleted. again whether mailbox data should be deleted.
\e[37m./setup.sh email del -y test@domain.com\e[39m \e[37m./setup.sh email del -y test@domain.com test@domain.com\e[39m
Delete all mail data for the users 'test' and do not Delete all mail data for the users 'test' and do not
prompt to ask if all mail data should be deleted. prompt to ask if all mail data should be deleted.
@ -89,75 +89,77 @@ fi
( (
flock -e 200 flock -e 200
ERROR=false for EMAIL in "${@}"
EMAIL="${*}" do
ERROR=false
# very simple plausibility check # very simple plausibility check
[[ ${EMAIL} != *@*.* ]] && errex "No valid address: ${EMAIL}" [[ ${EMAIL} != *@*.* ]] && errex "No valid address: ${EMAIL}"
USER="${EMAIL%@*}" USER="${EMAIL%@*}"
DOMAIN="${EMAIL#*@}" DOMAIN="${EMAIL#*@}"
# ${EMAIL} must not contain /s and other syntactic characters # ${EMAIL} must not contain /s and other syntactic characters
UNESCAPED_EMAIL="${EMAIL}" UNESCAPED_EMAIL="${EMAIL}"
EMAIL=$(escape "${EMAIL}") EMAIL=$(escape "${EMAIL}")
if [[ -f ${DATABASE} ]] if [[ -f ${DATABASE} ]]
then
if ! sed -i "/^${EMAIL}|/d" "${DATABASE}"
then then
echo "${UNESCAPED_EMAIL} couldn't be deleted in ${DATABASE}." >&2 if ! sed -i "/^${EMAIL}|/d" "${DATABASE}"
ERROR=true then
echo "${UNESCAPED_EMAIL} couldn't be deleted in ${DATABASE}." >&2
ERROR=true
fi
fi fi
fi
if [[ -f ${ALIAS_DATABASE} ]] if [[ -f ${ALIAS_DATABASE} ]]
then
# delete all aliases where the user is the only recipient( " ${EMAIL}" )
# delete user only for all aliases that deliver to multiple recipients ( ",${EMAIL}" "${EMAIL,}" )
if sed -i \
-e "/ ${EMAIL}$/d" -e "s/,${EMAIL}//g" -e "s/${EMAIL},//g" \
"${ALIAS_DATABASE}"
then then
echo "${UNESCAPED_EMAIL} and potential aliases deleted." # delete all aliases where the user is the only recipient( " ${EMAIL}" )
else # delete user only for all aliases that deliver to multiple recipients ( ",${EMAIL}" "${EMAIL,}" )
echo "Aliases for ${UNESCAPED_EMAIL} couldn't be deleted in ${ALIAS_DATABASE}." >&2 if sed -i \
ERROR=true -e "/ ${EMAIL}$/d" -e "s/,${EMAIL}//g" -e "s/${EMAIL},//g" \
"${ALIAS_DATABASE}"
then
echo "${UNESCAPED_EMAIL} and potential aliases deleted."
else
echo "Aliases for ${UNESCAPED_EMAIL} couldn't be deleted in ${ALIAS_DATABASE}." >&2
ERROR=true
fi
fi fi
fi
# remove quota directives # remove quota directives
if [[ -f ${QUOTA_DATABASE} ]] if [[ -f ${QUOTA_DATABASE} ]]
then
if ! sed -i -e "/^${EMAIL}:.*$/d" "${QUOTA_DATABASE}"
then then
echo "Quota for ${UNESCAPED_EMAIL} couldn't be deleted in ${QUOTA_DATABASE}." >&2 if ! sed -i -e "/^${EMAIL}:.*$/d" "${QUOTA_DATABASE}"
then
echo "Quota for ${UNESCAPED_EMAIL} couldn't be deleted in ${QUOTA_DATABASE}." >&2
fi
fi fi
fi
if ! ${MAILDEL} if ! ${MAILDEL}
then then
echo "Leaving the mailbox untouched. echo "Leaving the mailbox untouched.
If you want to delete it at a later point, If you want to delete it at a later point,
use 'sudo docker exec mailserver rm -R /var/mail/${DOMAIN}/${USER}'" use 'sudo docker exec mailserver rm -R /var/mail/${DOMAIN}/${USER}'"
exit 0 exit 0
fi fi
if [[ -e "/var/mail/${DOMAIN}/${USER}" ]] if [[ -e "/var/mail/${DOMAIN}/${USER}" ]]
then
if rm -R "/var/mail/${DOMAIN}/${USER}"
then then
echo "Mailbox deleted." if rm -R "/var/mail/${DOMAIN}/${USER}"
then
echo "Mailbox deleted."
else
echo "Mailbox couldn't be deleted." >&2
ERROR=true
fi
else else
echo "Mailbox couldn't be deleted." >&2 echo "Mailbox directory '/var/mail/${DOMAIN}/${USER}' did not exist." >&2
ERROR=true ERROR=true
fi fi
else
echo "Mailbox directory '/var/mail/${DOMAIN}/${USER}' did not exist." >&2
ERROR=true
fi
${ERROR} && errex 'See the messages above.' ${ERROR} && errex 'See the messages above.'
done
) 200< "${DATABASE}" ) 200< "${DATABASE}"