Make cubbyhole revocation/tidying compatible with cubbys in namespaces. (#11408)
This commit is contained in:
parent
449a45baaa
commit
474c4e8134
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
core: Fix cleanup of storage entries from cubbyholes within namespaces.
|
||||||
|
```
|
|
@ -83,12 +83,12 @@ func (b *CubbyholeBackend) paths() []*framework.Path {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *CubbyholeBackend) revoke(ctx context.Context, saltedToken string) error {
|
func (b *CubbyholeBackend) revoke(ctx context.Context, view *BarrierView, saltedToken string) error {
|
||||||
if saltedToken == "" {
|
if saltedToken == "" {
|
||||||
return fmt.Errorf("client token empty during revocation")
|
return fmt.Errorf("client token empty during revocation")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := logical.ClearView(ctx, b.storageView.(*BarrierView).SubView(saltedToken+"/")); err != nil {
|
if err := logical.ClearView(ctx, view.SubView(saltedToken+"/")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,19 +86,25 @@ var (
|
||||||
return errors.New("nil token entry")
|
return errors.New("nil token entry")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
storage := ts.core.router.MatchingStorageByAPIPath(ctx, cubbyholeMountPath)
|
||||||
|
if storage == nil {
|
||||||
|
return fmt.Errorf("no cubby mount entry")
|
||||||
|
}
|
||||||
|
view := storage.(*BarrierView)
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case te.NamespaceID == namespace.RootNamespaceID && !strings.HasPrefix(te.ID, "s."):
|
case te.NamespaceID == namespace.RootNamespaceID && !strings.HasPrefix(te.ID, "s."):
|
||||||
saltedID, err := ts.SaltID(ctx, te.ID)
|
saltedID, err := ts.SaltID(ctx, te.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return ts.cubbyholeBackend.revoke(ctx, salt.SaltID(ts.cubbyholeBackend.saltUUID, saltedID, salt.SHA1Hash))
|
return ts.cubbyholeBackend.revoke(ctx, view, salt.SaltID(ts.cubbyholeBackend.saltUUID, saltedID, salt.SHA1Hash))
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if te.CubbyholeID == "" {
|
if te.CubbyholeID == "" {
|
||||||
return fmt.Errorf("missing cubbyhole ID while destroying")
|
return fmt.Errorf("missing cubbyhole ID while destroying")
|
||||||
}
|
}
|
||||||
return ts.cubbyholeBackend.revoke(ctx, te.CubbyholeID)
|
return ts.cubbyholeBackend.revoke(ctx, view, te.CubbyholeID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -1819,7 +1825,13 @@ func (ts *TokenStore) handleTidy(ctx context.Context, req *logical.Request, data
|
||||||
}
|
}
|
||||||
|
|
||||||
// List all the cubbyhole storage keys
|
// List all the cubbyhole storage keys
|
||||||
cubbyholeKeys, err := ts.cubbyholeBackend.storageView.List(quitCtx, "")
|
view := ts.core.router.MatchingStorageByAPIPath(ctx, cubbyholeMountPath)
|
||||||
|
if view == nil {
|
||||||
|
return fmt.Errorf("no cubby mount entry")
|
||||||
|
}
|
||||||
|
bview := view.(*BarrierView)
|
||||||
|
|
||||||
|
cubbyholeKeys, err := bview.List(quitCtx, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("failed to fetch cubbyhole storage keys: {{err}}", err)
|
return errwrap.Wrapf("failed to fetch cubbyhole storage keys: {{err}}", err)
|
||||||
}
|
}
|
||||||
|
@ -2016,7 +2028,7 @@ func (ts *TokenStore) handleTidy(ctx context.Context, req *logical.Request, data
|
||||||
key := strings.TrimSuffix(key, "/")
|
key := strings.TrimSuffix(key, "/")
|
||||||
if !validCubbyholeKeys[key] {
|
if !validCubbyholeKeys[key] {
|
||||||
ts.logger.Info("deleting invalid cubbyhole", "key", key)
|
ts.logger.Info("deleting invalid cubbyhole", "key", key)
|
||||||
err = ts.cubbyholeBackend.revoke(quitCtx, key)
|
err = ts.cubbyholeBackend.revoke(quitCtx, bview, key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tidyErrors = multierror.Append(tidyErrors, errwrap.Wrapf(fmt.Sprintf("failed to revoke cubbyhole key %q: {{err}}", key), err))
|
tidyErrors = multierror.Append(tidyErrors, errwrap.Wrapf(fmt.Sprintf("failed to revoke cubbyhole key %q: {{err}}", key), err))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue