distro specific fixes
[distro-setup] / mailtest-check
index 034dfc6b45a7d6c72413fc2a70537fe1ca7d5182..9f37cb94ab6513352295c0e5debdcf8a24bba540 100755 (executable)
 # limitations under the License.
 
 
-# Usage: mail-test-check [slow] [int|nonint]
+# Usage: mailtest-check [slow] [int|nonint]
 #
 # slow: do slow checks, like spamassassin
 #
 # for  non-interactive, dont print unless something went
 # wrong
 
+#set -x
 
-source /b/bash-bear-trap/bash-bear
 
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
+source /b/bash-bear-trap/bash-bear
+
 shopt -s nullglob
 
 e() { $int || return 0; printf "mailtest-check: %s\n" "$*"; }
@@ -40,8 +42,8 @@ e() { $int || return 0; printf "mailtest-check: %s\n" "$*"; }
 getspamdpid() {
   if [[ ! $spamdpid || ! -d /proc/$spamdpid ]]; then
     # try twice in case we are restarting, it happens.
-    for i in 1 2; do
-      spamdpid=$(systemctl show --property MainPID --value spamassassin | sed 's/^[10]$//' ||:)
+    for (( i=0; i<2; i++ )); do
+      spamdpid=$(systemctl show --property MainPID --value $spamd_ser | sed 's/^[10]$//' ||:)
       if [[ $spamdpid ]]; then
         break
       fi
@@ -83,6 +85,13 @@ fi
 # TODO, get je to deliver the local mailbox: /m/md/INBOX
 # dovecot appears to setup, i can t be sure.
 
+maini=0
+
+spamd_ser=spamd
+if systemctl cat spamassassin &>/dev/null; then
+  spamd_ser=spamassassin
+fi
+
 source /a/bin/bash_unpublished/source-state
 
 doprom=false
@@ -109,7 +118,11 @@ main() {
       ;;
     *)
       folders=(/m/md/l/testignore)
-      froms=(testignore@je.b8.nz testignore@expertpathologyreview.com testignore@amnimal.ninja ian@iankelling.org z@zroe.org)
+      # save some cpu cycles
+      froms=(testignore@je.b8.nz ian@iankelling.org)
+      if (( maini % 10 == 0 )); then
+        froms=(testignore@je.b8.nz testignore@expertpathologyreview.com testignore@amnimal.ninja ian@iankelling.org z@zroe.org)
+      fi
       if ! $int; then
         ### begin rsyncing fencepost email ###
         # We dont want to exit if rsync fails, that will get caught by
@@ -158,8 +171,8 @@ EOF
   fi
   e spamdpid: $spamdpid
   if [[ ! $spamdpid ]]; then
-    echo mailtest spamd pid not found. systemctl status spamassassin:
-    systemctl status spamassassin
+    echo mailtest spamd pid not found. systemctl status $spamd_ser:
+    systemctl status $spamd_ser
   fi
   tmpfile=$(mktemp)
   declare -i unexpected=0
@@ -203,13 +216,17 @@ EOF
           # example line that sed is parsing:
           # (-0.1 / 5.0 requ) DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,SPF_HELO_PASS=-0.001,SPF_PASS=-0.001,TVD_SPACE_RATIO=0.001 autolearn=_AUTOLEARN
           resultfile=$(mktemp)
-          $spamcpre sudo -u Debian-exim spamassassin -D -t --cf='score PYZOR_CHECK 0' <"$latest" &>$resultfile
+          # add -D for debug info. usually it
+          $spamcpre sudo -u Debian-exim spamassassin -t --cf='score PYZOR_CHECK 0' <"$latest" &>$resultfile
 
           # note: on some mail, its 1 line after the send-test-forward, on others its 2 with a blank inbetween.
           # I use the sed -n to filter this.
           raw_results="$(tail $resultfile | grep -A2 -Fx /usr/local/bin/send-test-forward | tail -n+2 | sed -nr 's/^\([^)]*\) *//;s/=[^, ]*([, ]|$)/ /gp')"
           for r in $raw_results; do
             case $r in
+              # This came in t12, but its just dkim + spf, and my
+              # systems aren't all t12, so ignore it for now.
+              DMARC_PASS) : ;;
               # got this in an update 2022-01. dun care
               T_SCC_BODY_TEXT_LINE|SCC_BODY_SINGLE_WORD) : ;;
               # we have a new domain, ignore this.
@@ -328,7 +345,7 @@ EOF
   if $doprom && [[ -e $dir  ]]; then
     for l in "${p_unexpected_spamd_results[@]}"; do
       printf "%s\n" "$l" >>$path
-      done
+    done
     for l in "${p_missing_dnswl[@]}"; do
       printf "%s\n" "$l" >>$path
     done
@@ -347,12 +364,13 @@ loop-main() {
   while true; do
     premain_sec=$EPOCHSECONDS
     main
+    maini=$((maini + 1))
     sleep $(( 300 - ( EPOCHSECONDS - premain_sec ) ))
   done
 }
 
 
-if [[ $INVOCATION_ID ]]; then
+if [[ $PPID == 1 ]]; then
   loop-main
 else
   main