From 8ddbecf782c2e340fd85bb4ba4d00dc73d749f87 Mon Sep 17 00:00:00 2001 From: Máximo Cuadros Date: Fri, 28 Jul 2017 21:58:40 +0200 Subject: transport: fix ssh override config, fixes #519 --- plumbing/transport/ssh/common.go | 13 ++++++++----- plumbing/transport/ssh/common_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 5 deletions(-) (limited to 'plumbing/transport/ssh') diff --git a/plumbing/transport/ssh/common.go b/plumbing/transport/ssh/common.go index 6d1c51b..af79dfb 100644 --- a/plumbing/transport/ssh/common.go +++ b/plumbing/transport/ssh/common.go @@ -146,11 +146,14 @@ func overrideConfig(overrides *ssh.ClientConfig, c *ssh.ClientConfig) { return } - vo := reflect.ValueOf(*overrides) - vc := reflect.ValueOf(*c) - for i := 0; i < vc.Type().NumField(); i++ { - vcf := vc.Field(i) - vof := vo.Field(i) + t := reflect.TypeOf(*c) + vc := reflect.ValueOf(c).Elem() + vo := reflect.ValueOf(overrides).Elem() + + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + vcf := vc.FieldByName(f.Name) + vof := vo.FieldByName(f.Name) if isZeroValue(vcf) { vcf.Set(vof) } diff --git a/plumbing/transport/ssh/common_test.go b/plumbing/transport/ssh/common_test.go index da99148..1b07eee 100644 --- a/plumbing/transport/ssh/common_test.go +++ b/plumbing/transport/ssh/common_test.go @@ -3,7 +3,39 @@ package ssh import ( "testing" + "golang.org/x/crypto/ssh" + . "gopkg.in/check.v1" ) func Test(t *testing.T) { TestingT(t) } + +func (s *SuiteCommon) TestOverrideConfig(c *C) { + config := &ssh.ClientConfig{ + User: "foo", + Auth: []ssh.AuthMethod{ + ssh.Password("yourpassword"), + }, + HostKeyCallback: ssh.FixedHostKey(nil), + } + + target := &ssh.ClientConfig{} + overrideConfig(config, target) + + c.Assert(target.User, Equals, "foo") + c.Assert(target.Auth, HasLen, 1) + c.Assert(target.HostKeyCallback, NotNil) +} + +func (s *SuiteCommon) TestOverrideConfigKeep(c *C) { + config := &ssh.ClientConfig{ + User: "foo", + } + + target := &ssh.ClientConfig{ + User: "bar", + } + + overrideConfig(config, target) + c.Assert(target.User, Equals, "bar") +} -- cgit