From 0bf502701719b6076357feb7f0be508a256ac974 Mon Sep 17 00:00:00 2001 From: Tomasz Pawelczak Date: Wed, 4 Apr 2018 20:39:07 +0200 Subject: [PATCH] plugin api update, dependency update (#12) * plugin api update, dependency update, moar tests --- Gopkg.lock | 56 ++++++++++++++++++++++++++++------------ authfile/backend.go | 6 +++-- authfile/backend_test.go | 33 ++++++++++++++++++----- authfile/path_config.go | 13 +++++----- authfile/path_login.go | 11 ++++---- test/get_vault.sh | 3 ++- 6 files changed, 85 insertions(+), 37 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 12bb8ff..c514758 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -31,7 +31,6 @@ version = "v1.0" [[projects]] - branch = "master" name = "github.com/golang/protobuf" packages = [ "proto", @@ -40,7 +39,8 @@ "ptypes/duration", "ptypes/timestamp" ] - revision = "1e59b77b52bf8e4b449a57e6f79f21226d571845" + revision = "925541529c1fa6821df4e44ce2723319eb2be768" + version = "v1.0.0" [[projects]] branch = "master" @@ -64,7 +64,7 @@ branch = "master" name = "github.com/hashicorp/go-hclog" packages = ["."] - revision = "ca137eb4b4389c9bc6f1a6d887f056bf16c00510" + revision = "5bcb0f17e36442247290887cc914a6e507afa5c4" [[projects]] branch = "master" @@ -76,7 +76,7 @@ branch = "master" name = "github.com/hashicorp/go-plugin" packages = ["."] - revision = "1fc09c47b843b73705f51ffb0520e3ac1bfecf99" + revision = "956b76edd382134e7e88a07f2d210bafcc730cce" [[projects]] branch = "master" @@ -88,7 +88,22 @@ branch = "master" name = "github.com/hashicorp/go-uuid" packages = ["."] - revision = "64130c7a86d732268a38cb04cfbaf0cc987fda98" + revision = "27454136f0364f2d44b1276c552d69105cf8c498" + +[[projects]] + branch = "master" + name = "github.com/hashicorp/go-version" + packages = ["."] + revision = "4fe82ae3040f80a03d04d2cccb5606a626b8e1ee" + +[[projects]] + branch = "master" + name = "github.com/hashicorp/golang-lru" + packages = [ + ".", + "simplelru" + ] + revision = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3" [[projects]] branch = "master" @@ -115,6 +130,8 @@ "helper/consts", "helper/errutil", "helper/jsonutil", + "helper/locksutil", + "helper/logbridge", "helper/logformat", "helper/mlock", "helper/parseutil", @@ -125,10 +142,14 @@ "helper/wrapping", "logical", "logical/framework", - "logical/plugin" + "logical/plugin", + "logical/plugin/pb", + "physical", + "physical/inmem", + "version" ] - revision = "87b6919dea55da61d7cd444b2442cabb8ede8ab1" - version = "v0.9.1" + revision = "36edb4d42380d89a897e7f633046423240b710d9" + version = "v0.9.5" [[projects]] branch = "master" @@ -176,7 +197,7 @@ branch = "master" name = "github.com/mitchellh/mapstructure" packages = ["."] - revision = "b4575eea38cca1123ec2dc90c26529b5c5acfcff" + revision = "00c29f56e2386353d58c599509e8dc3801b0d716" [[projects]] name = "github.com/oklog/run" @@ -200,7 +221,7 @@ branch = "master" name = "github.com/sethgrid/pester" packages = ["."] - revision = "760f8913c0483b776294e1bee43f1d687527127b" + revision = "ed9870dad3170c0b25ab9b11830cc57c3a7798fb" [[projects]] branch = "master" @@ -214,16 +235,15 @@ "lex/httplex", "trace" ] - revision = "5ccada7d0a7ba9aeb5d3aca8d3501b4c2a509fec" + revision = "d25186b37f34ebdbbea8f488ef055638dfab272d" [[projects]] branch = "master" name = "golang.org/x/sys" packages = ["unix"] - revision = "af50095a40f9041b3b38960738837185c26e9419" + revision = "dd2ff4accc098aceecb86b36eaa7829b2a17b1c9" [[projects]] - branch = "master" name = "golang.org/x/text" packages = [ "collate", @@ -241,13 +261,14 @@ "unicode/norm", "unicode/rangetable" ] - revision = "e19ae1496984b1c655b8044a65c0300a3c878dd3" + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + version = "v0.3.0" [[projects]] branch = "master" name = "google.golang.org/genproto" packages = ["googleapis/rpc/status"] - revision = "a8101f21cf983e773d0c1133ebc5424792003214" + revision = "df60624c1e9b9d2973e889c7a1cff73155da81c4" [[projects]] name = "google.golang.org/grpc" @@ -260,6 +281,7 @@ "connectivity", "credentials", "encoding", + "encoding/proto", "grpclb/grpc_lb_v1/messages", "grpclog", "health", @@ -277,8 +299,8 @@ "tap", "transport" ] - revision = "6b51017f791ae1cfbec89c52efdf444b13b550ef" - version = "v1.9.2" + revision = "8e4536a86ab602859c20df5ebfd0bd4228d08655" + version = "v1.10.0" [solve-meta] analyzer-name = "dep" diff --git a/authfile/backend.go b/authfile/backend.go index 3315f84..1d2154e 100644 --- a/authfile/backend.go +++ b/authfile/backend.go @@ -1,15 +1,17 @@ package authfile import ( + "context" + "github.com/hashicorp/vault/logical" "github.com/hashicorp/vault/logical/framework" log "github.com/mgutz/logxi/v1" ) //Factory function implementation -func Factory(conf *logical.BackendConfig) (logical.Backend, error) { +func Factory(ctx context.Context, conf *logical.BackendConfig) (logical.Backend, error) { b := Backend(conf) - err := b.Setup(conf) + err := b.Setup(ctx, conf) if err != nil { return nil, err } diff --git a/authfile/backend_test.go b/authfile/backend_test.go index 666fbd9..e9a4bf2 100644 --- a/authfile/backend_test.go +++ b/authfile/backend_test.go @@ -1,6 +1,7 @@ package authfile import ( + "context" "testing" "github.com/hashicorp/vault/logical" @@ -12,7 +13,7 @@ func TestBackend_Config(t *testing.T) { cfg.StorageView = storage b := Backend(cfg) - err := b.Setup(cfg) + err := b.Setup(context.Background(), cfg) if err != nil { t.Fatal(err) } @@ -22,7 +23,7 @@ func TestBackend_Config(t *testing.T) { "path": "/etc/vault/password-file", } - _, err = b.HandleRequest(&logical.Request{ + _, err = b.HandleRequest(context.Background(), &logical.Request{ Operation: logical.UpdateOperation, Path: "config", Data: data, @@ -32,7 +33,7 @@ func TestBackend_Config(t *testing.T) { t.Fatal(err) } - resp, err := b.HandleRequest(&logical.Request{ + resp, err := b.HandleRequest(context.Background(), &logical.Request{ Operation: logical.ReadOperation, Path: "config", Storage: storage, @@ -50,7 +51,7 @@ func TestBackend_Config(t *testing.T) { // Missing path data2 := map[string]interface{}{} - _, err = b.HandleRequest(&logical.Request{ + _, err = b.HandleRequest(context.Background(), &logical.Request{ Operation: logical.UpdateOperation, Path: "config", Data: data2, @@ -66,7 +67,7 @@ func TestBackend_Config(t *testing.T) { "ttl": "auioe", } - _, err = b.HandleRequest(&logical.Request{ + _, err = b.HandleRequest(context.Background(), &logical.Request{ Operation: logical.UpdateOperation, Path: "config", Data: data3, @@ -76,7 +77,7 @@ func TestBackend_Config(t *testing.T) { t.Fatal("Config accepted bad ttl") } } -func TestBackend_Authenticate(t *testing.T) { +func TestBackend_LoginAuth(t *testing.T) { var user users user.User = "gites" user.Hash = "$6$spfjUPN4$6ap3h.6Fac23HO/CFTZpQYdwvZ8zFflZkCQMWVO.13pCFEOjw8sjVljiIU6SgAhRDwwUBK1DYvHmBdoz/3wef0" @@ -86,3 +87,23 @@ func TestBackend_Authenticate(t *testing.T) { t.Fatal("Couldn't authenticate request") } } + +func TestBackend_LoginFileRead(t *testing.T) { + cfg := logical.TestBackendConfig() + storage := &logical.InmemStorage{} + cfg.StorageView = storage + + b := Backend(cfg) + err := b.Setup(context.Background(), cfg) + if err != nil { + t.Fatal(err) + } + + userMap, err := getUsers("../test/password-file", 300, b) + if err != nil { + t.Fatal(err) + } + if userMap["wac"].User != "wac" { + t.Fatal("Couldn't correctly read password file -> wac != wac") + } +} diff --git a/authfile/path_config.go b/authfile/path_config.go index b4e1c40..6a73a03 100644 --- a/authfile/path_config.go +++ b/authfile/path_config.go @@ -1,6 +1,7 @@ package authfile import ( + "context" "fmt" "time" @@ -36,8 +37,8 @@ func pathConfig(b *backend) *framework.Path { } } -func (b *backend) pathConfigRead(req *logical.Request, data *framework.FieldData) (*logical.Response, error) { - cfg, err := b.Config(req.Storage) +func (b *backend) pathConfigRead(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + cfg, err := b.Config(ctx, req.Storage) if err != nil { return nil, errors.Wrapf(err, "failed to get configuration from storage") } @@ -54,7 +55,7 @@ func (b *backend) pathConfigRead(req *logical.Request, data *framework.FieldData return resp, nil } -func (b *backend) pathConfigWrite(req *logical.Request, data *framework.FieldData) (*logical.Response, error) { +func (b *backend) pathConfigWrite(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { path := data.Get("path").(string) if path == "" { @@ -74,15 +75,15 @@ func (b *backend) pathConfigWrite(req *logical.Request, data *framework.FieldDat return nil, err } - if err := req.Storage.Put(entry); err != nil { + if err := req.Storage.Put(ctx, entry); err != nil { return nil, err } return nil, nil } -func (b *backend) Config(s logical.Storage) (*config, error) { - entry, err := s.Get("config") +func (b *backend) Config(ctx context.Context, s logical.Storage) (*config, error) { + entry, err := s.Get(ctx, "config") if err != nil { return nil, err } diff --git a/authfile/path_login.go b/authfile/path_login.go index 06a1bb9..9bc1190 100644 --- a/authfile/path_login.go +++ b/authfile/path_login.go @@ -2,6 +2,7 @@ package authfile import ( "bufio" + "context" "io" "os" "strings" @@ -55,11 +56,11 @@ func pathLoginUserpass(b *backend) *framework.Path { } } -func (b *backend) pathLogin(req *logical.Request, data *framework.FieldData) (*logical.Response, error) { +func (b *backend) pathLogin(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { user := data.Get("username").(string) pass := data.Get("password").(string) - config, err := b.Config(req.Storage) + config, err := b.Config(ctx, req.Storage) var fileTTL time.Duration = 300 var auth = false @@ -95,7 +96,7 @@ func (b *backend) pathLogin(req *logical.Request, data *framework.FieldData) (*l }, nil } -func (b *backend) pathLoginRenew(req *logical.Request, data *framework.FieldData) (*logical.Response, error) { +func (b *backend) pathLoginRenew(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { if req.Auth == nil { return logical.ErrorResponse("Couldn't authenticate client"), nil @@ -110,7 +111,7 @@ func (b *backend) pathLoginRenew(req *logical.Request, data *framework.FieldData return logical.ErrorResponse("No internal password data in request"), nil } - config, err := b.Config(req.Storage) + config, err := b.Config(ctx, req.Storage) var fileTTL time.Duration = 300 var auth = false @@ -130,7 +131,7 @@ func (b *backend) pathLoginRenew(req *logical.Request, data *framework.FieldData if !policyutil.EquivalentPolicies(userMap[user].Policies, req.Auth.Policies) { return logical.ErrorResponse("Policies have changed, not renewing"), nil } - return framework.LeaseExtend(config.TTL, config.MaxTTL, b.System())(req, data) + return framework.LeaseExtend(config.TTL, config.MaxTTL, b.System())(ctx, req, data) } func authenticate(user users, pass string, b *backend) bool { diff --git a/test/get_vault.sh b/test/get_vault.sh index 5fbfca1..a223dfc 100755 --- a/test/get_vault.sh +++ b/test/get_vault.sh @@ -1,8 +1,9 @@ #!/bin/bash ARG1=$1 -VER=${ARG1:-0.9.3} +VER=${ARG1:-0.9.5} echo "Downloading v$VER Vault binary" wget -q https://releases.hashicorp.com/vault/$VER/vault_${VER}_linux_amd64.zip +rm -rf vault unzip vault_${VER}_linux_amd64.zip chmod +x vault