From 9a29cc59a8872265a59f3849b8968ea30504519f Mon Sep 17 00:00:00 2001 From: Michael Hobbs Date: Fri, 10 Jun 2016 13:10:11 -0700 Subject: [PATCH] reject invalid domains in domains:add. closes #2231 --- plugins/common/functions | 10 ++++++++++ plugins/domains/functions | 5 +++++ tests/unit/20_domains.bats | 7 +++++++ 3 files changed, 22 insertions(+) diff --git a/plugins/common/functions b/plugins/common/functions index d3367c2ef..7059709ce 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -753,6 +753,16 @@ strip_inline_comments() { echo "$stripped_line" } +is_valid_hostname() { + declare desc="return 0 if argument is a valid hostname; else return 1" + local hostname_string="$1"; local hostname_regex='^(([a-zA-Z\*](-?[a-zA-Z0-9])*)\.)*[a-zA-Z\*](-?[a-zA-Z0-9])+\.[a-zA-Z]{2,}$' + if [[ $hostname_string =~ $hostname_regex ]]; then + return 0 + else + return 1 + fi +} + is_val_in_list() { declare desc="return true if value ($1) is in list ($2) separated by delimiter ($3); delimiter defaults to comma" local value="$1" list="$2" delimiter="${3:-,}" diff --git a/plugins/domains/functions b/plugins/domains/functions index f563b8e50..073444aae 100755 --- a/plugins/domains/functions +++ b/plugins/domains/functions @@ -67,6 +67,11 @@ domains_add() { local APP="$1"; local APP_VHOST_PATH="$DOKKU_ROOT/$APP/VHOST" shift 1 + for DOMAIN in "$@"; do + if ! (is_valid_hostname "$DOMAIN"); then + dokku_log_fail "$DOMAIN is invalid. exiting..." + fi + done for DOMAIN in "$@"; do if [[ $(egrep -w "^$DOMAIN$" "$APP_VHOST_PATH" > /dev/null 2>&1; echo $?) -eq 0 ]]; then diff --git a/tests/unit/20_domains.bats b/tests/unit/20_domains.bats index be8343289..497c82c69 100644 --- a/tests/unit/20_domains.bats +++ b/tests/unit/20_domains.bats @@ -52,6 +52,13 @@ teardown() { assert_success } +@test "(domains) domains:add (invalid)" { + run dokku domains:add $TEST_APP http://test.app.dokku.me + echo "output: "$output + echo "status: "$status + assert_failure +} + @test "(domains) domains:remove" { run dokku domains:add $TEST_APP test.app.dokku.me echo "output: "$output