Skip to content

Commit f90649e

Browse files
authored
Merge pull request #1434 from smallstep/herman/fix-windows-ssh-config-path
Ensure `HOMEDRIVE` is used when locating SSH config file location
2 parents 7d7a8ed + d414692 commit f90649e

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

internal/sshutil/pipe.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,16 @@ const (
1414
)
1515

1616
func determineWindowsPipeName() string {
17-
homePath := os.Getenv("HOMEPATH") // TODO(hs): add default if not set?
18-
sshAgentConfigFile := filepath.Join(homePath, ".ssh", "config")
17+
var (
18+
homeDrive = "C:"
19+
homePath = os.Getenv("HOMEPATH")
20+
)
21+
22+
if hd := os.Getenv("HOMEDRIVE"); hd != "" {
23+
homeDrive = hd
24+
}
25+
26+
sshAgentConfigFile := filepath.Join(homeDrive, homePath, ".ssh", "config")
1927

2028
if pipeName := readWindowsPipeNameFrom(sshAgentConfigFile); pipeName != "" {
2129
return pipeName
@@ -34,7 +42,7 @@ func readWindowsPipeNameFrom(configFile string) (pipeName string) {
3442
if err == nil {
3543
sc := bufio.NewScanner(file)
3644
for sc.Scan() {
37-
line := sc.Text()
45+
line := strings.TrimSpace(sc.Text())
3846
if len(line) > 15 && strings.HasPrefix(line, "IdentityAgent") {
3947
pipeName = re2.ReplaceAllString(re.ReplaceAllString(line[14:], "\\"), "")
4048
break

internal/sshutil/pipe_test.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ func TestDeterminesWindowsPipeName(t *testing.T) {
1616

1717
t.Run("valid-config-file", func(t *testing.T) {
1818
dir := t.TempDir()
19-
file := filepath.Join(dir, ".ssh", "config")
19+
file := filepath.Join(dir, "Users", "username", ".ssh", "config")
2020

21-
t.Setenv("HOMEPATH", dir)
22-
err := os.Mkdir(filepath.Join(dir, ".ssh"), 0777)
21+
t.Setenv("HOMEDRIVE", dir)
22+
t.Setenv("HOMEPATH", filepath.Join("Users", "username"))
23+
err := os.MkdirAll(filepath.Dir(file), 0777)
2324
require.NoError(t, err)
25+
2426
err = os.WriteFile(file, []byte(`IdentityAgent \\.\\pipe\\pageant.user.abcd`), 0600)
2527
require.NoError(t, err)
2628

@@ -29,10 +31,11 @@ func TestDeterminesWindowsPipeName(t *testing.T) {
2931

3032
t.Run("invalid-config-file", func(t *testing.T) {
3133
dir := t.TempDir()
32-
file := filepath.Join(dir, ".ssh", "config")
34+
file := filepath.Join(dir, "Users", "username", ".ssh", "config")
3335

34-
t.Setenv("HOMEPATH", dir)
35-
err := os.Mkdir(filepath.Join(dir, ".ssh"), 0777)
36+
t.Setenv("HOMEDRIVE", dir)
37+
t.Setenv("HOMEPATH", filepath.Join("Users", "username"))
38+
err := os.MkdirAll(filepath.Dir(file), 0777)
3639
require.NoError(t, err)
3740
err = os.WriteFile(file, []byte(`NoIdentityAgent \\.\\pipe\\pageant.user.abcd`), 0600)
3841
require.NoError(t, err)

0 commit comments

Comments
 (0)