From 4b7fefd5ef65f7823bd4484c3fe165d43ef94d20 Mon Sep 17 00:00:00 2001 From: Ying Li Date: Wed, 11 Nov 2015 19:51:57 -0800 Subject: [PATCH] Do not clean up a session if there is no session. Signed-off-by: Ying Li Signed-off-by: David Lawrence Signed-off-by: Ying Li (github: endophage) --- Makefile | 2 +- trustmanager/yubikey/yubikeystore.go | 14 +++++++++----- trustmanager/yubikey/yubikeystore_test.go | 3 ++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index d6b7dc4c10..a45271ddda 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ GO_LDFLAGS=-ldflags "-w $(CTIMEVAR)" GO_LDFLAGS_STATIC=-ldflags "-w $(CTIMEVAR) -extldflags -static" GOOSES = darwin freebsd linux GOARCHS = amd64 -NOTARY_BUILDTAGS ?= "pkcs11" +NOTARY_BUILDTAGS ?= pkcs11 GO_EXC = go NOTARYDIR := /go/src/github.com/docker/notary diff --git a/trustmanager/yubikey/yubikeystore.go b/trustmanager/yubikey/yubikeystore.go index 47a97dc9bd..5df3f430ed 100644 --- a/trustmanager/yubikey/yubikeystore.go +++ b/trustmanager/yubikey/yubikeystore.go @@ -771,7 +771,11 @@ func cleanup(ctx IPKCS11Ctx, session pkcs11.SessionHandle) { if err != nil { logrus.Debugf("Error closing session: %s", err.Error()) } - err = ctx.Finalize() + finalizeAndDestroy(ctx) +} + +func finalizeAndDestroy(ctx IPKCS11Ctx) { + err := ctx.Finalize() if err != nil { logrus.Debugf("Error finalizing: %s", err.Error()) } @@ -792,18 +796,18 @@ func SetupHSMEnv(libraryPath string, libLoader pkcs11LibLoader) ( } if err := p.Initialize(); err != nil { - defer cleanup(p, 0) + defer finalizeAndDestroy(p) return nil, 0, fmt.Errorf("Initialize error %s", err.Error()) } slots, err := p.GetSlotList(true) if err != nil { - defer cleanup(p, 0) + defer finalizeAndDestroy(p) return nil, 0, fmt.Errorf("Failed to list HSM slots %s", err) } // Check to see if we got any slots from the HSM. if len(slots) < 1 { - defer cleanup(p, 0) + defer finalizeAndDestroy(p) return nil, 0, fmt.Errorf("No HSM Slots found") } @@ -811,7 +815,7 @@ func SetupHSMEnv(libraryPath string, libLoader pkcs11LibLoader) ( // CKF_RW_SESSION: TRUE if the session is read/write; FALSE if the session is read-only session, err := p.OpenSession(slots[0], pkcs11.CKF_SERIAL_SESSION|pkcs11.CKF_RW_SESSION) if err != nil { - defer cleanup(p, 0) + defer cleanup(p, session) return nil, 0, fmt.Errorf("Failed to Start Session with HSM %s", err) } diff --git a/trustmanager/yubikey/yubikeystore_test.go b/trustmanager/yubikey/yubikeystore_test.go index ab53f2eaea..672a61eb35 100644 --- a/trustmanager/yubikey/yubikeystore_test.go +++ b/trustmanager/yubikey/yubikeystore_test.go @@ -64,7 +64,7 @@ func testAddKey(t *testing.T, store trustmanager.KeyStore) (data.PrivateKey, err } func addMaxKeys(t *testing.T, store trustmanager.KeyStore) []string { - keys := make([]string, 0, numSlots) + var keys []string // create the maximum number of keys for i := 0; i < numSlots; i++ { privKey, err := testAddKey(t, store) @@ -378,6 +378,7 @@ func TestYubiExportKeyFails(t *testing.T) { _, err = store.ExportKey(key.ID()) assert.Error(t, err) + assert.Equal(t, "Keys cannot be exported from a Yubikey.", err.Error()) } // If there are keys in the backup store but no keys in the Yubikey,