summaryrefslogtreecommitdiffstats
path: root/debian/debconf/update-exim4.conf.template
diff options
context:
space:
mode:
Diffstat (limited to 'debian/debconf/update-exim4.conf.template')
-rwxr-xr-xdebian/debconf/update-exim4.conf.template141
1 files changed, 141 insertions, 0 deletions
diff --git a/debian/debconf/update-exim4.conf.template b/debian/debconf/update-exim4.conf.template
new file mode 100755
index 0000000..f2dc475
--- /dev/null
+++ b/debian/debconf/update-exim4.conf.template
@@ -0,0 +1,141 @@
+#!/bin/bash
+
+set -e
+
+CONFDIR="${CONFDIR:-/etc/exim4}"
+DONOTRUN='true'
+
+UPEX4CT_outputfile="${CONFDIR}/exim4.conf.template"
+
+usage() {
+cat <<EOF
+$0 - Generate exim4 configuration file template
+ Options:
+ -n|--nobackup - Overwrite old template, do not take backup.
+ -o|--output file - write output to file instead of ${UPEX4CT_outputfile}
+ -h|--help - This message.
+ -r|--run - Actually do something
+EOF
+}
+
+## Parse commandline
+TEMP=$(getopt -n update-exim4.conf.template \
+ -l nobackup,output:,help,run -- \
+ +no:hr "$@")
+
+if test "$?" != 0; then
+ echo "Terminating..." >&2
+ exit 1
+fi
+
+eval set -- ${TEMP}
+while test "$1" != "--"; do
+ case $1 in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ -o|--output)
+ shift
+ UPEX4CT_outputfile="$1"
+ ;;
+ -n|--nobackup)
+ NOBACKUP=1
+ ;;
+ -r|--run)
+ DONOTRUN='false'
+ ;;
+ esac
+ shift
+done
+shift
+
+# No non-option arguments allowed.
+if [ "$#" -ne 0 ]; then
+ echo "No non option arguments ($@) allowed" >&2
+ usage >&2
+ exit 1
+fi
+
+# run-parts emulation, stolen from Branden's /etc/X11/Xsession
+# Addition: Use file.rul instead if file if it exists.
+run_parts () {
+ # reset LC_COLLATE
+ unset LANG LC_COLLATE LC_ALL
+
+ if [ -z "$1" ]; then
+ errormessage "$0: internal run_parts called without an argument"
+ fi
+ if [ ! -d "$1" ]; then
+ errormessage "$0: internal run_parts called, but $1 does not exist or is not a directory."
+ fi
+ for F in $(ls $1 | grep -v /.svn); do
+ if expr "$F" : '[[:alnum:]_-]\+$' > /dev/null 2>&1; then
+ if [ -f "$1/$F" ] ; then
+ if [ -f "$1/${F}.rul" ] ; then
+ echo "$1/${F}.rul"
+ else
+ echo "$1/$F"
+ fi
+ fi
+ fi
+ done;
+}
+# also from Branden
+errormessage () {
+ # pretty-print messages of arbitrary length (no trailing newline)
+ echo "$*" | fold -s -w ${COLUMNS:-80} >&2;
+}
+
+cat_parts() {
+ if [ -z "$1" ]; then
+ errormessage "$0: internal cat_parts called without an argument"
+ fi
+ if [ ! -d "$1" ]; then
+ errormessage "$0: internal cat_parts called, but $1 does not exist or is not a directory."
+ fi
+ for file in $(run_parts $1); do
+ echo "#####################################################"
+ echo "### $file"
+ echo "#####################################################"
+ cat $file
+ echo "#####################################################"
+ echo "### end $file"
+ echo "#####################################################"
+ done
+}
+
+if [ "$DONOTRUN" = "true" ]; then
+ errormessage "This program overwrites conffiles. Do not run unless you have consulted the manpage." >&2
+ echo "Terminating..." >&2
+ exit 1
+fi
+
+
+if [ -e "${UPEX4CT_outputfile}" ] && [ -z "$NOBACKUP" ]; then
+ if [ -e "${UPEX4CT_outputfile}.bak.$$" ]; then
+ echo >&2 "ERR: ${UPEX4CT_outputfile}.bak.$$ already exists, aborting"
+ exit 1
+ fi
+fi
+
+NEWTEMPLATE=$(mktemp)
+if [ -f "${UPEX4CT_outputfile}" ] ; then
+ chmod --reference="${UPEX4CT_outputfile}" "$NEWTEMPLATE"
+else
+ chmod 0644 "$NEWTEMPLATE"
+fi
+
+# generate .template. Ugly - better alternative?
+SAVEWD="$(pwd)"
+cd ${CONFDIR}/conf.d
+for i in main acl router transport retry rewrite auth ; do
+ cat_parts $i
+done > "$NEWTEMPLATE"
+cd "$SAVEWD"
+
+if [ -e "${UPEX4CT_outputfile}" ] && [ -z "$NOBACKUP" ] ; then
+ mv "${UPEX4CT_outputfile}" \
+ "${UPEX4CT_outputfile}.bak.$$"
+fi
+mv "$NEWTEMPLATE" "${UPEX4CT_outputfile}"