From a144f3811c00f8cac8332437f47274a7bbbfb7c1 Mon Sep 17 00:00:00 2001 From: "Thomas A. Kilian" Date: Mon, 17 Apr 2017 18:27:28 +0200 Subject: [PATCH] Issue 538 (#541) * adapted setup.sh to handle email aliases * added needed scripts for alias management * added integration tests --- .gitignore | 1 + setup.sh | 26 ++++++++++++++++++++++++++ target/bin/addalias | 30 ++++++++++++++++++++++++++++++ target/bin/delalias | 30 ++++++++++++++++++++++++++++++ target/bin/listalias | 13 +++++++++++++ test/tests.bats | 22 ++++++++++++++++++++++ 6 files changed, 122 insertions(+) create mode 100755 target/bin/addalias create mode 100755 target/bin/delalias create mode 100755 target/bin/listalias diff --git a/.gitignore b/.gitignore index bc5326d5..7f72b1bb 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ test/config/without-virtual/ test/config/postfix-accounts.cf test/config/letsencrypt/mail.my-domain.com/combined.pem test/onedir +config/opendkim/ diff --git a/setup.sh b/setup.sh index 40e29ead..3de6ae86 100755 --- a/setup.sh +++ b/setup.sh @@ -47,6 +47,11 @@ SUBCOMMANDS: $0 email del $0 email list + alias: + $0 alias add + $0 alias del + $0 alias list + config: $0 config dkim @@ -133,6 +138,27 @@ case $1 in esac ;; + alias) + shift + case $1 in + add) + shift + _docker_image addalias $@ + ;; + del) + shift + _docker_image delalias $@ + ;; + list) + shift + _docker_image listalias $@ + ;; + *) + _usage + ;; + esac + ;; + config) shift case $1 in diff --git a/target/bin/addalias b/target/bin/addalias new file mode 100755 index 00000000..f25d05d1 --- /dev/null +++ b/target/bin/addalias @@ -0,0 +1,30 @@ +#! /bin/bash + +DATABASE=${DATABASE:-/tmp/docker-mailserver/postfix-virtual.cf} + +EMAIL="$1" +RECIPIENT="$2" + +usage() { + echo "Usage: addalias " +} + +errex() { + echo "$@" 1>&2 + exit 1 +} + +escape() { + echo "${1//./\\.}" +} + +[ -z "$EMAIL" ] && { usage; errex "no email specified"; } + +grep -qi "^$(escape $EMAIL)[a-zA-Z@.\ ]*$(escape $RECIPIENT)" $DATABASE 2>/dev/null && + errex "Alias \"$EMAIL $RECIPIENT\" already exists" + +if grep -qi "^$(escape $EMAIL)" $DATABASE 2>/dev/null; then + sed -i "/$EMAIL/s/$/ $RECIPIENT,/" $DATABASE + else + echo "$EMAIL $RECIPIENT," >> $DATABASE +fi diff --git a/target/bin/delalias b/target/bin/delalias new file mode 100755 index 00000000..33fed3ec --- /dev/null +++ b/target/bin/delalias @@ -0,0 +1,30 @@ +#! /bin/bash + +DATABASE=${DATABASE:-/tmp/docker-mailserver/postfix-virtual.cf} + +EMAIL="$1" +RECIPIENT="$2" + +usage() { + echo "Usage: delalias " +} + +errex() { + echo "$@" 1>&2 + exit 1 +} + +escape() { + echo "${1//./\\.}" +} + +[ -z "$EMAIL" ] || [ -z "$RECIPIENT" ] && { usage; errex "No email specifed"; } +[ -s "$DATABASE" ] || exit 0 + +CNT=$(grep "^$EMAIL" $DATABASE | wc -w | awk '{print $1}') + +if [[ $CNT -eq 2 ]]; then + sed -i "/^$EMAIL/d" $DATABASE + else + sed -i "/^$EMAIL/s/ $RECIPIENT,//g" $DATABASE +fi diff --git a/target/bin/listalias b/target/bin/listalias new file mode 100755 index 00000000..4db49e85 --- /dev/null +++ b/target/bin/listalias @@ -0,0 +1,13 @@ +#! /bin/bash + +DATABASE=${DATABASE:-/tmp/docker-mailserver/postfix-virtual.cf} + +errex() { + echo "$@" 1>&2 + exit 1 +} + +[ -f $DATABASE ] || errex "No postfix-virtual.cf file" +[ -s $DATABASE ] || errex "Empty postfix-virtual.cf - no aliases have been added" + +cat $DATABASE diff --git a/test/tests.bats b/test/tests.bats index e166b77d..77369d29 100644 --- a/test/tests.bats +++ b/test/tests.bats @@ -936,6 +936,28 @@ load 'test_helper/bats-assert/load' [ -z "$value" ] } +# alias +@test "checking setup.sh: setup.sh alias list" { + echo "test@example.org test@forward.com" > ./config/postfix-virtual.cf + run ./setup.sh -c mail alias list + assert_success +} +@test "checking setup.sh: setup.sh alias add" { + echo "" > ./config/postfix-virtual.cf + ./setup.sh -c mail alias add test1@example.org test1@forward.com + ./setup.sh -c mail alias add test1@example.org test2@forward.com + + run /bin/sh -c 'cat ./config/postfix-virtual.cf | grep "test1@example.org test1@forward.com, test2@forward.com," | wc -l | grep 1' + assert_success +} +@test "checking setup.sh: setup.sh alias del" { + echo 'test1@example.org test1@forward.com, test2@forward.com,' > ./config/postfix-virtual.cf + ./setup.sh -c mail alias del test1@example.org test1@forward.com + ./setup.sh -c mail alias del test1@example.org test2@forward.com + run cat ./config/postfix-virtual.cf | wc -l | grep 0 + assert_success +} + # config @test "checking setup.sh: setup.sh config dkim" { run ./setup.sh -c mail config dkim