aboutsummaryrefslogtreecommitdiff
path: root/ssh/server_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'ssh/server_test.go')
-rw-r--r--ssh/server_test.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/ssh/server_test.go b/ssh/server_test.go
index b6d8ab3..ba1bd10 100644
--- a/ssh/server_test.go
+++ b/ssh/server_test.go
@@ -5,6 +5,7 @@
package ssh
import (
+ "bytes"
"errors"
"fmt"
"io"
@@ -299,6 +300,54 @@ func TestBannerError(t *testing.T) {
}
}
+func TestPublicKeyCallbackLastSeen(t *testing.T) {
+ var lastSeenKey PublicKey
+
+ c1, c2, err := netPipe()
+ if err != nil {
+ t.Fatalf("netPipe: %v", err)
+ }
+ defer c1.Close()
+ defer c2.Close()
+ serverConf := &ServerConfig{
+ PublicKeyCallback: func(conn ConnMetadata, key PublicKey) (*Permissions, error) {
+ lastSeenKey = key
+ fmt.Printf("seen %#v\n", key)
+ if _, ok := key.(*dsaPublicKey); !ok {
+ return nil, errors.New("nope")
+ }
+ return nil, nil
+ },
+ }
+ serverConf.AddHostKey(testSigners["ecdsap256"])
+
+ done := make(chan struct{})
+ go func() {
+ defer close(done)
+ NewServerConn(c1, serverConf)
+ }()
+
+ clientConf := ClientConfig{
+ User: "user",
+ Auth: []AuthMethod{
+ PublicKeys(testSigners["rsa"], testSigners["dsa"], testSigners["ed25519"]),
+ },
+ HostKeyCallback: InsecureIgnoreHostKey(),
+ }
+
+ _, _, _, err = NewClientConn(c2, "", &clientConf)
+ if err != nil {
+ t.Fatal(err)
+ }
+ <-done
+
+ expectedPublicKey := testSigners["dsa"].PublicKey().Marshal()
+ lastSeenMarshalled := lastSeenKey.Marshal()
+ if !bytes.Equal(lastSeenMarshalled, expectedPublicKey) {
+ t.Errorf("unexpected key: got %#v, want %#v", lastSeenKey, testSigners["dsa"].PublicKey())
+ }
+}
+
type markerConn struct {
closed uint32
used uint32