File: //scripts/postwwwacct
#!/bin/bash
LOG="/tmp/postwwwacct_dmarc.log"
echo "===== RUN @ $(/usr/bin/date) =====" >> "$LOG"
echo "ARGS: $*" >> "$LOG"
# Extract domain from key/value list
DOMAIN="$(echo "$*" | /usr/bin/awk '{for(i=1;i<=NF;i++){if($i=="domain"){print $(i+1); exit}}}')"
USER="$(echo "$*" | /usr/bin/awk '{for(i=1;i<=NF;i++){if($i=="user"){print $(i+1); exit}}}')"
echo "DOMAIN: $DOMAIN" >> "$LOG"
# If domain missing, exit quietly
[ -z "$DOMAIN" ] && echo "NO DOMAIN FOUND — EXITING" >> "$LOG" && exit 0
# Your desired DMARC policy
DMARC='v=DMARC1; p=quarantine; sp=quarantine; adkim=r; aspf=r; pct=100; fo=1; rf=afrf; ri=86400; rua=mailto:dmarc@cnstx.net; ruf=mailto:dmarc@cnstx.net'
echo "DMARC: $DMARC" >> "$LOG"
# Dump zone JSON
ZONE_JSON="$(/usr/local/cpanel/bin/whmapi1 dumpzone domain="$DOMAIN" --output=json 2>/dev/null)"
# Remove all existing DMARC records
echo "$ZONE_JSON" \
| /usr/bin/jq -r '.data.zone[].record[] | select(.name != null) | select((.name | tostring | ascii_downcase) | contains("_dmarc")) | .Line' \
| while read -r LINE; do
echo "Removing DMARC line: $LINE" >> "$LOG"
/usr/local/cpanel/bin/whmapi1 removezonerecord domain="$DOMAIN" line="$LINE" >/dev/null 2>&1
done
# Add your strict DMARC record
echo "Adding DMARC record…" >> "$LOG"
/usr/local/cpanel/bin/whmapi1 addzonerecord domain="$DOMAIN" name="_dmarc.${DOMAIN}." type="TXT" ttl="3600" txtdata="$DMARC" >/dev/null 2>&1
echo "DONE" >> "$LOG"
exit 0