/usr/sbin/update-exim4.conf.template is in exim4-config 4.76-3ubuntu3.4.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139  | #!/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=$(tempfile -m644 -p ex4)
if [ -f "${UPEX4CT_outputfile}" ] ; then
	chmod --reference="${UPEX4CT_outputfile}" "$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}"
 |