Import Debian changes 4.92-8+deb10u3
[hcoop/debian/exim4.git] / debian / update-exim4defaults
1 #!/bin/sh
2 # update-exim4defaults(8): manage entries in /etc/default/exim4
3 # per script
4
5 if [ -n "$EX4DEBUG" ]; then
6 echo "now debugging $0 $@"
7 set -x
8 fi
9
10 unset LC_ALL
11 export LC_CTYPE=C
12
13 defaultfile=/etc/default/exim4
14
15 EX4DEF_INIT=false
16 EX4DEF_FORCE=false
17
18
19 if [ -r ${defaultfile} ]; then
20 . ${defaultfile}
21 fi
22
23
24 # initialize variables
25 EX4DEF_QUEUERUNNER="${QUEUERUNNER}"
26 EX4DEF_QUEUEINTERVAL="${QUEUEINTERVAL}"
27 EX4DEF_COMMONOPTIONS="${COMMONOPTIONS}"
28 EX4DEF_QUEUERUNNEROPTIONS="${QUEUERUNNEROPTIONS}"
29 EX4DEF_QFLAGS="${QFLAGS}"
30 EX4DEF_SMTPLISTENEROPTIONS="${SMTPLISTENEROPTIONS}"
31
32 EX4DEF_FLAGOPTIONS=false
33 EX4DEF_FLAGREMOVE=false
34
35 ex4def_usage ()
36 {
37 echo "update-exim4defaults: manage entries in /etc/default/exim4"
38 echo " usage: update-exim4defaults [[--queuerunner combined|separate|queueonly|ppp|no|nodaemon]"
39 echo " [--qflags flags ] [--queuetime time] [--commonoptions options]"
40 echo " [--queuerunneroptions options] [--smtplisteneroptions options]]"
41 echo " [--remove-common options] [--remove-queue options]"
42 echo " [--remove-smtp options]"
43 echo " [--force|-f] [--help|-h]"
44 echo " [--init]"
45 }
46
47
48 # used for initialzing and with --force.
49 ex4def_write(){
50 EX4DEF_TMP="$(tempfile -m 600 -p ex4)"
51 cat << EOF > "${EX4DEF_TMP}"
52 # /etc/default/exim4
53 EX4DEF_VERSION='${EX4DEF_VERSION}'
54
55 # 'combined' - one daemon running queue and listening on SMTP port
56 # 'no' - no daemon running the queue
57 # 'separate' - two separate daemons
58 # 'ppp' - only run queue with /etc/ppp/ip-up.d/exim4.
59 # 'nodaemon' - no daemon is started at all.
60 # 'queueonly' - only a queue running daemon is started, no SMTP listener.
61 # setting this to 'no' will also disable queueruns from /etc/ppp/ip-up.d/exim4
62 QUEUERUNNER='${EX4DEF_QUEUERUNNER}'
63 # how often should we run the queue
64 QUEUEINTERVAL='${EX4DEF_QUEUEINTERVAL}'
65 # options common to quez-runner and listening daemon
66 COMMONOPTIONS='${EX4DEF_COMMONOPTIONS}'
67 # more options for the daemon/process running the queue (applies to the one
68 # started in /etc/ppp/ip-up.d/exim4, too.
69 QUEUERUNNEROPTIONS='${EX4DEF_QUEUERUNNEROPTIONS}'
70 # special flags given to exim directly after the -q. See exim(8)
71 QFLAGS='${EX4DEF_QFLAGS}'
72 # Options for the SMTP listener daemon. By default, it is listening on
73 # port 25 only. To listen on more ports, it is recommended to use
74 # -oX 25:587:10025 -oP /run/exim4/exim.pid
75 SMTPLISTENEROPTIONS='${EX4DEF_SMTPLISTENEROPTIONS}'
76 EOF
77 cat "${EX4DEF_TMP}" > "${defaultfile}"
78 rm -f "${EX4DEF_TMP}"
79 }
80
81 ## Parse commandline
82 TEMP=$(getopt -n update-exim4defaults \
83 -l qflags:,queuerunner:,queuetime:,commonoptions:,queuerunneroptions:,smtplisteneroptions:,remove-common:,remove-queue:,remove-smtp:,force,help,init -- \
84 +fh "$@")
85
86 if test "$?" != 0; then
87 echo "Terminating..." >&2
88 exit 1
89 fi
90
91 eval set -- ${TEMP}
92 while test "$1" != "--"; do
93 case $1 in
94 -f|--force)
95 EX4DEF_FORCE=true
96 ;;
97 -h|--help)
98 ex4def_usage
99 exit 0
100 ;;
101 --qflags)
102 shift
103 EX4DEF_QFLAGS="$1"
104 ;;
105 --queuerunner)
106 shift
107 EX4DEF_QUEUERUNNER="$1"
108 if ! expr match "${EX4DEF_QUEUERUNNER}" '\(ppp\|no\|combined\|nodaemon\|queueonly\|separate\)$' >/dev/null ; then
109 echo "invalid argument ${EX4DEF_QUEUERUNNER} for --queuerunner" 1>&2
110 exit 1
111 fi
112 ;;
113 --queuetime)
114 shift
115 EX4DEF_QUEUEINTERVAL="$1"
116 ;;
117 --commonoptions)
118 shift
119 EX4DEF_COMMONOPTIONS="$1"
120 EX4DEF_FLAGOPTIONS=true
121 ;;
122 --queuerunneroptions)
123 shift
124 EX4DEF_QUEUERUNNEROPTIONS="$1"
125 EX4DEF_FLAGOPTIONS=true
126 ;;
127 --smtplisteneroptions)
128 shift
129 EX4DEF_SMTPLISTENEROPTIONS="$1"
130 EX4DEF_FLAGOPTIONS=true
131 ;;
132 --remove-common)
133 shift
134 EX4DEF_REMOVECOMMON="$1"
135 EX4DEF_FLAGREMOVE=true
136 ;;
137 --remove-queue)
138 shift
139 EX4DEF_REMOVEQUEUE="$1"
140 EX4DEF_FLAGREMOVE=true
141 ;;
142 --remove-smtp)
143 shift
144 EX4DEF_REMOVESMTP="$1"
145 EX4DEF_FLAGREMOVE=true
146 ;;
147 --init)
148 EX4DEF_INIT=true
149 ;;
150 esac
151 shift
152 done
153 shift
154
155 # No non-option arguments allowed.
156 if [ "$#" -ne 0 ]; then
157 echo "No non option arguments allowed" >&2
158 ex4def_usage >&2
159 exit 1
160 fi
161
162 if [ "${EX4DEF_FLAGREMOVE}" = "true" ] && [ "${EX4DEF_FLAGOPTIONS}" = "true" ] ; then
163 echo "Cannot use --remove-something together with --somethingoptions" >&2
164 ex4def_usage >&2
165 exit 1
166 fi
167
168 #if [ ! -r ${defaultfile} ]; then
169 # echo "Cannot read ${defaultfile}, terminating" >&2
170 # exit 1
171 #fi
172
173 if "${EX4DEF_INIT}" = "true" ] ; then
174 [ -e "${defaultfile}" ] && [ "${EX4DEF_FORCE}" != "true" ] && exit 0
175 # Reset to default values
176 EX4DEF_QUEUERUNNER='combined'
177 EX4DEF_QUEUEINTERVAL='30m'
178 EX4DEF_COMMONOPTIONS=''
179 EX4DEF_QUEUERUNNEROPTIONS=''
180 EX4DEF_QFLAGS=''
181 EX4DEF_SMTPLISTENEROPTIONS=''
182
183 ex4def_write
184 exit 0
185 fi
186
187 #Try removing
188 if [ "${EX4DEF_FLAGREMOVE}" = "true" ] ; then
189 EX4DEF_REMOVEERROR="false"
190 if [ ! -z "${EX4DEF_REMOVECOMMON}" ] ; then
191 EX4DEF_COMMONOPTIONS=$(echo "${COMMONOPTIONS}" | \
192 sed -e "sÄ${EX4DEF_REMOVECOMMON}ÄÄ" -e "s/ / /g" -e 's/^ //' -e 's/ $//')
193 [ "${EX4DEF_COMMONOPTIONS}" = "${COMMONOPTIONS}" ] && \
194 EX4DEF_REMOVEERROR="true"
195 fi
196 if [ ! -z "${EX4DEF_REMOVEQUEUE}" ] ; then
197 EX4DEF_QUEUERUNNEROPTIONS=$(echo "${QUEUERUNNEROPTIONS}" | \
198 sed -e "sÄ${EX4DEF_REMOVEQUEUE}ÄÄ" -e "s/ / /g" -e 's/^ //' -e 's/ $//')
199 [ "${EX4DEF_QUEUERUNNEROPTIONS}" = "${QUEUERUNNEROPTIONS}" ] && \
200 EX4DEF_REMOVEERROR="true"
201 fi
202 if [ ! -z "${EX4DEF_REMOVESMTP}" ] ; then
203 EX4DEF_SMTPLISTENEROPTIONS=$(echo "${SMTPLISTENEROPTIONS}" | \
204 sed -e "sÄ${EX4DEF_REMOVESMTP}ÄÄ" -e "s/ / /g" -e 's/^ //' -e 's/ $//')
205 [ "${EX4DEF_SMTPLISTENEROPTIONS}" = "${SMTPLISTENEROPTIONS}"] && \
206 EX4DEF_REMOVEERROR="true"
207 fi
208 if [ "${EX4DEF_REMOVEERROR}" = "true" ] ; then
209 echo "$0: removing failed, no changes" >&2
210 exit 64
211 fi
212
213 EX4DEF_TMP="$(tempfile -m 600 -p ex4)"
214 sed -e "sÄ^QFLAGS=.*ÄQFLAGS='${EX4DEF_QFLAGS}'Ä" \
215 -e "sÄ^QUEUERUNNER=.*ÄQUEUERUNNER='${EX4DEF_QUEUERUNNER}'Ä" \
216 -e "sÄ^QUEUEINTERVAL=.*ÄQUEUEINTERVAL='${EX4DEF_QUEUEINTERVAL}'Ä" \
217 -e "sÄ^COMMONOPTIONS=.*ÄCOMMONOPTIONS='${EX4DEF_COMMONOPTIONS}'Ä" \
218 -e "sÄ^QUEUERUNNEROPTIONS=.*ÄQUEUERUNNEROPTIONS='${EX4DEF_QUEUERUNNEROPTIONS}'Ä" \
219 -e "sÄ^SMTPLISTENEROPTIONS=.*ÄSMTPLISTENEROPTIONS='${EX4DEF_SMTPLISTENEROPTIONS}'Ä" \
220 < $defaultfile > "${EX4DEF_TMP}"
221 mv "${EX4DEF_TMP}" $defaultfile
222 rm -f "${EX4DEF_TMP}"
223 exit 0
224 fi
225
226 if [ "${EX4DEF_FORCE}" = "true" ] ; then
227 ex4def_write
228 exit 0
229
230 else
231 EX4DEF_DOANYTHING=0
232 EX4DEF_NOTALLOWED=0
233 if [ "${QUEUERUNNER}" != "${EX4DEF_QUEUERUNNER}" ]; then
234 EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+1))
235 # switching the QUEUERUNNER modus is always allowed
236 #[ -z "${QUEUERUNNER}" ] || EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+1))
237 fi
238 if [ "${QUEUEINTERVAL}" != "${EX4DEF_QUEUEINTERVAL}" ] ; then
239 EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+2))
240 [ -z "${QUEUEINTERVAL}" ] || \
241 EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+2))
242 fi
243 if [ "${COMMONOPTIONS}" != "${EX4DEF_COMMONOPTIONS}" ] ; then
244 EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+4))
245 [ -z "${COMMONOPTIONS}" ] || \
246 EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+4))
247 fi
248 if [ "${QUEUERUNNEROPTIONS}" != "${EX4DEF_QUEUERUNNEROPTIONS}" ] ; then
249 EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+8))
250 [ -z "${QUEUERUNNEROPTIONS}" ] || \
251 EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+8))
252 fi
253 if [ "${SMTPLISTENEROPTIONS}" != "${EX4DEF_SMTPLISTENEROPTIONS}" ] ; then
254 EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+16))
255 [ -z "${SMTPLISTENEROPTIONS}" ] || \
256 EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+16))
257 fi
258 if [ "${QFLAGS}" != "${EX4DEF_QFLAGS}" ] ; then
259 EX4DEF_DOANYTHING=$((${EX4DEF_DOANYTHING}+32))
260 [ -z "${QFLAGS}" ] || \
261 EX4DEF_NOTALLOWED=$((${EX4DEF_NOTALLOWED}+32))
262 fi
263
264 [ ${EX4DEF_DOANYTHING} -eq 0 ] && exit 0
265 if [ ${EX4DEF_NOTALLOWED} -ne 0 ] ; then
266 echo "setting(s) conflict with current one, terminating" >&2
267 exit ${EX4DEF_NOTALLOWED}
268 fi
269
270 EX4DEF_TMP="$(tempfile -m 600 -p ex4)"
271 sed -e "sÄ^QFLAGS=.*ÄQFLAGS='${EX4DEF_QFLAGS}'Ä" \
272 -e "sÄ^QUEUERUNNER=.*ÄQUEUERUNNER='${EX4DEF_QUEUERUNNER}'Ä" \
273 -e "sÄ^QUEUEINTERVAL=.*ÄQUEUEINTERVAL='${EX4DEF_QUEUEINTERVAL}'Ä" \
274 -e "sÄ^COMMONOPTIONS=.*ÄCOMMONOPTIONS='${EX4DEF_COMMONOPTIONS}'Ä" \
275 -e "sÄ^QUEUERUNNEROPTIONS=.*ÄQUEUERUNNEROPTIONS='${EX4DEF_QUEUERUNNEROPTIONS}'Ä" \
276 -e "sÄ^SMTPLISTENEROPTIONS=.*ÄSMTPLISTENEROPTIONS='${EX4DEF_SMTPLISTENEROPTIONS}'Ä" \
277 < $defaultfile > "${EX4DEF_TMP}"
278 mv "${EX4DEF_TMP}" $defaultfile
279 rm -f "${EX4DEF_TMP}"
280 exit 0
281 fi
282
283
284