mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
setup.sh: docker_container first, then fall back to docker_image (#2134)
* docker_container first, then fall back to docker_image + test changes to support + test change to wait for smtp port to fix flakey tests since https://github.com/docker-mailserver/docker-mailserver/pull/2104 * quick fix * Update setup.sh Co-authored-by: Georg Lauterbach <44545919+georglauterbach@users.noreply.github.com> Co-authored-by: Casper <casperklein@users.noreply.github.com>
This commit is contained in:
parent
317f3e41c2
commit
0da66ccb34
62
setup.sh
62
setup.sh
|
@ -61,7 +61,6 @@ CONTAINER_NAME=
|
||||||
DEFAULT_CONFIG_PATH="${DIR}/config"
|
DEFAULT_CONFIG_PATH="${DIR}/config"
|
||||||
IMAGE_NAME=
|
IMAGE_NAME=
|
||||||
INFO=
|
INFO=
|
||||||
USE_CONTAINER=false
|
|
||||||
USE_TTY=
|
USE_TTY=
|
||||||
USE_SELINUX=
|
USE_SELINUX=
|
||||||
VOLUME=
|
VOLUME=
|
||||||
|
@ -126,9 +125,11 @@ ${ORANGE}DESCRIPTION${RESET}
|
||||||
This is the main administration script that you use for all interactions with your
|
This is the main administration script that you use for all interactions with your
|
||||||
mail server. Setup, configuration and much more is done with this script.
|
mail server. Setup, configuration and much more is done with this script.
|
||||||
|
|
||||||
Please note that the script executes most of the commands inside the container itself.
|
Please note that this script executes most of its commands inside the running 'mailserver' container itself.
|
||||||
If the image was not found, this script will pull the ${WHITE}:latest${RESET} tag of
|
If it cannot find a running container, it will attempt to run one using any available tags
|
||||||
${WHITE}mailserver/docker-mailserver${RESET}. This tag refers to the latest release,
|
which include label=org.opencontainers.image.title=\"docker-mailserver\" and then run the necessary commands.
|
||||||
|
If the tag for the container is not found, this script will pull the ${WHITE}:latest${RESET} tag of
|
||||||
|
${WHITE}docker.io/mailserver/docker-mailserver${RESET}. This tag refers to the latest release,
|
||||||
see the tagging convention in the README under
|
see the tagging convention in the README under
|
||||||
${BLUE}https://github.com/docker-mailserver/docker-mailserver/blob/master/README.md${RESET}
|
${BLUE}https://github.com/docker-mailserver/docker-mailserver/blob/master/README.md${RESET}
|
||||||
|
|
||||||
|
@ -155,7 +156,7 @@ ${ORANGE}OPTIONS${RESET}
|
||||||
Provides the name of the running container.
|
Provides the name of the running container.
|
||||||
|
|
||||||
-p PATH
|
-p PATH
|
||||||
Provides the config folder path. The default is
|
Provides the config folder path to the temporary container (does not work if docker-mailserver container already exists). The default is
|
||||||
${WHITE}${DIR}/config/${RESET}
|
${WHITE}${DIR}/config/${RESET}
|
||||||
|
|
||||||
${LBLUE}SELinux${RESET}
|
${LBLUE}SELinux${RESET}
|
||||||
|
@ -228,22 +229,16 @@ function _docker_image_exists
|
||||||
|
|
||||||
function _docker_image
|
function _docker_image
|
||||||
{
|
{
|
||||||
if ${USE_CONTAINER}
|
# start temporary container with specified image
|
||||||
|
if ! _docker_image_exists "${IMAGE_NAME}"
|
||||||
then
|
then
|
||||||
# reuse existing container specified on command line
|
echo "Image '${IMAGE_NAME}' not found. Pulling ..."
|
||||||
${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" "${@:+$@}"
|
${CRI} pull "${IMAGE_NAME}"
|
||||||
else
|
|
||||||
# start temporary container with specified image
|
|
||||||
if ! _docker_image_exists "${IMAGE_NAME}"
|
|
||||||
then
|
|
||||||
echo "Image '${IMAGE_NAME}' not found. Pulling ..."
|
|
||||||
${CRI} pull "${IMAGE_NAME}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
${CRI} run --rm \
|
|
||||||
-v "${CONFIG_PATH}:/tmp/docker-mailserver${USE_SELINUX}" \
|
|
||||||
"${USE_TTY}" "${IMAGE_NAME}" "${@:+$@}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
${CRI} run --rm \
|
||||||
|
-v "${CONFIG_PATH}:/tmp/docker-mailserver${USE_SELINUX}" \
|
||||||
|
"${USE_TTY}" "${IMAGE_NAME}" "${@:+$@}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function _docker_container
|
function _docker_container
|
||||||
|
@ -252,8 +247,8 @@ function _docker_container
|
||||||
then
|
then
|
||||||
${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" "${@:+$@}"
|
${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" "${@:+$@}"
|
||||||
else
|
else
|
||||||
echo "The mailserver is not running!"
|
# If no container yet, run a temporary one: https://github.com/docker-mailserver/docker-mailserver/pull/1874#issuecomment-809781531
|
||||||
exit 1
|
_docker_image "${@:+$@}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,7 +297,6 @@ function _main
|
||||||
c )
|
c )
|
||||||
# container specified, connect to running instance
|
# container specified, connect to running instance
|
||||||
CONTAINER_NAME="${OPTARG}"
|
CONTAINER_NAME="${OPTARG}"
|
||||||
USE_CONTAINER=true
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
p )
|
p )
|
||||||
|
@ -346,8 +340,8 @@ function _main
|
||||||
|
|
||||||
email )
|
email )
|
||||||
case ${2:-} in
|
case ${2:-} in
|
||||||
add ) shift 2 ; _docker_image addmailuser "${@:+$@}" ;;
|
add ) shift 2 ; _docker_container addmailuser "${@:+$@}" ;;
|
||||||
update ) shift 2 ; _docker_image updatemailuser "${@:+$@}" ;;
|
update ) shift 2 ; _docker_container updatemailuser "${@:+$@}" ;;
|
||||||
del ) shift 2 ; _docker_container delmailuser "${@:+$@}" ;;
|
del ) shift 2 ; _docker_container delmailuser "${@:+$@}" ;;
|
||||||
restrict ) shift 2 ; _docker_container restrict-access "${@:+$@}" ;;
|
restrict ) shift 2 ; _docker_container restrict-access "${@:+$@}" ;;
|
||||||
list ) _docker_container listmailuser ;;
|
list ) _docker_container listmailuser ;;
|
||||||
|
@ -357,40 +351,40 @@ function _main
|
||||||
|
|
||||||
alias )
|
alias )
|
||||||
case ${2:-} in
|
case ${2:-} in
|
||||||
add ) shift 2 ; _docker_image addalias "${1}" "${2}" ;;
|
add ) shift 2 ; _docker_container addalias "${1}" "${2}" ;;
|
||||||
del ) shift 2 ; _docker_image delalias "${1}" "${2}" ;;
|
del ) shift 2 ; _docker_container delalias "${1}" "${2}" ;;
|
||||||
list ) shift 2 ; _docker_image listalias ;;
|
list ) shift 2 ; _docker_container listalias ;;
|
||||||
* ) _usage ;;
|
* ) _usage ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
quota )
|
quota )
|
||||||
case ${2:-} in
|
case ${2:-} in
|
||||||
set ) shift 2 ; _docker_image setquota "${@:+$@}" ;;
|
set ) shift 2 ; _docker_container setquota "${@:+$@}" ;;
|
||||||
del ) shift 2 ; _docker_image delquota "${@:+$@}" ;;
|
del ) shift 2 ; _docker_container delquota "${@:+$@}" ;;
|
||||||
* ) _usage ;;
|
* ) _usage ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
config )
|
config )
|
||||||
case ${2:-} in
|
case ${2:-} in
|
||||||
dkim ) shift 2 ; _docker_image open-dkim "${@:+$@}" ;;
|
dkim ) shift 2 ; _docker_container open-dkim "${@:+$@}" ;;
|
||||||
* ) _usage ;;
|
* ) _usage ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
relay )
|
relay )
|
||||||
case ${2:-} in
|
case ${2:-} in
|
||||||
add-domain ) shift 2 ; _docker_image addrelayhost "${@:+$@}" ;;
|
add-domain ) shift 2 ; _docker_container addrelayhost "${@:+$@}" ;;
|
||||||
add-auth ) shift 2 ; _docker_image addsaslpassword "${@:+$@}" ;;
|
add-auth ) shift 2 ; _docker_container addsaslpassword "${@:+$@}" ;;
|
||||||
exclude-domain ) shift 2 ; _docker_image excluderelaydomain "${@:+$@}" ;;
|
exclude-domain ) shift 2 ; _docker_container excluderelaydomain "${@:+$@}" ;;
|
||||||
* ) _usage ;;
|
* ) _usage ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
debug )
|
debug )
|
||||||
case ${2:-} in
|
case ${2:-} in
|
||||||
fetchmail ) _docker_image debug-fetchmail ;;
|
fetchmail ) _docker_container debug-fetchmail ;;
|
||||||
fail2ban ) shift 2 ; _docker_container fail2ban "${@:+$@}" ;;
|
fail2ban ) shift 2 ; _docker_container fail2ban "${@:+$@}" ;;
|
||||||
show-mail-logs ) _docker_container cat /var/log/mail/mail.log ;;
|
show-mail-logs ) _docker_container cat /var/log/mail/mail.log ;;
|
||||||
inspect ) _inspect ;;
|
inspect ) _inspect ;;
|
||||||
|
|
|
@ -21,7 +21,6 @@ trap "service postfix stop" SIGTERM
|
||||||
trap "service postfix reload" SIGHUP
|
trap "service postfix reload" SIGHUP
|
||||||
|
|
||||||
service postfix start
|
service postfix start
|
||||||
sleep 5
|
|
||||||
|
|
||||||
# wait until postfix is dead (triggered by trap)
|
# wait until postfix is dead (triggered by trap)
|
||||||
while kill -0 "$(< /var/spool/postfix/pid/master.pid)"
|
while kill -0 "$(< /var/spool/postfix/pid/master.pid)"
|
||||||
|
|
|
@ -184,6 +184,7 @@ function teardown_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking spoofing: rejects sender forging" {
|
@test "checking spoofing: rejects sender forging" {
|
||||||
|
wait_for_smtp_port_in_container_to_respond mail_with_ldap
|
||||||
run docker exec mail_with_ldap /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/auth/ldap-smtp-auth-spoofed.txt | grep 'Sender address rejected: not owned by user'"
|
run docker exec mail_with_ldap /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/auth/ldap-smtp-auth-spoofed.txt | grep 'Sender address rejected: not owned by user'"
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
138
test/no_container.bats
Normal file
138
test/no_container.bats
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
load 'test_helper/bats-support/load'
|
||||||
|
load 'test_helper/bats-assert/load'
|
||||||
|
load 'test_helper/common'
|
||||||
|
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh alias list" {
|
||||||
|
mkdir -p ./test/alias/config && echo "test@example.org test@forward.com" > ./test/alias/config/postfix-virtual.cf
|
||||||
|
run ./setup.sh -p ./test/alias/config alias list
|
||||||
|
assert_success
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh alias add" {
|
||||||
|
mkdir -p ./test/alias/config && echo "" > ./test/alias/config/postfix-virtual.cf
|
||||||
|
./setup.sh -p ./test/alias/config alias add alias@example.com target1@forward.com
|
||||||
|
./setup.sh -p ./test/alias/config alias add alias@example.com target2@forward.com
|
||||||
|
sleep 5
|
||||||
|
run /bin/sh -c 'cat ./test/alias/config/postfix-virtual.cf | grep "alias@example.com target1@forward.com,target2@forward.com" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh alias del" {
|
||||||
|
# start with a1 -> t1,t2 and a2 -> t1
|
||||||
|
mkdir -p ./test/alias/config && echo -e 'alias1@example.org target1@forward.com,target2@forward.com\nalias2@example.org target1@forward.com' > ./test/alias/config/postfix-virtual.cf
|
||||||
|
|
||||||
|
# we remove a1 -> t1 ==> a1 -> t2 and a2 -> t1
|
||||||
|
./setup.sh -p ./test/alias/config alias del alias1@example.org target1@forward.com
|
||||||
|
run grep "target1@forward.com" ./test/alias/config/postfix-virtual.cf
|
||||||
|
assert_output --regexp "^alias2@example.org +target1@forward.com$"
|
||||||
|
|
||||||
|
run grep "target2@forward.com" ./test/alias/config/postfix-virtual.cf
|
||||||
|
assert_output --regexp "^alias1@example.org +target2@forward.com$"
|
||||||
|
|
||||||
|
# we remove a1 -> t2 ==> a2 -> t1
|
||||||
|
./setup.sh -p ./test/alias/config alias del alias1@example.org target2@forward.com
|
||||||
|
run grep "alias1@example.org" ./test/alias/config/postfix-virtual.cf
|
||||||
|
assert_failure
|
||||||
|
|
||||||
|
run grep "alias2@example.org" ./test/alias/config/postfix-virtual.cf
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
# we remove a2 -> t1 ==> empty
|
||||||
|
./setup.sh -p ./test/alias/config alias del alias2@example.org target1@forward.com
|
||||||
|
run grep "alias2@example.org" ./test/alias/config/postfix-virtual.cf
|
||||||
|
assert_failure
|
||||||
|
}
|
||||||
|
|
||||||
|
# quota
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh setquota" {
|
||||||
|
mkdir -p ./test/quota/config && echo "" > ./test/quota/config/dovecot-quotas.cf
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config email add quota_user@example.com test_password
|
||||||
|
run ./setup.sh -p ./test/quota/config email add quota_user2@example.com test_password
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config quota set quota_user@example.com 12M
|
||||||
|
assert_success
|
||||||
|
run ./setup.sh -p ./test/quota/config quota set 51M quota_user@example.com
|
||||||
|
assert_failure
|
||||||
|
run ./setup.sh -p ./test/quota/config quota set unknown@domain.com 150M
|
||||||
|
assert_failure
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config quota set quota_user2 51M
|
||||||
|
assert_failure
|
||||||
|
|
||||||
|
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config quota set quota_user@example.com 26M
|
||||||
|
assert_success
|
||||||
|
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:26M\$" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
run grep "quota_user2@example.com" ./test/alias/config/dovecot-quotas.cf
|
||||||
|
assert_failure
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh delquota" {
|
||||||
|
mkdir -p ./test/quota/config && echo "" > ./test/quota/config/dovecot-quotas.cf
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config email add quota_user@example.com test_password
|
||||||
|
run ./setup.sh -p ./test/quota/config email add quota_user2@example.com test_password
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config quota set quota_user@example.com 12M
|
||||||
|
assert_success
|
||||||
|
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config quota del unknown@domain.com
|
||||||
|
assert_failure
|
||||||
|
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
run ./setup.sh -p ./test/quota/config quota del quota_user@example.com
|
||||||
|
assert_success
|
||||||
|
run grep "quota_user@example.com" ./test/alias/config/dovecot-quotas.cf
|
||||||
|
assert_failure
|
||||||
|
}
|
||||||
|
|
||||||
|
# debug
|
||||||
|
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh relay add-domain" {
|
||||||
|
mkdir -p ./test/relay/config && echo -n > ./test/relay/config/postfix-relaymap.cf
|
||||||
|
./setup.sh -p ./test/relay/config relay add-domain example1.org smtp.relay1.com 2525
|
||||||
|
./setup.sh -p ./test/relay/config relay add-domain example2.org smtp.relay2.com
|
||||||
|
./setup.sh -p ./test/relay/config relay add-domain example3.org smtp.relay3.com 2525
|
||||||
|
./setup.sh -p ./test/relay/config relay add-domain example3.org smtp.relay.com 587
|
||||||
|
|
||||||
|
# check adding
|
||||||
|
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example1.org\s\+\[smtp.relay1.com\]:2525" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
# test default port
|
||||||
|
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example2.org\s\+\[smtp.relay2.com\]:25" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
# test modifying
|
||||||
|
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example3.org\s\+\[smtp.relay.com\]:587" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh relay add-auth" {
|
||||||
|
mkdir -p ./test/relay/config && echo -n > ./test/relay/config/postfix-sasl-password.cf
|
||||||
|
./setup.sh -p ./test/relay/config relay add-auth example.org smtp_user smtp_pass
|
||||||
|
./setup.sh -p ./test/relay/config relay add-auth example2.org smtp_user2 smtp_pass2
|
||||||
|
./setup.sh -p ./test/relay/config relay add-auth example2.org smtp_user2 smtp_pass_new
|
||||||
|
|
||||||
|
# test adding
|
||||||
|
run /bin/sh -c 'cat ./test/relay/config/postfix-sasl-password.cf | grep -e "^@example.org\s\+smtp_user:smtp_pass" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
# test updating
|
||||||
|
run /bin/sh -c 'cat ./test/relay/config/postfix-sasl-password.cf | grep -e "^@example2.org\s\+smtp_user2:smtp_pass_new" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "[No Existing Container] checking setup.sh: setup.sh relay exclude-domain" {
|
||||||
|
mkdir -p ./test/relay/config && echo -n > ./test/relay/config/postfix-relaymap.cf
|
||||||
|
./setup.sh -p ./test/relay/config relay exclude-domain example.org
|
||||||
|
|
||||||
|
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example.org\s*$" | wc -l | grep 1'
|
||||||
|
assert_success
|
||||||
|
}
|
|
@ -85,6 +85,20 @@ function wait_for_smtp_port_in_container() {
|
||||||
wait_for_tcp_port_in_container 25 "${1}"
|
wait_for_tcp_port_in_container 25 "${1}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# @param ${1} name of the postfix container
|
||||||
|
function wait_for_smtp_port_in_container_to_respond() {
|
||||||
|
local COUNT=0
|
||||||
|
until [[ $(docker exec "${1}" timeout 10 /bin/sh -c "echo QUIT | nc localhost 25") == *"221 2.0.0 Bye"* ]]; do
|
||||||
|
if [[ $COUNT -eq 20 ]]
|
||||||
|
then
|
||||||
|
echo "Unable to receive a valid response from 'nc localhost 25' within 20 seconds"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
((COUNT+=1))
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# @param ${1} name of the postfix container
|
# @param ${1} name of the postfix container
|
||||||
function wait_for_amavis_port_in_container() {
|
function wait_for_amavis_port_in_container() {
|
||||||
wait_for_tcp_port_in_container 10024 "${1}"
|
wait_for_tcp_port_in_container 10024 "${1}"
|
||||||
|
|
117
test/tests.bats
117
test/tests.bats
|
@ -1036,95 +1036,85 @@ EOF
|
||||||
|
|
||||||
# alias
|
# alias
|
||||||
@test "checking setup.sh: setup.sh alias list" {
|
@test "checking setup.sh: setup.sh alias list" {
|
||||||
mkdir -p ./test/alias/config && echo "test@example.org test@forward.com" > ./test/alias/config/postfix-virtual.cf
|
run ./setup.sh alias list
|
||||||
run ./setup.sh -p ./test/alias/config alias list
|
|
||||||
assert_success
|
assert_success
|
||||||
|
assert_output --partial "alias1@localhost.localdomain user1@localhost.localdomain"
|
||||||
|
assert_output --partial "@localdomain2.com user1@localhost.localdomain"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking setup.sh: setup.sh alias add" {
|
@test "checking setup.sh: setup.sh alias add" {
|
||||||
mkdir -p ./test/alias/config && echo "" > ./test/alias/config/postfix-virtual.cf
|
./setup.sh alias add alias@example.com target1@forward.com
|
||||||
./setup.sh -p ./test/alias/config alias add alias@example.com target1@forward.com
|
./setup.sh alias add alias@example.com target2@forward.com
|
||||||
./setup.sh -p ./test/alias/config alias add alias@example.com target2@forward.com
|
./setup.sh alias add alias2@example.org target3@forward.com
|
||||||
sleep 5
|
sleep 5
|
||||||
run /bin/sh -c 'cat ./test/alias/config/postfix-virtual.cf | grep "alias@example.com target1@forward.com,target2@forward.com" | wc -l | grep 1'
|
run grep "alias@example.com target1@forward.com,target2@forward.com" "$(private_config_path mail)/postfix-virtual.cf"
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking setup.sh: setup.sh alias del" {
|
@test "checking setup.sh: setup.sh alias del" {
|
||||||
# start with a1 -> t1,t2 and a2 -> t1
|
./setup.sh alias del alias@example.com target1@forward.com
|
||||||
mkdir -p ./test/alias/config && echo -e 'alias1@example.org target1@forward.com,target2@forward.com\nalias2@example.org target1@forward.com' > ./test/alias/config/postfix-virtual.cf
|
run grep "target1@forward.com" "$(private_config_path mail)/postfix-virtual.cf"
|
||||||
|
|
||||||
# we remove a1 -> t1 ==> a1 -> t2 and a2 -> t1
|
|
||||||
./setup.sh -p ./test/alias/config alias del alias1@example.org target1@forward.com
|
|
||||||
run grep "target1@forward.com" ./test/alias/config/postfix-virtual.cf
|
|
||||||
assert_output --regexp "^alias2@example.org +target1@forward.com$"
|
|
||||||
|
|
||||||
run grep "target2@forward.com" ./test/alias/config/postfix-virtual.cf
|
|
||||||
assert_output --regexp "^alias1@example.org +target2@forward.com$"
|
|
||||||
|
|
||||||
# we remove a1 -> t2 ==> a2 -> t1
|
|
||||||
./setup.sh -p ./test/alias/config alias del alias1@example.org target2@forward.com
|
|
||||||
run grep "alias1@example.org" ./test/alias/config/postfix-virtual.cf
|
|
||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
run grep "alias2@example.org" ./test/alias/config/postfix-virtual.cf
|
run grep "target2@forward.com" "$(private_config_path mail)/postfix-virtual.cf"
|
||||||
|
assert_output "alias@example.com target2@forward.com"
|
||||||
|
|
||||||
|
./setup.sh alias del alias@example.org target2@forward.com
|
||||||
|
run grep "alias@example.org" "$(private_config_path mail)/postfix-virtual.cf"
|
||||||
|
assert_failure
|
||||||
|
|
||||||
|
run grep "alias2@example.org" "$(private_config_path mail)/postfix-virtual.cf"
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
# we remove a2 -> t1 ==> empty
|
./setup.sh alias del alias2@example.org target3@forward.com
|
||||||
./setup.sh -p ./test/alias/config alias del alias2@example.org target1@forward.com
|
run grep "alias2@example.org" "$(private_config_path mail)/postfix-virtual.cf"
|
||||||
run grep "alias2@example.org" ./test/alias/config/postfix-virtual.cf
|
|
||||||
assert_failure
|
assert_failure
|
||||||
}
|
}
|
||||||
|
|
||||||
# quota
|
# quota
|
||||||
@test "checking setup.sh: setup.sh setquota" {
|
@test "checking setup.sh: setup.sh setquota" {
|
||||||
mkdir -p ./test/quota/config && echo "" > ./test/quota/config/dovecot-quotas.cf
|
run ./setup.sh email add quota_user@example.com test_password
|
||||||
|
run ./setup.sh email add quota_user2@example.com test_password
|
||||||
|
|
||||||
run ./setup.sh -p ./test/quota/config email add quota_user@example.com test_password
|
run ./setup.sh quota set quota_user@example.com 12M
|
||||||
run ./setup.sh -p ./test/quota/config email add quota_user2@example.com test_password
|
|
||||||
|
|
||||||
run ./setup.sh -p ./test/quota/config quota set quota_user@example.com 12M
|
|
||||||
assert_success
|
assert_success
|
||||||
run ./setup.sh -p ./test/quota/config quota set 51M quota_user@example.com
|
run ./setup.sh quota set 51M quota_user@example.com
|
||||||
assert_failure
|
assert_failure
|
||||||
run ./setup.sh -p ./test/quota/config quota set unknown@domain.com 150M
|
run ./setup.sh quota set unknown@domain.com 150M
|
||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
run ./setup.sh -p ./test/quota/config quota set quota_user2 51M
|
run ./setup.sh quota set quota_user2 51M
|
||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
run /bin/sh -c 'cat ./test/duplicate_configs/mail/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
run ./setup.sh -p ./test/quota/config quota set quota_user@example.com 26M
|
run ./setup.sh quota set quota_user@example.com 26M
|
||||||
assert_success
|
assert_success
|
||||||
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:26M\$" | wc -l | grep 1'
|
run /bin/sh -c 'cat ./test/duplicate_configs/mail/dovecot-quotas.cf | grep -E "^quota_user@example.com\:26M\$" | wc -l | grep 1'
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
run grep "quota_user2@example.com" ./test/alias/config/dovecot-quotas.cf
|
run grep "quota_user2@example.com" ./test/duplicate_configs/mail/dovecot-quotas.cf
|
||||||
assert_failure
|
assert_failure
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking setup.sh: setup.sh delquota" {
|
@test "checking setup.sh: setup.sh delquota" {
|
||||||
mkdir -p ./test/quota/config && echo "" > ./test/quota/config/dovecot-quotas.cf
|
run ./setup.sh email add quota_user@example.com test_password
|
||||||
|
run ./setup.sh email add quota_user2@example.com test_password
|
||||||
|
|
||||||
run ./setup.sh -p ./test/quota/config email add quota_user@example.com test_password
|
run ./setup.sh quota set quota_user@example.com 12M
|
||||||
run ./setup.sh -p ./test/quota/config email add quota_user2@example.com test_password
|
|
||||||
|
|
||||||
run ./setup.sh -p ./test/quota/config quota set quota_user@example.com 12M
|
|
||||||
assert_success
|
assert_success
|
||||||
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
run /bin/sh -c 'cat ./test/duplicate_configs/mail/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
|
run ./setup.sh quota del unknown@domain.com
|
||||||
run ./setup.sh -p ./test/quota/config quota del unknown@domain.com
|
|
||||||
assert_failure
|
assert_failure
|
||||||
run /bin/sh -c 'cat ./test/quota/config/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
run /bin/sh -c 'cat ./test/duplicate_configs/mail/dovecot-quotas.cf | grep -E "^quota_user@example.com\:12M\$" | wc -l | grep 1'
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
run ./setup.sh -p ./test/quota/config quota del quota_user@example.com
|
run ./setup.sh quota del quota_user@example.com
|
||||||
assert_success
|
assert_success
|
||||||
run grep "quota_user@example.com" ./test/alias/config/dovecot-quotas.cf
|
run grep "quota_user@example.com" ./test/duplicate_configs/mail/dovecot-quotas.cf
|
||||||
assert_failure
|
assert_failure
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1152,42 +1142,39 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking setup.sh: setup.sh relay add-domain" {
|
@test "checking setup.sh: setup.sh relay add-domain" {
|
||||||
mkdir -p ./test/relay/config && echo -n > ./test/relay/config/postfix-relaymap.cf
|
./setup.sh relay add-domain example1.org smtp.relay1.com 2525
|
||||||
./setup.sh -p ./test/relay/config relay add-domain example1.org smtp.relay1.com 2525
|
./setup.sh relay add-domain example2.org smtp.relay2.com
|
||||||
./setup.sh -p ./test/relay/config relay add-domain example2.org smtp.relay2.com
|
./setup.sh relay add-domain example3.org smtp.relay3.com 2525
|
||||||
./setup.sh -p ./test/relay/config relay add-domain example3.org smtp.relay3.com 2525
|
./setup.sh relay add-domain example3.org smtp.relay.com 587
|
||||||
./setup.sh -p ./test/relay/config relay add-domain example3.org smtp.relay.com 587
|
|
||||||
|
|
||||||
# check adding
|
# check adding
|
||||||
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example1.org\s\+\[smtp.relay1.com\]:2525" | wc -l | grep 1'
|
run /bin/sh -c "cat $(private_config_path mail)/postfix-relaymap.cf | grep -e \"^@example1.org\s\+\[smtp.relay1.com\]:2525\" | wc -l | grep 1"
|
||||||
assert_success
|
assert_success
|
||||||
# test default port
|
# test default port
|
||||||
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example2.org\s\+\[smtp.relay2.com\]:25" | wc -l | grep 1'
|
run /bin/sh -c "cat $(private_config_path mail)/postfix-relaymap.cf | grep -e \"^@example2.org\s\+\[smtp.relay2.com\]:25\" | wc -l | grep 1"
|
||||||
assert_success
|
assert_success
|
||||||
# test modifying
|
# test modifying
|
||||||
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example3.org\s\+\[smtp.relay.com\]:587" | wc -l | grep 1'
|
run /bin/sh -c "cat $(private_config_path mail)/postfix-relaymap.cf | grep -e \"^@example3.org\s\+\[smtp.relay.com\]:587\" | wc -l | grep 1"
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking setup.sh: setup.sh relay add-auth" {
|
@test "checking setup.sh: setup.sh relay add-auth" {
|
||||||
mkdir -p ./test/relay/config && echo -n > ./test/relay/config/postfix-sasl-password.cf
|
./setup.sh relay add-auth example.org smtp_user smtp_pass
|
||||||
./setup.sh -p ./test/relay/config relay add-auth example.org smtp_user smtp_pass
|
./setup.sh relay add-auth example2.org smtp_user2 smtp_pass2
|
||||||
./setup.sh -p ./test/relay/config relay add-auth example2.org smtp_user2 smtp_pass2
|
./setup.sh relay add-auth example2.org smtp_user2 smtp_pass_new
|
||||||
./setup.sh -p ./test/relay/config relay add-auth example2.org smtp_user2 smtp_pass_new
|
|
||||||
|
|
||||||
# test adding
|
# test adding
|
||||||
run /bin/sh -c 'cat ./test/relay/config/postfix-sasl-password.cf | grep -e "^@example.org\s\+smtp_user:smtp_pass" | wc -l | grep 1'
|
run /bin/sh -c "cat $(private_config_path mail)/postfix-sasl-password.cf | grep -e \"^@example.org\s\+smtp_user:smtp_pass\" | wc -l | grep 1"
|
||||||
assert_success
|
assert_success
|
||||||
# test updating
|
# test updating
|
||||||
run /bin/sh -c 'cat ./test/relay/config/postfix-sasl-password.cf | grep -e "^@example2.org\s\+smtp_user2:smtp_pass_new" | wc -l | grep 1'
|
run /bin/sh -c "cat $(private_config_path mail)/postfix-sasl-password.cf | grep -e \"^@example2.org\s\+smtp_user2:smtp_pass_new\" | wc -l | grep 1"
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking setup.sh: setup.sh relay exclude-domain" {
|
@test "checking setup.sh: setup.sh relay exclude-domain" {
|
||||||
mkdir -p ./test/relay/config && echo -n > ./test/relay/config/postfix-relaymap.cf
|
./setup.sh relay exclude-domain example.org
|
||||||
./setup.sh -p ./test/relay/config relay exclude-domain example.org
|
|
||||||
|
|
||||||
run /bin/sh -c 'cat ./test/relay/config/postfix-relaymap.cf | grep -e "^@example.org\s*$" | wc -l | grep 1'
|
run /bin/sh -c "cat $(private_config_path mail)/postfix-relaymap.cf | grep -e \"^@example.org\s*$\" | wc -l | grep 1"
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1204,12 +1191,12 @@ EOF
|
||||||
|
|
||||||
@test "checking spoofing: rejects sender forging" {
|
@test "checking spoofing: rejects sender forging" {
|
||||||
# checking rejection of spoofed sender
|
# checking rejection of spoofed sender
|
||||||
|
wait_for_smtp_port_in_container_to_respond mail
|
||||||
run docker exec mail /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/auth/added-smtp-auth-spoofed.txt"
|
run docker exec mail /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/auth/added-smtp-auth-spoofed.txt"
|
||||||
assert_output --partial 'Sender address rejected: not owned by user'
|
assert_output --partial 'Sender address rejected: not owned by user'
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "checking spoofing: accepts sending as alias" {
|
@test "checking spoofing: accepts sending as alias" {
|
||||||
|
|
||||||
run docker exec mail /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/auth/added-smtp-auth-spoofed-alias.txt | grep 'End data with'"
|
run docker exec mail /bin/sh -c "nc 0.0.0.0 25 < /tmp/docker-mailserver-test/auth/added-smtp-auth-spoofed-alias.txt | grep 'End data with'"
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue