271 lines
5.7 KiB
Bash
Executable File
271 lines
5.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
postfix_main_cf="/etc/postfix/main.cf"
|
|
|
|
backup_date="$(date +%Y-%m-%d-%H%M)"
|
|
changed=false
|
|
|
|
log_file="$(mktemp)"
|
|
|
|
# -------------
|
|
# - Functions an Variable
|
|
# -------------
|
|
clean_up() {
|
|
|
|
|
|
if [[ -f "$_backup_crontab_file" ]]; then
|
|
|
|
echononl "(Re)Install previously saved crontab from '$_backup_crontab_file'.."
|
|
|
|
crontab $_backup_crontab_file >> $log_file 2>&1
|
|
|
|
if [[ $? -eq 0 ]]; then
|
|
echo -e "$rc_done"
|
|
else
|
|
echo -e "$rc_failed"
|
|
error "$(cat $log_file)"
|
|
fi
|
|
|
|
fi
|
|
|
|
# Perform program exit housekeeping
|
|
rm -f $log_file
|
|
blank_line
|
|
exit $1
|
|
}
|
|
|
|
fatal(){
|
|
echo ""
|
|
echo -e "\t[ \033[31m\033[1mFatal\033[m ]: \033[37m\033[1m$*\033[m"
|
|
echo ""
|
|
echo -e "\t\033[31m\033[1m Skript wird abgebrochen\033[m\033[m\n"
|
|
rm -f $log_file
|
|
clean_up 1
|
|
}
|
|
|
|
|
|
echononl(){
|
|
echo X\\c > /tmp/shprompt$$
|
|
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
|
|
echo -e "$*\\c" 1>&2
|
|
else
|
|
echo -en "$*" 1>&2
|
|
fi
|
|
rm /tmp/shprompt$$
|
|
}
|
|
error(){
|
|
echo ""
|
|
echo -e "\t[ \033[31m\033[1mError\033[m ]: $*"
|
|
echo ""
|
|
}
|
|
|
|
warn(){
|
|
echo ""
|
|
echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*"
|
|
echo ""
|
|
}
|
|
|
|
info(){
|
|
echo ""
|
|
echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*"
|
|
echo ""
|
|
}
|
|
|
|
echo_done() {
|
|
echo -e "\033[75G[ \033[32mdone\033[m ]"
|
|
}
|
|
echo_ok() {
|
|
echo -e "\033[75G[ \033[32mok\033[m ]"
|
|
}
|
|
echo_warn() {
|
|
echo -e "\033[75G[ \033[33mwarn\033[m ]"
|
|
}
|
|
echo_failed(){
|
|
echo -e "\033[75G[ \033[1;31mfailed\033[m ]"
|
|
}
|
|
echo_skipped() {
|
|
echo -e "\033[75G[ \033[90m\033[1mskipped\033[m ]"
|
|
}
|
|
|
|
blank_line() {
|
|
if $terminal ; then
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
|
|
if [[ ! -f "$postfix_main_cf" ]] ; then
|
|
fatal "Postfix configuration '${postfix_main_cf}' NOT found!"
|
|
fi
|
|
|
|
# ----------
|
|
# - Some checks ..
|
|
# ----------
|
|
# -Is systemd supported on this system?
|
|
# -
|
|
systemd_supported=false
|
|
systemd=$(which systemd)
|
|
systemctl=$(which systemctl)
|
|
|
|
if [[ -n "$systemd" ]] && [[ -n "$systemctl" ]] ; then
|
|
systemd_supported=true
|
|
fi
|
|
|
|
blank_line
|
|
|
|
echononl " Backup Postfix Cconfiguration file '${postfix_main_cf}'.."
|
|
if [[ ! -f "${postfix_main_cf}.${backup_date}" ]] ; then
|
|
cp -a "${postfix_main_cf}" "${postfix_main_cf}.${backup_date}" > $log_file 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
echo_ok
|
|
else
|
|
echo_failed
|
|
error "$(cat "$log_file")"
|
|
fi
|
|
else
|
|
echo_skipped
|
|
fi
|
|
|
|
|
|
|
|
blank_line
|
|
|
|
# - /etc/postfix/main.cf
|
|
# -
|
|
# - comment in:
|
|
# - #virtual_transport = dovecot
|
|
# - #dovecot_destination_recipient_limit = ..
|
|
# -
|
|
# - change:
|
|
# - smtpd_sasl_auth_enable = yes
|
|
# - smtpd_sasl_type = dovecot
|
|
# - smtpd_sasl_path = private/dovecot-auth
|
|
# - virtual_transport = lmtp:unix:private/dovecot-lmtp
|
|
var="smtpd_sasl_auth_enable"
|
|
val="yes"
|
|
echononl " ${postfix_main_cf}: adjust '${var}'.."
|
|
if ! $(grep -E -q "^\s*${var}\s*=\s*${val}" ${postfix_main_cf} 2> /dev/null) ; then
|
|
perl -i -n -p -e "s#^(\s*)(${var}\ *=.*)#${var} = ${val}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
echo_ok
|
|
changed=true
|
|
else
|
|
echo_failed
|
|
error "$(cat "$log_file")"
|
|
fi
|
|
else
|
|
echo_skipped
|
|
fi
|
|
|
|
var="smtpd_sasl_type"
|
|
val="dovecot"
|
|
echononl " ${postfix_main_cf}: adjust '${var}'.."
|
|
if ! $(grep -E -q "^\s*${var}\s*=\s*${val}" ${postfix_main_cf} 2> /dev/null) ; then
|
|
perl -i -n -p -e "s#^(\s*)(${var}\ *=.*)#${var} = ${val}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
echo_ok
|
|
changed=true
|
|
else
|
|
echo_failed
|
|
error "$(cat "$log_file")"
|
|
fi
|
|
else
|
|
echo_skipped
|
|
fi
|
|
|
|
var="smtpd_sasl_path"
|
|
val="private/dovecot-auth"
|
|
echononl " ${postfix_main_cf}: adjust '${var}'.."
|
|
if ! $(grep -E -q "^\s*${var}\s*=\s*${val}" ${postfix_main_cf} 2> /dev/null) ; then
|
|
perl -i -n -p -e "s#^(\s*)(${var}\ *=.*)#${var} = ${val}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
echo_ok
|
|
changed=true
|
|
else
|
|
echo_failed
|
|
error "$(cat "$log_file")"
|
|
fi
|
|
else
|
|
echo_skipped
|
|
fi
|
|
|
|
var="virtual_transport"
|
|
val="lmtp:unix:private/dovecot-lmtp"
|
|
echononl " ${postfix_main_cf}: adjust '${var}'.."
|
|
if ! $(grep -E -q "^\s*${var}\s*=\s*${val}" ${postfix_main_cf} 2> /dev/null) ; then
|
|
perl -i -n -p -e "s#^(\s*)(${var}\ *=.*)#${var} = ${val}#" \
|
|
/etc/postfix/main.cf > $log_file 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
echo_ok
|
|
else
|
|
echo_failed
|
|
changed=true
|
|
error "$(cat "$log_file")"
|
|
fi
|
|
else
|
|
echo_skipped
|
|
fi
|
|
|
|
|
|
echononl " Comment variable 'dovecot_destination_recipient_limit'.."
|
|
if $(grep -E -q "^\s*dovecot_destination_recipient_limit" ${postfix_main_cf} 2> /dev/null) ; then
|
|
perl -i-n -p -e "s/^(\s*)(dovecot_destination_recipient_limit.*)/\1\#\2/" /etc/postfix/main.cf > $log_file 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
echo_ok
|
|
changed=true
|
|
else
|
|
echo_failed
|
|
error "$(cat "$log_file")"
|
|
fi
|
|
else
|
|
echo_skipped
|
|
fi
|
|
|
|
blank_line
|
|
|
|
# - restart postfix
|
|
# -
|
|
echononl " Restart Postfix Service..."
|
|
if $changed ; then
|
|
if $systemd_supported ; then
|
|
systemctl restart postfix > /dev/null 2>&1
|
|
if [[ $? -eq 0 ]] ; then
|
|
echo_ok
|
|
else
|
|
echo_failed
|
|
fi
|
|
else
|
|
/etc/init.d/postfix restart > /dev/null 2>&1
|
|
if [[ $? -eq 0 ]] ; then
|
|
echo_ok
|
|
else
|
|
echo_failed
|
|
fi
|
|
fi
|
|
else
|
|
echo_skipped
|
|
fi
|
|
|
|
|
|
diff "${postfix_main_cf}" "${postfix_main_cf}.${backup_date}" > /dev/null 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
|
|
info "File \033[1m${postfix_main_cf}\033[m has not changed.
|
|
\033[32mGoing to remove previos created backup\033[m.."
|
|
|
|
echononl " Remove file \033[1m${postfix_main_cf}.${backup_date}\033[m .."
|
|
rm "${postfix_main_cf}.${backup_date}" > $log_file 2>&1
|
|
if [[ $? -eq 0 ]]; then
|
|
echo_ok
|
|
else
|
|
echo_failed
|
|
error "$(cat "$log_file")"
|
|
fi
|
|
fi
|
|
|
|
|
|
clean_up 0
|