mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-02 03:27:54 +00:00
Fix: rotate root credentials for database plugins using WAL (#8782)
* fix: rotate root credentials for database plugins using WAL * test: adds a test for WAL rollback logic * fix: progress on wal rollback * docs: updates some comments * docs: updates some comments * test: adds additional test coverage for WAL rollback * chore: remove unneeded log * style: error handling, imports, signature line wraps * fix: always close db plugin connection
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"net/rpc"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
log "github.com/hashicorp/go-hclog"
|
||||
|
||||
@@ -24,6 +25,7 @@ const (
|
||||
databaseConfigPath = "database/config/"
|
||||
databaseRolePath = "role/"
|
||||
databaseStaticRolePath = "static-role/"
|
||||
minRootCredRollbackAge = 1 * time.Minute
|
||||
)
|
||||
|
||||
type dbPluginInstance struct {
|
||||
@@ -93,9 +95,11 @@ func Backend(conf *logical.BackendConfig) *databaseBackend {
|
||||
Secrets: []*framework.Secret{
|
||||
secretCreds(&b),
|
||||
},
|
||||
Clean: b.clean,
|
||||
Invalidate: b.invalidate,
|
||||
BackendType: logical.TypeLogical,
|
||||
Clean: b.clean,
|
||||
Invalidate: b.invalidate,
|
||||
WALRollback: b.walRollback,
|
||||
WALRollbackMinAge: minRootCredRollbackAge,
|
||||
BackendType: logical.TypeLogical,
|
||||
}
|
||||
|
||||
b.logger = conf.Logger
|
||||
@@ -223,6 +227,15 @@ func (b *databaseBackend) invalidate(ctx context.Context, key string) {
|
||||
}
|
||||
|
||||
func (b *databaseBackend) GetConnection(ctx context.Context, s logical.Storage, name string) (*dbPluginInstance, error) {
|
||||
config, err := b.DatabaseConfig(ctx, s, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return b.GetConnectionWithConfig(ctx, name, config)
|
||||
}
|
||||
|
||||
func (b *databaseBackend) GetConnectionWithConfig(ctx context.Context, name string, config *DatabaseConfig) (*dbPluginInstance, error) {
|
||||
b.RLock()
|
||||
unlockFunc := b.RUnlock
|
||||
defer func() { unlockFunc() }()
|
||||
@@ -242,11 +255,6 @@ func (b *databaseBackend) GetConnection(ctx context.Context, s logical.Storage,
|
||||
return db, nil
|
||||
}
|
||||
|
||||
config, err := b.DatabaseConfig(ctx, s, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dbp, err := dbplugin.PluginFactory(ctx, config.PluginName, b.System(), b.logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user