aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSheng Yang <styang@fastmail.com>2023-01-14 03:46:11 +0800
committerSheng Yang <styang@fastmail.com>2023-01-14 03:46:11 +0800
commit7c08144c4ab0082e9ac48e829de755fd861a0ca7 (patch)
tree2ec21b107e520018feae8b81cccf97e7a3688b1b
parentd21f54958ebc3400ca41e0458338e6a90bd47fbe (diff)
Add escape for systemd service in installer script
Among all the characters that are allowed in a URL, both the percentage sign "%" and the single quotation mark "'" needs escaping when written as a environment variable in a systemd service file. While the single quotation mark may be rare, the percentage sign is widely used to escape characters in a URL. This is especially common in proxy setting, where username and password may contain special characters that need percentage escaping. This patch applies the following replacements: % -> %% ' -> \'
-rwxr-xr-xscripts/install-systemd-multi-user.sh7
1 files changed, 6 insertions, 1 deletions
diff --git a/scripts/install-systemd-multi-user.sh b/scripts/install-systemd-multi-user.sh
index 62397127a..7dd567747 100755
--- a/scripts/install-systemd-multi-user.sh
+++ b/scripts/install-systemd-multi-user.sh
@@ -24,12 +24,17 @@ $1
EOF
}
+escape_systemd_env() {
+ temp_var="${1//\'/\\\'}"
+ echo "${temp_var//\%/%%}"
+}
+
# Gather all non-empty proxy environment variables into a string
create_systemd_proxy_env() {
vars="http_proxy https_proxy ftp_proxy no_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY"
for v in $vars; do
if [ "x${!v:-}" != "x" ]; then
- echo "Environment=${v}=${!v}"
+ echo "Environment=${v}=$(escape_systemd_env ${!v})"
fi
done
}