#!/bin/bash set -e . "$(dirname "$0")/../util/lib.sh" init check_hostaliases rm -rf .data-primary .data-secondary .data-external .mail rm -f {primary,secondary,external}/domains/*/dkim:*.pem # Build with the DNS override, so we can fake DNS records. export GOTAGS="dnsoverride" # Two servers for the same domain "dodo": # primary - listens on 127.0.0.10:1025 # secondary - listens on 127.0.0.11:1025 # # One server for domain "kiwi": # external - listens on 127.0.0.20:1025 CONFDIR=primary generate_certs_for primary CONFDIR=primary add_user user111@dodo user111 CONFDIR=primary chasquid-util dkim-keygen --algo=ed25519 \ dodo sel-primary-1 > /dev/null CONFDIR=secondary generate_certs_for secondary CONFDIR=secondary add_user user222@dodo user222 CONFDIR=secondary chasquid-util dkim-keygen --algo=ed25519 \ dodo sel-secondary-1 > /dev/null CONFDIR=external generate_certs_for external CONFDIR=external add_user user333@kiwi user333 CONFDIR=external chasquid-util dkim-keygen --algo=ed25519 \ kiwi sel-external-1 > /dev/null # Launch minidns in the background using our configuration. # Augment the zones with the dkim ones. cp zones .zones { CONFDIR=primary chasquid-util dkim-dns dodo | sed 's/"//g' CONFDIR=secondary chasquid-util dkim-dns dodo | sed 's/"//g' CONFDIR=external chasquid-util dkim-dns kiwi | sed 's/"//g' } >> .zones minidns_bg --addr=":9053" -zones=.zones >> .minidns.log 2>&1 mkdir -p .logs chasquid -v=2 --logfile=.logs/primary-chasquid.log --config_dir=primary \ --testing__dns_addr=127.0.0.1:9053 \ --testing__outgoing_smtp_port=1025 & chasquid -v=2 --logfile=.logs/secondary-chasquid.log --config_dir=secondary \ --testing__dns_addr=127.0.0.1:9053 \ --testing__outgoing_smtp_port=1025 & chasquid -v=2 --logfile=.logs/external-chasquid.log --config_dir=external \ --testing__dns_addr=127.0.0.1:9053 \ --testing__outgoing_smtp_port=1025 & wait_until "true < /dev/tcp/127.0.0.10/1025" 2>/dev/null wait_until "true < /dev/tcp/127.0.0.11/1025" 2>/dev/null wait_until "true < /dev/tcp/127.0.0.20/1025" 2>/dev/null wait_until_ready 9053 # Connect to secondary, send an email to user111@dodo (which exists only in # the primary). It should be forwarded to the primary. # Note this also verifies SRS is correct (by comparing the Received headers), # and that DKIM signatures are generated by secondary, and successfully # validated by primary. smtpc -c=smtpc-secondary.conf user111@dodo < content wait_for_file .mail/primary:user111@dodo mail_diff expected-primary-user111@dodo .mail/primary:user111@dodo # Connect to the secondary, send an email to user333@kiwi (which exists only # in external). It should be DKIM signed and delivered to the external server. # This is a normal delivery. smtpc -c=smtpc-secondary.conf user333@kiwi < content wait_for_file .mail/external:user333@kiwi mail_diff expected-external-user333@kiwi .mail/external:user333@kiwi # Connect to the secondary, send an email to chain-1@dodo, which has a long # alias chain: # secondary: chain-1-1@dodo -> chain-1-2@dodo via primary # primary: chain-1-2@dodo -> chain-1-3@kiwi # external: chain-1-3@kiwi -> chain-1-4@dodo via secondary # secondary: chain-1-4@dodo -> chain-1-5@dodo via primary # primary: chain-1-5@dodo -> user111@dodo rm .mail/primary:user111@dodo smtpc -c=smtpc-secondary.conf chain-1-1@dodo < content wait_for_file .mail/primary:user111@dodo mail_diff expected-chain-1 .mail/primary:user111@dodo success