blob: f2dc475bffe42e68cf62d6e7ec590fcc963c527b (
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
140
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}"
|