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:
Jose Diaz-Gonzalez
2026-09-26 01:17:30 -04:00
parent 06f80b1a93
commit fba0681e5b
4 changed files with 38 additions and 7 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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://*"
}