aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2017-07-28 21:58:40 +0200
committerMáximo Cuadros <mcuadros@gmail.com>2017-07-28 21:58:40 +0200
commit8ddbecf782c2e340fd85bb4ba4d00dc73d749f87 (patch)
treeb4cfbd1727ad5609801a3f12504077b409b72361 /plumbing
parent11a403e8af2f5f1f2d5fd3bc73c1ff943ccb7c96 (diff)
downloadgo-git-8ddbecf782c2e340fd85bb4ba4d00dc73d749f87.tar.gz
transport: fix ssh override config, fixes #519v4.0.0-rc13
Diffstat (limited to 'plumbing')
-rw-r--r--plumbing/transport/ssh/common.go13
-rw-r--r--plumbing/transport/ssh/common_test.go32
2 files changed, 40 insertions, 5 deletions
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")
+}