fix: avoid glob expansion of app domains
A catch-all `*` domain or a wildcard ssl hostname could be expanded into file names from the current directory when generating app urls, healthcheck `Host` headers, or the nginx ssl server names.
This commit is contained in:
@@ -38,9 +38,11 @@ fn-domains-global-vhosts() {
|
||||
fn-domains-generate-urls() {
|
||||
declare APP="$1" DEFAULT_SCHEME="$2" DEFAULT_LISTEN_PORT="$3"
|
||||
|
||||
local app_vhosts="$(plugn trigger domains-list "$APP")"
|
||||
if [[ -n "$app_vhosts" ]]; then
|
||||
for app_vhost in $app_vhosts; do
|
||||
local app_vhost
|
||||
local -a app_vhosts
|
||||
read -r -d '' -a app_vhosts <<<"$(plugn trigger domains-list "$APP")" || true
|
||||
if [[ "${#app_vhosts[@]}" -gt 0 ]]; then
|
||||
for app_vhost in "${app_vhosts[@]}"; do
|
||||
fn-domains-generate-urls-from-config "$APP" "$DEFAULT_SCHEME" "$app_vhost" "$DEFAULT_LISTEN_PORT"
|
||||
done
|
||||
else
|
||||
|
||||
@@ -252,7 +252,9 @@ fn-nginx-vhosts-render-template() {
|
||||
SSL_VHOSTS=$(<"$DOKKU_ROOT/VHOST")
|
||||
fi
|
||||
local host
|
||||
for host in $SSL_VHOSTS; do
|
||||
local -a ssl_vhosts
|
||||
read -r -d '' -a ssl_vhosts <<<"$SSL_VHOSTS" || true
|
||||
for host in "${ssl_vhosts[@]}"; do
|
||||
if [[ ! $NOSSL_SERVER_NAME =~ (^|[[:space:]])$host($|[[:space:]]) ]]; then
|
||||
SSL_SERVER_NAME="${host}${SSL_SERVER_NAME:+ $SSL_SERVER_NAME}"
|
||||
fi
|
||||
|
||||
@@ -145,9 +145,11 @@ trigger-scheduler-docker-local-check-deploy() {
|
||||
ARG_ARRAY+=("$DOKKU_APP_LISTEN_PORT")
|
||||
fi
|
||||
|
||||
local app_vhosts="$(plugn trigger domains-list "$APP")"
|
||||
if [[ -n "$app_vhosts" ]]; then
|
||||
for app_vhost in $app_vhosts; do
|
||||
local app_vhost
|
||||
local -a app_vhosts
|
||||
read -r -d '' -a app_vhosts <<<"$(plugn trigger domains-list "$APP")" || true
|
||||
if [[ "${#app_vhosts[@]}" -gt 0 ]]; then
|
||||
for app_vhost in "${app_vhosts[@]}"; do
|
||||
if [[ "$app_vhost" == "localhost" ]] || [[ "$app_vhost" == '*' ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
@@ -533,3 +533,28 @@ teardown() {
|
||||
assert_success
|
||||
assert_output "http:2019:2019 http:80:80 https:443:443 udp:443:443"
|
||||
}
|
||||
|
||||
@test "(domains) urls do not glob expand a catch-all domain" {
|
||||
local tmp_dir
|
||||
tmp_dir="$(mktemp -d)"
|
||||
touch "$tmp_dir/glob-canary"
|
||||
chmod 755 "$tmp_dir"
|
||||
|
||||
run /bin/bash -c "dokku proxy:set $TEST_APP caddy"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku domains:set $TEST_APP '*'"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "cd $tmp_dir && dokku urls $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
rm -rf "$tmp_dir"
|
||||
assert_success
|
||||
assert_output_contains "glob-canary" 0
|
||||
assert_output_contains "http://*"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user