mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-20 15:07:03 +00:00
This patch implements the first steps of support for IDNA (Internationalized Domain Names for Applications). Internally, we maintain the byte-agnostic representation, including configuration. We support receiving IDNA mail over SMTP, which we convert to unicode for internal handling. Local deliveries are still kept agnostic. For sending over SMTP, we use IDNA for DNS resolution, but there are some corner cases pending in the SMTP courier that are tied with SMTPUTF8 and will be fixed in subsequent patches.
110 lines
2.3 KiB
Bash
110 lines
2.3 KiB
Bash
# Library to write the shell scripts in the tests.
|
|
|
|
function init() {
|
|
if [ "$V" == "1" ]; then
|
|
set -v
|
|
fi
|
|
|
|
export TBASE="$(realpath `dirname ${0}`)"
|
|
cd ${TBASE}
|
|
|
|
export UTILDIR="$(realpath ${TBASE}/../util/)"
|
|
|
|
if [ "${RACE}" == "1" ]; then
|
|
RACE="-race"
|
|
fi
|
|
|
|
# Remove the directory where test-mda will deliver mail, so previous
|
|
# runs don't interfere with this one.
|
|
rm -rf .mail
|
|
|
|
# Set traps to kill our subprocesses when we exit (for any reason).
|
|
# https://stackoverflow.com/questions/360201/
|
|
trap "exit" INT TERM
|
|
trap "kill 0" EXIT
|
|
}
|
|
|
|
function generate_cert() {
|
|
go run ${UTILDIR}/generate_cert.go "$@"
|
|
}
|
|
|
|
function chasquid() {
|
|
# HOSTALIASES: so we "fake" hostnames.
|
|
# PATH: so chasquid can call test-mda without path issues.
|
|
# MDA_DIR: so our test-mda knows where to deliver emails.
|
|
HOSTALIASES=${TBASE}/hosts \
|
|
PATH=${UTILDIR}:${PATH} \
|
|
MDA_DIR=${TBASE}/.mail \
|
|
go run ${RACE} ${TBASE}/../../chasquid.go "$@"
|
|
}
|
|
|
|
function add_user() {
|
|
CONFDIR="${CONFDIR:-config}"
|
|
mkdir -p "${CONFDIR}/domains/${1}/"
|
|
go run ${TBASE}/../../cmd/chasquid-util/chasquid-util.go \
|
|
adduser "${CONFDIR}/domains/${1}/users" "${2}" \
|
|
--password "${3}" \
|
|
>> .add_user_logs
|
|
}
|
|
|
|
function run_msmtp() {
|
|
# msmtp will check that the rc file is only user readable.
|
|
chmod 600 msmtprc
|
|
|
|
HOSTALIASES=${TBASE}/hosts \
|
|
msmtp -C msmtprc "$@"
|
|
}
|
|
|
|
function smtpc.py() {
|
|
${UTILDIR}/smtpc.py "$@"
|
|
}
|
|
|
|
function mail_diff() {
|
|
${UTILDIR}/mail_diff "$@"
|
|
}
|
|
|
|
function success() {
|
|
echo "SUCCESS"
|
|
}
|
|
|
|
function skip() {
|
|
echo "SKIPPED" $*
|
|
}
|
|
|
|
# Wait until there's something listening on the given port.
|
|
function wait_until_ready() {
|
|
PORT=$1
|
|
|
|
while ! nc -z localhost $PORT; do
|
|
sleep 0.1
|
|
done
|
|
}
|
|
|
|
# Wait for the given file to exist.
|
|
function wait_for_file() {
|
|
while ! [ -e ${1} ]; do
|
|
sleep 0.1
|
|
done
|
|
}
|
|
|
|
# Generate certs for the given hostname.
|
|
function generate_certs_for() {
|
|
CONFDIR="${CONFDIR:-config}"
|
|
mkdir -p ${CONFDIR}/certs/${1}/
|
|
(
|
|
cd ${CONFDIR}/certs/${1}
|
|
generate_cert -ca -duration=1h -host=${1}
|
|
)
|
|
}
|
|
|
|
# Check the Python version, and skip if it's too old.
|
|
# This will check against the version required for smtpc.py.
|
|
function skip_if_python_is_too_old() {
|
|
# We need Python >= 3.5 to be able to use SMTPUTF8.
|
|
check='import sys; sys.exit(0 if sys.version_info >= (3, 5) else 1)'
|
|
if ! python3 -c "${check}"; then
|
|
skip "python3 >= 3.5 not available"
|
|
exit 0
|
|
fi
|
|
}
|