mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-02 03:27:54 +00:00
builtin: deprecate errwrap.Wrapf() throughout (#11430)
* audit: deprecate errwrap.Wrapf() * builtin/audit/file: deprecate errwrap.Wrapf() * builtin/crediential/app-id: deprecate errwrap.Wrapf() * builtin/credential/approle: deprecate errwrap.Wrapf() * builtin/credential/aws: deprecate errwrap.Wrapf() * builtin/credentials/token: deprecate errwrap.Wrapf() * builtin/credential/github: deprecate errwrap.Wrapf() * builtin/credential/cert: deprecate errwrap.Wrapf() * builtin/logical/transit: deprecate errwrap.Wrapf() * builtin/logical/totp: deprecate errwrap.Wrapf() * builtin/logical/ssh: deprecate errwrap.Wrapf() * builtin/logical/rabbitmq: deprecate errwrap.Wrapf() * builtin/logical/postgresql: deprecate errwrap.Wrapf() * builtin/logical/pki: deprecate errwrap.Wrapf() * builtin/logical/nomad: deprecate errwrap.Wrapf() * builtin/logical/mssql: deprecate errwrap.Wrapf() * builtin/logical/database: deprecate errwrap.Wrapf() * builtin/logical/consul: deprecate errwrap.Wrapf() * builtin/logical/cassandra: deprecate errwrap.Wrapf() * builtin/logical/aws: deprecate errwrap.Wrapf()
This commit is contained in:
@@ -10,7 +10,6 @@ import (
|
|||||||
|
|
||||||
squarejwt "gopkg.in/square/go-jose.v2/jwt"
|
squarejwt "gopkg.in/square/go-jose.v2/jwt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/helper/namespace"
|
"github.com/hashicorp/vault/helper/namespace"
|
||||||
"github.com/hashicorp/vault/sdk/helper/salt"
|
"github.com/hashicorp/vault/sdk/helper/salt"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -48,7 +47,7 @@ func (f *AuditFormatter) FormatRequest(ctx context.Context, w io.Writer, config
|
|||||||
|
|
||||||
salt, err := f.Salt(ctx)
|
salt, err := f.Salt(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error fetching salt: {{err}}", err)
|
return fmt.Errorf("error fetching salt: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set these to the input values at first
|
// Set these to the input values at first
|
||||||
@@ -159,7 +158,7 @@ func (f *AuditFormatter) FormatResponse(ctx context.Context, w io.Writer, config
|
|||||||
|
|
||||||
salt, err := f.Salt(ctx)
|
salt, err := f.Salt(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error fetching salt: {{err}}", err)
|
return fmt.Errorf("error fetching salt: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set these to the input values at first
|
// Set these to the input values at first
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/audit"
|
"github.com/hashicorp/vault/audit"
|
||||||
"github.com/hashicorp/vault/sdk/helper/salt"
|
"github.com/hashicorp/vault/sdk/helper/salt"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -121,7 +120,7 @@ func Factory(ctx context.Context, conf *audit.BackendConfig) (audit.Backend, err
|
|||||||
// otherwise it will be too late to catch later without problems
|
// otherwise it will be too late to catch later without problems
|
||||||
// (ref: https://github.com/hashicorp/vault/issues/550)
|
// (ref: https://github.com/hashicorp/vault/issues/550)
|
||||||
if err := b.open(); err != nil {
|
if err := b.open(); err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("sanity check failed; unable to open %q for writing: {{err}}", path), err)
|
return nil, fmt.Errorf("sanity check failed; unable to open %q for writing: %w", path, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/policyutil"
|
"github.com/hashicorp/vault/sdk/helper/policyutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -169,7 +168,7 @@ func (b *backend) verifyCredentials(ctx context.Context, req *logical.Request, a
|
|||||||
if raw, ok := appsMap["cidr_block"]; ok {
|
if raw, ok := appsMap["cidr_block"]; ok {
|
||||||
_, cidr, err := net.ParseCIDR(raw.(string))
|
_, cidr, err := net.ParseCIDR(raw.(string))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, errwrap.Wrapf("invalid restriction cidr: {{err}}", err)
|
return "", nil, fmt.Errorf("invalid restriction cidr: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var addr string
|
var addr string
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
||||||
@@ -93,12 +92,12 @@ func (b *backend) pathLoginUpdate(ctx context.Context, req *logical.Request, dat
|
|||||||
|
|
||||||
secretIDHMAC, err := createHMAC(role.HMACKey, secretID)
|
secretIDHMAC, err := createHMAC(role.HMACKey, secretID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of secret_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of secret_id: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
entryIndex := fmt.Sprintf("%s%s/%s", role.SecretIDPrefix, roleNameHMAC, secretIDHMAC)
|
entryIndex := fmt.Sprintf("%s%s/%s", role.SecretIDPrefix, roleNameHMAC, secretIDHMAC)
|
||||||
@@ -123,7 +122,7 @@ func (b *backend) pathLoginUpdate(ctx context.Context, req *logical.Request, dat
|
|||||||
// entry, revoke the secret ID immediately
|
// entry, revoke the secret ID immediately
|
||||||
accessorEntry, err := b.secretIDAccessorEntry(ctx, req.Storage, entry.SecretIDAccessor, role.SecretIDPrefix)
|
accessorEntry, err := b.secretIDAccessorEntry(ctx, req.Storage, entry.SecretIDAccessor, role.SecretIDPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read secret ID accessor entry: {{err}}", err)
|
return nil, fmt.Errorf("failed to read secret ID accessor entry: %w", err)
|
||||||
}
|
}
|
||||||
if accessorEntry == nil {
|
if accessorEntry == nil {
|
||||||
// Switch the locks and recheck the conditions
|
// Switch the locks and recheck the conditions
|
||||||
@@ -141,12 +140,12 @@ func (b *backend) pathLoginUpdate(ctx context.Context, req *logical.Request, dat
|
|||||||
|
|
||||||
accessorEntry, err := b.secretIDAccessorEntry(ctx, req.Storage, entry.SecretIDAccessor, role.SecretIDPrefix)
|
accessorEntry, err := b.secretIDAccessorEntry(ctx, req.Storage, entry.SecretIDAccessor, role.SecretIDPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read secret ID accessor entry: {{err}}", err)
|
return nil, fmt.Errorf("failed to read secret ID accessor entry: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if accessorEntry == nil {
|
if accessorEntry == nil {
|
||||||
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("error deleting secret ID %q from storage: {{err}}", secretIDHMAC), err)
|
return nil, fmt.Errorf("error deleting secret ID %q from storage: %w", secretIDHMAC, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return logical.ErrorResponse("invalid secret id"), nil
|
return logical.ErrorResponse("invalid secret id"), nil
|
||||||
@@ -176,7 +175,11 @@ func (b *backend) pathLoginUpdate(ctx context.Context, req *logical.Request, dat
|
|||||||
|
|
||||||
belongs, err := cidrutil.IPBelongsToCIDRBlocksSlice(req.Connection.RemoteAddr, entry.CIDRList)
|
belongs, err := cidrutil.IPBelongsToCIDRBlocksSlice(req.Connection.RemoteAddr, entry.CIDRList)
|
||||||
if !belongs || err != nil {
|
if !belongs || err != nil {
|
||||||
return logical.ErrorResponse(errwrap.Wrapf(fmt.Sprintf("source address %q unauthorized through CIDR restrictions on the secret ID: {{err}}", req.Connection.RemoteAddr), err).Error()), nil
|
return logical.ErrorResponse(fmt.Errorf(
|
||||||
|
"source address %q unauthorized through CIDR restrictions on the secret ID: %w",
|
||||||
|
req.Connection.RemoteAddr,
|
||||||
|
err,
|
||||||
|
).Error()), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -210,7 +213,7 @@ func (b *backend) pathLoginUpdate(ctx context.Context, req *logical.Request, dat
|
|||||||
}
|
}
|
||||||
err = req.Storage.Delete(ctx, entryIndex)
|
err = req.Storage.Delete(ctx, entryIndex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to delete secret ID: {{err}}", err)
|
return nil, fmt.Errorf("failed to delete secret ID: %w", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// If the use count is greater than one, decrement it and update the last updated time.
|
// If the use count is greater than one, decrement it and update the last updated time.
|
||||||
@@ -244,7 +247,12 @@ func (b *backend) pathLoginUpdate(ctx context.Context, req *logical.Request, dat
|
|||||||
|
|
||||||
belongs, err := cidrutil.IPBelongsToCIDRBlocksSlice(req.Connection.RemoteAddr, entry.CIDRList)
|
belongs, err := cidrutil.IPBelongsToCIDRBlocksSlice(req.Connection.RemoteAddr, entry.CIDRList)
|
||||||
if err != nil || !belongs {
|
if err != nil || !belongs {
|
||||||
return logical.ErrorResponse(errwrap.Wrapf(fmt.Sprintf("source address %q unauthorized by CIDR restrictions on the secret ID: {{err}}", req.Connection.RemoteAddr), err).Error()), nil
|
return logical.ErrorResponse(
|
||||||
|
fmt.Errorf(
|
||||||
|
"source address %q unauthorized by CIDR restrictions on the secret ID: %w",
|
||||||
|
req.Connection.RemoteAddr,
|
||||||
|
err,
|
||||||
|
).Error()), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -258,7 +266,12 @@ func (b *backend) pathLoginUpdate(ctx context.Context, req *logical.Request, dat
|
|||||||
}
|
}
|
||||||
belongs, err := cidrutil.IPBelongsToCIDRBlocksSlice(req.Connection.RemoteAddr, role.SecretIDBoundCIDRs)
|
belongs, err := cidrutil.IPBelongsToCIDRBlocksSlice(req.Connection.RemoteAddr, role.SecretIDBoundCIDRs)
|
||||||
if err != nil || !belongs {
|
if err != nil || !belongs {
|
||||||
return logical.ErrorResponse(errwrap.Wrapf(fmt.Sprintf("source address %q unauthorized by CIDR restrictions on the role: {{err}}", req.Connection.RemoteAddr), err).Error()), nil
|
return logical.ErrorResponse(
|
||||||
|
fmt.Errorf(
|
||||||
|
"source address %q unauthorized by CIDR restrictions on the role: %w",
|
||||||
|
req.Connection.RemoteAddr,
|
||||||
|
err,
|
||||||
|
).Error()), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,7 +327,7 @@ func (b *backend) pathLoginRenew(ctx context.Context, req *logical.Request, data
|
|||||||
// Ensure that the Role still exists.
|
// Ensure that the Role still exists.
|
||||||
role, err := b.roleEntry(ctx, req.Storage, roleName)
|
role, err := b.roleEntry(ctx, req.Storage, roleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to validate role %q during renewal: {{err}}", roleName), err)
|
return nil, fmt.Errorf("failed to validate role %q during renewal: %w", roleName, err)
|
||||||
}
|
}
|
||||||
if role == nil {
|
if role == nil {
|
||||||
return nil, fmt.Errorf("role %q does not exist during renewal", roleName)
|
return nil, fmt.Errorf("role %q does not exist during renewal", roleName)
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
uuid "github.com/hashicorp/go-uuid"
|
uuid "github.com/hashicorp/go-uuid"
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
||||||
@@ -654,7 +653,7 @@ func (b *backend) pathRoleSecretIDList(ctx context.Context, req *logical.Request
|
|||||||
|
|
||||||
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listing works one level at a time. Get the first level of data
|
// Listing works one level at a time. Get the first level of data
|
||||||
@@ -750,7 +749,7 @@ func (b *backend) setRoleEntry(ctx context.Context, s logical.Storage, roleName
|
|||||||
// Check if the index from the role_id to role already exists
|
// Check if the index from the role_id to role already exists
|
||||||
roleIDIndex, err := b.roleIDEntry(ctx, s, role.RoleID)
|
roleIDIndex, err := b.roleIDEntry(ctx, s, role.RoleID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("failed to read role_id index: {{err}}", err)
|
return fmt.Errorf("failed to read role_id index: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the entry exists, make sure that it belongs to the current role
|
// If the entry exists, make sure that it belongs to the current role
|
||||||
@@ -762,7 +761,7 @@ func (b *backend) setRoleEntry(ctx context.Context, s logical.Storage, roleName
|
|||||||
// a new one is created
|
// a new one is created
|
||||||
if previousRoleID != "" && previousRoleID != role.RoleID {
|
if previousRoleID != "" && previousRoleID != role.RoleID {
|
||||||
if err = b.roleIDEntryDelete(ctx, s, previousRoleID); err != nil {
|
if err = b.roleIDEntryDelete(ctx, s, previousRoleID); err != nil {
|
||||||
return errwrap.Wrapf("failed to delete previous role ID index: {{err}}", err)
|
return fmt.Errorf("failed to delete previous role ID index: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -870,7 +869,7 @@ func (b *backend) pathRoleCreateUpdate(ctx context.Context, req *logical.Request
|
|||||||
case role == nil && req.Operation == logical.CreateOperation:
|
case role == nil && req.Operation == logical.CreateOperation:
|
||||||
hmacKey, err := uuid.GenerateUUID()
|
hmacKey, err := uuid.GenerateUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create role_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to create role_id: %w", err)
|
||||||
}
|
}
|
||||||
role = &roleStorageEntry{
|
role = &roleStorageEntry{
|
||||||
name: strings.ToLower(roleName),
|
name: strings.ToLower(roleName),
|
||||||
@@ -918,7 +917,7 @@ func (b *backend) pathRoleCreateUpdate(ctx context.Context, req *logical.Request
|
|||||||
} else if req.Operation == logical.CreateOperation {
|
} else if req.Operation == logical.CreateOperation {
|
||||||
roleID, err := uuid.GenerateUUID()
|
roleID, err := uuid.GenerateUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to generate role_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to generate role_id: %w", err)
|
||||||
}
|
}
|
||||||
role.RoleID = roleID
|
role.RoleID = roleID
|
||||||
}
|
}
|
||||||
@@ -939,7 +938,7 @@ func (b *backend) pathRoleCreateUpdate(ctx context.Context, req *logical.Request
|
|||||||
if len(role.SecretIDBoundCIDRs) != 0 {
|
if len(role.SecretIDBoundCIDRs) != 0 {
|
||||||
valid, err := cidrutil.ValidateCIDRListSlice(role.SecretIDBoundCIDRs)
|
valid, err := cidrutil.ValidateCIDRListSlice(role.SecretIDBoundCIDRs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to validate CIDR blocks: {{err}}", err)
|
return nil, fmt.Errorf("failed to validate CIDR blocks: %w", err)
|
||||||
}
|
}
|
||||||
if !valid {
|
if !valid {
|
||||||
return logical.ErrorResponse("invalid CIDR blocks"), nil
|
return logical.ErrorResponse("invalid CIDR blocks"), nil
|
||||||
@@ -1064,7 +1063,7 @@ func (b *backend) pathRoleRead(ctx context.Context, req *logical.Request, data *
|
|||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lockRelease()
|
lockRelease()
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to create secondary index for role_id %q: {{err}}", role.RoleID), err)
|
return nil, fmt.Errorf("failed to create secondary index for role_id %q: %w", role.RoleID, err)
|
||||||
}
|
}
|
||||||
resp.AddWarning("Role identifier was missing an index back to role name. A new index has been added. Please report this observation.")
|
resp.AddWarning("Role identifier was missing an index back to role name. A new index has been added. Please report this observation.")
|
||||||
}
|
}
|
||||||
@@ -1096,12 +1095,12 @@ func (b *backend) pathRoleDelete(ctx context.Context, req *logical.Request, data
|
|||||||
|
|
||||||
// Just before the role is deleted, remove all the SecretIDs issued as part of the role.
|
// Just before the role is deleted, remove all the SecretIDs issued as part of the role.
|
||||||
if err = b.flushRoleSecrets(ctx, req.Storage, role.name, role.HMACKey, role.SecretIDPrefix); err != nil {
|
if err = b.flushRoleSecrets(ctx, req.Storage, role.name, role.HMACKey, role.SecretIDPrefix); err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to invalidate the secrets belonging to role %q: {{err}}", role.name), err)
|
return nil, fmt.Errorf("failed to invalidate the secrets belonging to role %q: %w", role.name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete the reverse mapping from RoleID to the role
|
// Delete the reverse mapping from RoleID to the role
|
||||||
if err = b.roleIDEntryDelete(ctx, req.Storage, role.RoleID); err != nil {
|
if err = b.roleIDEntryDelete(ctx, req.Storage, role.RoleID); err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to delete the mapping from RoleID to role %q: {{err}}", role.name), err)
|
return nil, fmt.Errorf("failed to delete the mapping from RoleID to role %q: %w", role.name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// After deleting the SecretIDs and the RoleID, delete the role itself
|
// After deleting the SecretIDs and the RoleID, delete the role itself
|
||||||
@@ -1140,13 +1139,13 @@ func (b *backend) pathRoleSecretIDLookupUpdate(ctx context.Context, req *logical
|
|||||||
// Create the HMAC of the secret ID using the per-role HMAC key
|
// Create the HMAC of the secret ID using the per-role HMAC key
|
||||||
secretIDHMAC, err := createHMAC(role.HMACKey, secretID)
|
secretIDHMAC, err := createHMAC(role.HMACKey, secretID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of secret_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of secret_id: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the HMAC of the roleName using the per-role HMAC key
|
// Create the HMAC of the roleName using the per-role HMAC key
|
||||||
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the index at which the secret_id would've been stored
|
// Create the index at which the secret_id would've been stored
|
||||||
@@ -1168,11 +1167,11 @@ func (b *backend) pathRoleSecretIDLookupUpdate(ctx context.Context, req *logical
|
|||||||
// entry, revoke the secret ID immediately
|
// entry, revoke the secret ID immediately
|
||||||
accessorEntry, err := b.secretIDAccessorEntry(ctx, req.Storage, secretIDEntry.SecretIDAccessor, role.SecretIDPrefix)
|
accessorEntry, err := b.secretIDAccessorEntry(ctx, req.Storage, secretIDEntry.SecretIDAccessor, role.SecretIDPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read secret ID accessor entry: {{err}}", err)
|
return nil, fmt.Errorf("failed to read secret ID accessor entry: %w", err)
|
||||||
}
|
}
|
||||||
if accessorEntry == nil {
|
if accessorEntry == nil {
|
||||||
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("error deleting secret ID %q from storage: {{err}}", secretIDHMAC), err)
|
return nil, fmt.Errorf("error deleting secret ID %q from storage: %w", secretIDHMAC, err)
|
||||||
}
|
}
|
||||||
return logical.ErrorResponse("invalid secret id"), nil
|
return logical.ErrorResponse("invalid secret id"), nil
|
||||||
}
|
}
|
||||||
@@ -1225,12 +1224,12 @@ func (b *backend) pathRoleSecretIDDestroyUpdateDelete(ctx context.Context, req *
|
|||||||
|
|
||||||
secretIDHMAC, err := createHMAC(role.HMACKey, secretID)
|
secretIDHMAC, err := createHMAC(role.HMACKey, secretID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of secret_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of secret_id: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
entryIndex := fmt.Sprintf("%s%s/%s", role.SecretIDPrefix, roleNameHMAC, secretIDHMAC)
|
entryIndex := fmt.Sprintf("%s%s/%s", role.SecretIDPrefix, roleNameHMAC, secretIDHMAC)
|
||||||
@@ -1254,7 +1253,7 @@ func (b *backend) pathRoleSecretIDDestroyUpdateDelete(ctx context.Context, req *
|
|||||||
|
|
||||||
// Delete the storage entry that corresponds to the SecretID
|
// Delete the storage entry that corresponds to the SecretID
|
||||||
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to delete secret_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to delete secret_id: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@@ -1299,7 +1298,7 @@ func (b *backend) pathRoleSecretIDAccessorLookupUpdate(ctx context.Context, req
|
|||||||
|
|
||||||
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
secretLock := b.secretIDLock(accessorEntry.SecretIDHMAC)
|
secretLock := b.secretIDLock(accessorEntry.SecretIDHMAC)
|
||||||
@@ -1352,7 +1351,7 @@ func (b *backend) pathRoleSecretIDAccessorDestroyUpdateDelete(ctx context.Contex
|
|||||||
|
|
||||||
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
roleNameHMAC, err := createHMAC(role.HMACKey, role.name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
entryIndex := fmt.Sprintf("%s%s/%s", role.SecretIDPrefix, roleNameHMAC, accessorEntry.SecretIDHMAC)
|
entryIndex := fmt.Sprintf("%s%s/%s", role.SecretIDPrefix, roleNameHMAC, accessorEntry.SecretIDHMAC)
|
||||||
@@ -1368,7 +1367,7 @@ func (b *backend) pathRoleSecretIDAccessorDestroyUpdateDelete(ctx context.Contex
|
|||||||
|
|
||||||
// Delete the storage entry that corresponds to the SecretID
|
// Delete the storage entry that corresponds to the SecretID
|
||||||
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
if err := req.Storage.Delete(ctx, entryIndex); err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to delete secret_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to delete secret_id: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@@ -1418,7 +1417,7 @@ func (b *backend) pathRoleBoundCIDRUpdateCommon(ctx context.Context, req *logica
|
|||||||
}
|
}
|
||||||
valid, err := cidrutil.ValidateCIDRListSlice(cidrs)
|
valid, err := cidrutil.ValidateCIDRListSlice(cidrs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return logical.ErrorResponse(errwrap.Wrapf("failed to validate CIDR blocks: {{err}}", err).Error()), nil
|
return logical.ErrorResponse(fmt.Errorf("failed to validate CIDR blocks: %w", err).Error()), nil
|
||||||
}
|
}
|
||||||
if !valid {
|
if !valid {
|
||||||
return logical.ErrorResponse("failed to validate CIDR blocks"), nil
|
return logical.ErrorResponse("failed to validate CIDR blocks"), nil
|
||||||
@@ -1428,7 +1427,7 @@ func (b *backend) pathRoleBoundCIDRUpdateCommon(ctx context.Context, req *logica
|
|||||||
} else if cidrsIfc, ok := data.GetOk("token_bound_cidrs"); ok {
|
} else if cidrsIfc, ok := data.GetOk("token_bound_cidrs"); ok {
|
||||||
cidrs, err := parseutil.ParseAddrs(cidrsIfc.([]string))
|
cidrs, err := parseutil.ParseAddrs(cidrsIfc.([]string))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return logical.ErrorResponse(errwrap.Wrapf("failed to parse token_bound_cidrs: {{err}}", err).Error()), nil
|
return logical.ErrorResponse(fmt.Errorf("failed to parse token_bound_cidrs: %w", err).Error()), nil
|
||||||
}
|
}
|
||||||
role.TokenBoundCIDRs = cidrs
|
role.TokenBoundCIDRs = cidrs
|
||||||
}
|
}
|
||||||
@@ -2271,7 +2270,7 @@ func (b *backend) pathRoleTokenMaxTTLDelete(ctx context.Context, req *logical.Re
|
|||||||
func (b *backend) pathRoleSecretIDUpdate(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) {
|
func (b *backend) pathRoleSecretIDUpdate(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) {
|
||||||
secretID, err := uuid.GenerateUUID()
|
secretID, err := uuid.GenerateUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to generate secret_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to generate secret_id: %w", err)
|
||||||
}
|
}
|
||||||
return b.handleRoleSecretIDCommon(ctx, req, data, secretID)
|
return b.handleRoleSecretIDCommon(ctx, req, data, secretID)
|
||||||
}
|
}
|
||||||
@@ -2312,7 +2311,7 @@ func (b *backend) handleRoleSecretIDCommon(ctx context.Context, req *logical.Req
|
|||||||
if len(secretIDCIDRs) != 0 {
|
if len(secretIDCIDRs) != 0 {
|
||||||
valid, err := cidrutil.ValidateCIDRListSlice(secretIDCIDRs)
|
valid, err := cidrutil.ValidateCIDRListSlice(secretIDCIDRs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to validate CIDR blocks: {{err}}", err)
|
return nil, fmt.Errorf("failed to validate CIDR blocks: %w", err)
|
||||||
}
|
}
|
||||||
if !valid {
|
if !valid {
|
||||||
return logical.ErrorResponse("failed to validate CIDR blocks"), nil
|
return logical.ErrorResponse("failed to validate CIDR blocks"), nil
|
||||||
@@ -2327,7 +2326,7 @@ func (b *backend) handleRoleSecretIDCommon(ctx context.Context, req *logical.Req
|
|||||||
if len(secretIDTokenCIDRs) != 0 {
|
if len(secretIDTokenCIDRs) != 0 {
|
||||||
valid, err := cidrutil.ValidateCIDRListSlice(secretIDTokenCIDRs)
|
valid, err := cidrutil.ValidateCIDRListSlice(secretIDTokenCIDRs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to validate token CIDR blocks: {{err}}", err)
|
return nil, fmt.Errorf("failed to validate token CIDR blocks: %w", err)
|
||||||
}
|
}
|
||||||
if !valid {
|
if !valid {
|
||||||
return logical.ErrorResponse("failed to validate token CIDR blocks"), nil
|
return logical.ErrorResponse("failed to validate token CIDR blocks"), nil
|
||||||
@@ -2355,7 +2354,7 @@ func (b *backend) handleRoleSecretIDCommon(ctx context.Context, req *logical.Req
|
|||||||
}
|
}
|
||||||
|
|
||||||
if secretIDStorage, err = b.registerSecretIDEntry(ctx, req.Storage, role.name, secretID, role.HMACKey, role.SecretIDPrefix, secretIDStorage); err != nil {
|
if secretIDStorage, err = b.registerSecretIDEntry(ctx, req.Storage, role.name, secretID, role.HMACKey, role.SecretIDPrefix, secretIDStorage); err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to store secret_id: {{err}}", err)
|
return nil, fmt.Errorf("failed to store secret_id: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &logical.Response{
|
resp := &logical.Response{
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
"github.com/hashicorp/vault/sdk/helper/locksutil"
|
"github.com/hashicorp/vault/sdk/helper/locksutil"
|
||||||
@@ -114,7 +113,7 @@ func (b *backend) tidySecretIDinternal(s logical.Storage) {
|
|||||||
entryIndex := fmt.Sprintf("%s%s%s", secretIDPrefixToUse, roleNameHMAC, secretIDHMAC)
|
entryIndex := fmt.Sprintf("%s%s%s", secretIDPrefixToUse, roleNameHMAC, secretIDHMAC)
|
||||||
secretIDEntry, err := s.Get(ctx, entryIndex)
|
secretIDEntry, err := s.Get(ctx, entryIndex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error fetching SecretID %q: {{err}}", secretIDHMAC), err)
|
return fmt.Errorf("error fetching SecretID %q: %w", secretIDHMAC, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if secretIDEntry == nil {
|
if secretIDEntry == nil {
|
||||||
@@ -135,12 +134,12 @@ func (b *backend) tidySecretIDinternal(s logical.Storage) {
|
|||||||
// entry, revoke the secret ID immediately
|
// entry, revoke the secret ID immediately
|
||||||
accessorEntry, err := b.secretIDAccessorEntry(ctx, s, result.SecretIDAccessor, secretIDPrefixToUse)
|
accessorEntry, err := b.secretIDAccessorEntry(ctx, s, result.SecretIDAccessor, secretIDPrefixToUse)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("failed to read secret ID accessor entry: {{err}}", err)
|
return fmt.Errorf("failed to read secret ID accessor entry: %w", err)
|
||||||
}
|
}
|
||||||
if accessorEntry == nil {
|
if accessorEntry == nil {
|
||||||
logger.Trace("found nil accessor")
|
logger.Trace("found nil accessor")
|
||||||
if err := s.Delete(ctx, entryIndex); err != nil {
|
if err := s.Delete(ctx, entryIndex); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting secret ID %q from storage: {{err}}", secretIDHMAC), err)
|
return fmt.Errorf("error deleting secret ID %q from storage: %w", secretIDHMAC, err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -151,11 +150,11 @@ func (b *backend) tidySecretIDinternal(s logical.Storage) {
|
|||||||
// Clean up the accessor of the secret ID first
|
// Clean up the accessor of the secret ID first
|
||||||
err = b.deleteSecretIDAccessorEntry(ctx, s, result.SecretIDAccessor, secretIDPrefixToUse)
|
err = b.deleteSecretIDAccessorEntry(ctx, s, result.SecretIDAccessor, secretIDPrefixToUse)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("failed to delete secret ID accessor entry: {{err}}", err)
|
return fmt.Errorf("failed to delete secret ID accessor entry: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.Delete(ctx, entryIndex); err != nil {
|
if err := s.Delete(ctx, entryIndex); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting SecretID %q from storage: {{err}}", secretIDHMAC), err)
|
return fmt.Errorf("error deleting SecretID %q from storage: %w", secretIDHMAC, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
uuid "github.com/hashicorp/go-uuid"
|
uuid "github.com/hashicorp/go-uuid"
|
||||||
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/locksutil"
|
"github.com/hashicorp/vault/sdk/helper/locksutil"
|
||||||
@@ -79,7 +78,12 @@ func verifyCIDRRoleSecretIDSubset(secretIDCIDRs []string, roleBoundCIDRList []st
|
|||||||
if len(roleBoundCIDRList) != 0 {
|
if len(roleBoundCIDRList) != 0 {
|
||||||
subset, err := cidrutil.SubsetBlocks(roleBoundCIDRList, secretIDCIDRs)
|
subset, err := cidrutil.SubsetBlocks(roleBoundCIDRList, secretIDCIDRs)
|
||||||
if !subset || err != nil {
|
if !subset || err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("failed to verify subset relationship between CIDR blocks on the role %q and CIDR blocks on the secret ID %q: {{err}}", roleBoundCIDRList, secretIDCIDRs), err)
|
return fmt.Errorf(
|
||||||
|
"failed to verify subset relationship between CIDR blocks on the role %q and CIDR blocks on the secret ID %q: %w",
|
||||||
|
roleBoundCIDRList,
|
||||||
|
secretIDCIDRs,
|
||||||
|
err,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +155,7 @@ func (b *backend) nonLockedSecretIDStorageEntry(ctx context.Context, s logical.S
|
|||||||
|
|
||||||
if persistNeeded {
|
if persistNeeded {
|
||||||
if err := b.nonLockedSetSecretIDStorageEntry(ctx, s, roleSecretIDPrefix, roleNameHMAC, secretIDHMAC, &result); err != nil {
|
if err := b.nonLockedSetSecretIDStorageEntry(ctx, s, roleSecretIDPrefix, roleNameHMAC, secretIDHMAC, &result); err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to upgrade role storage entry {{err}}", err)
|
return nil, fmt.Errorf("failed to upgrade role storage entry %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,11 +198,11 @@ func (b *backend) nonLockedSetSecretIDStorageEntry(ctx context.Context, s logica
|
|||||||
func (b *backend) registerSecretIDEntry(ctx context.Context, s logical.Storage, roleName, secretID, hmacKey, roleSecretIDPrefix string, secretEntry *secretIDStorageEntry) (*secretIDStorageEntry, error) {
|
func (b *backend) registerSecretIDEntry(ctx context.Context, s logical.Storage, roleName, secretID, hmacKey, roleSecretIDPrefix string, secretEntry *secretIDStorageEntry) (*secretIDStorageEntry, error) {
|
||||||
secretIDHMAC, err := createHMAC(hmacKey, secretID)
|
secretIDHMAC, err := createHMAC(hmacKey, secretID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of secret ID: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of secret ID: %w", err)
|
||||||
}
|
}
|
||||||
roleNameHMAC, err := createHMAC(hmacKey, roleName)
|
roleNameHMAC, err := createHMAC(hmacKey, roleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return nil, fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
lock := b.secretIDLock(secretIDHMAC)
|
lock := b.secretIDLock(secretIDHMAC)
|
||||||
@@ -335,7 +339,7 @@ func (b *backend) createSecretIDAccessorEntry(ctx context.Context, s logical.Sto
|
|||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if err = s.Put(ctx, entry); err != nil {
|
} else if err = s.Put(ctx, entry); err != nil {
|
||||||
return errwrap.Wrapf("failed to persist accessor index entry: {{err}}", err)
|
return fmt.Errorf("failed to persist accessor index entry: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -360,7 +364,7 @@ func (b *backend) deleteSecretIDAccessorEntry(ctx context.Context, s logical.Sto
|
|||||||
|
|
||||||
// Delete the accessor of the SecretID first
|
// Delete the accessor of the SecretID first
|
||||||
if err := s.Delete(ctx, entryIndex); err != nil {
|
if err := s.Delete(ctx, entryIndex); err != nil {
|
||||||
return errwrap.Wrapf("failed to delete accessor storage entry: {{err}}", err)
|
return fmt.Errorf("failed to delete accessor storage entry: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -371,7 +375,7 @@ func (b *backend) deleteSecretIDAccessorEntry(ctx context.Context, s logical.Sto
|
|||||||
func (b *backend) flushRoleSecrets(ctx context.Context, s logical.Storage, roleName, hmacKey, roleSecretIDPrefix string) error {
|
func (b *backend) flushRoleSecrets(ctx context.Context, s logical.Storage, roleName, hmacKey, roleSecretIDPrefix string) error {
|
||||||
roleNameHMAC, err := createHMAC(hmacKey, roleName)
|
roleNameHMAC, err := createHMAC(hmacKey, roleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("failed to create HMAC of role_name: {{err}}", err)
|
return fmt.Errorf("failed to create HMAC of role_name: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acquire the custom lock to perform listing of SecretIDs
|
// Acquire the custom lock to perform listing of SecretIDs
|
||||||
@@ -389,7 +393,7 @@ func (b *backend) flushRoleSecrets(ctx context.Context, s logical.Storage, roleN
|
|||||||
entryIndex := fmt.Sprintf("%s%s/%s", roleSecretIDPrefix, roleNameHMAC, secretIDHMAC)
|
entryIndex := fmt.Sprintf("%s%s/%s", roleSecretIDPrefix, roleNameHMAC, secretIDHMAC)
|
||||||
if err := s.Delete(ctx, entryIndex); err != nil {
|
if err := s.Delete(ctx, entryIndex); err != nil {
|
||||||
lock.Unlock()
|
lock.Unlock()
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting SecretID %q from storage: {{err}}", secretIDHMAC), err)
|
return fmt.Errorf("error deleting SecretID %q from storage: %w", secretIDHMAC, err)
|
||||||
}
|
}
|
||||||
lock.Unlock()
|
lock.Unlock()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/endpoints"
|
"github.com/aws/aws-sdk-go/aws/endpoints"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/sts"
|
"github.com/aws/aws-sdk-go/service/sts"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/go-hclog"
|
"github.com/hashicorp/go-hclog"
|
||||||
"github.com/hashicorp/vault/api"
|
"github.com/hashicorp/vault/api"
|
||||||
"github.com/hashicorp/vault/sdk/helper/awsutil"
|
"github.com/hashicorp/vault/sdk/helper/awsutil"
|
||||||
@@ -155,7 +154,7 @@ func RetrieveCreds(accessKey, secretKey, sessionToken string, logger hclog.Logge
|
|||||||
|
|
||||||
_, err = creds.Get()
|
_, err = creds.Get()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to retrieve credentials from credential chain: {{err}}", err)
|
return nil, fmt.Errorf("failed to retrieve credentials from credential chain: %w", err)
|
||||||
}
|
}
|
||||||
return creds, nil
|
return creds, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/aws/aws-sdk-go/service/iam"
|
"github.com/aws/aws-sdk-go/service/iam"
|
||||||
"github.com/aws/aws-sdk-go/service/sts"
|
"github.com/aws/aws-sdk-go/service/sts"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
cleanhttp "github.com/hashicorp/go-cleanhttp"
|
cleanhttp "github.com/hashicorp/go-cleanhttp"
|
||||||
"github.com/hashicorp/vault/sdk/helper/awsutil"
|
"github.com/hashicorp/vault/sdk/helper/awsutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -117,12 +116,12 @@ func (b *backend) getClientConfig(ctx context.Context, s logical.Storage, region
|
|||||||
}
|
}
|
||||||
client := sts.New(sess)
|
client := sts.New(sess)
|
||||||
if client == nil {
|
if client == nil {
|
||||||
return nil, errwrap.Wrapf("could not obtain sts client: {{err}}", err)
|
return nil, fmt.Errorf("could not obtain sts client: %w", err)
|
||||||
}
|
}
|
||||||
inputParams := &sts.GetCallerIdentityInput{}
|
inputParams := &sts.GetCallerIdentityInput{}
|
||||||
identity, err := client.GetCallerIdentity(inputParams)
|
identity, err := client.GetCallerIdentity(inputParams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("unable to fetch current caller: {{err}}", err)
|
return nil, fmt.Errorf("unable to fetch current caller: %w", err)
|
||||||
}
|
}
|
||||||
if identity == nil {
|
if identity == nil {
|
||||||
return nil, fmt.Errorf("got nil result from GetCallerIdentity")
|
return nil, fmt.Errorf("got nil result from GetCallerIdentity")
|
||||||
@@ -182,7 +181,7 @@ func (b *backend) stsRoleForAccount(ctx context.Context, s logical.Storage, acco
|
|||||||
// Check if an STS configuration exists for the AWS account
|
// Check if an STS configuration exists for the AWS account
|
||||||
sts, err := b.lockedAwsStsEntry(ctx, s, accountID)
|
sts, err := b.lockedAwsStsEntry(ctx, s, accountID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errwrap.Wrapf(fmt.Sprintf("error fetching STS config for account ID %q: {{err}}", accountID), err)
|
return "", fmt.Errorf("error fetching STS config for account ID %q: %w", accountID, err)
|
||||||
}
|
}
|
||||||
// An empty STS role signifies the master account
|
// An empty STS role signifies the master account
|
||||||
if sts != nil {
|
if sts != nil {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/aws/aws-sdk-go/service/iam"
|
"github.com/aws/aws-sdk-go/service/iam"
|
||||||
"github.com/aws/aws-sdk-go/service/iam/iamiface"
|
"github.com/aws/aws-sdk-go/service/iam/iamiface"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/go-cleanhttp"
|
"github.com/hashicorp/go-cleanhttp"
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
@@ -72,7 +71,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
// Attempt to retrieve the region, error out if no region is provided.
|
// Attempt to retrieve the region, error out if no region is provided.
|
||||||
region, err := awsutil.GetRegion("")
|
region, err := awsutil.GetRegion("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving region: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving region: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
awsConfig := &aws.Config{
|
awsConfig := &aws.Config{
|
||||||
@@ -100,7 +99,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
var getUserInput iam.GetUserInput
|
var getUserInput iam.GetUserInput
|
||||||
getUserRes, err := iamClient.GetUser(&getUserInput)
|
getUserRes, err := iamClient.GetUser(&getUserInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error calling GetUser: {{err}}", err)
|
return nil, fmt.Errorf("error calling GetUser: %w", err)
|
||||||
}
|
}
|
||||||
if getUserRes == nil {
|
if getUserRes == nil {
|
||||||
return nil, fmt.Errorf("nil response from GetUser")
|
return nil, fmt.Errorf("nil response from GetUser")
|
||||||
@@ -118,7 +117,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
}
|
}
|
||||||
createAccessKeyRes, err := iamClient.CreateAccessKey(&createAccessKeyInput)
|
createAccessKeyRes, err := iamClient.CreateAccessKey(&createAccessKeyInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error calling CreateAccessKey: {{err}}", err)
|
return nil, fmt.Errorf("error calling CreateAccessKey: %w", err)
|
||||||
}
|
}
|
||||||
if createAccessKeyRes.AccessKey == nil {
|
if createAccessKeyRes.AccessKey == nil {
|
||||||
return nil, fmt.Errorf("nil response from CreateAccessKey")
|
return nil, fmt.Errorf("nil response from CreateAccessKey")
|
||||||
@@ -150,7 +149,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
// we need to hold onto the lock.
|
// we need to hold onto the lock.
|
||||||
newEntry, err := b.configClientToEntry(clientConf)
|
newEntry, err := b.configClientToEntry(clientConf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs = multierror.Append(errs, errwrap.Wrapf("error generating new client config JSON: {{err}}", err))
|
errs = multierror.Append(errs, fmt.Errorf("error generating new client config JSON: %w", err))
|
||||||
return nil, errs
|
return nil, errs
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +161,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
// before deleting the previous access key to allow work to complete. That would allow
|
// before deleting the previous access key to allow work to complete. That would allow
|
||||||
// AWS, which is eventually consistent, to finish populating the new key in all places.
|
// AWS, which is eventually consistent, to finish populating the new key in all places.
|
||||||
if err := req.Storage.Put(ctx, newEntry); err != nil {
|
if err := req.Storage.Put(ctx, newEntry); err != nil {
|
||||||
errs = multierror.Append(errs, errwrap.Wrapf("error saving new client config: {{err}}", err))
|
errs = multierror.Append(errs, fmt.Errorf("error saving new client config: %w", err))
|
||||||
return nil, errs
|
return nil, errs
|
||||||
}
|
}
|
||||||
storedNewConf = true
|
storedNewConf = true
|
||||||
@@ -178,7 +177,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
UserName: getUserRes.User.UserName,
|
UserName: getUserRes.User.UserName,
|
||||||
}
|
}
|
||||||
if _, err = iamClient.DeleteAccessKey(&deleteAccessKeyInput); err != nil {
|
if _, err = iamClient.DeleteAccessKey(&deleteAccessKeyInput); err != nil {
|
||||||
errs = multierror.Append(errs, errwrap.Wrapf(fmt.Sprintf("error deleting old access key ID %s: {{err}}", oldAccessKey), err))
|
errs = multierror.Append(errs, fmt.Errorf("error deleting old access key ID %s: %w", oldAccessKey, err))
|
||||||
return nil, errs
|
return nil, errs
|
||||||
}
|
}
|
||||||
return &logical.Response{
|
return &logical.Response{
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ func (b *backend) validateInstance(ctx context.Context, s logical.Storage, insta
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errW := errwrap.Wrapf(fmt.Sprintf("error fetching description for instance ID %q: {{err}}", instanceID), err)
|
errW := fmt.Errorf("error fetching description for instance ID %q: %w", instanceID, err)
|
||||||
return nil, errwrap.Wrap(errW, awsutil.CheckAWSError(err))
|
return nil, errwrap.Wrap(errW, awsutil.CheckAWSError(err))
|
||||||
}
|
}
|
||||||
if status == nil {
|
if status == nil {
|
||||||
@@ -328,7 +328,7 @@ func (b *backend) parseIdentityDocument(ctx context.Context, s logical.Storage,
|
|||||||
// Parse the signature from asn1 format into a struct
|
// Parse the signature from asn1 format into a struct
|
||||||
pkcs7Data, err := pkcs7.Parse(pkcs7BER.Bytes)
|
pkcs7Data, err := pkcs7.Parse(pkcs7BER.Bytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to parse the BER encoded PKCS#7 signature: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse the BER encoded PKCS#7 signature: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the public certificates that are used to verify the signature.
|
// Get the public certificates that are used to verify the signature.
|
||||||
@@ -511,19 +511,19 @@ func (b *backend) verifyInstanceMeetsRoleRequirements(ctx context.Context,
|
|||||||
// profile ARN
|
// profile ARN
|
||||||
iamInstanceProfileEntity, err := parseIamArn(iamInstanceProfileARN)
|
iamInstanceProfileEntity, err := parseIamArn(iamInstanceProfileARN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to parse IAM instance profile ARN %q: {{err}}", iamInstanceProfileARN), err)
|
return nil, fmt.Errorf("failed to parse IAM instance profile ARN %q: %w", iamInstanceProfileARN, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use instance profile ARN to fetch the associated role ARN
|
// Use instance profile ARN to fetch the associated role ARN
|
||||||
iamClient, err := b.clientIAM(ctx, s, identityDoc.Region, identityDoc.AccountID)
|
iamClient, err := b.clientIAM(ctx, s, identityDoc.Region, identityDoc.AccountID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("could not fetch IAM client: {{err}}", err)
|
return nil, fmt.Errorf("could not fetch IAM client: %w", err)
|
||||||
} else if iamClient == nil {
|
} else if iamClient == nil {
|
||||||
return nil, fmt.Errorf("received a nil iamClient")
|
return nil, fmt.Errorf("received a nil iamClient")
|
||||||
}
|
}
|
||||||
iamRoleARN, err := b.instanceIamRoleARN(iamClient, iamInstanceProfileEntity.FriendlyName)
|
iamRoleARN, err := b.instanceIamRoleARN(iamClient, iamInstanceProfileEntity.FriendlyName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("IAM role ARN could not be fetched: {{err}}", err)
|
return nil, fmt.Errorf("IAM role ARN could not be fetched: %w", err)
|
||||||
}
|
}
|
||||||
if iamRoleARN == "" {
|
if iamRoleARN == "" {
|
||||||
return nil, fmt.Errorf("IAM role ARN could not be fetched")
|
return nil, fmt.Errorf("IAM role ARN could not be fetched")
|
||||||
@@ -1018,7 +1018,7 @@ func (b *backend) pathLoginRenewIam(ctx context.Context, req *logical.Request, d
|
|||||||
b.Logger().Debug("account_id not present during iam renewal attempt, continuing to attempt validation")
|
b.Logger().Debug("account_id not present during iam renewal attempt, continuing to attempt validation")
|
||||||
}
|
}
|
||||||
if _, err := b.validateInstance(ctx, req.Storage, instanceID, instanceRegion, accountID); err != nil {
|
if _, err := b.validateInstance(ctx, req.Storage, instanceID, instanceRegion, accountID); err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to verify instance ID %q: {{err}}", instanceID), err)
|
return nil, fmt.Errorf("failed to verify instance ID %q: %w", instanceID, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("unrecognized entity_type in metadata: %q", roleEntry.InferredEntityType)
|
return nil, fmt.Errorf("unrecognized entity_type in metadata: %q", roleEntry.InferredEntityType)
|
||||||
@@ -1054,11 +1054,21 @@ func (b *backend) pathLoginRenewIam(ctx context.Context, req *logical.Request, d
|
|||||||
if fullArn == "" {
|
if fullArn == "" {
|
||||||
entity, err := parseIamArn(canonicalArn)
|
entity, err := parseIamArn(canonicalArn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("error parsing ARN %q when updating login for role %q: {{err}}", canonicalArn, roleName), err)
|
return nil, fmt.Errorf(
|
||||||
|
"error parsing ARN %q when updating login for role %q: %w",
|
||||||
|
canonicalArn,
|
||||||
|
roleName,
|
||||||
|
err,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
fullArn, err = b.fullArn(ctx, entity, req.Storage)
|
fullArn, err = b.fullArn(ctx, entity, req.Storage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("error looking up full ARN of entity %v when updating login for role %q: {{err}}", entity, roleName), err)
|
return nil, fmt.Errorf(
|
||||||
|
"error looking up full ARN of entity %v when updating login for role %q: %w",
|
||||||
|
entity,
|
||||||
|
roleName,
|
||||||
|
err,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
if fullArn == "" {
|
if fullArn == "" {
|
||||||
return nil, fmt.Errorf("got empty string back when looking up full ARN of entity %v when updating login for role %q", entity, roleName)
|
return nil, fmt.Errorf("got empty string back when looking up full ARN of entity %v when updating login for role %q", entity, roleName)
|
||||||
@@ -1103,7 +1113,7 @@ func (b *backend) pathLoginRenewEc2(ctx context.Context, req *logical.Request, _
|
|||||||
|
|
||||||
// Cross check that the instance is still in 'running' state
|
// Cross check that the instance is still in 'running' state
|
||||||
if _, err := b.validateInstance(ctx, req.Storage, instanceID, region, accountID); err != nil {
|
if _, err := b.validateInstance(ctx, req.Storage, instanceID, region, accountID); err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to verify instance ID %q: {{err}}", instanceID), err)
|
return nil, fmt.Errorf("failed to verify instance ID %q: %w", instanceID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
storedIdentity, err := accessListIdentityEntry(ctx, req.Storage, instanceID)
|
storedIdentity, err := accessListIdentityEntry(ctx, req.Storage, instanceID)
|
||||||
@@ -1649,7 +1659,7 @@ func submitCallerIdentityRequest(ctx context.Context, maxRetries int, method, en
|
|||||||
|
|
||||||
response, err := retryingClient.Do(retryableReq)
|
response, err := retryingClient.Do(retryableReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error making request: {{err}}", err)
|
return nil, fmt.Errorf("error making request: %w", err)
|
||||||
}
|
}
|
||||||
if response != nil {
|
if response != nil {
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
@@ -1744,7 +1754,7 @@ func (b *backend) fullArn(ctx context.Context, e *iamEntity, s logical.Storage)
|
|||||||
|
|
||||||
client, err := b.clientIAM(ctx, s, region.ID(), e.AccountNumber)
|
client, err := b.clientIAM(ctx, s, region.ID(), e.AccountNumber)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errwrap.Wrapf("error creating IAM client: {{err}}", err)
|
return "", fmt.Errorf("error creating IAM client: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch e.Type {
|
switch e.Type {
|
||||||
@@ -1754,7 +1764,7 @@ func (b *backend) fullArn(ctx context.Context, e *iamEntity, s logical.Storage)
|
|||||||
}
|
}
|
||||||
resp, err := client.GetUser(&input)
|
resp, err := client.GetUser(&input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errwrap.Wrapf(fmt.Sprintf("error fetching user %q: {{err}}", e.FriendlyName), err)
|
return "", fmt.Errorf("error fetching user %q: %w", e.FriendlyName, err)
|
||||||
}
|
}
|
||||||
if resp == nil {
|
if resp == nil {
|
||||||
return "", fmt.Errorf("nil response from GetUser")
|
return "", fmt.Errorf("nil response from GetUser")
|
||||||
@@ -1768,7 +1778,7 @@ func (b *backend) fullArn(ctx context.Context, e *iamEntity, s logical.Storage)
|
|||||||
}
|
}
|
||||||
resp, err := client.GetRole(&input)
|
resp, err := client.GetRole(&input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errwrap.Wrapf(fmt.Sprintf("error fetching role %q: {{err}}", e.FriendlyName), err)
|
return "", fmt.Errorf("error fetching role %q: %w", e.FriendlyName, err)
|
||||||
}
|
}
|
||||||
if resp == nil {
|
if resp == nil {
|
||||||
return "", fmt.Errorf("nil response form GetRole")
|
return "", fmt.Errorf("nil response form GetRole")
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
uuid "github.com/hashicorp/go-uuid"
|
uuid "github.com/hashicorp/go-uuid"
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
@@ -290,11 +289,11 @@ func (b *backend) roleInternal(ctx context.Context, s logical.Storage, roleName
|
|||||||
|
|
||||||
needUpgrade, err := b.upgradeRole(ctx, s, result)
|
needUpgrade, err := b.upgradeRole(ctx, s, result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error upgrading roleEntry: {{err}}", err)
|
return nil, fmt.Errorf("error upgrading roleEntry: %w", err)
|
||||||
}
|
}
|
||||||
if needUpgrade && (b.System().LocalMount() || !b.System().ReplicationState().HasState(consts.ReplicationPerformanceSecondary|consts.ReplicationPerformanceStandby)) {
|
if needUpgrade && (b.System().LocalMount() || !b.System().ReplicationState().HasState(consts.ReplicationPerformanceSecondary|consts.ReplicationPerformanceStandby)) {
|
||||||
if err = b.setRole(ctx, s, roleName, result); err != nil {
|
if err = b.setRole(ctx, s, roleName, result); err != nil {
|
||||||
return nil, errwrap.Wrapf("error saving upgraded roleEntry: {{err}}", err)
|
return nil, fmt.Errorf("error saving upgraded roleEntry: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,7 +573,7 @@ func (b *backend) pathRoleDelete(ctx context.Context, req *logical.Request, data
|
|||||||
|
|
||||||
err := req.Storage.Delete(ctx, "role/"+strings.ToLower(roleName))
|
err := req.Storage.Delete(ctx, "role/"+strings.ToLower(roleName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error deleting role: {{err}}", err)
|
return nil, fmt.Errorf("error deleting role: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
b.roleCache.Delete(roleName)
|
b.roleCache.Delete(roleName)
|
||||||
@@ -923,7 +922,7 @@ func (b *backend) pathRoleCreateUpdate(ctx context.Context, req *logical.Request
|
|||||||
if roleEntry.HMACKey == "" {
|
if roleEntry.HMACKey == "" {
|
||||||
roleEntry.HMACKey, err = uuid.GenerateUUID()
|
roleEntry.HMACKey, err = uuid.GenerateUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to generate role HMAC key: {{err}}", err)
|
return nil, fmt.Errorf("failed to generate role HMAC key: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -70,7 +69,7 @@ func (b *backend) tidyAccessListIdentity(ctx context.Context, req *logical.Reque
|
|||||||
for _, instanceID := range identities {
|
for _, instanceID := range identities {
|
||||||
identityEntry, err := s.Get(ctx, identityAccessListStorage+instanceID)
|
identityEntry, err := s.Get(ctx, identityAccessListStorage+instanceID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error fetching identity of instanceID %q: {{err}}", instanceID), err)
|
return fmt.Errorf("error fetching identity of instanceID %q: %w", instanceID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if identityEntry == nil {
|
if identityEntry == nil {
|
||||||
@@ -88,7 +87,7 @@ func (b *backend) tidyAccessListIdentity(ctx context.Context, req *logical.Reque
|
|||||||
|
|
||||||
if time.Now().After(result.ExpirationTime.Add(bufferDuration)) {
|
if time.Now().After(result.ExpirationTime.Add(bufferDuration)) {
|
||||||
if err := s.Delete(ctx, identityAccessListStorage+instanceID); err != nil {
|
if err := s.Delete(ctx, identityAccessListStorage+instanceID); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting identity of instanceID %q from storage: {{err}}", instanceID), err)
|
return fmt.Errorf("error deleting identity of instanceID %q from storage: %w", instanceID, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -74,7 +73,7 @@ func (b *backend) tidyDenyListRoleTag(ctx context.Context, req *logical.Request,
|
|||||||
for _, tag := range tags {
|
for _, tag := range tags {
|
||||||
tagEntry, err := s.Get(ctx, denyListRoletagStorage+tag)
|
tagEntry, err := s.Get(ctx, denyListRoletagStorage+tag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error fetching tag %q: {{err}}", tag), err)
|
return fmt.Errorf("error fetching tag %q: %w", tag, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if tagEntry == nil {
|
if tagEntry == nil {
|
||||||
@@ -92,7 +91,7 @@ func (b *backend) tidyDenyListRoleTag(ctx context.Context, req *logical.Request,
|
|||||||
|
|
||||||
if time.Now().After(result.ExpirationTime.Add(bufferDuration)) {
|
if time.Now().After(result.ExpirationTime.Add(bufferDuration)) {
|
||||||
if err := s.Delete(ctx, denyListRoletagStorage+tag); err != nil {
|
if err := s.Delete(ctx, denyListRoletagStorage+tag); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting tag %q from storage: {{err}}", tag), err)
|
return fmt.Errorf("error deleting tag %q from storage: %w", tag, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package cert
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -52,7 +52,7 @@ func (b *backend) Config(ctx context.Context, s logical.Storage) (*config, error
|
|||||||
var result config
|
var result config
|
||||||
if entry != nil {
|
if entry != nil {
|
||||||
if err := entry.DecodeJSON(&result); err != nil {
|
if err := entry.DecodeJSON(&result); err != nil {
|
||||||
return nil, errwrap.Wrapf("error reading configuration: {{err}}", err)
|
return nil, fmt.Errorf("error reading configuration: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return &result, nil
|
return &result, nil
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/fatih/structs"
|
"github.com/fatih/structs"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -55,7 +54,7 @@ func (b *backend) populateCRLs(ctx context.Context, storage logical.Storage) err
|
|||||||
|
|
||||||
keys, err := storage.List(ctx, "crls/")
|
keys, err := storage.List(ctx, "crls/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error listing CRLs: {{err}}", err)
|
return fmt.Errorf("error listing CRLs: %w", err)
|
||||||
}
|
}
|
||||||
if keys == nil || len(keys) == 0 {
|
if keys == nil || len(keys) == 0 {
|
||||||
return nil
|
return nil
|
||||||
@@ -65,7 +64,7 @@ func (b *backend) populateCRLs(ctx context.Context, storage logical.Storage) err
|
|||||||
entry, err := storage.Get(ctx, "crls/"+key)
|
entry, err := storage.Get(ctx, "crls/"+key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.crls = nil
|
b.crls = nil
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error loading CRL %q: {{err}}", key), err)
|
return fmt.Errorf("error loading CRL %q: %w", key, err)
|
||||||
}
|
}
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
continue
|
continue
|
||||||
@@ -74,7 +73,7 @@ func (b *backend) populateCRLs(ctx context.Context, storage logical.Storage) err
|
|||||||
err = entry.DecodeJSON(&crlInfo)
|
err = entry.DecodeJSON(&crlInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.crls = nil
|
b.crls = nil
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error decoding CRL %q: {{err}}", key), err)
|
return fmt.Errorf("error decoding CRL %q: %w", key, err)
|
||||||
}
|
}
|
||||||
b.crls[key] = crlInfo
|
b.crls[key] = crlInfo
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/api"
|
"github.com/hashicorp/vault/api"
|
||||||
"github.com/hashicorp/vault/sdk/helper/password"
|
"github.com/hashicorp/vault/sdk/helper/password"
|
||||||
)
|
)
|
||||||
@@ -43,12 +42,12 @@ func (h *CLIHandler) Auth(c *api.Client, m map[string]string) (*api.Secret, erro
|
|||||||
return nil, fmt.Errorf("user interrupted")
|
return nil, fmt.Errorf("user interrupted")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errwrap.Wrapf("An error occurred attempting to "+
|
return nil, fmt.Errorf("An error occurred attempting to "+
|
||||||
"ask for a token. The raw error message is shown below, but usually "+
|
"ask for a token. The raw error message is shown below, but usually "+
|
||||||
"this is because you attempted to pipe a value into the command or "+
|
"this is because you attempted to pipe a value into the command or "+
|
||||||
"you are executing outside of a terminal (tty). If you want to pipe "+
|
"you are executing outside of a terminal (tty). If you want to pipe "+
|
||||||
"the value, pass \"-\" as the argument to read from stdin. The raw "+
|
"the value, pass \"-\" as the argument to read from stdin. The raw "+
|
||||||
"error was: {{err}}", err)
|
"error was: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/tokenutil"
|
"github.com/hashicorp/vault/sdk/helper/tokenutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -147,7 +146,7 @@ func (b *backend) Config(ctx context.Context, s logical.Storage) (*config, error
|
|||||||
var result config
|
var result config
|
||||||
if entry != nil {
|
if entry != nil {
|
||||||
if err := entry.DecodeJSON(&result); err != nil {
|
if err := entry.DecodeJSON(&result); err != nil {
|
||||||
return nil, errwrap.Wrapf("error reading configuration: {{err}}", err)
|
return nil, fmt.Errorf("error reading configuration: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/google/go-github/github"
|
"github.com/google/go-github/github"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/policyutil"
|
"github.com/hashicorp/vault/sdk/helper/policyutil"
|
||||||
@@ -173,7 +172,7 @@ func (b *backend) verifyCredentials(ctx context.Context, req *logical.Request, t
|
|||||||
if config.BaseURL != "" {
|
if config.BaseURL != "" {
|
||||||
parsedURL, err := url.Parse(config.BaseURL)
|
parsedURL, err := url.Parse(config.BaseURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, errwrap.Wrapf("successfully parsed base_url when set but failing to parse now: {{err}}", err)
|
return nil, nil, fmt.Errorf("successfully parsed base_url when set but failing to parse now: %w", err)
|
||||||
}
|
}
|
||||||
client.BaseURL = parsedURL
|
client.BaseURL = parsedURL
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/api"
|
"github.com/hashicorp/vault/api"
|
||||||
"github.com/hashicorp/vault/sdk/helper/password"
|
"github.com/hashicorp/vault/sdk/helper/password"
|
||||||
)
|
)
|
||||||
@@ -27,7 +26,7 @@ func (h *CLIHandler) Auth(c *api.Client, m map[string]string) (*api.Secret, erro
|
|||||||
if x, ok := m["lookup"]; ok {
|
if x, ok := m["lookup"]; ok {
|
||||||
parsed, err := strconv.ParseBool(x)
|
parsed, err := strconv.ParseBool(x)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("Failed to parse \"lookup\" as boolean: {{err}}", err)
|
return nil, fmt.Errorf("Failed to parse \"lookup\" as boolean: %w", err)
|
||||||
}
|
}
|
||||||
lookup = parsed
|
lookup = parsed
|
||||||
}
|
}
|
||||||
@@ -52,12 +51,12 @@ func (h *CLIHandler) Auth(c *api.Client, m map[string]string) (*api.Secret, erro
|
|||||||
return nil, fmt.Errorf("user interrupted")
|
return nil, fmt.Errorf("user interrupted")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errwrap.Wrapf("An error occurred attempting to "+
|
return nil, fmt.Errorf("An error occurred attempting to "+
|
||||||
"ask for a token. The raw error message is shown below, but usually "+
|
"ask for a token. The raw error message is shown below, but usually "+
|
||||||
"this is because you attempted to pipe a value into the command or "+
|
"this is because you attempted to pipe a value into the command or "+
|
||||||
"you are executing outside of a terminal (tty). If you want to pipe "+
|
"you are executing outside of a terminal (tty). If you want to pipe "+
|
||||||
"the value, pass \"-\" as the argument to read from stdin. The raw "+
|
"the value, pass \"-\" as the argument to read from stdin. The raw "+
|
||||||
"error was: {{err}}", err)
|
"error was: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +86,7 @@ func (h *CLIHandler) Auth(c *api.Client, m map[string]string) (*api.Secret, erro
|
|||||||
|
|
||||||
secret, err := c.Auth().Token().LookupSelf()
|
secret, err := c.Auth().Token().LookupSelf()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error looking up token: {{err}}", err)
|
return nil, fmt.Errorf("error looking up token: %w", err)
|
||||||
}
|
}
|
||||||
if secret == nil {
|
if secret == nil {
|
||||||
return nil, fmt.Errorf("empty response from lookup-self")
|
return nil, fmt.Errorf("empty response from lookup-self")
|
||||||
@@ -98,28 +97,28 @@ func (h *CLIHandler) Auth(c *api.Client, m map[string]string) (*api.Secret, erro
|
|||||||
// mirror that data here.
|
// mirror that data here.
|
||||||
id, err := secret.TokenID()
|
id, err := secret.TokenID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error accessing token ID: {{err}}", err)
|
return nil, fmt.Errorf("error accessing token ID: %w", err)
|
||||||
}
|
}
|
||||||
accessor, err := secret.TokenAccessor()
|
accessor, err := secret.TokenAccessor()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error accessing token accessor: {{err}}", err)
|
return nil, fmt.Errorf("error accessing token accessor: %w", err)
|
||||||
}
|
}
|
||||||
// This populates secret.Auth
|
// This populates secret.Auth
|
||||||
_, err = secret.TokenPolicies()
|
_, err = secret.TokenPolicies()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error accessing token policies: {{err}}", err)
|
return nil, fmt.Errorf("error accessing token policies: %w", err)
|
||||||
}
|
}
|
||||||
metadata, err := secret.TokenMetadata()
|
metadata, err := secret.TokenMetadata()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error accessing token metadata: {{err}}", err)
|
return nil, fmt.Errorf("error accessing token metadata: %w", err)
|
||||||
}
|
}
|
||||||
dur, err := secret.TokenTTL()
|
dur, err := secret.TokenTTL()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting token TTL: {{err}}", err)
|
return nil, fmt.Errorf("error converting token TTL: %w", err)
|
||||||
}
|
}
|
||||||
renewable, err := secret.TokenIsRenewable()
|
renewable, err := secret.TokenIsRenewable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error checking if token is renewable: {{err}}", err)
|
return nil, fmt.Errorf("error checking if token is renewable: %w", err)
|
||||||
}
|
}
|
||||||
return &api.Secret{
|
return &api.Secret{
|
||||||
Auth: &api.SecretAuth{
|
Auth: &api.SecretAuth{
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/iam"
|
"github.com/aws/aws-sdk-go/service/iam"
|
||||||
"github.com/aws/aws-sdk-go/service/sts"
|
"github.com/aws/aws-sdk-go/service/sts"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
cleanhttp "github.com/hashicorp/go-cleanhttp"
|
cleanhttp "github.com/hashicorp/go-cleanhttp"
|
||||||
"github.com/hashicorp/go-hclog"
|
"github.com/hashicorp/go-hclog"
|
||||||
"github.com/hashicorp/vault/sdk/helper/awsutil"
|
"github.com/hashicorp/vault/sdk/helper/awsutil"
|
||||||
@@ -29,7 +28,7 @@ func getRootConfig(ctx context.Context, s logical.Storage, clientType string, lo
|
|||||||
if entry != nil {
|
if entry != nil {
|
||||||
var config rootConfig
|
var config rootConfig
|
||||||
if err := entry.DecodeJSON(&config); err != nil {
|
if err := entry.DecodeJSON(&config); err != nil {
|
||||||
return nil, errwrap.Wrapf("error reading root configuration: {{err}}", err)
|
return nil, fmt.Errorf("error reading root configuration: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
credsConfig.AccessKey = config.AccessKey
|
credsConfig.AccessKey = config.AccessKey
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/iam"
|
"github.com/aws/aws-sdk-go/service/iam"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -49,7 +48,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
}
|
}
|
||||||
var config rootConfig
|
var config rootConfig
|
||||||
if err := rawRootConfig.DecodeJSON(&config); err != nil {
|
if err := rawRootConfig.DecodeJSON(&config); err != nil {
|
||||||
return nil, errwrap.Wrapf("error reading root configuration: {{err}}", err)
|
return nil, fmt.Errorf("error reading root configuration: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.AccessKey == "" || config.SecretKey == "" {
|
if config.AccessKey == "" || config.SecretKey == "" {
|
||||||
@@ -59,7 +58,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
var getUserInput iam.GetUserInput // empty input means get current user
|
var getUserInput iam.GetUserInput // empty input means get current user
|
||||||
getUserRes, err := client.GetUser(&getUserInput)
|
getUserRes, err := client.GetUser(&getUserInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error calling GetUser: {{err}}", err)
|
return nil, fmt.Errorf("error calling GetUser: %w", err)
|
||||||
}
|
}
|
||||||
if getUserRes == nil {
|
if getUserRes == nil {
|
||||||
return nil, fmt.Errorf("nil response from GetUser")
|
return nil, fmt.Errorf("nil response from GetUser")
|
||||||
@@ -76,7 +75,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
}
|
}
|
||||||
createAccessKeyRes, err := client.CreateAccessKey(&createAccessKeyInput)
|
createAccessKeyRes, err := client.CreateAccessKey(&createAccessKeyInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error calling CreateAccessKey: {{err}}", err)
|
return nil, fmt.Errorf("error calling CreateAccessKey: %w", err)
|
||||||
}
|
}
|
||||||
if createAccessKeyRes.AccessKey == nil {
|
if createAccessKeyRes.AccessKey == nil {
|
||||||
return nil, fmt.Errorf("nil response from CreateAccessKey")
|
return nil, fmt.Errorf("nil response from CreateAccessKey")
|
||||||
@@ -92,10 +91,10 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
|
|
||||||
newEntry, err := logical.StorageEntryJSON("config/root", config)
|
newEntry, err := logical.StorageEntryJSON("config/root", config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error generating new config/root JSON: {{err}}", err)
|
return nil, fmt.Errorf("error generating new config/root JSON: %w", err)
|
||||||
}
|
}
|
||||||
if err := req.Storage.Put(ctx, newEntry); err != nil {
|
if err := req.Storage.Put(ctx, newEntry); err != nil {
|
||||||
return nil, errwrap.Wrapf("error saving new config/root: {{err}}", err)
|
return nil, fmt.Errorf("error saving new config/root: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
b.iamClient = nil
|
b.iamClient = nil
|
||||||
@@ -107,7 +106,7 @@ func (b *backend) pathConfigRotateRootUpdate(ctx context.Context, req *logical.R
|
|||||||
}
|
}
|
||||||
_, err = client.DeleteAccessKey(&deleteAccessKeyInput)
|
_, err = client.DeleteAccessKey(&deleteAccessKeyInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error deleting old access key: {{err}}", err)
|
return nil, fmt.Errorf("error deleting old access key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &logical.Response{
|
return &logical.Response{
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/service/iam"
|
"github.com/aws/aws-sdk-go/service/iam"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/strutil"
|
"github.com/hashicorp/vault/sdk/helper/strutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -51,7 +50,7 @@ func (b *backend) pathCredsRead(ctx context.Context, req *logical.Request, d *fr
|
|||||||
// Read the policy
|
// Read the policy
|
||||||
role, err := b.roleRead(ctx, req.Storage, roleName, true)
|
role, err := b.roleRead(ctx, req.Storage, roleName, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving role: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving role: %w", err)
|
||||||
}
|
}
|
||||||
if role == nil {
|
if role == nil {
|
||||||
return logical.ErrorResponse(fmt.Sprintf(
|
return logical.ErrorResponse(fmt.Sprintf(
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ func (b *backend) secretAccessKeysCreate(
|
|||||||
UserName: username,
|
UserName: username,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error writing WAL entry: {{err}}", err)
|
return nil, fmt.Errorf("error writing WAL entry: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
userPath := role.UserPath
|
userPath := role.UserPath
|
||||||
@@ -246,8 +246,8 @@ func (b *backend) secretAccessKeysCreate(
|
|||||||
_, err = iamClient.CreateUser(createUserRequest)
|
_, err = iamClient.CreateUser(createUserRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if walErr := framework.DeleteWAL(ctx, s, walID); walErr != nil {
|
if walErr := framework.DeleteWAL(ctx, s, walID); walErr != nil {
|
||||||
iamErr := errwrap.Wrapf("error creating IAM user: {{err}}", err)
|
iamErr := fmt.Errorf("error creating IAM user: %w", err)
|
||||||
return nil, errwrap.Wrap(errwrap.Wrapf("failed to delete WAL entry: {{err}}", walErr), iamErr)
|
return nil, errwrap.Wrap(fmt.Errorf("failed to delete WAL entry: %w", walErr), iamErr)
|
||||||
}
|
}
|
||||||
return logical.ErrorResponse("Error creating IAM user: %s", err), awsutil.CheckAWSError(err)
|
return logical.ErrorResponse("Error creating IAM user: %s", err), awsutil.CheckAWSError(err)
|
||||||
}
|
}
|
||||||
@@ -318,7 +318,7 @@ func (b *backend) secretAccessKeysCreate(
|
|||||||
// the secret because it'll get rolled back anyways, so we have to return
|
// the secret because it'll get rolled back anyways, so we have to return
|
||||||
// an error here.
|
// an error here.
|
||||||
if err := framework.DeleteWAL(ctx, s, walID); err != nil {
|
if err := framework.DeleteWAL(ctx, s, walID); err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to commit WAL entry: {{err}}", err)
|
return nil, fmt.Errorf("failed to commit WAL entry: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the info!
|
// Return the info!
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -45,7 +44,7 @@ func (b *backend) secretCredsRenew(ctx context.Context, req *logical.Request, d
|
|||||||
|
|
||||||
role, err := getRole(ctx, req.Storage, roleName)
|
role, err := getRole(ctx, req.Storage, roleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("unable to load role: {{err}}", err)
|
return nil, fmt.Errorf("unable to load role: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &logical.Response{Secret: req.Secret}
|
resp := &logical.Response{Secret: req.Secret}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gocql/gocql"
|
"github.com/gocql/gocql"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/tlsutil"
|
"github.com/hashicorp/vault/sdk/helper/tlsutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -54,12 +53,12 @@ func createSession(cfg *sessionConfig, s logical.Storage) (*gocql.Session, error
|
|||||||
|
|
||||||
parsedCertBundle, err := certBundle.ToParsedCertBundle()
|
parsedCertBundle, err := certBundle.ToParsedCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to parse certificate bundle: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse certificate bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsConfig, err = parsedCertBundle.GetTLSConfig(certutil.TLSClient)
|
tlsConfig, err = parsedCertBundle.GetTLSConfig(certutil.TLSClient)
|
||||||
if err != nil || tlsConfig == nil {
|
if err != nil || tlsConfig == nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to get TLS configuration: tlsConfig: %#v; {{err}}", tlsConfig), err)
|
return nil, fmt.Errorf("failed to get TLS configuration: tlsConfig: %#v; %w", tlsConfig, err)
|
||||||
}
|
}
|
||||||
tlsConfig.InsecureSkipVerify = cfg.InsecureTLS
|
tlsConfig.InsecureSkipVerify = cfg.InsecureTLS
|
||||||
|
|
||||||
@@ -83,13 +82,13 @@ func createSession(cfg *sessionConfig, s logical.Storage) (*gocql.Session, error
|
|||||||
|
|
||||||
session, err := clusterConfig.CreateSession()
|
session, err := clusterConfig.CreateSession()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error creating session: {{err}}", err)
|
return nil, fmt.Errorf("error creating session: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify the info
|
// Verify the info
|
||||||
err = session.Query(`LIST USERS`).Exec()
|
err = session.Query(`LIST USERS`).Exec()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error validating connection info: {{err}}", err)
|
return nil, fmt.Errorf("error validating connection info: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return session, nil
|
return session, nil
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -70,7 +69,7 @@ func (b *backend) readConfigAccess(ctx context.Context, storage logical.Storage)
|
|||||||
|
|
||||||
conf := &accessConfig{}
|
conf := &accessConfig{}
|
||||||
if err := entry.DecodeJSON(conf); err != nil {
|
if err := entry.DecodeJSON(conf); err != nil {
|
||||||
return nil, nil, errwrap.Wrapf("error reading consul access configuration: {{err}}", err)
|
return nil, nil, fmt.Errorf("error reading consul access configuration: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return conf, nil, nil
|
return conf, nil, nil
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/api"
|
"github.com/hashicorp/consul/api"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -36,7 +35,7 @@ func (b *backend) pathTokenRead(ctx context.Context, req *logical.Request, d *fr
|
|||||||
|
|
||||||
entry, err := req.Storage.Get(ctx, "policy/"+role)
|
entry, err := req.Storage.Get(ctx, "policy/"+role)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving role: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving role: %w", err)
|
||||||
}
|
}
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
return logical.ErrorResponse(fmt.Sprintf("role %q not found", role)), nil
|
return logical.ErrorResponse(fmt.Sprintf("role %q not found", role)), nil
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -42,7 +41,7 @@ func (b *backend) secretTokenRenew(ctx context.Context, req *logical.Request, d
|
|||||||
|
|
||||||
entry, err := req.Storage.Get(ctx, "policy/"+role)
|
entry, err := req.Storage.Get(ctx, "policy/"+role)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving role: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving role: %w", err)
|
||||||
}
|
}
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
return logical.ErrorResponse(fmt.Sprintf("issuing role %q not found", role)), nil
|
return logical.ErrorResponse(fmt.Sprintf("issuing role %q not found", role)), nil
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
log "github.com/hashicorp/go-hclog"
|
log "github.com/hashicorp/go-hclog"
|
||||||
"github.com/hashicorp/go-uuid"
|
"github.com/hashicorp/go-uuid"
|
||||||
v4 "github.com/hashicorp/vault/sdk/database/dbplugin"
|
v4 "github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||||
@@ -135,7 +134,7 @@ type databaseBackend struct {
|
|||||||
func (b *databaseBackend) DatabaseConfig(ctx context.Context, s logical.Storage, name string) (*DatabaseConfig, error) {
|
func (b *databaseBackend) DatabaseConfig(ctx context.Context, s logical.Storage, name string) (*DatabaseConfig, error) {
|
||||||
entry, err := s.Get(ctx, fmt.Sprintf("config/%s", name))
|
entry, err := s.Get(ctx, fmt.Sprintf("config/%s", name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read connection configuration: {{err}}", err)
|
return nil, fmt.Errorf("failed to read connection configuration: %w", err)
|
||||||
}
|
}
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
return nil, fmt.Errorf("failed to find entry for connection with name: %q", name)
|
return nil, fmt.Errorf("failed to find entry for connection with name: %q", name)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/fatih/structs"
|
"github.com/fatih/structs"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
uuid "github.com/hashicorp/go-uuid"
|
uuid "github.com/hashicorp/go-uuid"
|
||||||
v5 "github.com/hashicorp/vault/sdk/database/dbplugin/v5"
|
v5 "github.com/hashicorp/vault/sdk/database/dbplugin/v5"
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
@@ -225,7 +224,7 @@ func (b *databaseBackend) connectionDeleteHandler() framework.OperationFunc {
|
|||||||
|
|
||||||
err := req.Storage.Delete(ctx, fmt.Sprintf("config/%s", name))
|
err := req.Storage.Delete(ctx, fmt.Sprintf("config/%s", name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to delete connection configuration: {{err}}", err)
|
return nil, fmt.Errorf("failed to delete connection configuration: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := b.ClearConnection(name); err != nil {
|
if err := b.ClearConnection(name); err != nil {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
v4 "github.com/hashicorp/vault/sdk/database/dbplugin"
|
v4 "github.com/hashicorp/vault/sdk/database/dbplugin"
|
||||||
v5 "github.com/hashicorp/vault/sdk/database/dbplugin/v5"
|
v5 "github.com/hashicorp/vault/sdk/database/dbplugin/v5"
|
||||||
@@ -354,7 +353,7 @@ func (b *databaseBackend) setStaticAccount(ctx context.Context, s logical.Storag
|
|||||||
LastVaultRotation: input.Role.StaticAccount.LastVaultRotation,
|
LastVaultRotation: input.Role.StaticAccount.LastVaultRotation,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return output, errwrap.Wrapf("error writing WAL entry: {{err}}", err)
|
return output, fmt.Errorf("error writing WAL entry: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,7 +369,7 @@ func (b *databaseBackend) setStaticAccount(ctx context.Context, s logical.Storag
|
|||||||
_, err = dbi.database.UpdateUser(ctx, updateReq, false)
|
_, err = dbi.database.UpdateUser(ctx, updateReq, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.CloseIfShutdown(dbi, err)
|
b.CloseIfShutdown(dbi, err)
|
||||||
return output, errwrap.Wrapf("error setting credentials: {{err}}", err)
|
return output, fmt.Errorf("error setting credentials: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store updated role information
|
// Store updated role information
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/dbtxn"
|
"github.com/hashicorp/vault/sdk/helper/dbtxn"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -140,10 +139,10 @@ func (b *backend) secretCredsRevoke(ctx context.Context, req *logical.Request, d
|
|||||||
|
|
||||||
// can't drop if not all database users are dropped
|
// can't drop if not all database users are dropped
|
||||||
if rows.Err() != nil {
|
if rows.Err() != nil {
|
||||||
return nil, errwrap.Wrapf("could not generate sql statements for all rows: {{err}}", rows.Err())
|
return nil, fmt.Errorf("could not generate sql statements for all rows: %w", rows.Err())
|
||||||
}
|
}
|
||||||
if lastStmtError != nil {
|
if lastStmtError != nil {
|
||||||
return nil, errwrap.Wrapf("could not perform all sql statements: {{err}}", lastStmtError)
|
return nil, fmt.Errorf("could not perform all sql statements: %w", lastStmtError)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this login
|
// Drop this login
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package nomad
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -76,7 +76,7 @@ func (b *backend) readConfigAccess(ctx context.Context, storage logical.Storage)
|
|||||||
|
|
||||||
conf := &accessConfig{}
|
conf := &accessConfig{}
|
||||||
if err := entry.DecodeJSON(conf); err != nil {
|
if err := entry.DecodeJSON(conf); err != nil {
|
||||||
return nil, errwrap.Wrapf("error reading nomad access configuration: {{err}}", err)
|
return nil, fmt.Errorf("error reading nomad access configuration: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return conf, nil
|
return conf, nil
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/nomad/api"
|
"github.com/hashicorp/nomad/api"
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -42,7 +41,7 @@ func (b *backend) pathTokenRead(ctx context.Context, req *logical.Request, d *fr
|
|||||||
|
|
||||||
role, err := b.Role(ctx, req.Storage, name)
|
role, err := b.Role(ctx, req.Storage, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving role: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving role: %w", err)
|
||||||
}
|
}
|
||||||
if role == nil {
|
if role == nil {
|
||||||
return logical.ErrorResponse(fmt.Sprintf("role %q not found", name)), nil
|
return logical.ErrorResponse(fmt.Sprintf("role %q not found", name)), nil
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package nomad
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -77,7 +77,7 @@ func (b *backend) Role(ctx context.Context, storage logical.Storage, name string
|
|||||||
|
|
||||||
entry, err := storage.Get(ctx, "role/"+name)
|
entry, err := storage.Get(ctx, "role/"+name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving role: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving role: %w", err)
|
||||||
}
|
}
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
@@ -374,7 +373,7 @@ func validateOtherSANs(data *inputBundle, requested map[string][]string) (string
|
|||||||
|
|
||||||
allowed, err := parseOtherSANs(data.role.AllowedOtherSANs)
|
allowed, err := parseOtherSANs(data.role.AllowedOtherSANs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", errwrap.Wrapf("error parsing role's allowed SANs: {{err}}", err)
|
return "", "", fmt.Errorf("error parsing role's allowed SANs: %w", err)
|
||||||
}
|
}
|
||||||
for oid, names := range requested {
|
for oid, names := range requested {
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
@@ -682,7 +681,7 @@ func getOtherSANsFromX509Extensions(exts []pkix.Extension) ([]otherNameUtf8, err
|
|||||||
var other otherNameRaw
|
var other otherNameRaw
|
||||||
_, err := asn1.UnmarshalWithParams(data, &other, "tag:0")
|
_, err := asn1.UnmarshalWithParams(data, &other, "tag:0")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("could not parse requested other SAN: {{err}}", err)
|
return fmt.Errorf("could not parse requested other SAN: %w", err)
|
||||||
}
|
}
|
||||||
val, err := other.extractUTF8String()
|
val, err := other.extractUTF8String()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -871,7 +870,7 @@ func generateCreationBundle(b *backend, data *inputBundle, caSign *certutil.CAIn
|
|||||||
if data.role.UseCSRSANs && csr != nil && len(csr.Extensions) > 0 {
|
if data.role.UseCSRSANs && csr != nil && len(csr.Extensions) > 0 {
|
||||||
others, err := getOtherSANsFromX509Extensions(csr.Extensions)
|
others, err := getOtherSANsFromX509Extensions(csr.Extensions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errutil.UserError{Err: errwrap.Wrapf("could not parse requested other SAN: {{err}}", err).Error()}
|
return nil, errutil.UserError{Err: fmt.Errorf("could not parse requested other SAN: %w", err).Error()}
|
||||||
}
|
}
|
||||||
for _, other := range others {
|
for _, other := range others {
|
||||||
otherSANsInput = append(otherSANsInput, other.String())
|
otherSANsInput = append(otherSANsInput, other.String())
|
||||||
@@ -880,7 +879,7 @@ func generateCreationBundle(b *backend, data *inputBundle, caSign *certutil.CAIn
|
|||||||
if len(otherSANsInput) > 0 {
|
if len(otherSANsInput) > 0 {
|
||||||
requested, err := parseOtherSANs(otherSANsInput)
|
requested, err := parseOtherSANs(otherSANsInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errutil.UserError{Err: errwrap.Wrapf("could not parse requested other SAN: {{err}}", err).Error()}
|
return nil, errutil.UserError{Err: fmt.Errorf("could not parse requested other SAN: %w", err).Error()}
|
||||||
}
|
}
|
||||||
badOID, badName, err := validateOtherSANs(data, requested)
|
badOID, badName, err := validateOtherSANs(data, requested)
|
||||||
switch {
|
switch {
|
||||||
@@ -1133,7 +1132,7 @@ func convertRespToPKCS8(resp *logical.Response) error {
|
|||||||
if block == nil {
|
if block == nil {
|
||||||
keyData, err = base64.StdEncoding.DecodeString(priv)
|
keyData, err = base64.StdEncoding.DecodeString(priv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error converting response to pkcs8: error decoding original value: {{err}}", err)
|
return fmt.Errorf("error converting response to pkcs8: error decoding original value: %w", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
keyData = block.Bytes
|
keyData = block.Bytes
|
||||||
@@ -1149,12 +1148,12 @@ func convertRespToPKCS8(resp *logical.Response) error {
|
|||||||
return fmt.Errorf("unknown private key type %q", privKeyType)
|
return fmt.Errorf("unknown private key type %q", privKeyType)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error converting response to pkcs8: error parsing previous key: {{err}}", err)
|
return fmt.Errorf("error converting response to pkcs8: error parsing previous key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
keyData, err = x509.MarshalPKCS8PrivateKey(signer)
|
keyData, err = x509.MarshalPKCS8PrivateKey(signer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error converting response to pkcs8: error marshaling pkcs8 key: {{err}}", err)
|
return fmt.Errorf("error converting response to pkcs8: error marshaling pkcs8 key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if pemUsed {
|
if pemUsed {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -92,7 +91,7 @@ func revokeCert(ctx context.Context, b *backend, req *logical.Request, serial st
|
|||||||
|
|
||||||
cert, err := x509.ParseCertificate(certEntry.Value)
|
cert, err := x509.ParseCertificate(certEntry.Value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error parsing certificate: {{err}}", err)
|
return nil, fmt.Errorf("error parsing certificate: %w", err)
|
||||||
}
|
}
|
||||||
if cert == nil {
|
if cert == nil {
|
||||||
return nil, fmt.Errorf("got a nil certificate")
|
return nil, fmt.Errorf("got a nil certificate")
|
||||||
@@ -132,7 +131,7 @@ func revokeCert(ctx context.Context, b *backend, req *logical.Request, serial st
|
|||||||
case errutil.UserError:
|
case errutil.UserError:
|
||||||
return logical.ErrorResponse(fmt.Sprintf("Error during CRL building: %s", crlErr)), nil
|
return logical.ErrorResponse(fmt.Sprintf("Error during CRL building: %s", crlErr)), nil
|
||||||
case errutil.InternalError:
|
case errutil.InternalError:
|
||||||
return nil, errwrap.Wrapf("error encountered during CRL building: {{err}}", crlErr)
|
return nil, fmt.Errorf("error encountered during CRL building: %w", crlErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &logical.Response{
|
resp := &logical.Response{
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package pki
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
@@ -65,7 +65,7 @@ func (b *backend) pathCAWrite(ctx context.Context, req *logical.Request, data *f
|
|||||||
|
|
||||||
cb, err := parsedBundle.ToCertBundle()
|
cb, err := parsedBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw values into cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw values into cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
entry, err := logical.StorageEntryJSON("config/ca_bundle", cb)
|
entry, err := logical.StorageEntryJSON("config/ca_bundle", cb)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -117,7 +116,7 @@ func (b *backend) pathCRLWrite(ctx context.Context, req *logical.Request, d *fra
|
|||||||
case errutil.UserError:
|
case errutil.UserError:
|
||||||
return logical.ErrorResponse(fmt.Sprintf("Error during CRL building: %s", crlErr)), nil
|
return logical.ErrorResponse(fmt.Sprintf("Error during CRL building: %s", crlErr)), nil
|
||||||
case errutil.InternalError:
|
case errutil.InternalError:
|
||||||
return nil, errwrap.Wrapf("error encountered during CRL building: {{err}}", crlErr)
|
return nil, fmt.Errorf("error encountered during CRL building: %w", crlErr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
@@ -88,7 +87,7 @@ func (b *backend) pathGenerateIntermediate(ctx context.Context, req *logical.Req
|
|||||||
|
|
||||||
csrb, err := parsedBundle.ToCSRBundle()
|
csrb, err := parsedBundle.ToCSRBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw CSR bundle to CSR bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw CSR bundle to CSR bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp = &logical.Response{
|
resp = &logical.Response{
|
||||||
@@ -198,12 +197,12 @@ func (b *backend) pathSetSignedIntermediate(ctx context.Context, req *logical.Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := inputBundle.Verify(); err != nil {
|
if err := inputBundle.Verify(); err != nil {
|
||||||
return nil, errwrap.Wrapf("verification of parsed bundle failed: {{err}}", err)
|
return nil, fmt.Errorf("verification of parsed bundle failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cb, err = inputBundle.ToCertBundle()
|
cb, err = inputBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw values into cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw values into cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
entry, err = logical.StorageEntryJSON("config/ca_bundle", cb)
|
entry, err = logical.StorageEntryJSON("config/ca_bundle", cb)
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
@@ -229,18 +228,18 @@ func (b *backend) pathIssueSignCert(ctx context.Context, req *logical.Request, d
|
|||||||
case errutil.InternalError:
|
case errutil.InternalError:
|
||||||
return nil, err
|
return nil, err
|
||||||
default:
|
default:
|
||||||
return nil, errwrap.Wrapf("error signing/generating certificate: {{err}}", err)
|
return nil, fmt.Errorf("error signing/generating certificate: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
signingCB, err := signingBundle.ToCertBundle()
|
signingCB, err := signingBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw signing bundle to cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw signing bundle to cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cb, err := parsedBundle.ToCertBundle()
|
cb, err := parsedBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw cert bundle to cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw cert bundle to cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
respData := map[string]interface{}{
|
respData := map[string]interface{}{
|
||||||
@@ -321,7 +320,7 @@ func (b *backend) pathIssueSignCert(ctx context.Context, req *logical.Request, d
|
|||||||
Value: parsedBundle.CertificateBytes,
|
Value: parsedBundle.CertificateBytes,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("unable to store certificate locally: {{err}}", err)
|
return nil, fmt.Errorf("unable to store certificate locally: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
@@ -74,7 +73,7 @@ func (b *backend) pathRotateCRLRead(ctx context.Context, req *logical.Request, d
|
|||||||
case errutil.UserError:
|
case errutil.UserError:
|
||||||
return logical.ErrorResponse(fmt.Sprintf("Error during CRL building: %s", crlErr)), nil
|
return logical.ErrorResponse(fmt.Sprintf("Error during CRL building: %s", crlErr)), nil
|
||||||
case errutil.InternalError:
|
case errutil.InternalError:
|
||||||
return nil, errwrap.Wrapf("error encountered during CRL building: {{err}}", crlErr)
|
return nil, fmt.Errorf("error encountered during CRL building: %w", crlErr)
|
||||||
default:
|
default:
|
||||||
return &logical.Response{
|
return &logical.Response{
|
||||||
Data: map[string]interface{}{
|
Data: map[string]interface{}{
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
@@ -588,7 +587,7 @@ func (b *backend) pathRoleCreate(ctx context.Context, req *logical.Request, data
|
|||||||
default:
|
default:
|
||||||
_, err := parseOtherSANs(allowedOtherSANs)
|
_, err := parseOtherSANs(allowedOtherSANs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return logical.ErrorResponse(errwrap.Wrapf("error parsing allowed_other_sans: {{err}}", err).Error()), nil
|
return logical.ErrorResponse(fmt.Errorf("error parsing allowed_other_sans: %w", err).Error()), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
entry.AllowedOtherSANs = allowedOtherSANs
|
entry.AllowedOtherSANs = allowedOtherSANs
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import (
|
|||||||
|
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -158,7 +157,7 @@ func (b *backend) pathCAGenerateRoot(ctx context.Context, req *logical.Request,
|
|||||||
|
|
||||||
cb, err := parsedBundle.ToCertBundle()
|
cb, err := parsedBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw cert bundle to cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw cert bundle to cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &logical.Response{
|
resp := &logical.Response{
|
||||||
@@ -221,7 +220,7 @@ func (b *backend) pathCAGenerateRoot(ctx context.Context, req *logical.Request,
|
|||||||
Value: parsedBundle.CertificateBytes,
|
Value: parsedBundle.CertificateBytes,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("unable to store certificate locally: {{err}}", err)
|
return nil, fmt.Errorf("unable to store certificate locally: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// For ease of later use, also store just the certificate at a known
|
// For ease of later use, also store just the certificate at a known
|
||||||
@@ -314,17 +313,17 @@ func (b *backend) pathCASignIntermediate(ctx context.Context, req *logical.Reque
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := parsedBundle.Verify(); err != nil {
|
if err := parsedBundle.Verify(); err != nil {
|
||||||
return nil, errwrap.Wrapf("verification of parsed bundle failed: {{err}}", err)
|
return nil, fmt.Errorf("verification of parsed bundle failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
signingCB, err := signingBundle.ToCertBundle()
|
signingCB, err := signingBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw signing bundle to cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw signing bundle to cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cb, err := parsedBundle.ToCertBundle()
|
cb, err := parsedBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw cert bundle to cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw cert bundle to cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &logical.Response{
|
resp := &logical.Response{
|
||||||
@@ -371,7 +370,7 @@ func (b *backend) pathCASignIntermediate(ctx context.Context, req *logical.Reque
|
|||||||
Value: parsedBundle.CertificateBytes,
|
Value: parsedBundle.CertificateBytes,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("unable to store certificate locally: {{err}}", err)
|
return nil, fmt.Errorf("unable to store certificate locally: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if parsedBundle.Certificate.MaxPathLen == 0 {
|
if parsedBundle.Certificate.MaxPathLen == 0 {
|
||||||
@@ -418,7 +417,7 @@ func (b *backend) pathCASignSelfIssued(ctx context.Context, req *logical.Request
|
|||||||
|
|
||||||
signingCB, err := signingBundle.ToCertBundle()
|
signingCB, err := signingBundle.ToCertBundle()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error converting raw signing bundle to cert bundle: {{err}}", err)
|
return nil, fmt.Errorf("error converting raw signing bundle to cert bundle: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
urls := &certutil.URLEntries{}
|
urls := &certutil.URLEntries{}
|
||||||
@@ -431,7 +430,7 @@ func (b *backend) pathCASignSelfIssued(ctx context.Context, req *logical.Request
|
|||||||
|
|
||||||
newCert, err := x509.CreateCertificate(rand.Reader, cert, signingBundle.Certificate, cert.PublicKey, signingBundle.PrivateKey)
|
newCert, err := x509.CreateCertificate(rand.Reader, cert, signingBundle.Certificate, cert.PublicKey, signingBundle.PrivateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error signing self-issued certificate: {{err}}", err)
|
return nil, fmt.Errorf("error signing self-issued certificate: %w", err)
|
||||||
}
|
}
|
||||||
if len(newCert) == 0 {
|
if len(newCert) == 0 {
|
||||||
return nil, fmt.Errorf("nil cert was created when signing self-issued certificate")
|
return nil, fmt.Errorf("nil cert was created when signing self-issued certificate")
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/consts"
|
"github.com/hashicorp/vault/sdk/helper/consts"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -96,19 +95,19 @@ func (b *backend) pathTidyWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
if tidyCertStore {
|
if tidyCertStore {
|
||||||
serials, err := req.Storage.List(ctx, "certs/")
|
serials, err := req.Storage.List(ctx, "certs/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error fetching list of certs: {{err}}", err)
|
return fmt.Errorf("error fetching list of certs: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, serial := range serials {
|
for _, serial := range serials {
|
||||||
certEntry, err := req.Storage.Get(ctx, "certs/"+serial)
|
certEntry, err := req.Storage.Get(ctx, "certs/"+serial)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error fetching certificate %q: {{err}}", serial), err)
|
return fmt.Errorf("error fetching certificate %q: %w", serial, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if certEntry == nil {
|
if certEntry == nil {
|
||||||
logger.Warn("certificate entry is nil; tidying up since it is no longer useful for any server operations", "serial", serial)
|
logger.Warn("certificate entry is nil; tidying up since it is no longer useful for any server operations", "serial", serial)
|
||||||
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting nil entry with serial %s: {{err}}", serial), err)
|
return fmt.Errorf("error deleting nil entry with serial %s: %w", serial, err)
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -116,19 +115,19 @@ func (b *backend) pathTidyWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
if certEntry.Value == nil || len(certEntry.Value) == 0 {
|
if certEntry.Value == nil || len(certEntry.Value) == 0 {
|
||||||
logger.Warn("certificate entry has no value; tidying up since it is no longer useful for any server operations", "serial", serial)
|
logger.Warn("certificate entry has no value; tidying up since it is no longer useful for any server operations", "serial", serial)
|
||||||
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting entry with nil value with serial %s: {{err}}", serial), err)
|
return fmt.Errorf("error deleting entry with nil value with serial %s: %w", serial, err)
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
cert, err := x509.ParseCertificate(certEntry.Value)
|
cert, err := x509.ParseCertificate(certEntry.Value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("unable to parse stored certificate with serial %q: {{err}}", serial), err)
|
return fmt.Errorf("unable to parse stored certificate with serial %q: %w", serial, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if time.Now().After(cert.NotAfter.Add(bufferDuration)) {
|
if time.Now().After(cert.NotAfter.Add(bufferDuration)) {
|
||||||
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting serial %q from storage: {{err}}", serial), err)
|
return fmt.Errorf("error deleting serial %q from storage: %w", serial, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,20 +141,20 @@ func (b *backend) pathTidyWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
|
|
||||||
revokedSerials, err := req.Storage.List(ctx, "revoked/")
|
revokedSerials, err := req.Storage.List(ctx, "revoked/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error fetching list of revoked certs: {{err}}", err)
|
return fmt.Errorf("error fetching list of revoked certs: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var revInfo revocationInfo
|
var revInfo revocationInfo
|
||||||
for _, serial := range revokedSerials {
|
for _, serial := range revokedSerials {
|
||||||
revokedEntry, err := req.Storage.Get(ctx, "revoked/"+serial)
|
revokedEntry, err := req.Storage.Get(ctx, "revoked/"+serial)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("unable to fetch revoked cert with serial %q: {{err}}", serial), err)
|
return fmt.Errorf("unable to fetch revoked cert with serial %q: %w", serial, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if revokedEntry == nil {
|
if revokedEntry == nil {
|
||||||
logger.Warn("revoked entry is nil; tidying up since it is no longer useful for any server operations", "serial", serial)
|
logger.Warn("revoked entry is nil; tidying up since it is no longer useful for any server operations", "serial", serial)
|
||||||
if err := req.Storage.Delete(ctx, "revoked/"+serial); err != nil {
|
if err := req.Storage.Delete(ctx, "revoked/"+serial); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting nil revoked entry with serial %s: {{err}}", serial), err)
|
return fmt.Errorf("error deleting nil revoked entry with serial %s: %w", serial, err)
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -163,19 +162,19 @@ func (b *backend) pathTidyWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
if revokedEntry.Value == nil || len(revokedEntry.Value) == 0 {
|
if revokedEntry.Value == nil || len(revokedEntry.Value) == 0 {
|
||||||
logger.Warn("revoked entry has nil value; tidying up since it is no longer useful for any server operations", "serial", serial)
|
logger.Warn("revoked entry has nil value; tidying up since it is no longer useful for any server operations", "serial", serial)
|
||||||
if err := req.Storage.Delete(ctx, "revoked/"+serial); err != nil {
|
if err := req.Storage.Delete(ctx, "revoked/"+serial); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting revoked entry with nil value with serial %s: {{err}}", serial), err)
|
return fmt.Errorf("error deleting revoked entry with nil value with serial %s: %w", serial, err)
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
err = revokedEntry.DecodeJSON(&revInfo)
|
err = revokedEntry.DecodeJSON(&revInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error decoding revocation entry for serial %q: {{err}}", serial), err)
|
return fmt.Errorf("error decoding revocation entry for serial %q: %w", serial, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
revokedCert, err := x509.ParseCertificate(revInfo.CertificateBytes)
|
revokedCert, err := x509.ParseCertificate(revInfo.CertificateBytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("unable to parse stored revoked certificate with serial %q: {{err}}", serial), err)
|
return fmt.Errorf("unable to parse stored revoked certificate with serial %q: %w", serial, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only remove the entries from revoked/ and certs/ if we're
|
// Only remove the entries from revoked/ and certs/ if we're
|
||||||
@@ -184,10 +183,10 @@ func (b *backend) pathTidyWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
// information on certs/ for lookup.
|
// information on certs/ for lookup.
|
||||||
if time.Now().After(revokedCert.NotAfter.Add(bufferDuration)) {
|
if time.Now().After(revokedCert.NotAfter.Add(bufferDuration)) {
|
||||||
if err := req.Storage.Delete(ctx, "revoked/"+serial); err != nil {
|
if err := req.Storage.Delete(ctx, "revoked/"+serial); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting serial %q from revoked list: {{err}}", serial), err)
|
return fmt.Errorf("error deleting serial %q from revoked list: %w", serial, err)
|
||||||
}
|
}
|
||||||
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
if err := req.Storage.Delete(ctx, "certs/"+serial); err != nil {
|
||||||
return errwrap.Wrapf(fmt.Sprintf("error deleting serial %q from store when tidying revoked: {{err}}", serial), err)
|
return fmt.Errorf("error deleting serial %q from store when tidying revoked: %w", serial, err)
|
||||||
}
|
}
|
||||||
rebuildCRL = true
|
rebuildCRL = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/dbtxn"
|
"github.com/hashicorp/vault/sdk/helper/dbtxn"
|
||||||
"github.com/hashicorp/vault/sdk/helper/strutil"
|
"github.com/hashicorp/vault/sdk/helper/strutil"
|
||||||
@@ -219,10 +218,10 @@ func (b *backend) secretCredsRevoke(ctx context.Context, req *logical.Request, d
|
|||||||
|
|
||||||
// can't drop if not all privileges are revoked
|
// can't drop if not all privileges are revoked
|
||||||
if rows.Err() != nil {
|
if rows.Err() != nil {
|
||||||
return nil, errwrap.Wrapf("could not generate revocation statements for all rows: {{err}}", rows.Err())
|
return nil, fmt.Errorf("could not generate revocation statements for all rows: %w", rows.Err())
|
||||||
}
|
}
|
||||||
if lastStmtError != nil {
|
if lastStmtError != nil {
|
||||||
return nil, errwrap.Wrapf("could not perform all revocation statements: {{err}}", lastStmtError)
|
return nil, fmt.Errorf("could not perform all revocation statements: %w", lastStmtError)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop this user
|
// Drop this user
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package rabbitmq
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
rabbithole "github.com/michaelklishin/rabbit-hole"
|
rabbithole "github.com/michaelklishin/rabbit-hole"
|
||||||
@@ -73,12 +73,12 @@ func (b *backend) pathConnectionUpdate(ctx context.Context, req *logical.Request
|
|||||||
// Create RabbitMQ management client
|
// Create RabbitMQ management client
|
||||||
client, err := rabbithole.NewClient(uri, username, password)
|
client, err := rabbithole.NewClient(uri, username, password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to create client: {{err}}", err)
|
return nil, fmt.Errorf("failed to create client: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify that configured credentials is capable of listing
|
// Verify that configured credentials is capable of listing
|
||||||
if _, err = client.ListUsers(); err != nil {
|
if _, err = client.ListUsers(); err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to validate the connection: {{err}}", err)
|
return nil, fmt.Errorf("failed to validate the connection: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -63,7 +62,7 @@ func (b *backend) secretCredsRevoke(ctx context.Context, req *logical.Request, d
|
|||||||
}
|
}
|
||||||
|
|
||||||
if _, err = client.DeleteUser(username); err != nil {
|
if _, err = client.DeleteUser(username); err != nil {
|
||||||
return nil, errwrap.Wrapf("could not delete user: {{err}}", err)
|
return nil, fmt.Errorf("could not delete user: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
log "github.com/hashicorp/go-hclog"
|
log "github.com/hashicorp/go-hclog"
|
||||||
|
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
@@ -278,7 +277,7 @@ func checkSCPStatus(r *bufio.Reader) error {
|
|||||||
// Treat any non-zero (really 1 and 2) as fatal errors
|
// Treat any non-zero (really 1 and 2) as fatal errors
|
||||||
message, _, err := r.ReadLine()
|
message, _, err := r.ReadLine()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error reading error message: {{err}}", err)
|
return fmt.Errorf("error reading error message: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.New(string(message))
|
return errors.New(string(message))
|
||||||
@@ -299,7 +298,7 @@ func scpUploadFile(dst string, src io.Reader, w io.Writer, r *bufio.Reader, fi *
|
|||||||
// so that we can determine the length, since SCP is length-prefixed.
|
// so that we can determine the length, since SCP is length-prefixed.
|
||||||
tf, err := ioutil.TempFile("", "vault-ssh-upload")
|
tf, err := ioutil.TempFile("", "vault-ssh-upload")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error creating temporary file for upload: {{err}}", err)
|
return fmt.Errorf("error creating temporary file for upload: %w", err)
|
||||||
}
|
}
|
||||||
defer os.Remove(tf.Name())
|
defer os.Remove(tf.Name())
|
||||||
defer tf.Close()
|
defer tf.Close()
|
||||||
@@ -313,17 +312,17 @@ func scpUploadFile(dst string, src io.Reader, w io.Writer, r *bufio.Reader, fi *
|
|||||||
// Sync the file so that the contents are definitely on disk, then
|
// Sync the file so that the contents are definitely on disk, then
|
||||||
// read the length of it.
|
// read the length of it.
|
||||||
if err := tf.Sync(); err != nil {
|
if err := tf.Sync(); err != nil {
|
||||||
return errwrap.Wrapf("error creating temporary file for upload: {{err}}", err)
|
return fmt.Errorf("error creating temporary file for upload: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Seek the file to the beginning so we can re-read all of it
|
// Seek the file to the beginning so we can re-read all of it
|
||||||
if _, err := tf.Seek(0, 0); err != nil {
|
if _, err := tf.Seek(0, 0); err != nil {
|
||||||
return errwrap.Wrapf("error creating temporary file for upload: {{err}}", err)
|
return fmt.Errorf("error creating temporary file for upload: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tfi, err := tf.Stat()
|
tfi, err := tf.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error creating temporary file for upload: {{err}}", err)
|
return fmt.Errorf("error creating temporary file for upload: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
size = tfi.Size()
|
size = tfi.Size()
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"encoding/pem"
|
"encoding/pem"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
multierror "github.com/hashicorp/go-multierror"
|
multierror "github.com/hashicorp/go-multierror"
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -66,7 +65,7 @@ Read operations will return the public key, if already stored/generated.`,
|
|||||||
func (b *backend) pathConfigCARead(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) {
|
func (b *backend) pathConfigCARead(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) {
|
||||||
publicKeyEntry, err := caKey(ctx, req.Storage, caPublicKey)
|
publicKeyEntry, err := caKey(ctx, req.Storage, caPublicKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read CA public key: {{err}}", err)
|
return nil, fmt.Errorf("failed to read CA public key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if publicKeyEntry == nil {
|
if publicKeyEntry == nil {
|
||||||
@@ -107,7 +106,7 @@ func caKey(ctx context.Context, storage logical.Storage, keyType string) (*keySt
|
|||||||
|
|
||||||
entry, err := storage.Get(ctx, path)
|
entry, err := storage.Get(ctx, path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("failed to read CA key of type %q: {{err}}", keyType), err)
|
return nil, fmt.Errorf("failed to read CA key of type %q: %w", keyType, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if entry == nil {
|
if entry == nil {
|
||||||
@@ -203,12 +202,12 @@ func (b *backend) pathConfigCAUpdate(ctx context.Context, req *logical.Request,
|
|||||||
|
|
||||||
publicKeyEntry, err := caKey(ctx, req.Storage, caPublicKey)
|
publicKeyEntry, err := caKey(ctx, req.Storage, caPublicKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read CA public key: {{err}}", err)
|
return nil, fmt.Errorf("failed to read CA public key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
privateKeyEntry, err := caKey(ctx, req.Storage, caPrivateKey)
|
privateKeyEntry, err := caKey(ctx, req.Storage, caPrivateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read CA private key: {{err}}", err)
|
return nil, fmt.Errorf("failed to read CA private key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (publicKeyEntry != nil && publicKeyEntry.Key != "") || (privateKeyEntry != nil && privateKeyEntry.Key != "") {
|
if (publicKeyEntry != nil && publicKeyEntry.Key != "") || (privateKeyEntry != nil && privateKeyEntry.Key != "") {
|
||||||
@@ -240,12 +239,12 @@ func (b *backend) pathConfigCAUpdate(ctx context.Context, req *logical.Request,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
var mErr *multierror.Error
|
var mErr *multierror.Error
|
||||||
|
|
||||||
mErr = multierror.Append(mErr, errwrap.Wrapf("failed to store CA private key: {{err}}", err))
|
mErr = multierror.Append(mErr, fmt.Errorf("failed to store CA private key: %w", err))
|
||||||
|
|
||||||
// If storing private key fails, the corresponding public key should be
|
// If storing private key fails, the corresponding public key should be
|
||||||
// removed
|
// removed
|
||||||
if delErr := req.Storage.Delete(ctx, caPublicKeyStoragePath); delErr != nil {
|
if delErr := req.Storage.Delete(ctx, caPublicKeyStoragePath); delErr != nil {
|
||||||
mErr = multierror.Append(mErr, errwrap.Wrapf("failed to cleanup CA public key: {{err}}", delErr))
|
mErr = multierror.Append(mErr, fmt.Errorf("failed to cleanup CA public key: %w", delErr))
|
||||||
return nil, mErr
|
return nil, mErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
uuid "github.com/hashicorp/go-uuid"
|
uuid "github.com/hashicorp/go-uuid"
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -56,7 +55,7 @@ func (b *backend) pathCredsCreateWrite(ctx context.Context, req *logical.Request
|
|||||||
|
|
||||||
role, err := b.getRole(ctx, req.Storage, roleName)
|
role, err := b.getRole(ctx, req.Storage, roleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving role: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving role: %w", err)
|
||||||
}
|
}
|
||||||
if role == nil {
|
if role == nil {
|
||||||
return logical.ErrorResponse(fmt.Sprintf("Role %q not found", roleName)), nil
|
return logical.ErrorResponse(fmt.Sprintf("Role %q not found", roleName)), nil
|
||||||
@@ -98,7 +97,7 @@ func (b *backend) pathCredsCreateWrite(ctx context.Context, req *logical.Request
|
|||||||
|
|
||||||
zeroAddressEntry, err := b.getZeroAddressRoles(ctx, req.Storage)
|
zeroAddressEntry, err := b.getZeroAddressRoles(ctx, req.Storage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error retrieving zero-address roles: {{err}}", err)
|
return nil, fmt.Errorf("error retrieving zero-address roles: %w", err)
|
||||||
}
|
}
|
||||||
var zeroAddressRoles []string
|
var zeroAddressRoles []string
|
||||||
if zeroAddressEntry != nil {
|
if zeroAddressEntry != nil {
|
||||||
@@ -172,7 +171,7 @@ func (b *backend) GenerateDynamicCredential(ctx context.Context, req *logical.Re
|
|||||||
// Fetch the host key to be used for dynamic key installation
|
// Fetch the host key to be used for dynamic key installation
|
||||||
keyEntry, err := req.Storage.Get(ctx, fmt.Sprintf("keys/%s", role.KeyName))
|
keyEntry, err := req.Storage.Get(ctx, fmt.Sprintf("keys/%s", role.KeyName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", errwrap.Wrapf(fmt.Sprintf("key %q not found: {{err}}", role.KeyName), err)
|
return "", "", fmt.Errorf("key %q not found: %w", role.KeyName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyEntry == nil {
|
if keyEntry == nil {
|
||||||
@@ -181,13 +180,13 @@ func (b *backend) GenerateDynamicCredential(ctx context.Context, req *logical.Re
|
|||||||
|
|
||||||
var hostKey sshHostKey
|
var hostKey sshHostKey
|
||||||
if err := keyEntry.DecodeJSON(&hostKey); err != nil {
|
if err := keyEntry.DecodeJSON(&hostKey); err != nil {
|
||||||
return "", "", errwrap.Wrapf("error reading the host key: {{err}}", err)
|
return "", "", fmt.Errorf("error reading the host key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a new RSA key pair with the given key length.
|
// Generate a new RSA key pair with the given key length.
|
||||||
dynamicPublicKey, dynamicPrivateKey, err := generateRSAKeys(role.KeyBits)
|
dynamicPublicKey, dynamicPrivateKey, err := generateRSAKeys(role.KeyBits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", errwrap.Wrapf("error generating key: {{err}}", err)
|
return "", "", fmt.Errorf("error generating key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(role.KeyOptionSpecs) != 0 {
|
if len(role.KeyOptionSpecs) != 0 {
|
||||||
@@ -197,7 +196,7 @@ func (b *backend) GenerateDynamicCredential(ctx context.Context, req *logical.Re
|
|||||||
// Add the public key to authorized_keys file in target machine
|
// Add the public key to authorized_keys file in target machine
|
||||||
err = b.installPublicKeyInTarget(ctx, role.AdminUser, username, ip, role.Port, hostKey.Key, dynamicPublicKey, role.InstallScript, true)
|
err = b.installPublicKeyInTarget(ctx, role.AdminUser, username, ip, role.Port, hostKey.Key, dynamicPublicKey, role.InstallScript, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", errwrap.Wrapf("failed to add public key to authorized_keys file in target: {{err}}", err)
|
return "", "", fmt.Errorf("failed to add public key to authorized_keys file in target: %w", err)
|
||||||
}
|
}
|
||||||
return dynamicPublicKey, dynamicPrivateKey, nil
|
return dynamicPublicKey, dynamicPrivateKey, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
"github.com/hashicorp/vault/sdk/helper/cidrutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
||||||
@@ -369,7 +368,7 @@ func (b *backend) pathRoleWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
if cidrList != "" {
|
if cidrList != "" {
|
||||||
valid, err := cidrutil.ValidateCIDRListString(cidrList, ",")
|
valid, err := cidrutil.ValidateCIDRListString(cidrList, ",")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to validate cidr_list: {{err}}", err)
|
return nil, fmt.Errorf("failed to validate cidr_list: %w", err)
|
||||||
}
|
}
|
||||||
if !valid {
|
if !valid {
|
||||||
return logical.ErrorResponse("failed to validate cidr_list"), nil
|
return logical.ErrorResponse("failed to validate cidr_list"), nil
|
||||||
@@ -381,7 +380,7 @@ func (b *backend) pathRoleWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
if excludeCidrList != "" {
|
if excludeCidrList != "" {
|
||||||
valid, err := cidrutil.ValidateCIDRListString(excludeCidrList, ",")
|
valid, err := cidrutil.ValidateCIDRListString(excludeCidrList, ",")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to validate exclude_cidr_list entry: {{err}}", err)
|
return nil, fmt.Errorf("failed to validate exclude_cidr_list entry: %w", err)
|
||||||
}
|
}
|
||||||
if !valid {
|
if !valid {
|
||||||
return logical.ErrorResponse(fmt.Sprintf("failed to validate exclude_cidr_list entry: %v", err)), nil
|
return logical.ErrorResponse(fmt.Sprintf("failed to validate exclude_cidr_list entry: %v", err)), nil
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/certutil"
|
"github.com/hashicorp/vault/sdk/helper/certutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
||||||
@@ -163,7 +162,7 @@ func (b *backend) pathSignCertificate(ctx context.Context, req *logical.Request,
|
|||||||
|
|
||||||
privateKeyEntry, err := caKey(ctx, req.Storage, caPrivateKey)
|
privateKeyEntry, err := caKey(ctx, req.Storage, caPrivateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to read CA private key: {{err}}", err)
|
return nil, fmt.Errorf("failed to read CA private key: %w", err)
|
||||||
}
|
}
|
||||||
if privateKeyEntry == nil || privateKeyEntry.Key == "" {
|
if privateKeyEntry == nil || privateKeyEntry.Key == "" {
|
||||||
return nil, fmt.Errorf("failed to read CA private key")
|
return nil, fmt.Errorf("failed to read CA private key")
|
||||||
@@ -171,7 +170,7 @@ func (b *backend) pathSignCertificate(ctx context.Context, req *logical.Request,
|
|||||||
|
|
||||||
signer, err := ssh.ParsePrivateKey([]byte(privateKeyEntry.Key))
|
signer, err := ssh.ParsePrivateKey([]byte(privateKeyEntry.Key))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to parse stored CA private key: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse stored CA private key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
cBundle := creationBundle{
|
cBundle := creationBundle{
|
||||||
@@ -532,7 +531,7 @@ func (b *creationBundle) sign() (retCert *ssh.Certificate, retErr error) {
|
|||||||
algo := b.Role.AlgorithmSigner
|
algo := b.Role.AlgorithmSigner
|
||||||
sig, err := sshAlgorithmSigner.SignWithAlgorithm(rand.Reader, certificateBytes, algo)
|
sig, err := sshAlgorithmSigner.SignWithAlgorithm(rand.Reader, certificateBytes, algo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to generate signed SSH key: sign error: {{err}}", err)
|
return nil, fmt.Errorf("failed to generate signed SSH key: sign error: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
certificate.Signature = sig
|
certificate.Signature = sig
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
@@ -49,13 +48,13 @@ func (b *backend) secretDynamicKeyRevoke(ctx context.Context, req *logical.Reque
|
|||||||
intSec := &sec{}
|
intSec := &sec{}
|
||||||
err := mapstructure.Decode(req.Secret.InternalData, intSec)
|
err := mapstructure.Decode(req.Secret.InternalData, intSec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("secret internal data could not be decoded: {{err}}", err)
|
return nil, fmt.Errorf("secret internal data could not be decoded: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the host key using the key name
|
// Fetch the host key using the key name
|
||||||
hostKey, err := b.getKey(ctx, req.Storage, intSec.HostKeyName)
|
hostKey, err := b.getKey(ctx, req.Storage, intSec.HostKeyName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("key %q not found error: {{err}}", intSec.HostKeyName), err)
|
return nil, fmt.Errorf("key %q not found error: %w", intSec.HostKeyName, err)
|
||||||
}
|
}
|
||||||
if hostKey == nil {
|
if hostKey == nil {
|
||||||
return nil, fmt.Errorf("key %q not found", intSec.HostKeyName)
|
return nil, fmt.Errorf("key %q not found", intSec.HostKeyName)
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
|
|
||||||
@@ -26,7 +25,7 @@ import (
|
|||||||
func generateRSAKeys(keyBits int) (publicKeyRsa string, privateKeyRsa string, err error) {
|
func generateRSAKeys(keyBits int) (publicKeyRsa string, privateKeyRsa string, err error) {
|
||||||
privateKey, err := rsa.GenerateKey(rand.Reader, keyBits)
|
privateKey, err := rsa.GenerateKey(rand.Reader, keyBits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", errwrap.Wrapf("error generating RSA key-pair: {{err}}", err)
|
return "", "", fmt.Errorf("error generating RSA key-pair: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
privateKeyRsa = string(pem.EncodeToMemory(&pem.Block{
|
privateKeyRsa = string(pem.EncodeToMemory(&pem.Block{
|
||||||
@@ -36,7 +35,7 @@ func generateRSAKeys(keyBits int) (publicKeyRsa string, privateKeyRsa string, er
|
|||||||
|
|
||||||
sshPublicKey, err := ssh.NewPublicKey(privateKey.Public())
|
sshPublicKey, err := ssh.NewPublicKey(privateKey.Public())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", errwrap.Wrapf("error generating RSA key-pair: {{err}}", err)
|
return "", "", fmt.Errorf("error generating RSA key-pair: %w", err)
|
||||||
}
|
}
|
||||||
publicKeyRsa = "ssh-rsa " + base64.StdEncoding.EncodeToString(sshPublicKey.Marshal())
|
publicKeyRsa = "ssh-rsa " + base64.StdEncoding.EncodeToString(sshPublicKey.Marshal())
|
||||||
return
|
return
|
||||||
@@ -64,7 +63,7 @@ func (b *backend) installPublicKeyInTarget(ctx context.Context, adminUser, usern
|
|||||||
|
|
||||||
err = comm.Upload(publicKeyFileName, bytes.NewBufferString(dynamicPublicKey), nil)
|
err = comm.Upload(publicKeyFileName, bytes.NewBufferString(dynamicPublicKey), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error uploading public key: {{err}}", err)
|
return fmt.Errorf("error uploading public key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transfer the script required to install or uninstall the key to the remote
|
// Transfer the script required to install or uninstall the key to the remote
|
||||||
@@ -73,14 +72,14 @@ func (b *backend) installPublicKeyInTarget(ctx context.Context, adminUser, usern
|
|||||||
scriptFileName := fmt.Sprintf("%s.sh", publicKeyFileName)
|
scriptFileName := fmt.Sprintf("%s.sh", publicKeyFileName)
|
||||||
err = comm.Upload(scriptFileName, bytes.NewBufferString(installScript), nil)
|
err = comm.Upload(scriptFileName, bytes.NewBufferString(installScript), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("error uploading install script: {{err}}", err)
|
return fmt.Errorf("error uploading install script: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a session to run remote command that triggers the script to install
|
// Create a session to run remote command that triggers the script to install
|
||||||
// or uninstall the key.
|
// or uninstall the key.
|
||||||
session, err := comm.NewSession()
|
session, err := comm.NewSession()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf("unable to create SSH Session using public keys: {{err}}", err)
|
return fmt.Errorf("unable to create SSH Session using public keys: %w", err)
|
||||||
}
|
}
|
||||||
if session == nil {
|
if session == nil {
|
||||||
return fmt.Errorf("invalid session object")
|
return fmt.Errorf("invalid session object")
|
||||||
@@ -118,7 +117,7 @@ func roleContainsIP(ctx context.Context, s logical.Storage, roleName string, ip
|
|||||||
|
|
||||||
roleEntry, err := s.Get(ctx, fmt.Sprintf("roles/%s", roleName))
|
roleEntry, err := s.Get(ctx, fmt.Sprintf("roles/%s", roleName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, errwrap.Wrapf("error retrieving role {{err}}", err)
|
return false, fmt.Errorf("error retrieving role %w", err)
|
||||||
}
|
}
|
||||||
if roleEntry == nil {
|
if roleEntry == nil {
|
||||||
return false, fmt.Errorf("role %q not found", roleName)
|
return false, fmt.Errorf("role %q not found", roleName)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
otplib "github.com/pquerna/otp"
|
otplib "github.com/pquerna/otp"
|
||||||
@@ -108,7 +107,7 @@ func (b *backend) pathValidateCode(ctx context.Context, req *logical.Request, da
|
|||||||
int64(key.Period)*
|
int64(key.Period)*
|
||||||
int64((2+key.Skew))))
|
int64((2+key.Skew))))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error adding code to used cache: {{err}}", err)
|
return nil, fmt.Errorf("error adding code to used cache: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &logical.Response{
|
return &logical.Response{
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
otplib "github.com/pquerna/otp"
|
otplib "github.com/pquerna/otp"
|
||||||
@@ -357,7 +356,7 @@ func (b *backend) pathKeyCreate(ctx context.Context, req *logical.Request, data
|
|||||||
} else {
|
} else {
|
||||||
barcode, err := keyObject.Image(qrSize, qrSize)
|
barcode, err := keyObject.Image(qrSize, qrSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to generate QR code image: {{err}}", err)
|
return nil, fmt.Errorf("failed to generate QR code image: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var buff bytes.Buffer
|
var buff bytes.Buffer
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package transit
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -66,7 +66,7 @@ func Backend(ctx context.Context, conf *logical.BackendConfig) (*backend, error)
|
|||||||
var err error
|
var err error
|
||||||
cacheSize, err = GetCacheSizeFromStorage(ctx, conf.StorageView)
|
cacheSize, err = GetCacheSizeFromStorage(ctx, conf.StorageView)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("Error retrieving cache size from storage: {{err}}", err)
|
return nil, fmt.Errorf("Error retrieving cache size from storage: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package transit
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
||||||
@@ -68,7 +68,7 @@ func (b *backend) pathDecryptWrite(ctx context.Context, req *logical.Request, d
|
|||||||
if batchInputRaw != nil {
|
if batchInputRaw != nil {
|
||||||
err = decodeBatchRequestItems(batchInputRaw, &batchInputItems)
|
err = decodeBatchRequestItems(batchInputRaw, &batchInputItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to parse batch input: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse batch input: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(batchInputItems) == 0 {
|
if len(batchInputItems) == 0 {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
||||||
@@ -231,7 +230,7 @@ func (b *backend) pathEncryptWrite(ctx context.Context, req *logical.Request, d
|
|||||||
if batchInputRaw != nil {
|
if batchInputRaw != nil {
|
||||||
err = decodeBatchRequestItems(batchInputRaw, &batchInputItems)
|
err = decodeBatchRequestItems(batchInputRaw, &batchInputItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to parse batch input: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse batch input: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(batchInputItems) == 0 {
|
if len(batchInputItems) == 0 {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -147,7 +146,7 @@ func (b *backend) pathHMACWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
err = mapstructure.Decode(batchInputRaw, &batchInputItems)
|
err = mapstructure.Decode(batchInputRaw, &batchInputItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.Unlock()
|
p.Unlock()
|
||||||
return nil, errwrap.Wrapf("failed to parse batch input: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse batch input: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(batchInputItems) == 0 {
|
if len(batchInputItems) == 0 {
|
||||||
@@ -253,7 +252,7 @@ func (b *backend) pathHMACVerify(ctx context.Context, req *logical.Request, d *f
|
|||||||
err := mapstructure.Decode(batchInputRaw, &batchInputItems)
|
err := mapstructure.Decode(batchInputRaw, &batchInputItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.Unlock()
|
p.Unlock()
|
||||||
return nil, errwrap.Wrapf("failed to parse batch input: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse batch input: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(batchInputItems) == 0 {
|
if len(batchInputItems) == 0 {
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import (
|
|||||||
"golang.org/x/crypto/ed25519"
|
"golang.org/x/crypto/ed25519"
|
||||||
|
|
||||||
"github.com/fatih/structs"
|
"github.com/fatih/structs"
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
@@ -296,7 +295,7 @@ func (b *backend) pathPolicyRead(ctx context.Context, req *logical.Request, d *f
|
|||||||
} else {
|
} else {
|
||||||
ver, err := strconv.Atoi(k)
|
ver, err := strconv.Atoi(k)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf(fmt.Sprintf("invalid version %q: {{err}}", k), err)
|
return nil, fmt.Errorf("invalid version %q: %w", k, err)
|
||||||
}
|
}
|
||||||
derived, err := p.GetKey(context, ver, 32)
|
derived, err := p.GetKey(context, ver, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -321,7 +320,7 @@ func (b *backend) pathPolicyRead(ctx context.Context, req *logical.Request, d *f
|
|||||||
// API
|
// API
|
||||||
derBytes, err := x509.MarshalPKIXPublicKey(v.RSAKey.Public())
|
derBytes, err := x509.MarshalPKIXPublicKey(v.RSAKey.Public())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("error marshaling RSA public key: {{err}}", err)
|
return nil, fmt.Errorf("error marshaling RSA public key: %w", err)
|
||||||
}
|
}
|
||||||
pemBlock := &pem.Block{
|
pemBlock := &pem.Block{
|
||||||
Type: "PUBLIC KEY",
|
Type: "PUBLIC KEY",
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
||||||
@@ -61,7 +60,7 @@ func (b *backend) pathRewrapWrite(ctx context.Context, req *logical.Request, d *
|
|||||||
if batchInputRaw != nil {
|
if batchInputRaw != nil {
|
||||||
err = mapstructure.Decode(batchInputRaw, &batchInputItems)
|
err = mapstructure.Decode(batchInputRaw, &batchInputItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to parse batch input: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse batch input: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(batchInputItems) == 0 {
|
if len(batchInputItems) == 0 {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/helper/errutil"
|
"github.com/hashicorp/vault/sdk/helper/errutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
"github.com/hashicorp/vault/sdk/helper/keysutil"
|
||||||
@@ -272,7 +271,7 @@ func (b *backend) pathSignWrite(ctx context.Context, req *logical.Request, d *fr
|
|||||||
err = mapstructure.Decode(batchInputRaw, &batchInputItems)
|
err = mapstructure.Decode(batchInputRaw, &batchInputItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.Unlock()
|
p.Unlock()
|
||||||
return nil, errwrap.Wrapf("failed to parse batch input: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse batch input: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(batchInputItems) == 0 {
|
if len(batchInputItems) == 0 {
|
||||||
@@ -379,7 +378,7 @@ func (b *backend) pathVerifyWrite(ctx context.Context, req *logical.Request, d *
|
|||||||
if batchInputRaw != nil {
|
if batchInputRaw != nil {
|
||||||
err := mapstructure.Decode(batchInputRaw, &batchInputItems)
|
err := mapstructure.Decode(batchInputRaw, &batchInputItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errwrap.Wrapf("failed to parse batch input: {{err}}", err)
|
return nil, fmt.Errorf("failed to parse batch input: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(batchInputItems) == 0 {
|
if len(batchInputItems) == 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user