@@ -103,7 +103,7 @@ require ( | |||
github.com/yuin/goldmark v1.2.1 | |||
github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691 | |||
github.com/yuin/goldmark-meta v0.0.0-20191126180153-f0638e958b60 | |||
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 | |||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de | |||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 | |||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d | |||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 |
@@ -711,8 +711,6 @@ github.com/yuin/goldmark v1.1.7/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec | |||
github.com/yuin/goldmark v1.1.22/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
github.com/yuin/goldmark v1.1.25 h1:isv+Q6HQAmmL2Ofcmg8QauBmDPlUUnSoNhEcC940Rds= | |||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
github.com/yuin/goldmark v1.1.32 h1:5tjfNdR2ki3yYQ842+eX2sQHeiwpKJ0RnHO4IYOc4V8= | |||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM= | |||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691 h1:VWSxtAiQNh3zgHJpdpkpVYjTPqRE3P6UZCOPa1nRDio= | |||
@@ -750,8 +748,8 @@ golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8U | |||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 h1:xMPOj6Pz6UipU1wXLkrtqpHbR0AVFnyPEQq/wRWz9lM= | |||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |||
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM= | |||
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= | |||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | |||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | |||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | |||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= |
@@ -36,7 +36,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { | |||
// during the authentication phase the client first attempts the "none" method | |||
// then any untried methods suggested by the server. | |||
tried := make(map[string]bool) | |||
var tried []string | |||
var lastMethods []string | |||
sessionID := c.transport.getSessionID() | |||
@@ -49,7 +49,9 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { | |||
// success | |||
return nil | |||
} else if ok == authFailure { | |||
tried[auth.method()] = true | |||
if m := auth.method(); !contains(tried, m) { | |||
tried = append(tried, m) | |||
} | |||
} | |||
if methods == nil { | |||
methods = lastMethods | |||
@@ -61,7 +63,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { | |||
findNext: | |||
for _, a := range config.Auth { | |||
candidateMethod := a.method() | |||
if tried[candidateMethod] { | |||
if contains(tried, candidateMethod) { | |||
continue | |||
} | |||
for _, meth := range methods { | |||
@@ -72,16 +74,16 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { | |||
} | |||
} | |||
} | |||
return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", keys(tried)) | |||
return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", tried) | |||
} | |||
func keys(m map[string]bool) []string { | |||
s := make([]string, 0, len(m)) | |||
for key := range m { | |||
s = append(s, key) | |||
func contains(list []string, e string) bool { | |||
for _, s := range list { | |||
if s == e { | |||
return true | |||
} | |||
} | |||
return s | |||
return false | |||
} | |||
// An AuthMethod represents an instance of an RFC 4252 authentication method. |
@@ -741,7 +741,7 @@ go.mongodb.org/mongo-driver/bson/bsonrw | |||
go.mongodb.org/mongo-driver/bson/bsontype | |||
go.mongodb.org/mongo-driver/bson/primitive | |||
go.mongodb.org/mongo-driver/x/bsonx/bsoncore | |||
# golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 | |||
# golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de | |||
## explicit | |||
golang.org/x/crypto/acme | |||
golang.org/x/crypto/acme/autocert |