aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing
diff options
context:
space:
mode:
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")
+}