mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-08-05 00:15:44 +00:00
machine: escape % as %% in proxy values written to systemd unit conf
systemd interprets % as specifier characters in unit configuration files (e.g. %H, %u, %40). Proxy environment variable values that contain percent-encoded URL characters (such as %40 for @ in usernames) cause systemd to emit warnings and fail to parse the generated /etc/systemd/system.conf.d/default-env.conf: system.conf.d/default-env.conf:2: Failed to resolve specifiers in HTTP_PROXY=http://user%40example.com@proxy:3128 Fix by adding a bash variable substitution that doubles every % to %% before writing to the systemd unit conf files. The profile.d and environment.d destinations do not need this escaping and continue to use the original value. Fixes #28698 Signed-off-by: crawfordxx <crawfordxx@users.noreply.github.com>
This commit is contained in:
parent
138879058b
commit
d0f97989ad
2 changed files with 40 additions and 4 deletions
|
|
@ -26,8 +26,9 @@ rm -f $SYSTEMD_SYSTEM_CONF $SYSTEMD_USER_CONF $ENVD_CONF $PROFILE_CONF
|
|||
echo "[Manager]" >> $SYSTEMD_SYSTEM_CONF
|
||||
echo "[Manager]" >> $SYSTEMD_USER_CONF
|
||||
for proxy in %s; do
|
||||
printf "DefaultEnvironment=\"%%s\"\n" "$proxy" >> $SYSTEMD_SYSTEM_CONF
|
||||
printf "DefaultEnvironment=\"%%s\"\n" "$proxy" >> $SYSTEMD_USER_CONF
|
||||
systemd_proxy="${proxy//%%/%%%%}"
|
||||
printf "DefaultEnvironment=\"%%s\"\n" "$systemd_proxy" >> $SYSTEMD_SYSTEM_CONF
|
||||
printf "DefaultEnvironment=\"%%s\"\n" "$systemd_proxy" >> $SYSTEMD_USER_CONF
|
||||
printf "%%s\n" "$proxy" >> $ENVD_CONF
|
||||
printf "export %%s\n" "$proxy" >> $PROFILE_CONF
|
||||
done
|
||||
|
|
|
|||
|
|
@ -55,8 +55,43 @@ rm -f $SYSTEMD_SYSTEM_CONF $SYSTEMD_USER_CONF $ENVD_CONF $PROFILE_CONF
|
|||
echo "[Manager]" >> $SYSTEMD_SYSTEM_CONF
|
||||
echo "[Manager]" >> $SYSTEMD_USER_CONF
|
||||
for proxy in "http_proxy=proxy1" "https_proxy=sproxy1" "no_proxy=no1,no2"; do
|
||||
printf "DefaultEnvironment=\"%s\"\n" "$proxy" >> $SYSTEMD_SYSTEM_CONF
|
||||
printf "DefaultEnvironment=\"%s\"\n" "$proxy" >> $SYSTEMD_USER_CONF
|
||||
systemd_proxy="${proxy//%/%%}"
|
||||
printf "DefaultEnvironment=\"%s\"\n" "$systemd_proxy" >> $SYSTEMD_SYSTEM_CONF
|
||||
printf "DefaultEnvironment=\"%s\"\n" "$systemd_proxy" >> $SYSTEMD_USER_CONF
|
||||
printf "%s\n" "$proxy" >> $ENVD_CONF
|
||||
printf "export %s\n" "$proxy" >> $PROFILE_CONF
|
||||
done
|
||||
|
||||
systemctl daemon-reload
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "percent sign in proxy value is escaped for systemd",
|
||||
args: args{
|
||||
isWSL: false,
|
||||
envs: []env{
|
||||
{
|
||||
name: "http_proxy",
|
||||
value: "http://user%40example.com@proxy:3128",
|
||||
},
|
||||
},
|
||||
},
|
||||
want: `#!/bin/bash
|
||||
|
||||
SYSTEMD_SYSTEM_CONF=/etc/systemd/system.conf.d/default-env.conf
|
||||
SYSTEMD_USER_CONF=/etc/systemd/user.conf.d/default-env.conf
|
||||
ENVD_CONF=/etc/environment.d/default-env.conf
|
||||
PROFILE_CONF=/etc/profile.d/default-env.sh
|
||||
|
||||
mkdir -p /etc/profile.d /etc/environment.d /etc/systemd/system.conf.d/ /etc/systemd/user.conf.d/
|
||||
rm -f $SYSTEMD_SYSTEM_CONF $SYSTEMD_USER_CONF $ENVD_CONF $PROFILE_CONF
|
||||
|
||||
echo "[Manager]" >> $SYSTEMD_SYSTEM_CONF
|
||||
echo "[Manager]" >> $SYSTEMD_USER_CONF
|
||||
for proxy in "http_proxy=http://user%40example.com@proxy:3128"; do
|
||||
systemd_proxy="${proxy//%/%%}"
|
||||
printf "DefaultEnvironment=\"%s\"\n" "$systemd_proxy" >> $SYSTEMD_SYSTEM_CONF
|
||||
printf "DefaultEnvironment=\"%s\"\n" "$systemd_proxy" >> $SYSTEMD_USER_CONF
|
||||
printf "%s\n" "$proxy" >> $ENVD_CONF
|
||||
printf "export %s\n" "$proxy" >> $PROFILE_CONF
|
||||
done
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue