#!/usr/bin/env bash # TODO=631: g0v mon-* Kreis-Test (local circle via pepsi TRUST_LOOPBACK / :25). # Inject via koopa container loopback :25. Empfang = Maildir MARK grep. # Real OS users (ensure-mon-users.sh): mon-smtp maildir dkim bounce local. # No secrets. Freigabe-free (local inject only). set -euo pipefail KOOPA_HOST="${KOOPA_HOST:-koopa}" CONTAINER="${PEPSI_CONTAINER:-koopa-pepsi}" OUTDIR="${HOME}/git/llm/llm-work-input" MARK="${MARK:-$(date +%Y%m%dT%H%M%S%z)-kreis}" USERS=(mon-smtp mon-maildir mon-dkim mon-bounce mon-local) DRAIN_SEC="${DRAIN_SEC:-6}" echo "STATUS=start MARK=${MARK} CONTAINER=${CONTAINER} N=${#USERS[@]}" # --- preflight: users exist --- for u in "${USERS[@]}"; do ssh -o BatchMode=yes "${KOOPA_HOST}" \ "podman exec ${CONTAINER} getent passwd ${u}" >/dev/null \ || { echo "STATUS=fail PREFLIGHT user=${u} missing"; exit 2; } done echo "STATUS=preflight USERS_OK=${#USERS[@]}" # --- send circle: each → next --- SEND_PY=$(mktemp) trap 'rm -f "${SEND_PY}"' EXIT { echo 'import smtplib, time, sys' echo 'from email.message import EmailMessage' echo "MARK = ${MARK@Q}" echo -n 'USERS = [' for u in "${USERS[@]}"; do printf '%s,' "${u@Q}"; done echo ']' cat <<'PY' ok = fail = 0 n = len(USERS) for i, u in enumerate(USERS): to_u = USERS[(i + 1) % n] frm = f"{u}@g0v.ch" to = f"{to_u}@g0v.ch" msg = EmailMessage() msg["From"] = frm msg["To"] = to msg["Subject"] = f"[pepsi-kreis] TODO631 {i+1}/{n} {MARK}" msg["Message-ID"] = f""${SEND_PY}" ssh -o BatchMode=yes "${KOOPA_HOST}" "podman exec -i ${CONTAINER} python3 -" <"${SEND_PY}" echo "MARK=${MARK}" >"${OUTDIR}/todo631-kreis.stamp" sleep "${DRAIN_SEC}" # --- Maildir HIT per recipient (next-hop of each sender) --- OUT="${OUTDIR}/todo631-kreis-test.txt" { echo "STATUS=ok MARK=kreis-test TODO=631 TS=$(date -Iseconds)" echo "MARK_PROBE=${MARK} USERS=$(IFS=,; echo "${USERS[*]}")" echo "SEND=via container :25 loopback" echo "EXPECT=each user MARK_HITS>=1 (circle next-hop)" echo "NOTE_vacation=PONG may also land; SPF-fail path skips vacation" } >"${OUT}" HIT_TOTAL=0 MISS=0 for u in "${USERS[@]}"; do hits=$(ssh -o BatchMode=yes "${KOOPA_HOST}" \ "podman exec ${CONTAINER} bash -c 'grep -lF ${MARK@Q} /home/${u}/Maildir/new/* /home/${u}/Maildir/cur/* 2>/dev/null | wc -l'" \ | tr -d '[:space:]') hits=${hits:-0} echo "HIT_${u}=${hits}" | tee -a "${OUT}" if [[ "${hits}" -ge 1 ]]; then HIT_TOTAL=$((HIT_TOTAL + 1)) else MISS=$((MISS + 1)) fi done if [[ "${MISS}" -eq 0 ]]; then echo "STATUS=PASS HIT_USERS=${HIT_TOTAL}/5 MARK=${MARK}" | tee -a "${OUT}" exit 0 fi echo "STATUS=PARTIAL HIT_USERS=${HIT_TOTAL}/5 MISS=${MISS} MARK=${MARK}" | tee -a "${OUT}" exit 1