#!/bin/bash
set -e
## Usage:
##   ./mailman-check
## Checks all the mailman lists for bad configuration, and prints further details if it finds one.

for list in $(list_lists -b); do
    /usr/sbin/config_list -c -i /dev/stdin "$list" <<EOF
if not ((mlist.dmarc_moderation_action in (1, 2) and mlist.dmarc_quarantine_moderation_action == 1) or mlist.from_is_list in (1, 2)):
    print "List",mlist.real_name,"by",(', '.join(mlist.owner)),"is not configured to deal with DMARC."
if mlist.reply_goes_to_list != 0 and not mlist.first_strip_reply_to:
    print "List",mlist.real_name,"by",(', '.join(mlist.owner)),"provides an inconsistent Reply-To treatment."
if mlist.generic_nonmember_action == 2:
    print "List",mlist.real_name,"by",(', '.join(mlist.owner)),"is prone to backscatter spam due to reject notifications"
if mlist.generic_nonmember_action == 1 and mlist.respond_to_post_requests:
    print "List",mlist.real_name,"by",(', '.join(mlist.owner)),"is prone to backscatter spam due to hold notifications"
if mlist.bounce_unrecognized_goes_to_list_owner:
    print "List",mlist.real_name,"by",(', '.join(mlist.owner)),"may spam the owner with unrecognized bounce notifications"
EOF
done
