diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..44db581 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +testdata/dos-lines eol=crlf diff --git a/AUTHORS.txt b/AUTHORS.txt index 062495d..b29d4fd 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,2 +1,3 @@ +Eugene Terentev Kevin Burke Sergey Lukjanov diff --git a/config_test.go b/config_test.go index 58e62c9..b9122f7 100644 --- a/config_test.go +++ b/config_test.go @@ -338,3 +338,27 @@ func TestIndexInRange(t *testing.T) { t.Errorf("expected User to be %q, got %q", "root", user) } } + +func TestDosLinesEndingsDecode(t *testing.T) { + us := &UserSettings{ + userConfigFinder: testConfigFinder("testdata/dos-lines"), + } + + user, err := us.GetStrict("wap", "User") + if err != nil { + t.Fatal(err) + } + + if user != "root" { + t.Errorf("expected User to be %q, got %q", "root", user) + } + + host, err := us.GetStrict("wap2", "HostName") + if err != nil { + t.Fatal(err) + } + + if host != "8.8.8.8" { + t.Errorf("expected HostName to be %q, got %q", "8.8.8.8", host) + } +} diff --git a/lexer.go b/lexer.go index 6999d63..b0c6a86 100644 --- a/lexer.go +++ b/lexer.go @@ -86,6 +86,12 @@ func (s *sshLexer) lexRvalue() sshLexStateFn { for { next := s.peek() switch next { + case '\r': + if s.follow("\r\n") { + s.emitWithValue(tokenString, growingString) + s.skip() + return s.lexVoid + } case '\n': s.emitWithValue(tokenString, growingString) s.skip() diff --git a/testdata/dos-lines b/testdata/dos-lines new file mode 100644 index 0000000..1001df4 --- /dev/null +++ b/testdata/dos-lines @@ -0,0 +1,10 @@ +# Config file with dos line endings +Host wap + HostName wap.example.org + Port 22 + User root + KexAlgorithms diffie-hellman-group1-sha1 + +Host wap2 + HostName 8.8.8.8 + User google