8 printf >&2 "%s\n" "modrelays-probe: error: $1"
13 # implicitly uses newsgroup, id, domain
14 # prints working dir filename
17 probeid=${probeid//[^=-.,_0-9A-Za-z]/%/}
19 .*|*/*) fail "yikes, sanitisation bug!" ;;
22 local newtd="monitoring/modrelays.probes/$probeid"
31 local td=`record-probing "$probeid"`
32 printf "%s\n" >"$td"/"$outcome"
35 record-success () { record-outcome "$1" ok '' }
36 record-tempfail () { record-outcome "$1" tempfail "$2" }
37 record-permfail () { record-outcome "$1" permfail "$2" }
43 local td=`record-probing "mx=$mx,addr=$addr"`
46 swaks --to "${GROUP//./-/}@$domain" \
48 --tls-optional-strict \
49 --header 'Subject: test modrelays probe test' \
51 "X-WebSTUMP-Relay-Probe: $GROUP $id $domain $mx $addr" \
52 -n >$td/swaks.log 2>$td/swaks.err
57 0) return ;; # record-success done by receiver
63 local expect_no_5xx='initial connection'
64 while read <$td/swaks.log prefix rhs; do
69 if [ "x$expect_no_5xx" != x ] && \
70 [ "x$permfail" = x ]; then
71 permfail="$rhs ($expect_no_5xx)" ;;
78 EHLO*|STARTTLS*) expect_no_5xx='' ;;
79 *) expect_no_5xx="after $rhs" ;;
85 if [ "x$permfail" = x ]; then
86 record-tempfail "mx=$mx,addr=$addr" "see swaks.log / swaks.err"
88 record-permfail "mx=$mx,addr=$addr" "$permfail"
94 local td=`record-probing dns`
97 adnshost -Fi -Tn +Do +Dt -t mx $domain >$td/dns
103 # have a list of MX's
109 while read pref mx statustype rhs; do
112 # have a list of relays
116 record-permfail "mx=$mx" \
125 INET|INET6) continue ;;
132 record-tempfail "mx=$mx" "dns $rc $rhs"
136 record-permfail "mx=$mx" "dns $rc $rhs"
146 adnshost -Fi -Tn +Do +Dt -t a $domain >$td
154 # have a list of A's (dealt with MXs above)
158 probe-addr '<no-mx>' $addr
166 record-tempfail dns "dns <no-mx> $emsg"
171 record-permfail dns "dns <no-mx> $emsg"
183 for domain in $MODRELAYS; do
190 xxx do something to cause sleeping