improvements and fixes
[distro-setup] / mailtest-check
index e99789594fc131d04c75a237e94da434e848c82f..c7d40c17502e967b808e2e251a6b50b63cb1464c 100755 (executable)
@@ -93,7 +93,31 @@ main() {
       folders=(/m/md/l/testignore)
       froms=(testignore@je.b8.nz testignore@expertpathologyreview.com testignore@amnimal.ninja ian@iankelling.org z@zroe.org iank@gnu.org)
       if ! $int; then
-        timeout 120 rsync --chown iank:iank -e "ssh -oIdentitiesOnly=yes -F /dev/null -i /root/.ssh/jtuttle" -t --inplace -r 'jtuttle@fencepost.gnu.org:/home/j/jtuttle/Maildir/new/' /m/md/l/testignore/new
+        ### begin rsyncing fencepost email ###
+        # We dont want to exit if rsync fails, that will get caught by
+        # our later test by virtue of not having the latest email.
+        did_rsync=false
+        try_start_time=$EPOCHSECONDS
+        try_limit=140 # somewhat arbitrary value
+        while ! $did_rsync; do
+          try_left=$(( try_limit - ( EPOCHSECONDS - try_start_time) ))
+          timeout=120 # somewhat arbitrary value
+          if (( try_left < 0 )); then
+            break
+          fi
+          if (( try_left < timeout )); then
+            timeout=$try_left
+          fi
+          if timeout $timeout rsync --chown iank:iank -e "ssh -oIdentitiesOnly=yes -F /dev/null -i /root/.ssh/jtuttle" -t --inplace -r 'jtuttle@fencepost.gnu.org:/home/j/jtuttle/Maildir/new/' /m/md/l/testignore/new; then
+            did_rsync=true
+          else
+            sleep 4
+          fi
+        done
+        if ! $did_rsync; then
+          echo mailtest-check: warning: fencepost rsync failed
+        fi
+        ### end rsyncing fencepost email ###
       fi
       ;;
   esac
@@ -138,6 +162,7 @@ EOF
           last_sec="$file_sec"
         fi
       done <$tmpfile
+      rm -f $tmpfile
 
       to=$(awk '/^Envelope-to: / {print $2}' $latest)
 
@@ -237,12 +262,21 @@ EOF
             #fi
           fi
           rm -f $resultfile
-          unexpected=$(( unexpected + ${#results[@]} ))
+          for r in ${results[@]}; do
+            case $r in
+              DKIM_INVALID|T_SPF_TEMPERROR|T_SPF_HELO_TEMPERROR)
+                missing_dnswl+=1
+                ;;
+              *)
+                unexpected=$(( unexpected + 1 ))
+                ;;
+            esac
+          done
           for miss in ${missing[@]}; do
-            # We expect dns reputation services to go down from time to time, so
+            # We expect dns failures from time to time, so
             # we count them separately and alert differently.
             case $miss in
-              RCVD_IN_DNSWL_MED|DKIMWL_WL_HIGH)
+              DKIM_VALID|DKIM_VALID_AU|DKIM_VALID_EF|SPF_HELO_PASS|SPF_PASS|RCVD_IN_DNSWL_MED|DKIMWL_WL_HIGH)
                 missing_dnswl+=1
                 ;;
               *)