diff --git a/.github/workflows/test_merge_requests.yml b/.github/workflows/test_merge_requests.yml index 69fff733..b5cb24d2 100644 --- a/.github/workflows/test_merge_requests.yml +++ b/.github/workflows/test_merge_requests.yml @@ -61,4 +61,4 @@ jobs: NAME=mailserver-testing:ci bash -c 'make generate-accounts tests' env: - CI: true + CI: true \ No newline at end of file diff --git a/setup.sh b/setup.sh index 0cffd32c..0fb0ae66 100755 --- a/setup.sh +++ b/setup.sh @@ -61,7 +61,6 @@ CONTAINER_NAME= DEFAULT_CONFIG_PATH="${DIR}/config" IMAGE_NAME= INFO= -USE_CONTAINER=false USE_TTY= USE_SELINUX= VOLUME= @@ -126,9 +125,11 @@ ${ORANGE}DESCRIPTION${RESET} 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. - Please note that the script executes most of the commands inside the container itself. - If the image was not found, this script will pull the ${WHITE}:latest${RESET} tag of - ${WHITE}mailserver/docker-mailserver${RESET}. This tag refers to the latest release, + Please note that this script executes most of its commands inside the running 'mailserver' container itself. + If it cannot find a running container, it will attempt to run one using any available tags + 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 ${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. -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} ${LBLUE}SELinux${RESET} @@ -228,22 +229,16 @@ function _docker_image_exists function _docker_image { - if ${USE_CONTAINER} + # start temporary container with specified image + if ! _docker_image_exists "${IMAGE_NAME}" then - # reuse existing container specified on command line - ${CRI} exec "${USE_TTY}" "${CONTAINER_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}" "${@:+$@}" + 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}" "${@:+$@}" } function _docker_container @@ -252,8 +247,8 @@ function _docker_container then ${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" "${@:+$@}" else - echo "The mailserver is not running!" - exit 1 + # If no container yet, run a temporary one: https://github.com/docker-mailserver/docker-mailserver/pull/1874#issuecomment-809781531 + _docker_image "${@:+$@}" fi } @@ -302,7 +297,6 @@ function _main c ) # container specified, connect to running instance CONTAINER_NAME="${OPTARG}" - USE_CONTAINER=true ;; p ) @@ -346,8 +340,8 @@ function _main email ) case ${2:-} in - add ) shift 2 ; _docker_image addmailuser "${@:+$@}" ;; - update ) shift 2 ; _docker_image updatemailuser "${@:+$@}" ;; + add ) shift 2 ; _docker_container addmailuser "${@:+$@}" ;; + update ) shift 2 ; _docker_container updatemailuser "${@:+$@}" ;; del ) shift 2 ; _docker_container delmailuser "${@:+$@}" ;; restrict ) shift 2 ; _docker_container restrict-access "${@:+$@}" ;; list ) _docker_container listmailuser ;; @@ -357,40 +351,40 @@ function _main alias ) case ${2:-} in - add ) shift 2 ; _docker_image addalias "${1}" "${2}" ;; - del ) shift 2 ; _docker_image delalias "${1}" "${2}" ;; - list ) shift 2 ; _docker_image listalias ;; + add ) shift 2 ; _docker_container addalias "${1}" "${2}" ;; + del ) shift 2 ; _docker_container delalias "${1}" "${2}" ;; + list ) shift 2 ; _docker_container listalias ;; * ) _usage ;; esac ;; quota ) case ${2:-} in - set ) shift 2 ; _docker_image setquota "${@:+$@}" ;; - del ) shift 2 ; _docker_image delquota "${@:+$@}" ;; + set ) shift 2 ; _docker_container setquota "${@:+$@}" ;; + del ) shift 2 ; _docker_container delquota "${@:+$@}" ;; * ) _usage ;; esac ;; config ) case ${2:-} in - dkim ) shift 2 ; _docker_image open-dkim "${@:+$@}" ;; + dkim ) shift 2 ; _docker_container open-dkim "${@:+$@}" ;; * ) _usage ;; esac ;; relay ) case ${2:-} in - add-domain ) shift 2 ; _docker_image addrelayhost "${@:+$@}" ;; - add-auth ) shift 2 ; _docker_image addsaslpassword "${@:+$@}" ;; - exclude-domain ) shift 2 ; _docker_image excluderelaydomain "${@:+$@}" ;; + add-domain ) shift 2 ; _docker_container addrelayhost "${@:+$@}" ;; + add-auth ) shift 2 ; _docker_container addsaslpassword "${@:+$@}" ;; + exclude-domain ) shift 2 ; _docker_container excluderelaydomain "${@:+$@}" ;; * ) _usage ;; esac ;; debug ) case ${2:-} in - fetchmail ) _docker_image debug-fetchmail ;; + fetchmail ) _docker_container debug-fetchmail ;; fail2ban ) shift 2 ; _docker_container fail2ban "${@:+$@}" ;; show-mail-logs ) _docker_container cat /var/log/mail/mail.log ;; inspect ) _inspect ;; diff --git a/target/scripts/postfix-wrapper.sh b/target/scripts/postfix-wrapper.sh index 3a82c1a7..2de7ed8e 100755 --- a/target/scripts/postfix-wrapper.sh +++ b/target/scripts/postfix-wrapper.sh @@ -21,7 +21,6 @@ trap "service postfix stop" SIGTERM trap "service postfix reload" SIGHUP service postfix start -sleep 5 # wait until postfix is dead (triggered by trap) while kill -0 "$(< /var/spool/postfix/pid/master.pid)" diff --git a/test/mail_with_ldap.bats b/test/mail_with_ldap.bats index 5ce69c98..ab0f91c5 100644 --- a/test/mail_with_ldap.bats +++ b/test/mail_with_ldap.bats @@ -184,6 +184,7 @@ function teardown_file() { } @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'" assert_success } diff --git a/test/no_container.bats b/test/no_container.bats new file mode 100644 index 00000000..9b310804 --- /dev/null +++ b/test/no_container.bats @@ -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 +} \ No newline at end of file diff --git a/test/test_helper/common.bash b/test/test_helper/common.bash index 4e43b525..baccc553 100644 --- a/test/test_helper/common.bash +++ b/test/test_helper/common.bash @@ -85,6 +85,20 @@ function wait_for_smtp_port_in_container() { 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 function wait_for_amavis_port_in_container() { wait_for_tcp_port_in_container 10024 "${1}" diff --git a/test/tests.bats b/test/tests.bats index 8abdc4f9..0eefe408 100644 --- a/test/tests.bats +++ b/test/tests.bats @@ -1036,95 +1036,85 @@ EOF # alias @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 -p ./test/alias/config alias list + run ./setup.sh alias list 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" { - 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 + ./setup.sh alias add alias@example.com target1@forward.com + ./setup.sh alias add alias@example.com target2@forward.com + ./setup.sh alias add alias2@example.org target3@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' + run grep "alias@example.com target1@forward.com,target2@forward.com" "$(private_config_path mail)/postfix-virtual.cf" assert_success } @test "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 + ./setup.sh alias del alias@example.com target1@forward.com + run grep "target1@forward.com" "$(private_config_path mail)/postfix-virtual.cf" 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 - # 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 + ./setup.sh alias del alias2@example.org target3@forward.com + run grep "alias2@example.org" "$(private_config_path mail)/postfix-virtual.cf" assert_failure } # quota @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 -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 + run ./setup.sh quota set quota_user@example.com 12M 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 - run ./setup.sh -p ./test/quota/config quota set unknown@domain.com 150M + run ./setup.sh quota set unknown@domain.com 150M assert_failure - run ./setup.sh -p ./test/quota/config quota set quota_user2 51M + run ./setup.sh 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' + 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 - 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 - 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 - 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 } @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 -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 + run ./setup.sh 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' + 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 - - run ./setup.sh -p ./test/quota/config quota del unknown@domain.com + run ./setup.sh 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' + 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 - run ./setup.sh -p ./test/quota/config quota del quota_user@example.com + run ./setup.sh quota del quota_user@example.com 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 } @@ -1152,42 +1142,39 @@ EOF } @test "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 + ./setup.sh relay add-domain example1.org smtp.relay1.com 2525 + ./setup.sh relay add-domain example2.org smtp.relay2.com + ./setup.sh relay add-domain example3.org smtp.relay3.com 2525 + ./setup.sh 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' + 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 # 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 # 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 } @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 -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 + ./setup.sh relay add-auth example.org smtp_user smtp_pass + ./setup.sh relay add-auth example2.org smtp_user2 smtp_pass2 + ./setup.sh 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' + 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 # 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 } @test "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 + ./setup.sh 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 } @@ -1204,12 +1191,12 @@ EOF @test "checking spoofing: rejects sender forging" { # 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" assert_output --partial 'Sender address rejected: not owned by user' } @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'" assert_success }