Skip to content

Commit

Permalink
Fix harmless startup errors (#2357)
Browse files Browse the repository at this point in the history
  • Loading branch information
casperklein committed Jan 7, 2022
1 parent 0c31f71 commit 29c2d97
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
4 changes: 2 additions & 2 deletions target/bin/delmailuser
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ do

if [[ -f ${DATABASE} ]]
then
if ! sedfile -i "/^${EMAIL}|/d" "${DATABASE}"
if ! sedfile --strict -i "/^${EMAIL}|/d" "${DATABASE}"
then
echo "${UNESCAPED_EMAIL} couldn't be deleted in ${DATABASE}." >&2
ERROR=true
Expand All @@ -126,7 +126,7 @@ do
# remove quota directives
if [[ -f ${QUOTA_DATABASE} ]]
then
if ! sedfile -i -e "/^${EMAIL}:.*$/d" "${QUOTA_DATABASE}"
if ! sedfile --strict -i -e "/^${EMAIL}:.*$/d" "${QUOTA_DATABASE}"
then
echo "Quota for ${UNESCAPED_EMAIL} couldn't be deleted in ${QUOTA_DATABASE}." >&2
fi
Expand Down
25 changes: 21 additions & 4 deletions target/bin/sedfile
Original file line number Diff line number Diff line change
@@ -1,18 +1,34 @@
#!/bin/bash

# wrapper for 'sed -i': fail if file was not modified by sed
# Wrapper for 'sed -i': fail if file was not modified by sed and container was not restarted.
# Error output is surpressed, when container is restarted to avoid harmless error messages.
# Use "--strict" as first parameter, to fail regardless of the container state (fresh or restarted).

# When to use sedfile?
# Is a file change optional? --> use regular 'sed -i'
# Is a file change expected? --> use 'sedfile --strict -i'
# Is a file change only on the first container run expected? --> use 'sedfile -i'

set -ueo pipefail

HASHTOOL="sha1sum"
SKIP_ERROR=0

if [[ $# -lt 1 ]]
if [[ $# -lt 3 ]]
then
echo "Error: No file given."
echo "Error: At least, three parameters must be given."
echo "Syntax: sedfile -i <replace/delete operation> <file>"
echo
exit 1
fi >&2

[[ -f /CONTAINER_START ]] && SKIP_ERROR=1 # Hide error, if container was restarted.
if [[ "${1}" == "--strict" ]] # Show error every time.
then
SKIP_ERROR=0
shift
fi

# get last argument
FILE=${*: -1}

Expand All @@ -21,9 +37,10 @@ sed "$@"
NEW=$(${HASHTOOL} "${FILE}")

# fail if file was not modified
if [[ ${OLD} == "${NEW}" ]]
if [[ ${OLD} == "${NEW}" ]] && [[ ${SKIP_ERROR} -eq 0 ]]
then
echo "Error: sed $*"
exit 1
fi >&2

exit 0
3 changes: 3 additions & 0 deletions target/scripts/start-mailserver.sh
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,9 @@ fix
start_misc
start_daemons

# marker to check, if container was restarted
date > /CONTAINER_START

_notify 'tasklog' "${HOSTNAME} is up and running"

touch /var/log/mail/mail.log
Expand Down
10 changes: 8 additions & 2 deletions target/scripts/startup/fixes-stack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,17 @@ function _fix_var_amavis_permissions
function _fix_cleanup_clamav
{
_notify 'task' 'Cleaning up disabled ClamAV'
rm /etc/logrotate.d/clamav-* /etc/cron.d/clamav-freshclam || _notify 'err' 'Failed to remove ClamAV configuration'
rm /etc/logrotate.d/clamav-* /etc/cron.d/clamav-freshclam 2>/dev/null || {
# show error only on first container start
[[ ! -f /CONTAINER_START ]] && _notify 'err' 'Failed to remove ClamAV configuration'
}
}

function _fix_cleanup_spamassassin
{
_notify 'task' 'Cleaning up disabled SpamAssassin'
rm /etc/cron.daily/spamassassin || _notify 'err' 'Failed to remove SpamAssassin configuration'
rm /etc/cron.daily/spamassassin 2>/dev/null || {
# show error only on first container start
[[ ! -f /CONTAINER_START ]] && _notify 'err' 'Failed to remove SpamAssassin configuration'
}
}

0 comments on commit 29c2d97

Please sign in to comment.