diff --git a/netrc.go b/netrc.go index c7f6a3fb..2fe868ad 100644 --- a/netrc.go +++ b/netrc.go @@ -5,6 +5,7 @@ import ( "net/url" "os" "runtime" + "syscall" "github.com/bgentry/go-netrc/netrc" "github.com/mitchellh/go-homedir" @@ -38,7 +39,7 @@ func addAuthFromNetrc(u *url.URL) error { // If the file is not a file, then do nothing if fi, err := os.Stat(path); err != nil { // File doesn't exist, do nothing - if os.IsNotExist(err) { + if serr, ok := err.(*os.PathError); ok && (os.IsNotExist(serr.Err) || serr.Err == syscall.ENOTDIR) { return nil } diff --git a/netrc_test.go b/netrc_test.go index 61836761..43815c51 100644 --- a/netrc_test.go +++ b/netrc_test.go @@ -61,3 +61,43 @@ func TestAddAuthFromNetrc_hasUsername(t *testing.T) { t.Fatalf("Mismatch: %q != %q", actual, expected) } } + +func TestAddAuthFromNetrc_isNotExist(t *testing.T) { + defer tempEnv(t, "NETRC", "./testdata/netrc/_does_not_exist")() + + u, err := url.Parse("http://example.com") + if err != nil { + t.Fatalf("err: %s", err) + } + + if err := addAuthFromNetrc(u); err != nil { + t.Fatalf("err: %s", err) + } + + // no netrc, no change: + expected := "http://example.com" + actual := u.String() + if expected != actual { + t.Fatalf("Mismatch: %q != %q", actual, expected) + } +} + +func TestAddAuthFromNetrc_isNotADirectory(t *testing.T) { + defer tempEnv(t, "NETRC", "./testdata/netrc/basic/parent-not-a-dir")() + + u, err := url.Parse("http://example.com") + if err != nil { + t.Fatalf("err: %s", err) + } + + if err := addAuthFromNetrc(u); err != nil { + t.Fatalf("err: %s", err) + } + + // no netrc, no change: + expected := "http://example.com" + actual := u.String() + if expected != actual { + t.Fatalf("Mismatch: %q != %q", actual, expected) + } +}