summaryrefslogtreecommitdiffstats
path: root/debian/debconf/update-exim4.conf.template
blob: 6255ddaba0b26331913ebaae77ebf8cae8e14712 (plain)
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}"