-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Quote systemd DefaultEnvironment Proxy values, as documented in syste…
…md.conf man page: Example: DefaultEnvironment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6" Sets three variables "VAR1", "VAR2", "VAR3". Double quote is not escaped, as there is no chance it appears in a proxy value. User can still espace it if really necessary Signed-off-by: Philippe Martin <[email protected]>
- Loading branch information
Showing
3 changed files
with
83 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -76,10 +76,12 @@ var _ = Describe("podman machine proxy settings propagation", func() { | |
Expect(stopSession).To(Exit(0)) | ||
|
||
// Now update proxy env, lets use some special vars to make sure our scripts can handle it | ||
proxy1 := "http:// some special @;\" here" | ||
proxy2 := "https://abc :£$%6 : |\"\"" | ||
proxy1 := "http://foo:b%%[email protected]:8080" | ||
proxy2 := "https://foo:bar%%[email protected]:8080" | ||
noproxy := "noproxy1.example.com,noproxy2.example.com" | ||
os.Setenv("HTTP_PROXY", proxy1) | ||
os.Setenv("HTTPS_PROXY", proxy2) | ||
os.Setenv("NO_PROXY", noproxy) | ||
|
||
// changing SSL_CERT vars should not have an effect | ||
os.Setenv("SSL_CERT_FILE", "/tmp/1") | ||
|
@@ -90,10 +92,10 @@ var _ = Describe("podman machine proxy settings propagation", func() { | |
Expect(err).ToNot(HaveOccurred()) | ||
Expect(startSession).To(Exit(0)) | ||
|
||
sshSession, err = mb.setName(name).setCmd(sshProxy.withSSHCommand([]string{"printenv", "HTTP_PROXY", "HTTPS_PROXY"})).run() | ||
sshSession, err = mb.setName(name).setCmd(sshProxy.withSSHCommand([]string{"printenv", "HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY"})).run() | ||
Expect(err).ToNot(HaveOccurred()) | ||
Expect(sshSession).To(Exit(0)) | ||
Expect(string(sshSession.Out.Contents())).To(Equal(proxy1 + "\n" + proxy2 + "\n")) | ||
Expect(string(sshSession.Out.Contents())).To(Equal(proxy1 + "\n" + proxy2 + "\n" + noproxy + "\n")) | ||
|
||
// SSL_CERT not implemented for WSL | ||
if !isVmtype(define.WSLVirt) { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package proxyenv | ||
|
||
import ( | ||
"bytes" | ||
"testing" | ||
|
||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func Test_getProxyScript(t *testing.T) { | ||
type env struct { | ||
name string | ||
value string | ||
} | ||
type args struct { | ||
isWSL bool | ||
envs []env | ||
} | ||
tests := []struct { | ||
name string | ||
args args | ||
want string | ||
}{ | ||
{ | ||
name: "all vars set", | ||
args: args{ | ||
isWSL: false, | ||
envs: []env{ | ||
{ | ||
name: "http_proxy", | ||
value: "proxy1", | ||
}, | ||
{ | ||
name: "https_proxy", | ||
value: "sproxy1", | ||
}, | ||
{ | ||
name: "no_proxy", | ||
value: "no1,no2", | ||
}, | ||
}, | ||
}, | ||
want: `#!/bin/bash | ||
SYSTEMD_CONF=/etc/systemd/system.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/ | ||
rm -f $SYSTEMD_CONF $ENVD_CONF $PROFILE_CONF | ||
echo "[Manager]" >> $SYSTEMD_CONF | ||
for proxy in "http_proxy=proxy1" "https_proxy=sproxy1" "no_proxy=no1,no2"; do | ||
printf "DefaultEnvironment=\"%s\"\n" "$proxy" >> $SYSTEMD_CONF | ||
printf "%q\n" "$proxy" >> $ENVD_CONF | ||
printf "export %q\n" "$proxy" >> $PROFILE_CONF | ||
done | ||
systemctl daemon-reload | ||
`, | ||
}, | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
for _, e := range tt.args.envs { | ||
t.Setenv(e.name, e.value) | ||
} | ||
got := getProxyScript(tt.args.isWSL) | ||
buf := new(bytes.Buffer) | ||
_, err := buf.ReadFrom(got) | ||
assert.NoError(t, err) | ||
str := buf.String() | ||
assert.Equal(t, tt.want, str) | ||
}) | ||
} | ||
} |