diff options
author | Sheng Yang <styang@fastmail.com> | 2023-01-14 03:46:11 +0800 |
---|---|---|
committer | Sheng Yang <styang@fastmail.com> | 2023-01-14 03:46:11 +0800 |
commit | 7c08144c4ab0082e9ac48e829de755fd861a0ca7 (patch) | |
tree | 2ec21b107e520018feae8b81cccf97e7a3688b1b | |
parent | d21f54958ebc3400ca41e0458338e6a90bd47fbe (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-x | scripts/install-systemd-multi-user.sh | 7 |
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 } |