mirror of
https://github.com/casjaysdevdocker/gitea
synced 2026-05-24 15:28:44 -04:00
🐛 Fix generated start script: empty su_exec produces '' command prefix 🐛
When su_exec is empty (service runs as root, no user-switching needed),
printf '%q ' $su_exec expands to the literal string '' which gets embedded
in the generated start script as a command prefix, causing bash to try
executing a program named '' and failing immediately. Also add explicit
PATH and HOME exports to the RESET_ENV=no generated script so services
are not dependent on environment inheritance.
- rootfs/usr/local/etc/docker/init.d/05-dockerd.sh: fix _q_su assignment
in both RESET_ENV branches to use ${su_exec:+...} so it's empty string
(not '') when su_exec is empty; fix format string %s%s (no space between
su and cmd, su already carries trailing space); add PATH and HOME exports
to RESET_ENV=no generated script
- rootfs/usr/local/etc/docker/init.d/08-gitea.sh: same fixes
- rootfs/usr/local/etc/docker/init.d/zz-act_runner.sh: same fixes
rootfs/usr/local/etc/docker/init.d/05-dockerd.sh
rootfs/usr/local/etc/docker/init.d/08-gitea.sh
rootfs/usr/local/etc/docker/init.d/zz-act_runner.sh
This commit is contained in:
@@ -667,7 +667,7 @@ __run_start_script() {
|
||||
_q_path=$(printf '%q' "$path")
|
||||
_q_sysname=$(printf '%q' "$sysname")
|
||||
_q_svcuser=$(printf '%q' "${SERVICE_USER:-$RUNAS_USER}")
|
||||
_q_su=$(printf '%q ' $su_exec)
|
||||
_q_su="${su_exec:+$(printf '%q ' $su_exec)}"
|
||||
_q_cmd=$(printf '%q' "$cmd")
|
||||
_q_args=$(printf '%q ' $args)
|
||||
_q_extra=$(printf '%q ' $extra_env)
|
||||
@@ -680,7 +680,7 @@ __run_start_script() {
|
||||
printf 'SERVICE_NAME=%q\n' "$SERVICE_NAME"
|
||||
printf 'SERVICE_PID_FILE=%q\n' "$SERVICE_PID_FILE"
|
||||
printf 'LOG_DIR=%q\n' "$LOG_DIR"
|
||||
printf '%s env -i HOME=%s LC_CTYPE=%s PATH=%s HOSTNAME=%s USER=%s %s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
printf '%senv -i HOME=%s LC_CTYPE=%s PATH=%s HOSTNAME=%s USER=%s %s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
"$_q_su" "$_q_home" "$_q_lc" "$_q_path" "$_q_sysname" "$_q_svcuser" "$_q_extra" "$_q_cmd" "$_q_args"
|
||||
printf 'execPid=$!\n'
|
||||
printf 'sleep 1\n'
|
||||
@@ -698,20 +698,24 @@ __run_start_script() {
|
||||
fi
|
||||
else
|
||||
if [ ! -f "$START_SCRIPT" ]; then
|
||||
local _q_su _q_cmd _q_args
|
||||
_q_su=$(printf '%q ' $su_exec)
|
||||
local _q_su _q_cmd _q_args _q_path _q_home
|
||||
_q_su="${su_exec:+$(printf '%q ' $su_exec)}"
|
||||
_q_cmd=$(printf '%q' "$cmd")
|
||||
_q_args=$(printf '%q ' $args)
|
||||
_q_path=$(printf '%q' "$path")
|
||||
_q_home=$(printf '%q' "$home")
|
||||
{
|
||||
printf '#!/usr/bin/env bash\n'
|
||||
printf "trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f \"\$SERVICE_PID_FILE\" ] && rm -Rf \"\$SERVICE_PID_FILE\";exit \$exitCode' EXIT\n"
|
||||
printf 'set -Eeo pipefail\n'
|
||||
printf '# Setting up %s to run as %s\n' "$cmd" "${SERVICE_USER:-root}"
|
||||
printf 'export PATH=%s\n' "$_q_path"
|
||||
printf 'export HOME=%s\n' "$_q_home"
|
||||
printf 'retVal=10\n'
|
||||
printf 'SERVICE_NAME=%q\n' "$SERVICE_NAME"
|
||||
printf 'SERVICE_PID_FILE=%q\n' "$SERVICE_PID_FILE"
|
||||
printf 'LOG_DIR=%q\n' "$LOG_DIR"
|
||||
printf '%s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
printf '%s%s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
"$_q_su" "$_q_cmd" "$_q_args"
|
||||
printf 'execPid=$!\n'
|
||||
printf 'sleep 1\n'
|
||||
|
||||
@@ -568,7 +568,7 @@ __run_start_script() {
|
||||
_q_path=$(printf '%q' "$path")
|
||||
_q_sysname=$(printf '%q' "$sysname")
|
||||
_q_svcuser=$(printf '%q' "${SERVICE_USER:-$RUNAS_USER}")
|
||||
_q_su=$(printf '%q ' $su_exec)
|
||||
_q_su="${su_exec:+$(printf '%q ' $su_exec)}"
|
||||
_q_cmd=$(printf '%q' "$cmd")
|
||||
_q_args=$(printf '%q ' $args)
|
||||
_q_extra=$(printf '%q ' $extra_env)
|
||||
@@ -581,7 +581,7 @@ __run_start_script() {
|
||||
printf 'SERVICE_NAME=%q\n' "$SERVICE_NAME"
|
||||
printf 'SERVICE_PID_FILE=%q\n' "$SERVICE_PID_FILE"
|
||||
printf 'LOG_DIR=%q\n' "$LOG_DIR"
|
||||
printf '%s env -i HOME=%s LC_CTYPE=%s PATH=%s HOSTNAME=%s USER=%s %s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
printf '%senv -i HOME=%s LC_CTYPE=%s PATH=%s HOSTNAME=%s USER=%s %s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
"$_q_su" "$_q_home" "$_q_lc" "$_q_path" "$_q_sysname" "$_q_svcuser" "$_q_extra" "$_q_cmd" "$_q_args"
|
||||
printf 'execPid=$!\n'
|
||||
printf 'sleep 1\n'
|
||||
@@ -599,20 +599,24 @@ __run_start_script() {
|
||||
fi
|
||||
else
|
||||
if [ ! -f "$START_SCRIPT" ]; then
|
||||
local _q_su _q_cmd _q_args
|
||||
_q_su=$(printf '%q ' $su_exec)
|
||||
local _q_su _q_cmd _q_args _q_path _q_home
|
||||
_q_su="${su_exec:+$(printf '%q ' $su_exec)}"
|
||||
_q_cmd=$(printf '%q' "$cmd")
|
||||
_q_args=$(printf '%q ' $args)
|
||||
_q_path=$(printf '%q' "$path")
|
||||
_q_home=$(printf '%q' "$home")
|
||||
{
|
||||
printf '#!/usr/bin/env bash\n'
|
||||
printf "trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f \"\$SERVICE_PID_FILE\" ] && rm -Rf \"\$SERVICE_PID_FILE\";exit \$exitCode' EXIT\n"
|
||||
printf 'set -Eeo pipefail\n'
|
||||
printf '# Setting up %s to run as %s\n' "$cmd" "${SERVICE_USER:-root}"
|
||||
printf 'export PATH=%s\n' "$_q_path"
|
||||
printf 'export HOME=%s\n' "$_q_home"
|
||||
printf 'retVal=10\n'
|
||||
printf 'SERVICE_NAME=%q\n' "$SERVICE_NAME"
|
||||
printf 'SERVICE_PID_FILE=%q\n' "$SERVICE_PID_FILE"
|
||||
printf 'LOG_DIR=%q\n' "$LOG_DIR"
|
||||
printf '%s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
printf '%s%s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
"$_q_su" "$_q_cmd" "$_q_args"
|
||||
printf 'execPid=$!\n'
|
||||
printf 'sleep 1\n'
|
||||
|
||||
@@ -627,7 +627,7 @@ __run_start_script() {
|
||||
_q_path=$(printf '%q' "$path")
|
||||
_q_sysname=$(printf '%q' "$sysname")
|
||||
_q_svcuser=$(printf '%q' "${SERVICE_USER:-$RUNAS_USER}")
|
||||
_q_su=$(printf '%q ' $su_exec)
|
||||
_q_su="${su_exec:+$(printf '%q ' $su_exec)}"
|
||||
_q_cmd=$(printf '%q' "$cmd")
|
||||
_q_args=$(printf '%q ' $args)
|
||||
_q_extra=$(printf '%q ' $extra_env)
|
||||
@@ -640,7 +640,7 @@ __run_start_script() {
|
||||
printf 'SERVICE_NAME=%q\n' "$SERVICE_NAME"
|
||||
printf 'SERVICE_PID_FILE=%q\n' "$SERVICE_PID_FILE"
|
||||
printf 'LOG_DIR=%q\n' "$LOG_DIR"
|
||||
printf '%s env -i HOME=%s LC_CTYPE=%s PATH=%s HOSTNAME=%s USER=%s %s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
printf '%senv -i HOME=%s LC_CTYPE=%s PATH=%s HOSTNAME=%s USER=%s %s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
"$_q_su" "$_q_home" "$_q_lc" "$_q_path" "$_q_sysname" "$_q_svcuser" "$_q_extra" "$_q_cmd" "$_q_args"
|
||||
printf 'execPid=$!\n'
|
||||
printf 'sleep 1\n'
|
||||
@@ -658,20 +658,24 @@ __run_start_script() {
|
||||
fi
|
||||
else
|
||||
if [ ! -f "$START_SCRIPT" ]; then
|
||||
local _q_su _q_cmd _q_args
|
||||
_q_su=$(printf '%q ' $su_exec)
|
||||
local _q_su _q_cmd _q_args _q_path _q_home
|
||||
_q_su="${su_exec:+$(printf '%q ' $su_exec)}"
|
||||
_q_cmd=$(printf '%q' "$cmd")
|
||||
_q_args=$(printf '%q ' $args)
|
||||
_q_path=$(printf '%q' "$path")
|
||||
_q_home=$(printf '%q' "$home")
|
||||
{
|
||||
printf '#!/usr/bin/env bash\n'
|
||||
printf "trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f \"\$SERVICE_PID_FILE\" ] && rm -Rf \"\$SERVICE_PID_FILE\";exit \$exitCode' EXIT\n"
|
||||
printf 'set -Eeo pipefail\n'
|
||||
printf '# Setting up %s to run as %s\n' "$cmd" "${SERVICE_USER:-root}"
|
||||
printf 'export PATH=%s\n' "$_q_path"
|
||||
printf 'export HOME=%s\n' "$_q_home"
|
||||
printf 'retVal=10\n'
|
||||
printf 'SERVICE_NAME=%q\n' "$SERVICE_NAME"
|
||||
printf 'SERVICE_PID_FILE=%q\n' "$SERVICE_PID_FILE"
|
||||
printf 'LOG_DIR=%q\n' "$LOG_DIR"
|
||||
printf '%s %s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
printf '%s%s %s 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" &\n' \
|
||||
"$_q_su" "$_q_cmd" "$_q_args"
|
||||
printf 'execPid=$!\n'
|
||||
printf 'sleep 1\n'
|
||||
|
||||
Reference in New Issue
Block a user