Skip to content

Commit 82e893a

Browse files
committed
Log what the DBL answers the test resolver before sending fixtures
reverse and ldap2 run with DISABLE_DNS_RESOLVER=true and query dbl.spamhaus.org through whatever resolver the host provides. Spamhaus refuses some resolvers with 127.255.255.254, which the unqualified reject_rhsbl_sender in main.cf treats as a listing, so every fixture sender is rejected and the suite fails in ways that name delivery, rspamd and zeyple rather than DNS. A passing run recorded nothing about the blocklist at all, so it could not be told apart from a run where the DBL answered nothing. fixtures_reverse, fixtures_ldap2 and fixtures_default (the unbound control) now print, before any mail is sent, the DNS status, A and TXT answers for dbltest.com (the permanent test listing), gmail.com (the fixtures' sender domain, the name postfix actually looks up) and example.com (unlisted): 127.0.1.2 healthy 127.255.255.254 refused; the TXT names the address Spamhaus refused NXDOMAIN answered nothing; the blocklist is inert The probe is diagnostic only and cannot fail a run.
1 parent fd3903c commit 82e893a

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

Makefile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@ WAIT_TIMEOUT = 300
1414
TEST_DNS ?=
1515
DNS_FLAG = $(if $(TEST_DNS),--dns $(TEST_DNS),)
1616

17+
# Log what dbl.spamhaus.org answers the container's resolver, before any mail
18+
# is sent. reverse and ldap2 inherit the host resolver, so the answer depends
19+
# on where the suite runs; without this line a refused resolver shows up only
20+
# as unexplained delivery failures, and a run that passed says nothing about
21+
# whether the blocklist answered at all.
22+
# dbltest.com -> 127.0.1.2 the permanent test listing: the blocklist works
23+
# dbltest.com -> 127.255.255.x this resolver is refused: every sender gets rejected
24+
# dbltest.com -> (nothing) answered nothing: the blocklist is inert
25+
# gmail.com -> (nothing) the fixtures' sender domain, the name postfix actually looks up
26+
# example.com -> (nothing) expected, it is not listed
27+
define dnsbl_probe
28+
-@docker exec $(1) sh -c 'for q in dbltest.com.dbl.spamhaus.org gmail.com.dbl.spamhaus.org example.com.dbl.spamhaus.org; do out=$$(dig +time=3 +tries=1 +noall +comments +answer A $$q 2>&1); st=$$(printf "%s\n" "$$out" | sed -n "s/.*status: \([A-Z]*\).*/\1/p" | head -1); [ -z "$$st" ] && st=unreachable; a=$$(printf "%s\n" "$$out" | grep "[[:space:]]A[[:space:]]" | sed "s/.*[[:space:]]//" | tr "\n" "," | sed "s/,$$//"); [ -z "$$a" ] && a=-; t=$$(dig +short +time=3 +tries=1 TXT $$q 2>/dev/null | grep "^\"" | head -1); [ -z "$$t" ] && t=-; printf "[dnsbl] %-32s status=%-11s A=%-16s %s\n" "$$q" "$$st" "$$a" "$$t"; done'
29+
endef
30+
1731
all: build-no-cache default reverse ldap ldap2 sieve ecdsa traefik_acmev1 traefik_acmev2 clean
1832
no-build: default reverse ldap ldap2 sieve ecdsa traefik_acmev1 traefik_acmev2 clean
1933
default: init_default fixtures_default run_default stop_default
@@ -232,6 +246,7 @@ fixtures_ldap2:
232246
docker exec mailserver_ldap2 /bin/sh -c "while ! echo PING | nc -z 0.0.0.0 11332 ; do sleep 1 ; done" # rspamd
233247
docker exec mailserver_ldap2 /bin/sh -c "while ! echo PING | nc -z 0.0.0.0 993 ; do sleep 1 ; done" # dovecot imaps
234248
docker exec mailserver_ldap2 /bin/sh -c "while ! echo PING | nc -z 0.0.0.0 587 ; do sleep 1 ; done" # submission
249+
$(call dnsbl_probe,mailserver_ldap2)
235250
docker exec mailserver_ldap2 /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-existing-user.txt"
236251
docker exec mailserver_ldap2 /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-valid-user-subaddress.txt"
237252
docker exec mailserver_ldap2 /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-non-existing-user.txt"
@@ -321,6 +336,7 @@ fixtures_reverse:
321336
docker exec mailserver_reverse /bin/sh -c "while ! echo PING | nc -z 0.0.0.0 11332 ; do sleep 1 ; done" # rspamd
322337
docker exec mailserver_reverse /bin/sh -c "while ! echo PING | nc -z 0.0.0.0 993 ; do sleep 1 ; done" # dovecot imaps
323338
docker exec mailserver_reverse /bin/sh -c "while ! echo PING | nc -z 0.0.0.0 587 ; do sleep 1 ; done" # submission
339+
$(call dnsbl_probe,mailserver_reverse)
324340
docker exec mailserver_reverse /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-existing-user.txt"
325341
docker exec mailserver_reverse /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-valid-user-subaddress-with-default-separator.txt"
326342
docker exec mailserver_reverse /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-non-existing-user.txt"
@@ -423,6 +439,7 @@ fixtures_default:
423439
# Wait for rspamd to start (default)
424440
docker exec mailserver_default /bin/sh -c "while ! echo PING | nc -z 0.0.0.0 11332 ; do sleep 1 ; done"
425441

442+
$(call dnsbl_probe,mailserver_default)
426443
docker exec mailserver_default /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-existing-user.txt"
427444
docker exec mailserver_default /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-existing-user-spam-learning.txt"
428445
docker exec mailserver_default /bin/sh -c "python3 /tmp/tests/smtp-send.py 0.0.0.0 25 /tmp/tests/email-templates/external-to-valid-user-subaddress.txt"

0 commit comments

Comments
 (0)