From 9592211bcf0b414ab70b6e8f9692a2ccd1942d28 Mon Sep 17 00:00:00 2001 From: Stephen Fox Date: Thu, 25 Jul 2019 17:09:32 -0400 Subject: [PATCH] Honor value of 'Comment' field in 'ssh.KeyPairFromPrivateKey()'. The 'ssh.KeyPairFromPrivateKey()' function in the 'ssh' helper library was not honoring the value of the 'Comment' field in the 'FromPrivateKeyConfig' struct. This commit fixes the issue, and updates unit tests to catch the issue if it happens again. --- helper/ssh/key_pair.go | 2 ++ helper/ssh/key_pair_test.go | 45 ++++++++++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/helper/ssh/key_pair.go b/helper/ssh/key_pair.go index fd052dc2e..0ca6b95ec 100644 --- a/helper/ssh/key_pair.go +++ b/helper/ssh/key_pair.go @@ -77,6 +77,7 @@ func KeyPairFromPrivateKey(config FromPrivateKeyConfig) (KeyPair, error) { return KeyPair{}, err } return KeyPair{ + Comment: config.Comment, PrivateKeyPemBlock: config.RawPrivateKeyPemBlock, PublicKeyAuthorizedKeysLine: authorizedKeysLine(publicKey, config.Comment), }, nil @@ -86,6 +87,7 @@ func KeyPairFromPrivateKey(config FromPrivateKeyConfig) (KeyPair, error) { return KeyPair{}, err } return KeyPair{ + Comment: config.Comment, PrivateKeyPemBlock: config.RawPrivateKeyPemBlock, PublicKeyAuthorizedKeysLine: authorizedKeysLine(publicKey, config.Comment), }, nil diff --git a/helper/ssh/key_pair_test.go b/helper/ssh/key_pair_test.go index 3c98c84e8..5ff182467 100644 --- a/helper/ssh/key_pair_test.go +++ b/helper/ssh/key_pair_test.go @@ -237,49 +237,57 @@ func TestKeyPairFromPrivateKey(t *testing.T) { pemRsa1024: { t: Rsa, d: expectedData{ - bits: 1024, + bits: 1024, + comment: uuid.TimeOrderedUUID(), }, }, pemRsa2048: { t: Rsa, d: expectedData{ - bits: 2048, + bits: 2048, + comment: uuid.TimeOrderedUUID(), }, }, pemOpenSshRsa1024: { t: Rsa, d: expectedData{ - bits: 1024, + bits: 1024, + comment: uuid.TimeOrderedUUID(), }, }, pemOpenSshRsa2048: { t: Rsa, d: expectedData{ - bits: 2048, + bits: 2048, + comment: uuid.TimeOrderedUUID(), }, }, pemDsa: { t: Dsa, d: expectedData{ - bits: 1024, + bits: 1024, + comment: uuid.TimeOrderedUUID(), }, }, pemEcdsa384: { t: Ecdsa, d: expectedData{ - bits: 384, + bits: 384, + comment: uuid.TimeOrderedUUID(), }, }, pemEcdsa521: { t: Ecdsa, d: expectedData{ - bits: 521, + bits: 521, + comment: uuid.TimeOrderedUUID(), }, }, pemOpenSshEd25519: { t: Ed25519, d: expectedData{ - bits: 256, + bits: 256, + comment: uuid.TimeOrderedUUID(), }, }, } @@ -287,6 +295,7 @@ func TestKeyPairFromPrivateKey(t *testing.T) { for rawPrivateKey, expected := range m { kp, err := KeyPairFromPrivateKey(FromPrivateKeyConfig{ RawPrivateKeyPemBlock: []byte(rawPrivateKey), + Comment: expected.d.comment, }) if err != nil { t.Fatal(err.Error()) @@ -340,6 +349,11 @@ func verifyEcdsaKeyPair(kp KeyPair, e expectedData) error { return err } + if kp.Comment != e.comment { + return fmt.Errorf("key pair comment should be:\n'%s'\nGot:\n'%s'", + e.comment, kp.Comment) + } + expectedBytes := bytes.TrimSuffix(gossh.MarshalAuthorizedKey(publicKey), []byte("\n")) if len(e.comment) > 0 { expectedBytes = append(expectedBytes, ' ') @@ -374,6 +388,11 @@ func verifyRsaKeyPair(kp KeyPair, e expectedData) error { return err } + if kp.Comment != e.comment { + return fmt.Errorf("key pair comment should be:\n'%s'\nGot:\n'%s'", + e.comment, kp.Comment) + } + expectedBytes := bytes.TrimSuffix(gossh.MarshalAuthorizedKey(publicKey), []byte("\n")) if len(e.comment) > 0 { expectedBytes = append(expectedBytes, ' ') @@ -404,6 +423,11 @@ func verifyDsaKeyPair(kp KeyPair, e fromPrivateExpectedData) error { return err } + if kp.Comment != e.d.comment { + return fmt.Errorf("key pair comment should be:\n'%s'\nGot:\n'%s'", + e.d.comment, kp.Comment) + } + expectedBytes := bytes.TrimSuffix(gossh.MarshalAuthorizedKey(publicKey), []byte("\n")) if len(e.d.comment) > 0 { expectedBytes = append(expectedBytes, ' ') @@ -434,6 +458,11 @@ func verifyEd25519KeyPair(kp KeyPair, e fromPrivateExpectedData) error { return err } + if kp.Comment != e.d.comment { + return fmt.Errorf("key pair comment should be:\n'%s'\nGot:\n'%s'", + e.d.comment, kp.Comment) + } + expectedBytes := bytes.TrimSuffix(gossh.MarshalAuthorizedKey(publicKey), []byte("\n")) if len(e.d.comment) > 0 { expectedBytes = append(expectedBytes, ' ')