#!/bin/sh

# Reports parameter names that have no postlink rules.

LANG=C; export LANG
LC_ALL=C; export LC_ALL

trap 'rm -f postlink.tmp postconf.tmp stoplist.tmp 2>/dev/null' 0 1 2 3 15

# Extract parameters from postlink script. This also produces names
# of obsolete parameters, and non-parameter names such as SMTPD
# access restrictions and mask names.

sed -n '/[ 	].*href="postconf\.5\.html#/{
	s/^[^#]*#//
	s/".*//
	p
}' mantools/postlink | sort > postlink.tmp

# Extract parameters from postconf output, using the stock configurations.

bin/postconf -dHc conf | sort >postconf.tmp

# Filter the postconf output through a stoplist. First, parameter
# names prefixed by their service name.

for xport in error lmtp local relay retry smtp virtual
do
   cat <<EOF
${xport}_delivery_slot_cost
${xport}_delivery_slot_discount
${xport}_delivery_slot_loan
${xport}_destination_concurrency_failed_cohort_limit
${xport}_destination_concurrency_limit
${xport}_destination_concurrency_negative_feedback
${xport}_destination_concurrency_positive_feedback
${xport}_destination_rate_delay
${xport}_destination_recipient_limit
${xport}_extra_recipient_limit
${xport}_initial_destination_concurrency
${xport}_minimum_delivery_slots
${xport}_recipient_limit
${xport}_recipient_refill_delay
${xport}_recipient_refill_limit
${xport}_transport_rate_delay
EOF
done >stoplist.tmp

# Second, pseudo parameters, read-only parameters, etc.

cat >>stoplist.tmp <<'EOF'
stress
EOF

# Report names from postconf that have no rule in mantools/postlink.

comm -23 postconf.tmp postlink.tmp | grep -F -vx -f stoplist.tmp
