Commit | Line | Data |
---|---|---|
f8beb284 MW |
1 | |
2 | # [should have a bin/sh line and EZPATH/QMPATH added above by make] | |
3 | # | |
4 | # script to diagnose ezmlm lists | |
5 | # call as is for environment only, or as ezmlm-check 'DIR' for more info | |
6 | ||
7 | listsubscribers=yes | |
8 | if [ "$1" = '-S' ] ; then | |
9 | listsubscribers=no | |
10 | shift | |
11 | else | |
12 | if [ "$1" = '-s' ] ; then | |
13 | shift | |
14 | fi | |
15 | fi | |
16 | ||
17 | QINJECT="${QMPATH}/bin/qmail-inject" | |
18 | EZLIST="${EZPATH}/ezmlm-list" | |
19 | MYNAME='ezmlm-check' | |
20 | MYDTLINE="Delivered-To: ${MYNAME}" | |
21 | FATAL="${MYNAME}: fatal:" | |
22 | EZERR="??? ERROR:" | |
23 | EZWARN="!!! Warning:" | |
24 | # This should be a ``grep'' that does regexps. Needs to recognize ^ and $. | |
25 | GREP='grep' | |
26 | CAT='cat' | |
27 | CUT='cut' | |
28 | ECHO='echo' | |
29 | # Needed to isolate some lines in the DIR/editor ... files | |
30 | HEAD='head' | |
31 | TAIL='tail' | |
32 | # needed to count characters in $USER | |
33 | WC='wc' | |
34 | # should mark executables with '*' and list one file per line | |
35 | LS='ls -F1' | |
36 | # should list links as: "... symlink -> file" | |
37 | LLS='ls -l' | |
38 | if [ ! -x "$QINJECT" ]; then | |
39 | ${ECHO} "$FATAL edit script to for path to qmail-inject" | |
40 | exit 100 | |
41 | fi | |
42 | ||
43 | if [ -z "$SENDER" ] ; then | |
44 | RCP="${CAT}" | |
45 | else | |
46 | RCP="$QINJECT" | |
47 | if ${CAT} - | ${GREP} "${MYDTLINE}" >/dev/null 2>&1 | |
48 | then | |
49 | ${ECHO} "FATAL this message is looping: it already has my Delivered-To line (#5.4.6)" | |
50 | exit 100 | |
51 | fi | |
52 | fi | |
53 | ||
54 | if [ ! -z "$1" -a ! -d "$1" ]; then | |
55 | ${ECHO} "$FATAL $1 is not a directory"; exit 100 | |
56 | fi | |
57 | ||
58 | # reset variables | |
59 | GET=''; DIGEST=''; FLAGARCH=''; FLAGIND=''; INLOCAL=''; INLOCALOK=''; INHOST='' | |
60 | MANAGE=''; OUTLOCAL=''; OUTHOST=''; SPEC=''; SRESTRICT=''; STORE=''; REMOTE='' | |
61 | MODSUB=''; MODPOST=''; SPEC='' | |
62 | ||
63 | ( | |
64 | ${ECHO} "Delivered-To: ezmlm-check" | |
65 | ${ECHO} "To: $SENDER" | |
66 | ${ECHO} "Subject: ${MYNAME} results" | |
67 | ${ECHO} | |
68 | ${ECHO} "Important environment variables:" | |
69 | ${ECHO} | |
70 | ${ECHO} "SENDER ='$SENDER'" | |
71 | ${ECHO} "NEWSENDER ='$NEWSENDER'" | |
72 | ${ECHO} "RECIPIENT ='$RECIPIENT'" | |
73 | ${ECHO} "USER ='$USER'" | |
74 | ${ECHO} "DEFAULT ='$DEFAULT'" | |
75 | ${ECHO} "LOCAL ='$LOCAL'" | |
76 | ${ECHO} "HOST ='$HOST'" | |
77 | ${ECHO} "---------------------------------------------------" | |
78 | if [ ! -z "$1" ]; then | |
79 | ${ECHO} "Checking basic list setup:" | |
80 | ${ECHO} | |
81 | if [ ! -r "$1/mailinglist" ]; then | |
82 | ${ECHO} "$EZERR $1/mailinglist does not exist" | |
83 | fi | |
84 | if [ -e "$1/num" ]; then | |
85 | if [ ! -w "$1/num" ]; then | |
86 | ${ECHO} "$EZERR $1/num is not writable to $USER" | |
87 | else | |
88 | NUM=`${CAT} "$1/num" | ${HEAD} -1` | |
89 | ${ECHO} "... latest message was message # $NUM" | |
90 | fi | |
91 | else | |
92 | ${ECHO} "... no num. This must be a new list ..." | |
93 | fi | |
94 | ${ECHO} | |
95 | if [ -e "$1/lock" -a ! -w "$1/lock" ]; then | |
96 | ${ECHO} "$EZERR User $USER does not have write premission to $1/lock" | |
97 | fi | |
98 | if [ -e "$1/lockbounce" -a ! -w "$1/lockbounce" ]; then | |
99 | ${ECHO} "$EZERR User $USER does not have write premission to $1/lockbounce" | |
100 | fi | |
101 | if [ ! -r "$1/inlocal" ]; then | |
102 | ${ECHO} "$EZERR $1/inlocal does not exist" | |
103 | elif [ ! -r "$1/inhost" ]; then | |
104 | ${ECHO} "$EZERR $1/inhost does not exist" | |
105 | else | |
106 | INLOCAL=`${CAT} "$1/inlocal"| ${HEAD} -1` | |
107 | INHOST=`${CAT} "$1/inhost"| ${HEAD} -1` | |
108 | if [ -z "$HOST" ]; then | |
109 | ${ECHO} "$EZERR HOST is empty. Likely running from the command" | |
110 | ${ECHO} " line. Run from $1/editor to check if HOST matches" | |
111 | ${ECHO} " $1/inhost and LOCAL matches $1/inlocal." | |
112 | ${ECHO} " Mismatches here are the most common setup error." | |
113 | ${ECHO} | |
114 | else | |
115 | if [ "$HOST" != "$INHOST" ]; then | |
116 | ${ECHO} "$EZERR HOST does not match $1/inhost" | |
117 | else | |
118 | ${ECHO} "... $1/inhost OK" | |
119 | fi | |
120 | if ${ECHO} "$LOCAL" | ${GREP} -G "^$INLOCAL" >/dev/null 2>&1 | |
121 | then | |
122 | ${ECHO} "... $1/inlocal OK" | |
123 | else | |
124 | ${ECHO} \ | |
125 | "$EZERR LOCAL does not begin with contents of $1/inlocal" | |
126 | fi | |
127 | fi | |
128 | fi | |
129 | if [ ! -r "$1/outlocal" ]; then | |
130 | ${ECHO} "$EZERR $1/outlocal does not exist" | |
131 | else | |
132 | OUTLOCAL=`${CAT} "$1/outlocal"| ${HEAD} -1` | |
133 | fi | |
134 | if [ ! -r "$1/outhost" ]; then | |
135 | ${ECHO} "$EZERR $1/outhost does not exist" | |
136 | else | |
137 | OUTHOST=`${CAT} "$1/outhost"| ${HEAD} -1` | |
138 | fi | |
139 | ${ECHO} "... The list is named ${OUTLOCAL}@${OUTHOST}" | |
140 | if [ "$OUTHOST" != "$INHOST" ]; then | |
141 | HOSTMATCH='1'; | |
142 | ${ECHO} | |
143 | ${ECHO} "??? $1/inhost and $1/outhost do not" | |
144 | ${ECHO} " match. This is very unusual ..." | |
145 | fi | |
146 | if ${ECHO} "$INLOCAL" | ${GREP} "^${USER}" >/dev/null ; then | |
147 | USERSTART='1'; INLOCALOK='1' | |
148 | fi | |
149 | if [ -z "$USERSTART" ]; then | |
150 | ${ECHO} | |
151 | ${ECHO} "??? $1/inlocal does not start with the user name." | |
152 | ${ECHO} " This is an error, unless $INLOCAL starts with" | |
153 | ${ECHO} " an alias of \"$USER\"." | |
154 | fi | |
155 | if [ "$INLOCAL" = "$OUTLOCAL" ]; then | |
156 | ${ECHO} "... $1/inlocal matches $1/outlocal" | |
157 | ${ECHO} " suggesting that this is a regular user-owned list." | |
158 | CHARS=`${ECHO} " $USER" | ${WC} -c` | |
159 | LIST=`${ECHO} "$OUTLOCAL" | cut -c$CHARS-` | |
160 | else | |
161 | if ${ECHO} "$INLOCAL" | ${GREP} "$OUTLOCAL$" >/dev/null ; then | |
162 | if [ ! -z "$USERSTART" ]; then | |
163 | ${ECHO} "... It appears that $OUTHOST is a virtual domain" | |
164 | ${ECHO} " controlled by $USER." | |
165 | LIST="$OUTLOCAL" | |
166 | if [ ! -z "$HOSTMATCH" ]; then | |
167 | ${ECHO} " This part of the setup appears correct." | |
168 | fi | |
169 | else | |
170 | ${ECHO} | |
171 | ${ECHO} "$EZWARN $1/inlocal ends with the contents" | |
172 | ${ECHO} " of $1/outlocal, but does not start with" | |
173 | ${ECHO} " $USER. If this message persists when you" | |
174 | ${ECHO} " run this program from $1/editor," | |
175 | ${ECHO} " there is a setup error." | |
176 | fi | |
177 | else | |
178 | ${ECHO} | |
179 | ${ECHO} "$EZWARN $1/inlocal does not end with the contents" | |
180 | ${ECHO} " of $1/outlocal. This is almost always wrong." | |
181 | fi | |
182 | fi | |
183 | if [ ! -r "$1/editor" ]; then | |
184 | ${ECHO} "$EZERR $1/editor does not exist" | |
185 | else | |
186 | ${ECHO} | |
187 | ${ECHO} "$1/editor:" | |
188 | ${ECHO} "============================" | |
189 | ${CAT} "$1/editor" | |
190 | ${ECHO} "============================" | |
191 | ${ECHO} | |
192 | fi | |
193 | if [ ! -r "$1/manager" ]; then | |
194 | ${ECHO} "$EZERR $1/manager does not exist" | |
195 | else | |
196 | ${ECHO} "$1/manager:" | |
197 | ${ECHO} "============================" | |
198 | ${CAT} "$1/manager" | |
199 | ${ECHO} "============================" | |
200 | ${ECHO} | |
201 | fi | |
202 | if [ ! -r "$1/bouncer" ]; then | |
203 | ${ECHO} "$EZERR $1/bouncer does not exist" | |
204 | else | |
205 | ${ECHO} "$1/bouncer:" | |
206 | ${ECHO} "============================" | |
207 | ${CAT} "$1/bouncer" | |
208 | ${ECHO} "============================" | |
209 | ${ECHO} | |
210 | fi | |
211 | if [ ! -r "$1/owner" ]; then | |
212 | ${ECHO} "$EZERR $1/owner does not exist" | |
213 | else | |
214 | ${ECHO} "$1/owner:" | |
215 | ${ECHO} "============================" | |
216 | ${CAT} "$1/owner" | |
217 | ${ECHO} "============================" | |
218 | ${ECHO} | |
219 | OWNER=`${GREP} "@" < $1/owner` | |
220 | fi | |
221 | if [ ! -r "$1/headeradd" ]; then | |
222 | ${ECHO} "$EZERR $1/headeradd does not exist" | |
223 | else | |
224 | ${ECHO} "$1/headeradd:" | |
225 | ${ECHO} "============================" | |
226 | ${CAT} "$1/headeradd" | |
227 | ${ECHO} "============================" | |
228 | ${ECHO} | |
229 | fi | |
230 | if [ ! -r "$1/headerremove" ]; then | |
231 | ${ECHO} "$EZERR $1/headerremove does not exist" | |
232 | else | |
233 | ${ECHO} "$1/headerremove:" | |
234 | ${ECHO} "============================" | |
235 | ${CAT} "$1/headerremove" | |
236 | ${ECHO} "============================" | |
237 | ${ECHO} | |
238 | fi | |
239 | ${ECHO} "---------------------------------------------------" | |
240 | ${ECHO} "Checking standard options:" | |
241 | ${ECHO} | |
242 | if [ -r "$1/public" ]; then | |
243 | ${ECHO} "... public" | |
244 | else | |
245 | ${ECHO} "... not public" | |
246 | fi | |
247 | if [ -r "$1/archived" ]; then | |
248 | FLAGARCH='1' | |
249 | ${ECHO} "... archived" | |
250 | else | |
251 | ${ECHO} "... not archived" | |
252 | fi | |
253 | if [ -r "$1/indexed" ]; then | |
254 | FLAGARCH='1' | |
255 | FLAGIND='1' | |
256 | ${ECHO} "... indexed" | |
257 | else | |
258 | ${ECHO} "... not indexed" | |
259 | fi | |
260 | if [ ! -z "$FLAGARCH" ]; then | |
261 | if [ ! -d "$1/archive" ]; then | |
262 | ${ECHO} "$EZERR $1/archive is not a directory" | |
263 | else | |
264 | if [ ! -z "$NUM" -a ! -r "$1/archive/0/index" \ | |
265 | -a ! -z "$FLAGIND" ]; then | |
266 | ${ECHO} "$EZWARN list is archived, but there is no index." | |
267 | ${ECHO} " Please run ezmlm-idx!" | |
268 | fi | |
269 | fi | |
270 | fi | |
271 | if [ ! -d "$1/bounce" ]; then | |
272 | ${ECHO} "$EZERR $1/bounce is not a directory" | |
273 | fi | |
274 | if [ -r "$1/prefix" ]; then | |
275 | PREFIX=`${HEAD} -1 "$1/prefix"` | |
276 | ${ECHO} "... using $1/prefix as subject prefix: $PREFIX" | |
277 | ${ECHO} | |
278 | fi | |
279 | if [ -r "$1/sublist" ]; then | |
280 | ${ECHO} "... this is a sublist for:" | |
281 | ${HEAD} -1 < "$1/sublist" | |
282 | else | |
283 | ${ECHO} "... not a sublist" | |
284 | fi | |
285 | if [ ! -d "$1/text" ]; then | |
286 | ${ECHO} "$EZERR $1/text is not a directory" | |
287 | fi | |
288 | ${ECHO} "... Contents of $1/text not checked" | |
289 | ${ECHO} | |
290 | if [ ! -z "$OWNER" ]; then | |
291 | ${ECHO} "... Mail to owner goes to: $OWNER" | |
292 | else | |
293 | ${ECHO} "$EZWARN Mail to owner seems not to be forwarded." | |
294 | ${ECHO} " Remember to check the mailbox once in a while!" | |
295 | fi | |
296 | ${ECHO} | |
297 | ${ECHO} "--------------------------------------------------" | |
298 | ${ECHO} | |
299 | ${ECHO} "... Links should be:" | |
300 | ${ECHO} " ~/.qmail-{list} -> $1/editor" | |
301 | ${ECHO} " ~/.qmail-{list}-default -> $1/manager" | |
302 | ${ECHO} " ~/.qmail-{list}-owner -> $1/owner" | |
303 | ${ECHO} " ~/.qmail-{list}-return-default -> $1/bouncer" | |
304 | if [ ! -z "$LIST" -a ! -z "$INLOCALOK" ]; then | |
305 | ${ECHO} | |
306 | ${ECHO} " As far as I can see, '{list}' should be '$LIST'." | |
307 | ${ECHO} " If so and if .qmail files should be in $HOME ..." | |
308 | BN="$HOME/.qmail-$LIST" | |
309 | FN="$BN" | |
310 | if ${LLS} "$FN" 2>/dev/null | ${GREP} "$1/editor$" >/dev/null ; then | |
311 | ${ECHO} " $FN is OK" | |
312 | else | |
313 | ${ECHO} "??? $FN is BAD" | |
314 | fi | |
315 | FN="$BN-default" | |
316 | if ${LLS} "$FN" | ${GREP} "$1/manager$" >/dev/null ; then | |
317 | ${ECHO} " $FN OK" | |
318 | else | |
319 | ${ECHO} "??? $FN is BAD" | |
320 | fi | |
321 | FN="$BN-owner" | |
322 | if ${LLS} "$FN" | ${GREP} "$1/owner$" >/dev/null ; then | |
323 | ${ECHO} " $FN is OK" | |
324 | else | |
325 | ${ECHO} "??? $FN is BAD" | |
326 | fi | |
327 | FN="$BN-return-default" | |
328 | if ${LLS} "$FN" | ${GREP} "$1/bouncer$" >/dev/null ; then | |
329 | ${ECHO} " $FN is OK" | |
330 | else | |
331 | ${ECHO} "??? $FN is BAD" | |
332 | fi | |
333 | fi | |
334 | ${ECHO} "--------------------------------------------------" | |
335 | ${ECHO} "Checking subscribers:" | |
336 | ${ECHO} | |
337 | if [ ! -d "$1/subscribers" ]; then | |
338 | ${ECHO} "$EZERR $1/subscribers is not a directory" | |
339 | else | |
340 | if [ ! -x "$EZLIST" ]; then | |
341 | ${ECHO} "$EZLIST is not available for listing" | |
342 | else | |
343 | if [ "$listsubscribers" = "yes" ] ; then | |
344 | ${ECHO} "... Subscribers are:" | |
345 | if ${EZLIST} "$1" | ${GREP} '@' ; then | |
346 | : | |
347 | else | |
348 | ${ECHO} "$EZWARN no subscribers!" | |
349 | fi | |
350 | else | |
351 | if ${EZLIST} "$1" | ${GREP} '@' >/dev/null 2>&1 ; then | |
352 | ${ECHO} "... There are subscribers." | |
353 | else | |
354 | ${ECHO} "$EZWARN no subscribers!" | |
355 | fi | |
356 | fi | |
357 | fi | |
358 | fi | |
359 | ${ECHO} | |
360 | ${ECHO} "--------------------------------------------------" | |
361 | ${ECHO} "Checking for digest:" | |
362 | ${ECHO} | |
363 | if ${GREP} 'ezmlm-tstdig' < $1/editor >/dev/null 2>&1 ; then | |
364 | if ${GREP} -1 'ezmlm-tstdig' < $1/editor \ | |
365 | | ${TAIL} -1 | ${GREP} 'ezmlm-get' >/dev/null; then | |
366 | ${ECHO} "... integrated digest via $1/editor" | |
367 | DIGEST='1' | |
368 | ${ECHO} | |
369 | fi | |
370 | fi | |
371 | if [ -z "$DIGEST" ]; then | |
372 | ${ECHO} "... no digest via $1/editor" | |
373 | else | |
374 | ${ECHO} "... links should be:" | |
375 | ${ECHO} " ~/.qmail-{list}-digest-return-default -> $1/bouncer" | |
376 | ${ECHO} " ~/.qmail-{list}-digest-owner -> $1/owner" | |
377 | if [ ! -z "$LIST" -a ! -z "$INLOCALOK" ]; then | |
378 | ${ECHO} | |
379 | ${ECHO} " As far as I can see, '{list}' should be '$LIST'." | |
380 | ${ECHO} " If so and if .qmail files should be in $HOME ..." | |
381 | BN="$HOME/.qmail-$LIST" | |
382 | FN="$BN-digest-return-default" | |
383 | if ${LLS} "$FN" 2>/dev/null | \ | |
384 | ${GREP} "$1/bouncer$" >/dev/null ; then | |
385 | ${ECHO} " $FN is OK" | |
386 | else | |
387 | ${ECHO} "??? $FN is BAD" | |
388 | fi | |
389 | FN="$BN-digest-owner" | |
390 | if ${LLS} "$FN" 2>/dev/null | \ | |
391 | ${GREP} "$1/owner$" >/dev/null ; then | |
392 | ${ECHO} " $FN is OK" | |
393 | else | |
394 | ${ECHO} "??? $FN is BAD" | |
395 | fi | |
396 | fi | |
397 | fi | |
398 | if [ -d "$1/digest" ]; then | |
399 | if [ ! -d "$1/digest/subscribers" ]; then | |
400 | ${ECHO} "$EZERR $1/digest exists, but $1/digest/subscribers" | |
401 | ${ECHO} "$EZERR is not a directory" | |
402 | ${ECHO} | |
403 | else | |
404 | if [ ! -x "$EZLIST" ]; then | |
405 | ${ECHO} "$EZLIST is not available for listing" | |
406 | else | |
407 | if [ "$listsubscribers" = "yes" ] ; then | |
408 | ${ECHO} | |
409 | ${ECHO} "... Digest subscribers are:" | |
410 | if ${EZLIST} "$1" | ${GREP} '@' ; then | |
411 | : | |
412 | else | |
413 | ${ECHO} "$EZWARN no subscribers!" | |
414 | fi | |
415 | else | |
416 | if ${EZLIST} "$1" | ${GREP} '@' >/dev/null 2>&1 ; then | |
417 | ${ECHO} "... There are digest subscribers." | |
418 | else | |
419 | ${ECHO} "$EZWARN no subscribers!" | |
420 | fi | |
421 | fi | |
422 | fi | |
423 | ${ECHO} | |
424 | fi | |
425 | fi | |
426 | ${ECHO} "---------------------------------------------------" | |
427 | ${ECHO} "Checking for subscription moderation/remote admin:" | |
428 | ${ECHO} | |
429 | if [ -r "$1/remote" ]; then | |
430 | FLAGMOD='1' | |
431 | ${ECHO} "... set up for remote administration" | |
432 | REMOTE=`${CAT} "$1/remote"| ${HEAD} -1` | |
433 | if ${ECHO} "$REMOTE" | ${GREP} -G "^/" >/dev/null 2>&1 | |
434 | then | |
435 | MODDIR="$REMOTE" | |
436 | else | |
437 | MODDIR="$1/mod" | |
438 | fi | |
439 | REMOTE='1' | |
440 | else | |
441 | ${ECHO} "... no remote admin" | |
442 | fi | |
443 | if [ -r "$1/modsub" ]; then | |
444 | FLAGMOD='1' | |
445 | ${ECHO} "... subscription moderated" | |
446 | MODSUB=`${CAT} "$1/modsub"| ${HEAD} -1` | |
447 | if ${ECHO} "$MODSUB" | ${GREP} -G "^/" >/dev/null 2>&1 | |
448 | then | |
449 | MODDIR="$MODSUB" | |
450 | elif [ -z "$MODDIR" ]; then | |
451 | MODDIR="$1/mod" | |
452 | fi | |
453 | else | |
454 | ${ECHO} "... no subscription moderation" | |
455 | fi | |
456 | if [ "$FLAGMOD" = '1' ]; then | |
457 | ${ECHO} | |
458 | ${ECHO} "Mods/remote admins stored based in $MODDIR:" | |
459 | ${ECHO} | |
460 | if [ ! -d "$MODDIR" ]; then | |
461 | ${ECHO} "$EZERR moderator dir $MODDIR doesn't exist!" | |
462 | elif [ -e "$MODDIR/lock" -a ! -w "$MODDIR/lock" ]; then | |
463 | ${ECHO} "$EZERR $MODDIR/lock is not writable to user $USER" | |
464 | elif [ ! -x "$EZLIST" ]; then | |
465 | ${ECHO} "${EZLIST} not available for listing" | |
466 | else | |
467 | if ${EZLIST} "$MODDIR" | ${GREP} '@' ; then | |
468 | : | |
469 | else | |
470 | ${ECHO} "$EZERR no subscription moderators/remote admins!" | |
471 | fi | |
472 | fi | |
473 | ${ECHO} | |
474 | fi | |
475 | ${ECHO} "---------------------------------------------------" | |
476 | ${ECHO} "Checking for message moderation:" | |
477 | ${ECHO} | |
478 | if ${GREP} 'ezmlm-gate' < "$1/editor" > /dev/null 2>&1; then | |
479 | GATE='1' | |
480 | fi | |
481 | if ${GREP} 'ezmlm-store' < "$1/editor" > /dev/null 2>&1; then | |
482 | STORE='1' | |
483 | fi | |
484 | FLAGMOD='' | |
485 | if [ -r "$1/modpost" ]; then | |
486 | FLAGMOD='1' | |
487 | MODPOST=`${CAT} "$1/modpost" | ${HEAD} -1` | |
488 | if ${ECHO} "$MODPOST" | ${GREP} -G "^/" >/dev/null 2>&1 | |
489 | then | |
490 | MODDIR="$MODPOST" | |
491 | else | |
492 | MODDIR="$1/mod" | |
493 | fi | |
494 | fi | |
495 | if [ "$STORE" = '1' -a -z "$FLAGMOD" ]; then | |
496 | ${ECHO} "??? it looks from $1/editor like the list is set up" | |
497 | ${ECHO} " for message moderation. However, since $1/modpost" | |
498 | ${ECHO} " doesn't exist, ezmlm-store posts them directly. If" | |
499 | ${ECHO} " this is not intended, please create $1/modpost." | |
500 | ${ECHO} | |
501 | FLAGMOD='1' | |
502 | MODDIR="$1/mod" | |
503 | elif [ -z "$STORE" -a -z "$GATE" -a "$FLAGMOD" = '1' ]; then | |
504 | ${ECHO} "??? $1/modpost exists, leading me to think you'd like" | |
505 | ${ECHO} " message moderation, but I can't find any call to" | |
506 | ${ECHO} " ezmlm-store in $1/editor." | |
507 | ${ECHO} | |
508 | elif [ -z "$STORE" -a "$GATE" = '1' ]; then | |
509 | if [ -z "$FLAGMOD" ]; then | |
510 | ${ECHO} "??? The list is set up with ezmlm-gate in $1/editor." | |
511 | ${ECHO} " However, since $1/modpost does not exist all" | |
512 | ${ECHO} " messages will be accepted!" | |
513 | FLAGMOD='1' | |
514 | MODDIR="$1/mod" | |
515 | else | |
516 | ${ECHO} "... The list is set up with ezmlm-gate in $1/editor." | |
517 | ${ECHO} " Since $1/modpost exists, subscriber messages" | |
518 | ${ECHO} " will be accepted and others will be send for" | |
519 | ${ECHO} " moderation." | |
520 | fi | |
521 | fi | |
522 | if [ "$FLAGMOD" = '1' ]; then | |
523 | ${ECHO} "... message moderated" | |
524 | ${ECHO} | |
525 | ${ECHO} "Message moderators based in $MODDIR:" | |
526 | ${ECHO} | |
527 | if [ ! -d "$MODDIR" ]; then | |
528 | ${ECHO} "$EZERR moderator dir $MODDIR doesn't exist!" | |
529 | elif [ -e "$MODDIR/lock" -a ! -w "$MODDIR/lock" ]; then | |
530 | ${ECHO} "$EZERR $MODDIR/lock is not writable to user $USER" | |
531 | elif [ ! -x "$EZLIST" ]; then | |
532 | ${ECHO} "${EZLIST} not available for listing" | |
533 | else | |
534 | if ${EZLIST} "$MODDIR" | ${GREP} '@' ; then | |
535 | : | |
536 | else | |
537 | ${ECHO} "$EZERR no message moderators!" | |
538 | fi | |
539 | fi | |
540 | ${ECHO} | |
541 | MT="120" | |
542 | if [ -r "$1/modtime" ]; then | |
543 | MODTIME=`${CAT} "$1/modtime" | ${HEAD} -1` | |
544 | if [ "$MODTIME" -eq 0 ]; then | |
545 | MT="120" | |
546 | elif [ "$MODTIME" -lt 24 ]; then | |
547 | MT="24" | |
548 | elif [ "$MODTIME" -gt 240 ]; then | |
549 | MT="240" | |
550 | else | |
551 | MT="${MODTIME}" | |
552 | fi | |
553 | fi | |
554 | ${ECHO} "... Messages awaiting moderation time out after $MT hours" | |
555 | if [ ! -d "$1/mod/pending" ]; then | |
556 | ${ECHO} "$EZERR $MODDIR/pending is not a directory" | |
557 | else | |
558 | MODNUM=`${LS} "$1/mod/pending" | ${GREP} -c '*'` | |
559 | ${ECHO} "... there are $MODNUM messages awaiting moderator action" | |
560 | fi | |
561 | if [ ! -d "$1/mod/accepted" ]; then | |
562 | ${ECHO} "$EZERR $MODDIR/accepted is not a directory" | |
563 | fi | |
564 | if [ ! -d "$1/mod/rejected" ]; then | |
565 | ${ECHO} "$EZERR $MODDIR/rejected is not a directory" | |
566 | fi | |
567 | if [ ! -r "$1/moderator" ]; then | |
568 | ${ECHO} "$EZERR $1/moderator is not readable to user $USER" | |
569 | else | |
570 | if ${GREP} 'ezmlm-moderate' < "$1/moderator" >/dev/null 2>&1 | |
571 | then | |
572 | : | |
573 | else | |
574 | ${ECHO} "$EZERR $1/moderator lacks ezmlm-moderate entry" | |
575 | fi | |
576 | ${ECHO} | |
577 | ${ECHO} "$1/moderator:" | |
578 | ${ECHO} "============================" | |
579 | ${CAT} "$1/moderator" | |
580 | ${ECHO} "============================" | |
581 | ${ECHO} | |
582 | fi | |
583 | ${ECHO} | |
584 | ${ECHO} "... Links should be:" | |
585 | ${ECHO} " ~/.qmail-{list}-accept-default -> $1/moderator" | |
586 | ${ECHO} " ~/.qmail-{list}-reject-default -> $1/moderator" | |
587 | ${ECHO} | |
588 | if [ ! -z "$LIST" -a ! -z "$INLOCALOK" ]; then | |
589 | ${ECHO} | |
590 | ${ECHO} " As far as I can see, '{list}' should be '$LIST'." | |
591 | ${ECHO} " If so and if .qmail files should be in $HOME ..." | |
592 | BN="$HOME/.qmail-$LIST" | |
593 | FN="$BN-accept-default" | |
594 | if ${LLS} "$FN" 2>/dev/null | \ | |
595 | ${GREP} "$1/moderator$" >/dev/null ; then | |
596 | ${ECHO} " $FN is OK" | |
597 | else | |
598 | ${ECHO} "??? $FN is BAD" | |
599 | fi | |
600 | FN="$BN-reject-default" | |
601 | if ${LLS} "$FN" 2>/dev/null | \ | |
602 | ${GREP} "$1/moderator$" >/dev/null ; then | |
603 | ${ECHO} " $FN is OK" | |
604 | else | |
605 | ${ECHO} "??? $FN is BAD" | |
606 | fi | |
607 | fi | |
608 | else | |
609 | ${ECHO} "... no message moderation" | |
610 | fi | |
611 | ${ECHO} | |
612 | ${ECHO} "---------------------------------------------------" | |
613 | ${ECHO} "Checking for SENDER checks:" | |
614 | ${ECHO} | |
615 | if ${GREP} 'ezmlm-issubn -n' < "$1/editor" >/dev/null 2>&1 ; then | |
616 | ${ECHO} "... Some type of blacklisting in use" | |
617 | SRESTRICT='1' | |
618 | fi | |
619 | if ${GREP} 'ezmlm-issubn' < "$1/editor" |\ | |
620 | ${GREP} -v -- '-n' >/dev/null 2>&1 ; then | |
621 | ${ECHO} "... Some type of SENDER check in use for posts" | |
622 | SRESTRICT='1' | |
623 | fi | |
624 | if [ -z "$SRESTRICT" ]; then | |
625 | ${ECHO} "... no SENDER restrictions found for posts" | |
626 | fi | |
627 | ${ECHO} | |
628 | GET=` ${GREP} 'ezmlm-get' < "$1/manager" | \ | |
629 | ${CUT} -d' ' -f2- | ${CUT} -d\' -f1` | |
630 | if ${ECHO} "$GET" | ${GREP} 's' >/dev/null ; then | |
631 | ${ECHO} "... Only subscribers may access the archive" | |
632 | else | |
633 | ${ECHO} "... no SENDER restrictions for archive access" | |
634 | fi | |
635 | ${ECHO} | |
636 | ${ECHO} "---------------------------------------------------" | |
637 | ${ECHO} "Checking for special options:" | |
638 | ${ECHO} | |
639 | MANAGE=` ${GREP} 'ezmlm-manage' < "$1/manager" | \ | |
640 | ${CUT} -d' ' -f2- | ${CUT} -d\' -f1` | |
641 | if ${ECHO} "$MANAGE" | ${GREP} 'e' >/dev/null ; then | |
642 | ${ECHO} "... remote editing of $1/text/ files enabled" | |
643 | SPEC='1' | |
644 | fi | |
645 | if ${ECHO} "$MANAGE" | ${GREP} 'l' >/dev/null ; then | |
646 | ${ECHO} "... remote listing of subscribers enabled" | |
647 | SPEC='1' | |
648 | fi | |
649 | if [ "$SPEC" = '1' -a -z "$REMOTE" ] ; then | |
650 | ${ECHO} \ | |
651 | "$EZERR but remote admin is not enabled, so this will not work!" | |
652 | fi | |
653 | ${ECHO} "---------------------------------------------------" | |
654 | fi | |
655 | ${ECHO} | |
656 | ${ECHO} "EXT ='$EXT'" | |
657 | ${ECHO} "EXT1 ='$EXT1'" | |
658 | ${ECHO} "EXT2 ='$EXT2'" | |
659 | ${ECHO} "EXT3 ='$EXT3'" | |
660 | ${ECHO} "EXT4 ='$EXT4'" | |
661 | ${ECHO} "DTLINE = $DTLINE" | |
662 | ${ECHO} "RPLINE = $RPLINE" | |
663 | ${ECHO} "UFLINE = $UFLINE" | |
664 | ${ECHO} "---------------------------------------------------" | |
665 | ${ECHO} | |
666 | ${ECHO} "Hope that helps!" | |
667 | ) | "$RCP" || exit 100 | |
668 | ||
669 | exit 99 | |
670 |