diff options
Diffstat (limited to 'debian/debconf/update-exim4.conf.template')
-rwxr-xr-x | debian/debconf/update-exim4.conf.template | 141 |
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}" |