diff --git a/target/scripts/helper-functions.sh b/target/scripts/helper-functions.sh index 30b222a5..3333af73 100755 --- a/target/scripts/helper-functions.sh +++ b/target/scripts/helper-functions.sh @@ -21,13 +21,17 @@ function errex # PANIC_SCOPE => Optionally provide a string for debugging to better identify/locate the source of the panic. function dms_panic { - local PANIC_TYPE=$1 - local PANIC_INFO=$2 - local PANIC_SCOPE=$3 #optional + local PANIC_TYPE=${1} + local PANIC_INFO=${2} + local PANIC_SCOPE=${3} #optional local SHUTDOWN_MESSAGE case "${PANIC_TYPE}" in + ( 'fail-init' ) # PANIC_INFO == + SHUTDOWN_MESSAGE="Failed to start ${PANIC_INFO}!" + ;; + ( 'no-env' ) # PANIC_INFO == SHUTDOWN_MESSAGE="Environment Variable: ${PANIC_INFO} is not set!" ;; @@ -58,6 +62,7 @@ function dms_panic } # Convenience wrappers based on type: +function dms_panic__fail_init { dms_panic 'fail-init' "${1}" "${2}"; } function dms_panic__no_env { dms_panic 'no-env' "${1}" "${2}"; } function dms_panic__no_file { dms_panic 'no-file' "${1}" "${2}"; } function dms_panic__misconfigured { dms_panic 'misconfigured' "${1}" "${2}"; } diff --git a/target/scripts/start-mailserver.sh b/target/scripts/start-mailserver.sh index 7b1e1c5c..cc15a5e7 100755 --- a/target/scripts/start-mailserver.sh +++ b/target/scripts/start-mailserver.sh @@ -217,12 +217,6 @@ function _register_misc_function _notify 'inf' "${1}() registered" } -function _defunc -{ - _notify 'fatal' 'Please fix your configuration. Exiting...' - exit 1 -} - # ------------------------------------------------------------ # ? << Registering functions # -- diff --git a/target/scripts/startup/check-stack.sh b/target/scripts/startup/check-stack.sh index 6c731eb3..a5c09503 100644 --- a/target/scripts/startup/check-stack.sh +++ b/target/scripts/startup/check-stack.sh @@ -5,7 +5,7 @@ function check _notify 'tasklog' 'Checking configuration' for FUNC in "${FUNCS_CHECK[@]}" do - ${FUNC} || _defunc + ${FUNC} done } @@ -20,6 +20,5 @@ function _check_hostname if ! grep -q -E '^(\S+[.]\S+)$' <<< "${HOSTNAME}" then _shutdown 'Setting hostname/domainname is required' - return 1 fi } diff --git a/target/scripts/startup/daemons-stack.sh b/target/scripts/startup/daemons-stack.sh index 28afddca..43ed4d6e 100644 --- a/target/scripts/startup/daemons-stack.sh +++ b/target/scripts/startup/daemons-stack.sh @@ -5,31 +5,31 @@ function start_daemons _notify 'tasklog' 'Starting daemons & mail server' for FUNC in "${DAEMONS_START[@]}" do - ${FUNC} || _defunc + ${FUNC} done } function _start_daemons_cron { _notify 'task' 'Starting cron' - supervisorctl start cron + supervisorctl start cron || dms_panic__fail_init 'cron' } function _start_daemons_rsyslog { _notify 'task' 'Starting rsyslog' - supervisorctl start rsyslog + supervisorctl start rsyslog || dms_panic__fail_init 'rsyslog' } function _start_daemons_saslauthd { _notify 'task' 'Starting saslauthd' - supervisorctl start "saslauthd_${SASLAUTHD_MECHANISMS}" + supervisorctl start "saslauthd_${SASLAUTHD_MECHANISMS}" || dms_panic__fail_init 'saslauthd' } function _start_daemons_fail2ban { - _notify 'task' 'Starting fail2ban' + _notify 'task' 'Starting Fail2ban' touch /var/log/auth.log # delete fail2ban.sock that probably was left here after container restart @@ -38,31 +38,31 @@ function _start_daemons_fail2ban rm /var/run/fail2ban/fail2ban.sock fi - supervisorctl start fail2ban + supervisorctl start fail2ban || dms_panic__fail_init 'Fail2ban' } function _start_daemons_opendkim { _notify 'task' 'Starting opendkim' - supervisorctl start opendkim + supervisorctl start opendkim || dms_panic__fail_init 'opendkim' } function _start_daemons_opendmarc { _notify 'task' 'Starting opendmarc' - supervisorctl start opendmarc + supervisorctl start opendmarc || dms_panic__fail_init 'opendmarc' } function _start_daemons_postsrsd { _notify 'task' 'Starting postsrsd' - supervisorctl start postsrsd + supervisorctl start postsrsd || dms_panic__fail_init 'postsrsd' } function _start_daemons_postfix { _notify 'task' 'Starting postfix' - supervisorctl start postfix + supervisorctl start postfix || dms_panic__fail_init 'postfix' } function _start_daemons_dovecot @@ -81,7 +81,7 @@ function _start_daemons_dovecot cp /tmp/docker-mailserver/dovecot.cf /etc/dovecot/local.conf fi - supervisorctl start dovecot + supervisorctl start dovecot || dms_panic__fail_init 'dovecot' } function _start_daemons_fetchmail @@ -120,41 +120,41 @@ EOF do COUNTER=$(( COUNTER + 1 )) _notify 'task' "Starting fetchmail instance ${COUNTER}" - supervisorctl start "fetchmail-${COUNTER}" + supervisorctl start "fetchmail-${COUNTER}" || _panic__fail_init "fetchmail-${COUNTER}" done else _notify 'task' 'Starting fetchmail' - supervisorctl start fetchmail + supervisorctl start fetchmail || dms_panic__fail_init 'fetchmail' fi } function _start_daemons_clamav { _notify 'task' 'Starting clamav' - supervisorctl start clamav + supervisorctl start clamav || dms_panic__fail_init 'ClamAV' } function _start_daemons_postgrey { _notify 'task' 'Starting postgrey' rm -f /var/run/postgrey/postgrey.pid - supervisorctl start postgrey + supervisorctl start postgrey || dms_panic__fail_init 'postgrey' } function _start_daemons_amavis { _notify 'task' 'Starting amavis' - supervisorctl start amavis + supervisorctl start amavis || dms_panic__fail_init 'amavis' } function _start_changedetector { _notify 'task' 'Starting changedetector' - supervisorctl start changedetector + supervisorctl start changedetector || dms_panic__fail_init 'changedetector' } function _start_daemons_update_check { _notify 'task' 'Starting update-check' - supervisorctl start update-check + supervisorctl start update-check || dms_panic__fail_init 'update-check' } diff --git a/target/scripts/startup/fixes-stack.sh b/target/scripts/startup/fixes-stack.sh index 59f99f95..3f7aea10 100644 --- a/target/scripts/startup/fixes-stack.sh +++ b/target/scripts/startup/fixes-stack.sh @@ -5,7 +5,7 @@ function fix _notify 'tasklog' 'Post-configuration checks' for FUNC in "${FUNCS_FIX[@]}" do - ${FUNC} || _defunc + ${FUNC} done _notify 'inf' 'Removing leftover PID files from a stop/start' @@ -21,12 +21,10 @@ function _fix_var_mail_permissions if find /var/mail -maxdepth 3 -a \( \! -user 5000 -o \! -group 5000 \) | read -r then _notify 'inf' 'Fixing /var/mail permissions' - chown -R 5000:5000 /var/mail + chown -R 5000:5000 /var/mail || _shutdown 'Failed to fix /var/mail permissions' else _notify 'inf' 'Permissions in /var/mail look OK' fi - - return 0 } function _fix_var_amavis_permissions @@ -35,21 +33,18 @@ function _fix_var_amavis_permissions [[ ${ONE_DIR} -eq 0 ]] && AMAVIS_STATE_DIR="/var/lib/amavis" [[ ! -e ${AMAVIS_STATE_DIR} ]] && return 0 - _notify 'inf' 'Checking and fixing Amavis permissions' - chown -hR amavis:amavis "${AMAVIS_STATE_DIR}" - - return 0 + _notify 'inf' 'Fixing Amavis permissions' + chown -hR amavis:amavis "${AMAVIS_STATE_DIR}" || _shutdown 'Failed to fix Amavis permissions' } function _fix_cleanup_clamav { - _notify 'task' 'Cleaning up disabled Clamav' - rm -f /etc/logrotate.d/clamav-* - rm -f /etc/cron.d/clamav-freshclam + _notify 'task' 'Cleaning up disabled ClamAV' + rm /etc/logrotate.d/clamav-* /etc/cron.d/clamav-freshclam || _shutdown 'Failed to remove ClamAV configuration' } function _fix_cleanup_spamassassin { _notify 'task' 'Cleaning up disabled SpamAssassin' - rm -f /etc/cron.daily/spamassassin + rm /etc/cron.daily/spamassassin || _shutdown 'Failed to remove SpamAssassin configuration' } diff --git a/target/scripts/startup/misc-stack.sh b/target/scripts/startup/misc-stack.sh index b179a744..6a8f9395 100644 --- a/target/scripts/startup/misc-stack.sh +++ b/target/scripts/startup/misc-stack.sh @@ -5,7 +5,7 @@ function start_misc _notify 'inf' 'Starting miscellaneous tasks' for FUNC in "${FUNCS_MISC[@]}" do - ${FUNC} || _defunc + ${FUNC} done } diff --git a/target/scripts/startup/setup-stack.sh b/target/scripts/startup/setup-stack.sh index ea99e7e2..f8306af2 100644 --- a/target/scripts/startup/setup-stack.sh +++ b/target/scripts/startup/setup-stack.sh @@ -373,8 +373,7 @@ function _setup_dovecot_local_user then if [[ ${ENABLE_LDAP} -eq 0 ]] then - _notify 'fatal' 'Unless using LDAP, you need at least 1 email account to start Dovecot.' - _defunc + _shutdown 'Unless using LDAP, you need at least 1 email account to start Dovecot.' fi fi }