mirror of
https://github.com/docker/docs.git
synced 2026-11-05 00:14:17 +03:00
Undo some changes from a bad stash pop that were unintentional.
Signed-off-by: Ying Li <ying.li@docker.com> Signed-off-by: David Lawrence <david.lawrence@docker.com> Signed-off-by: Ying Li <ying.li@docker.com> (github: endophage)
This commit is contained in:
@@ -162,10 +162,10 @@ func (y YubiPrivateKey) SignatureAlgorithm() data.SigAlgorithm {
|
||||
|
||||
func (y *YubiPrivateKey) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) {
|
||||
ctx, session, err := SetupHSMEnv(pkcs11Lib, y.libLoader)
|
||||
defer cleanup(ctx, session)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer cleanup(ctx, session)
|
||||
|
||||
v := signed.Verifiers[data.ECDSASignature]
|
||||
for i := 0; i < sigAttempts; i++ {
|
||||
@@ -621,11 +621,12 @@ func (s *YubiKeyStore) ListKeys() map[string]string {
|
||||
return buildKeyMap(s.keys)
|
||||
}
|
||||
ctx, session, err := SetupHSMEnv(pkcs11Lib, s.libLoader)
|
||||
defer cleanup(ctx, session)
|
||||
if err != nil {
|
||||
logrus.Debugf("Failed to initialize PKCS11 environment: %s", err.Error())
|
||||
return nil
|
||||
}
|
||||
defer cleanup(ctx, session)
|
||||
|
||||
keys, err := yubiListKeys(ctx, session)
|
||||
if err != nil {
|
||||
logrus.Debugf("Failed to list key from the yubikey: %s", err.Error())
|
||||
@@ -649,11 +650,11 @@ func (s *YubiKeyStore) addKey(
|
||||
}
|
||||
|
||||
ctx, session, err := SetupHSMEnv(pkcs11Lib, s.libLoader)
|
||||
defer cleanup(ctx, session)
|
||||
if err != nil {
|
||||
logrus.Debugf("Failed to initialize PKCS11 environment: %s", err.Error())
|
||||
return err
|
||||
}
|
||||
defer cleanup(ctx, session)
|
||||
|
||||
if k, ok := s.keys[keyID]; ok {
|
||||
if k.role == role {
|
||||
@@ -692,11 +693,11 @@ func (s *YubiKeyStore) addKey(
|
||||
// backup store)
|
||||
func (s *YubiKeyStore) GetKey(keyID string) (data.PrivateKey, string, error) {
|
||||
ctx, session, err := SetupHSMEnv(pkcs11Lib, s.libLoader)
|
||||
defer cleanup(ctx, session)
|
||||
if err != nil {
|
||||
logrus.Debugf("Failed to initialize PKCS11 environment: %s", err.Error())
|
||||
return nil, "", err
|
||||
}
|
||||
defer cleanup(ctx, session)
|
||||
|
||||
key, ok := s.keys[keyID]
|
||||
if !ok {
|
||||
@@ -724,11 +725,12 @@ func (s *YubiKeyStore) GetKey(keyID string) (data.PrivateKey, string, error) {
|
||||
// backup store)
|
||||
func (s *YubiKeyStore) RemoveKey(keyID string) error {
|
||||
ctx, session, err := SetupHSMEnv(pkcs11Lib, s.libLoader)
|
||||
defer cleanup(ctx, session)
|
||||
if err != nil {
|
||||
logrus.Debugf("Failed to initialize PKCS11 environment: %s", err.Error())
|
||||
return nil
|
||||
}
|
||||
defer cleanup(ctx, session)
|
||||
|
||||
key, ok := s.keys[keyID]
|
||||
if !ok {
|
||||
return errors.New("Key not present in yubikey")
|
||||
@@ -765,17 +767,15 @@ func (s *YubiKeyStore) ImportKey(pemBytes []byte, keyPath string) error {
|
||||
}
|
||||
|
||||
func cleanup(ctx IPKCS11Ctx, session pkcs11.SessionHandle) {
|
||||
if ctx != nil {
|
||||
err := ctx.CloseSession(session)
|
||||
if err != nil {
|
||||
logrus.Debugf("Error closing session: %s", err.Error())
|
||||
}
|
||||
err = ctx.Finalize()
|
||||
if err != nil {
|
||||
logrus.Debugf("Error finalizing: %s", err.Error())
|
||||
}
|
||||
ctx.Destroy()
|
||||
err := ctx.CloseSession(session)
|
||||
if err != nil {
|
||||
logrus.Debugf("Error closing session: %s", err.Error())
|
||||
}
|
||||
err = ctx.Finalize()
|
||||
if err != nil {
|
||||
logrus.Debugf("Error finalizing: %s", err.Error())
|
||||
}
|
||||
ctx.Destroy()
|
||||
}
|
||||
|
||||
// SetupHSMEnv is a method that depends on the existences
|
||||
@@ -824,10 +824,10 @@ func YubikeyAccessible() bool {
|
||||
return false
|
||||
}
|
||||
ctx, session, err := SetupHSMEnv(pkcs11Lib, defaultLoader)
|
||||
defer cleanup(ctx, session)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
defer cleanup(ctx, session)
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -89,9 +89,9 @@ func TestYubiAddKeysAndRetrieve(t *testing.T) {
|
||||
|
||||
// create 4 keys on the original store
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
origStore, err := NewYubiKeyStore(backup, ret)
|
||||
store, err := NewYubiKeyStore(backup, ret)
|
||||
assert.NoError(t, err)
|
||||
keys := addMaxKeys(t, origStore)
|
||||
keys := addMaxKeys(t, store)
|
||||
|
||||
// create a new store, since we want to be sure the original store's cache
|
||||
// is not masking any issues
|
||||
@@ -101,7 +101,7 @@ func TestYubiAddKeysAndRetrieve(t *testing.T) {
|
||||
// All 4 keys should be in the original store, in the clean store (which
|
||||
// makes sure the keys are actually on the Yubikey and not on the original
|
||||
// store's cache, and on the backup store)
|
||||
for _, store := range []trustmanager.KeyStore{origStore, cleanStore, backup} {
|
||||
for _, store := range []trustmanager.KeyStore{store, cleanStore, backup} {
|
||||
listedKeys := store.ListKeys()
|
||||
assert.Len(t, listedKeys, numSlots)
|
||||
for _, k := range keys {
|
||||
@@ -129,12 +129,12 @@ func TestYubiAddKeyFailureIfNoMoreSlots(t *testing.T) {
|
||||
|
||||
// create 4 keys on the original store
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
origStore, err := NewYubiKeyStore(backup, ret)
|
||||
store, err := NewYubiKeyStore(backup, ret)
|
||||
assert.NoError(t, err)
|
||||
addMaxKeys(t, origStore)
|
||||
addMaxKeys(t, store)
|
||||
|
||||
// add another key - should fail because there are no more slots
|
||||
badKey, err := testAddKey(t, origStore)
|
||||
badKey, err := testAddKey(t, store)
|
||||
assert.Error(t, err)
|
||||
|
||||
// create a new store, since we want to be sure the original store's cache
|
||||
@@ -144,7 +144,7 @@ func TestYubiAddKeyFailureIfNoMoreSlots(t *testing.T) {
|
||||
|
||||
// The key should not be in the original store, in the new clean store, or
|
||||
// in teh backup store.
|
||||
for _, store := range []trustmanager.KeyStore{origStore, cleanStore, backup} {
|
||||
for _, store := range []trustmanager.KeyStore{store, cleanStore, backup} {
|
||||
// the key that wasn't created should not appear in ListKeys or GetKey
|
||||
_, _, err := store.GetKey(badKey.ID())
|
||||
assert.Error(t, err)
|
||||
@@ -169,16 +169,16 @@ func TestYubiAddKeyCanAddToMiddleSlot(t *testing.T) {
|
||||
|
||||
// create 4 keys on the original store
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
origStore, err := NewYubiKeyStore(backup, ret)
|
||||
store, err := NewYubiKeyStore(backup, ret)
|
||||
assert.NoError(t, err)
|
||||
keys := addMaxKeys(t, origStore)
|
||||
keys := addMaxKeys(t, store)
|
||||
|
||||
// delete one of the middle keys, and assert we can still create a new key
|
||||
keyIDToDelete := keys[numSlots/2]
|
||||
err = origStore.RemoveKey(keyIDToDelete)
|
||||
err = store.RemoveKey(keyIDToDelete)
|
||||
assert.NoError(t, err)
|
||||
|
||||
newKey, err := testAddKey(t, origStore)
|
||||
newKey, err := testAddKey(t, store)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// create a new store, since we want to be sure the original store's cache
|
||||
@@ -189,7 +189,7 @@ func TestYubiAddKeyCanAddToMiddleSlot(t *testing.T) {
|
||||
// The new key should be in the original store, in the new clean store, and
|
||||
// in the backup store. The old key should not be in the original store,
|
||||
// or the new clean store.
|
||||
for _, store := range []trustmanager.KeyStore{origStore, cleanStore, backup} {
|
||||
for _, store := range []trustmanager.KeyStore{store, cleanStore, backup} {
|
||||
// new key should appear in all stores
|
||||
gottenKey, _, err := store.GetKey(newKey.ID())
|
||||
assert.NoError(t, err)
|
||||
@@ -222,12 +222,12 @@ func TestYubiRemoveKey(t *testing.T) {
|
||||
}()
|
||||
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
origStore, err := NewYubiKeyStore(backup, ret)
|
||||
store, err := NewYubiKeyStore(backup, ret)
|
||||
assert.NoError(t, err)
|
||||
|
||||
key, err := testAddKey(t, origStore)
|
||||
key, err := testAddKey(t, store)
|
||||
assert.NoError(t, err)
|
||||
err = origStore.RemoveKey(key.ID())
|
||||
err = store.RemoveKey(key.ID())
|
||||
assert.NoError(t, err)
|
||||
|
||||
// key remains in the backup store
|
||||
@@ -242,7 +242,7 @@ func TestYubiRemoveKey(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// key is not in either the original store or the clean store
|
||||
for _, store := range []*YubiKeyStore{origStore, cleanStore} {
|
||||
for _, store := range []*YubiKeyStore{store, cleanStore} {
|
||||
_, _, err := store.GetKey(key.ID())
|
||||
assert.Error(t, err)
|
||||
}
|
||||
@@ -261,7 +261,7 @@ func TestYubiImportNewKey(t *testing.T) {
|
||||
}()
|
||||
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
origStore, err := NewYubiKeyStore(backup, ret)
|
||||
store, err := NewYubiKeyStore(backup, ret)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// generate key and import it
|
||||
@@ -271,7 +271,7 @@ func TestYubiImportNewKey(t *testing.T) {
|
||||
pemBytes, err := trustmanager.EncryptPrivateKey(privKey, "passphrase")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = origStore.ImportKey(pemBytes, "root")
|
||||
err = store.ImportKey(pemBytes, "root")
|
||||
assert.NoError(t, err)
|
||||
|
||||
// key is not in backup store
|
||||
@@ -282,7 +282,7 @@ func TestYubiImportNewKey(t *testing.T) {
|
||||
// is not masking any issues
|
||||
cleanStore, err := NewYubiKeyStore(trustmanager.NewKeyMemoryStore(ret), ret)
|
||||
assert.NoError(t, err)
|
||||
for _, store := range []*YubiKeyStore{origStore, cleanStore} {
|
||||
for _, store := range []*YubiKeyStore{store, cleanStore} {
|
||||
gottenKey, role, err := store.GetKey(privKey.ID())
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, data.CanonicalRootRole, role)
|
||||
@@ -303,9 +303,9 @@ func TestYubiImportExistingKey(t *testing.T) {
|
||||
SetYubikeyKeyMode(KeymodeTouch | KeymodePinOnce)
|
||||
}()
|
||||
|
||||
origStore, err := NewYubiKeyStore(trustmanager.NewKeyMemoryStore(ret), ret)
|
||||
store, err := NewYubiKeyStore(trustmanager.NewKeyMemoryStore(ret), ret)
|
||||
assert.NoError(t, err)
|
||||
key, err := testAddKey(t, origStore)
|
||||
key, err := testAddKey(t, store)
|
||||
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
newStore, err := NewYubiKeyStore(backup, ret)
|
||||
@@ -340,7 +340,7 @@ func TestYubiImportNonRootKey(t *testing.T) {
|
||||
}()
|
||||
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
origStore, err := NewYubiKeyStore(backup, ret)
|
||||
store, err := NewYubiKeyStore(backup, ret)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// generate key and import it
|
||||
@@ -350,7 +350,7 @@ func TestYubiImportNonRootKey(t *testing.T) {
|
||||
pemBytes, err := trustmanager.EncryptPrivateKey(privKey, "passphrase")
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = origStore.ImportKey(pemBytes, privKey.ID())
|
||||
err = store.ImportKey(pemBytes, privKey.ID())
|
||||
assert.Error(t, err)
|
||||
|
||||
// key is not in backup store
|
||||
@@ -517,17 +517,17 @@ func TestYubiAddKeyCleansUpOnError(t *testing.T) {
|
||||
}()
|
||||
|
||||
backup := trustmanager.NewKeyMemoryStore(ret)
|
||||
origStore, err := NewYubiKeyStore(backup, ret)
|
||||
store, err := NewYubiKeyStore(backup, ret)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var _addkey = func() error {
|
||||
_, err := testAddKey(t, origStore)
|
||||
_, err := testAddKey(t, store)
|
||||
return err
|
||||
}
|
||||
|
||||
testYubiFunctionCleansUpOnLoginError(t, origStore, _addkey)
|
||||
testYubiFunctionCleansUpOnLoginError(t, store, _addkey)
|
||||
// all the PKCS11 functions AddKey depends on that aren't the login/logout
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _addkey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _addkey,
|
||||
append(
|
||||
setupErrors,
|
||||
"FindObjectsInit",
|
||||
@@ -544,7 +544,7 @@ func TestYubiAddKeyCleansUpOnError(t *testing.T) {
|
||||
// Logout should not cause a function failure - it s a cleanup failure,
|
||||
// which shouldn't break anything, and it should clean up after itself.
|
||||
// The key should be added to both stores
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _addkey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _addkey,
|
||||
[]string{"Logout"}, false)
|
||||
|
||||
listedKeys := cleanListKeys(t)
|
||||
@@ -556,7 +556,7 @@ func TestYubiAddKeyCleansUpOnError(t *testing.T) {
|
||||
// it's in, we assume its occupied slot is free (hence this failure will
|
||||
// cause the previous key to be overwritten). This behavior may need to
|
||||
// be revisited.
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _addkey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _addkey,
|
||||
[]string{"GetAttributeValue"}, false)
|
||||
|
||||
newListedKeys := cleanListKeys(t)
|
||||
@@ -612,7 +612,7 @@ func TestYubiImportKeyCleansUpOnError(t *testing.T) {
|
||||
SetYubikeyKeyMode(KeymodeTouch | KeymodePinOnce)
|
||||
}()
|
||||
|
||||
origStore, err := NewYubiKeyStore(trustmanager.NewKeyMemoryStore(ret), ret)
|
||||
store, err := NewYubiKeyStore(trustmanager.NewKeyMemoryStore(ret), ret)
|
||||
assert.NoError(t, err)
|
||||
|
||||
privKey, err := trustmanager.GenerateECDSAKey(rand.Reader)
|
||||
@@ -621,11 +621,11 @@ func TestYubiImportKeyCleansUpOnError(t *testing.T) {
|
||||
pemBytes, err := trustmanager.EncryptPrivateKey(privKey, "passphrase")
|
||||
assert.NoError(t, err)
|
||||
|
||||
var _importkey = func() error { return origStore.ImportKey(pemBytes, "root") }
|
||||
var _importkey = func() error { return store.ImportKey(pemBytes, "root") }
|
||||
|
||||
testYubiFunctionCleansUpOnLoginError(t, origStore, _importkey)
|
||||
testYubiFunctionCleansUpOnLoginError(t, store, _importkey)
|
||||
// all the PKCS11 functions ImportKey depends on that aren't the login/logout
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _importkey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _importkey,
|
||||
append(
|
||||
setupErrors,
|
||||
"FindObjectsInit",
|
||||
@@ -641,7 +641,7 @@ func TestYubiImportKeyCleansUpOnError(t *testing.T) {
|
||||
// Logout should not cause a function failure - it s a cleanup failure,
|
||||
// which shouldn't break anything, and it should clean up after itself.
|
||||
// The key should be added to both stores
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _importkey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _importkey,
|
||||
[]string{"Logout"}, false)
|
||||
|
||||
listedKeys := cleanListKeys(t)
|
||||
@@ -653,10 +653,10 @@ func TestYubiImportKeyCleansUpOnError(t *testing.T) {
|
||||
// cause the previous key to be overwritten). This behavior may need to
|
||||
// be revisited.
|
||||
for k := range listedKeys {
|
||||
err := origStore.RemoveKey(k)
|
||||
err := store.RemoveKey(k)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _importkey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _importkey,
|
||||
[]string{"GetAttributeValue"}, false)
|
||||
|
||||
assert.Len(t, cleanListKeys(t), 1)
|
||||
@@ -673,19 +673,19 @@ func TestYubiRemoveKeyCleansUpOnError(t *testing.T) {
|
||||
SetYubikeyKeyMode(KeymodeTouch | KeymodePinOnce)
|
||||
}()
|
||||
|
||||
origStore, err := NewYubiKeyStore(trustmanager.NewKeyMemoryStore(ret), ret)
|
||||
store, err := NewYubiKeyStore(trustmanager.NewKeyMemoryStore(ret), ret)
|
||||
assert.NoError(t, err)
|
||||
key, err := testAddKey(t, origStore)
|
||||
key, err := testAddKey(t, store)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var _removekey = func() error { return origStore.RemoveKey(key.ID()) }
|
||||
var _removekey = func() error { return store.RemoveKey(key.ID()) }
|
||||
|
||||
testYubiFunctionCleansUpOnLoginError(t, origStore, _removekey)
|
||||
testYubiFunctionCleansUpOnLoginError(t, store, _removekey)
|
||||
// RemoveKey just succeeds if we can't set up the yubikey
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _removekey, setupErrors, false)
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _removekey, setupErrors, false)
|
||||
// all the PKCS11 functions RemoveKey depends on that aren't the login/logout
|
||||
// or setup/cleanup
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _removekey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _removekey,
|
||||
[]string{
|
||||
"FindObjectsInit",
|
||||
"FindObjects",
|
||||
@@ -699,7 +699,7 @@ func TestYubiRemoveKeyCleansUpOnError(t *testing.T) {
|
||||
|
||||
// this will not fail, but it should clean up after itself, and the key
|
||||
// should be added to both stores
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, origStore, _removekey,
|
||||
testYubiFunctionCleansUpOnSpecifiedErrors(t, store, _removekey,
|
||||
[]string{"Logout"}, false)
|
||||
|
||||
assert.Len(t, cleanListKeys(t), 0)
|
||||
|
||||
Reference in New Issue
Block a user