summaryrefslogtreecommitdiffstats
path: root/debian/update-exim4defaults
diff options
context:
space:
mode:
Diffstat (limited to 'debian/update-exim4defaults')
-rw-r--r--debian/update-exim4defaults284
1 files changed, 284 insertions, 0 deletions
diff --git a/debian/update-exim4defaults b/debian/update-exim4defaults
new file mode 100644
index 0000000..06915e7
--- /dev/null
+++ b/debian/update-exim4defaults
@@ -0,0 +1,284 @@
+#!/bin/sh
+# update-exim4defaults(8): manage entries in /etc/default/exim4
+# per script
+
+if [ -n "$EX4DEBUG" ]; then
+ echo "now debugging $0 $@"
+ set -x
+fi
+
+unset LC_ALL
+export LC_CTYPE=C
+
+defaultfile=/etc/default/exim4
+
+EX4DEF_INIT=false
+EX4DEF_FORCE=false
+
+
+if [ -r ${defaultfile} ]; then
+ . ${defaultfile}
+fi
+
+
+# initialize variables
+EX4DEF_QUEUERUNNER="${QUEUERUNNER}"
+EX4DEF_QUEUEINTERVAL="${QUEUEINTERVAL}"
+EX4DEF_COMMONOPTIONS="${COMMONOPTIONS}"
+EX4DEF_QUEUERUNNEROPTIONS="${QUEUERUNNEROPTIONS}"
+EX4DEF_QFLAGS="${QFLAGS}"
+EX4DEF_SMTPLISTENEROPTIONS="${SMTPLISTENEROPTIONS}"
+
+EX4DEF_FLAGOPTIONS=false
+EX4DEF_FLAGREMOVE=false
+
+ex4def_usage ()
+{
+ echo "update-exim4defaults: manage entries in /etc/default/exim4"
+ echo " usage: update-exim4defaults [[--queuerunner combined|separate|queueonly|ppp|no|nodaemon]"
+ echo " [--qflags flags ] [--queuetime time] [--commonoptions options]"
+ echo " [--queuerunneroptions options] [--smtplisteneroptions options]]"
+ echo " [--remove-common options] [--remove-queue options]"
+ echo " [--remove-smtp options]"
+ echo " [--force|-f] [--help|-h]"
+ echo " [--init]"
+}
+
+
+# used for initialzing and with --force.
+ex4def_write(){
+ EX4DEF_TMP="$(tempfile -m 600 -p ex4)"
+ cat << EOF > "${EX4DEF_TMP}"
+# /etc/default/exim4
+EX4DEF_VERSION='${EX4DEF_VERSION}'
+
+# 'combined' - one daemon running queue and listening on SMTP port
+# 'no' - no daemon running the queue
+# 'separate' - two separate daemons
+# 'ppp' - only run queue with /etc/ppp/ip-up.d/exim4.
+# 'nodaemon' - no daemon is started at all.
+# 'queueonly' - only a queue running daemon is started, no SMTP listener.
+# setting this to 'no' will also disable queueruns from /etc/ppp/ip-up.d/exim4
+QUEUERUNNER='${EX4DEF_QUEUERUNNER}'
+# how often should we run the queue
+QUEUEINTERVAL='${EX4DEF_QUEUEINTERVAL}'
+# options common to quez-runner and listening daemon
+COMMONOPTIONS='${EX4DEF_COMMONOPTIONS}'
+# more options for the daemon/process running the queue (applies to the one
+# started in /etc/ppp/ip-up.d/exim4, too.
+QUEUERUNNEROPTIONS='${EX4DEF_QUEUERUNNEROPTIONS}'
+# special flags given to exim directly after the -q. See exim(8)
+QFLAGS='${EX4DEF_QFLAGS}'
+# Options for the SMTP listener daemon. By default, it is listening on
+# port 25 only. To listen on more ports, it is recommended to use
+# -oX 25:587:10025 -oP /run/exim4/exim.pid
+SMTPLISTENEROPTIONS='${EX4DEF_SMTPLISTENEROPTIONS}'
+EOF
+ cat "${EX4DEF_TMP}" > "${defaultfile}"
+ rm -f "${EX4DEF_TMP}"
+}
+
+## Parse commandline
+TEMP=$(getopt -n update-exim4defaults \
+ -l qflags:,queuerunner:,queuetime:,commonoptions:,queuerunneroptions:,smtplisteneroptions:,remove-common:,remove-queue:,remove-smtp:,force,help,init -- \
+ +fh "$@")
+
+if test "$?" != 0; then
+ echo "Terminating..." >&2
+ exit 1
+fi
+
+eval set -- ${TEMP}
+while test "$1" != "--"; do
+ case $1 in
+ -f|--force)
+ EX4DEF_FORCE=true
+ ;;
+ -h|--help)
+ ex4def_usage
+ exit 0
+ ;;
+ --qflags)
+ shift
+ EX4DEF_QFLAGS="$1"
+ ;;
+ --queuerunner)
+ shift
+ EX4DEF_QUEUERUNNER="$1"
+ if ! expr match "${EX4DEF_QUEUERUNNER}" '\(ppp\|no\|combined\|nodaemon\|queueonly\|separate\)$' >/dev/null ; then
+ echo "invalid argument ${EX4DEF_QUEUERUNNER} for --queuerunner" 1>&2
+ exit 1
+ fi
+ ;;
+ --queuetime)
+ shift
+ EX4DEF_QUEUEINTERVAL="$1"
+ ;;
+ --commonoptions)
+ shift
+ EX4DEF_COMMONOPTIONS="$1"
+ EX4DEF_FLAGOPTIONS=true
+ ;;
+ --queuerunneroptions)
+ shift
+ EX4DEF_QUEUERUNNEROPTIONS="$1"
+ EX4DEF_FLAGOPTIONS=true
+ ;;
+ --smtplisteneroptions)
+ shift
+ EX4DEF_SMTPLISTENEROPTIONS="$1"
+ EX4DEF_FLAGOPTIONS=true
+ ;;
+ --remove-common)
+ shift
+ EX4DEF_REMOVECOMMON="$1"
+ EX4DEF_FLAGREMOVE=true
+ ;;
+ --remove-queue)
+ shift
+ EX4DEF_REMOVEQUEUE="$1"
+ EX4DEF_FLAGREMOVE=true
+ ;;
+ --remove-smtp)
+ shift
+ EX4DEF_REMOVESMTP="$1"
+ EX4DEF_FLAGREMOVE=true
+ ;;
+ --init)
+ EX4DEF_INIT=true
+ ;;
+ esac
+ shift
+done
+shift
+
+# No non-option arguments allowed.
+if [ "$#" -ne 0 ]; then
+ echo "No non option arguments allowed" >&2
+ ex4def_usage >&2
+ exit 1
+fi
+
+if [ "${EX4DEF_FLAGREMOVE}" = "true" ] && [ "${EX4DEF_FLAGOPTIONS}" = "true" ] ; then
+ echo "Cannot use --remove-something together with --somethingoptions" >&2
+ ex4def_usage >&2
+ exit 1
+fi
+
+#if [ ! -r ${defaultfile} ]; then
+# echo "Cannot read ${defaultfile}, terminating" >&2
+# exit 1
+#fi
+
+if "${EX4DEF_INIT}" = "true" ] ; then
+ [ -e "${defaultfile}" ] && [ "${EX4DEF_FORCE}" != "true" ] && exit 0
+ # Reset to default values
+ EX4DEF_QUEUERUNNER='combined'
+ EX4DEF_QUEUEINTERVAL='30m'
+ EX4DEF_COMMONOPTIONS=''
+ EX4DEF_QUEUERUNNEROPTIONS=''
+ EX4DEF_QFLAGS=''
+ EX4DEF_SMTPLISTENEROPTIONS=''
+
+ ex4def_write
+ exit 0
+fi
+
+#Try removing
+if [ "${EX4DEF_FLAGREMOVE}" = "true" ] ; then
+ EX4DEF_REMOVEERROR="false"
+ if [ ! -z "${EX4DEF_REMOVECOMMON}" ] ; then
+ EX4DEF_COMMONOPTIONS=$(echo "${COMMONOPTIONS}" | \
+ sed -e "sÄ${EX4DEF_REMOVECOMMON}ÄÄ" -e "s/ / /g" -e 's/^ //' -e 's/ $//')
+ [ "${EX4DEF_COMMONOPTIONS}" = "${COMMONOPTIONS}" ] && \
+ EX4DEF_REMOVEERROR="true"
+ fi
+ if [ ! -z "${EX4DEF_REMOVEQUEUE}" ] ; then
+ EX4DEF_QUEUERUNNEROPTIONS=$(echo "${QUEUERUNNEROPTIONS}" | \
+ sed -e "sÄ${EX4DEF_REMOVEQUEUE}ÄÄ" -e "s/ / /g" -e 's/^ //' -e 's/ $//')
+ [ "${EX4DEF_QUEUERUNNEROPTIONS}" = "${QUEUERUNNEROPTIONS}" ] && \
+ EX4DEF_REMOVEERROR="true"
+ fi
+ if [ ! -z "${EX4DEF_REMOVESMTP}" ] ; then
+ EX4DEF_SMTPLISTENEROPTIONS=$(echo "${SMTPLISTENEROPTIONS}" | \
+ sed -e "sÄ${EX4DEF_REMOVESMTP}ÄÄ" -e "s/ / /g" -e 's/^ //' -e 's/ $//')
+ [ "${EX4DEF_SMTPLISTENEROPTIONS}" = "${SMTPLISTENEROPTIONS}"] && \
+ EX4DEF_REMOVEERROR="true"
+ fi
+ if [ "${EX4DEF_REMOVEERROR}" = "true" ] ; then
+ echo "$0: removing failed, no changes" >&2
+ exit 64
+ fi
+
+ EX4DEF_TMP="$(tempfile -m 600 -p ex4)"
+ sed -e "sÄ^QFLAGS=.*ÄQFLAGS='${EX4DEF_QFLAGS}'Ä" \
+ -e "sÄ^QUEUERUNNER=.*ÄQUEUERUNNER='${EX4DEF_QUEUERUNNER}'Ä" \
+ -e "sÄ^QUEUEINTERVAL=.*ÄQUEUEINTERVAL='${EX4DEF_QUEUEINTERVAL}'Ä" \
+ -e "sÄ^COMMONOPTIONS=.*ÄCOMMONOPTIONS='${EX4DEF_COMMONOPTIONS}'Ä" \
+ -e "sÄ^QUEUERUNNEROPTIONS=.*ÄQUEUERUNNEROPTIONS='${EX4DEF_QUEUERUNNEROPTIONS}'Ä" \
+ -e "sÄ^SMTPLISTENEROPTIONS=.*ÄSMTPLISTENEROPTIONS='${EX4DEF_SMTPLISTENEROPTIONS}'Ä" \
+ < $defaultfile > "${EX4DEF_TMP}"
+ mv "${EX4DEF_TMP}" $defaultfile
+ rm -f "${EX4DEF_TMP}"
+ exit 0
+fi
+
+if [ "${EX4DEF_FORCE}" = "true" ] ; then
+ ex4def_write
+ exit 0
+
+else
+ EX4DEF_DOANYTHING=0
+ EX4DEF_NOTALLOWED=0
+ if [ "${QUEUERUNNER}" != "${EX4DEF_QUEUERUNNER}" ]; then
+ EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+1))
+ # switching the QUEUERUNNER modus is always allowed
+ #[ -z "${QUEUERUNNER}" ] || EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+1))
+ fi
+ if [ "${QUEUEINTERVAL}" != "${EX4DEF_QUEUEINTERVAL}" ] ; then
+ EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+2))
+ [ -z "${QUEUEINTERVAL}" ] || \
+ EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+2))
+ fi
+ if [ "${COMMONOPTIONS}" != "${EX4DEF_COMMONOPTIONS}" ] ; then
+ EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+4))
+ [ -z "${COMMONOPTIONS}" ] || \
+ EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+4))
+ fi
+ if [ "${QUEUERUNNEROPTIONS}" != "${EX4DEF_QUEUERUNNEROPTIONS}" ] ; then
+ EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+8))
+ [ -z "${QUEUERUNNEROPTIONS}" ] || \
+ EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+8))
+ fi
+ if [ "${SMTPLISTENEROPTIONS}" != "${EX4DEF_SMTPLISTENEROPTIONS}" ] ; then
+ EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+16))
+ [ -z "${SMTPLISTENEROPTIONS}" ] || \
+ EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+16))
+ fi
+ if [ "${QFLAGS}" != "${EX4DEF_QFLAGS}" ] ; then
+ EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+32))
+ [ -z "${QFLAGS}" ] || \
+ EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+32))
+ fi
+
+ [ ${EX4DEF_DOANYTHING} -eq 0 ] && exit 0
+ if [ ${EX4DEF_NOTALLOWED} -ne 0 ] ; then
+ echo "setting(s) conflict with current one, terminating" >&2
+ exit ${EX4DEF_NOTALLOWED}
+ fi
+
+ EX4DEF_TMP="$(tempfile -m 600 -p ex4)"
+ sed -e "sÄ^QFLAGS=.*ÄQFLAGS='${EX4DEF_QFLAGS}'Ä" \
+ -e "sÄ^QUEUERUNNER=.*ÄQUEUERUNNER='${EX4DEF_QUEUERUNNER}'Ä" \
+ -e "sÄ^QUEUEINTERVAL=.*ÄQUEUEINTERVAL='${EX4DEF_QUEUEINTERVAL}'Ä" \
+ -e "sÄ^COMMONOPTIONS=.*ÄCOMMONOPTIONS='${EX4DEF_COMMONOPTIONS}'Ä" \
+ -e "sÄ^QUEUERUNNEROPTIONS=.*ÄQUEUERUNNEROPTIONS='${EX4DEF_QUEUERUNNEROPTIONS}'Ä" \
+ -e "sÄ^SMTPLISTENEROPTIONS=.*ÄSMTPLISTENEROPTIONS='${EX4DEF_SMTPLISTENEROPTIONS}'Ä" \
+ < $defaultfile > "${EX4DEF_TMP}"
+ mv "${EX4DEF_TMP}" $defaultfile
+ rm -f "${EX4DEF_TMP}"
+ exit 0
+fi
+
+
+