From c71c95cd2babc5df397798d01be13519e00535dd Mon Sep 17 00:00:00 2001 From: WebSTUMP Date: Mon, 8 Apr 2024 10:42:43 +0100 Subject: [PATCH] choose only one at random --- probes/modrelays-probe | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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 -- 2.30.2