X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~webstump/git?a=blobdiff_plain;ds=sidebyside;f=probes%2Fmodrelays-probe;fp=probes%2Fmodrelays-probe;h=7c6884c0e6deb099688ee66a1eb99c00e6085fed;hb=c71c95cd2babc5df397798d01be13519e00535dd;hp=28db476376635eefd5afa5148687a1efb812addd;hpb=e9cbeb628c6a553a2869279cda6edde8a66bae2e;p=modbot-urcm.git diff --git a/probes/modrelays-probe b/probes/modrelays-probe index 28db476..7c6884c 100755 --- a/probes/modrelays-probe +++ b/probes/modrelays-probe @@ -67,6 +67,11 @@ record-success () { record-outcome "$1" ok ''; } record-tempfail () { record-outcome "$1" tempfail "$2"; } record-permfail () { record-outcome "$1" permfail "$2"; } +choose () { + local all=$1 + shuf -n1 -o $all.chosen $all +} + probe-addr () { local mx=$1 local addr=$2 @@ -136,11 +141,14 @@ probe-domain () { case $rc in 0) # have a list of MX's - exec 3<$td/dns + choose $td/dns + local pref local mx local statustype local rhs + + exec 3<$td/dns.chosen while read <&3 pref mx statustype statustypenum rhs; do case $statustypenum in 0) @@ -156,10 +164,16 @@ probe-domain () { rhs=${rhs##* (} rhs=${rhs% )} local addr + exec 5>$td/dns-addrs for addr in $rhs; do case $addr in INET|INET6) continue ;; esac + echo >&5 $addr + done + choose $td/dns-addrs + exec 5<$td/dns-addrs.chosen + while read addr <&5; do probe-addr $mx $addr done ;; @@ -190,7 +204,8 @@ probe-domain () { case $rc in 0) # have a list of A's (dealt with MXs above) - exec 3<$td/dns + choose $td/dns + exec 3<$td/dns.chosen local addr while read <&3 addr; do probe-addr 'NONE' $addr