veyron2/security: Simplify the ACL structure and use the glob characters in PrincipalPattern.
ACLs serialized to disk before this commit will not be compatible with
binaries created after this commit.
A couple of ACL related changes:
(1) ACL.In is now just a map from PrincipalPattern to labels.
The "Entries" type is no longer needed.
BEFORE: In: {Principals: {"foo": "RW"}}
AFTER: In: {"foo":"RW"}
The Entries struct was motivated by keeping both "groups" and "blessings"
in the "In"/"NotIn" set. The Groups API is not defined yet, furthermore
there is concerns around using NotIn with groups. My thinking is now
that when group support is added, it is added as a field in the ACL struct
(e.g. ACL.Groups) instead of as a field in ACL.In.Entries.
(2) PrincipalPattern now uses characters consistent with other pattern
matching (e.g., namespace glob, or the query API), where "..." and
not "*" denotes "recursive" matches.
(3) ACL.NotIn is a map from string to LabelSet (instead of PrincipalPattern
to label set) to emphasize that NotIn need not contain "glob" patterns
(i.e., those that end in ...)
While at it, also:
* Updated commentary for labels in security/types.vdl
* Updated commentary for ACLs in security/types.vdl
* Removed NewWhitelistACL: With the simplified ACL structure,
this helper function is no longer needed.
Change-Id: I5be5bccdf1eb949436248c26d27f888e16df8ea0
diff --git a/examples/bank/pbankd/main.go b/examples/bank/pbankd/main.go
index acf9382..46caabf 100644
--- a/examples/bank/pbankd/main.go
+++ b/examples/bank/pbankd/main.go
@@ -442,10 +442,10 @@
// bankAccountServer := bank.NewServerBankAccount(pbankd)
// // Setup bank and account authorizers.
- // bankAuth := vsecurity.NewACLAuthorizer(security.NewWhitelistACL(
+ // bankAuth := vsecurity.NewACLAuthorizer(security.ACL{In:
// map[security.BlessingPattern]security.LabelSet{
// security.AllPrincipals: security.LabelSet(security.ReadLabel | security.WriteLabel),
- // }))
+ // }})
// bankAccountAuth := AccountAuthorizer(runtime.Identity().PublicID().Names()[0] + SUFFIX_REGEXP)
// dispatcher := newBankDispatcher(bankServer, bankAccountServer, bankAuth, bankAccountAuth)
diff --git a/examples/boxes/android/src/boxesp2p/main.go b/examples/boxes/android/src/boxesp2p/main.go
index c2dee7a..738bc95 100644
--- a/examples/boxes/android/src/boxesp2p/main.go
+++ b/examples/boxes/android/src/boxesp2p/main.go
@@ -234,10 +234,9 @@
}
func (gs *goState) registerAsPeer(ctx context.T) {
- auth := vsecurity.NewACLAuthorizer(vsecurity.NewWhitelistACL(
- map[security.BlessingPattern]security.LabelSet{
- security.AllPrincipals: security.LabelSet(security.AdminLabel),
- }))
+ auth := vsecurity.NewACLAuthorizer(security.ACL{In: map[security.BlessingPattern]security.LabelSet{
+ security.AllPrincipals: security.LabelSet(security.AdminLabel),
+ }})
gs.disp.drawAuth = auth
gs.disp.drawServer = ipc.ReflectInvoker(boxes.NewServerDrawInterface(gs))
endPt, err := gs.ipc.Listen("tcp", gs.myIPAddr+drawServicePort)
diff --git a/lib/testutil/security/util_test.go b/lib/testutil/security/util_test.go
index 3a2fd3a..9586f57 100644
--- a/lib/testutil/security/util_test.go
+++ b/lib/testutil/security/util_test.go
@@ -51,12 +51,12 @@
}
defer r.Cleanup()
acl := security.ACL{}
- acl.In.Principals = map[security.BlessingPattern]security.LabelSet{
- "veyron/*": security.LabelSet(security.ReadLabel),
+ acl.In = map[security.BlessingPattern]security.LabelSet{
+ "veyron/...": security.LabelSet(security.ReadLabel),
"veyron/alice": security.LabelSet(security.ReadLabel | security.WriteLabel),
"veyron/bob": security.LabelSet(security.AdminLabel),
}
- acl.NotIn.Principals = map[security.BlessingPattern]security.LabelSet{
+ acl.NotIn = map[string]security.LabelSet{
"veyron/che": security.LabelSet(security.ReadLabel),
}
diff --git a/runtimes/google/ipc/full_test.go b/runtimes/google/ipc/full_test.go
index 9224834..765c990 100644
--- a/runtimes/google/ipc/full_test.go
+++ b/runtimes/google/ipc/full_test.go
@@ -160,12 +160,11 @@
case "nilAuth":
authorizer = nil
case "aclAuth":
- // Only authorize clients matching patterns "client" or "server/*".
- authorizer = vsecurity.NewACLAuthorizer(vsecurity.NewWhitelistACL(
- map[security.BlessingPattern]security.LabelSet{
- "server/*": security.LabelSet(security.AdminLabel),
- "client": security.LabelSet(security.AdminLabel),
- }))
+ // Only authorize clients matching patterns "client" or "server/...".
+ authorizer = vsecurity.NewACLAuthorizer(security.ACL{In: map[security.BlessingPattern]security.LabelSet{
+ "server/...": security.LabelSet(security.AdminLabel),
+ "client": security.LabelSet(security.AdminLabel),
+ }})
default:
authorizer = testServerAuthorizer{}
}
diff --git a/runtimes/google/ipc/server.go b/runtimes/google/ipc/server.go
index dec40be..4fa5f62 100644
--- a/runtimes/google/ipc/server.go
+++ b/runtimes/google/ipc/server.go
@@ -386,7 +386,7 @@
for _, n := range id.Names() {
in[security.BlessingPattern(n+security.ChainSeparator+string(security.AllPrincipals))] = security.AllLabels
}
- return vsecurity.NewWhitelistACL(in)
+ return security.ACL{In: in}
}
func (fs *flowServer) serve() error {
diff --git a/runtimes/google/rt/ipc_test.go b/runtimes/google/rt/ipc_test.go
index f1499c5..d02406b 100644
--- a/runtimes/google/rt/ipc_test.go
+++ b/runtimes/google/rt/ipc_test.go
@@ -98,7 +98,7 @@
add(serverR.PublicIDStore(), googleYoutubeService, "")
// Add PublicIDs for communicating the "google/gmail" and "google/youtube" services
// to the clientR's PublicIDStore.
- add(clientR.PublicIDStore(), googleGmailClient, "google/*")
+ add(clientR.PublicIDStore(), googleGmailClient, "google/...")
add(clientR.PublicIDStore(), googleYoutubeClient, "google/youtube")
type testcase struct {
@@ -162,10 +162,9 @@
}
defer stopServer(server)
if err := server.Serve("", ipc.LeafDispatcher(&testService{},
- vsecurity.NewACLAuthorizer(vsecurity.NewWhitelistACL(
- map[security.BlessingPattern]security.LabelSet{
- security.AllPrincipals: security.AllLabels,
- })))); err != nil {
+ vsecurity.NewACLAuthorizer(security.ACL{In: map[security.BlessingPattern]security.LabelSet{
+ security.AllPrincipals: security.AllLabels,
+ }}))); err != nil {
t.Errorf("error serving service: ", err)
continue
}
diff --git a/runtimes/google/security/identity_test.go b/runtimes/google/security/identity_test.go
index eef3e12..95184c4 100644
--- a/runtimes/google/security/identity_test.go
+++ b/runtimes/google/security/identity_test.go
@@ -86,22 +86,22 @@
matchData []matchInstance
}{
{
- // self-signed alice chain, not a trusted identity provider so should only match "*"
+ // self-signed alice chain, not a trusted identity provider so should only match "..."
id: alice.PublicID(),
matchData: []matchInstance{
- {pattern: "*", want: true},
+ {pattern: "...", want: true},
{pattern: "alice", want: false},
- {pattern: "alice/*", want: false},
+ {pattern: "alice/...", want: false},
},
},
{
// veyron/alice: rooted in the trusted "veyron" identity provider
id: bless(newChain("immaterial").PublicID(), veyronChain, "alice", nil),
matchData: []matchInstance{
- {pattern: "*", want: true},
- {pattern: "veyron/*", want: true},
+ {pattern: "...", want: true},
+ {pattern: "veyron/...", want: true},
{pattern: "veyron/alice", want: true},
- {pattern: "veyron/alice/*", want: true},
+ {pattern: "veyron/alice/...", want: true},
{pattern: "veyron/alice/TV", want: true},
{pattern: "veyron", want: false},
{pattern: "veyron/ali", want: false},
@@ -114,15 +114,15 @@
// alice#veyron/alice#google/alice: two trusted identity providers
id: newSetPublicID(alice.PublicID(), bless(alice.PublicID(), veyronChain, "alice", nil), bless(alice.PublicID(), googleChain, "alice", nil)),
matchData: []matchInstance{
- {pattern: "*", want: true},
+ {pattern: "...", want: true},
// Since alice is not a trusted identity provider, the self-blessed identity
- // should not match "alice/*"
+ // should not match "alice/..."
{pattern: "alice", want: false},
- {pattern: "alice/*", want: false},
- {pattern: "veyron/*", want: true},
+ {pattern: "alice/...", want: false},
+ {pattern: "veyron/...", want: true},
{pattern: "veyron/alice", want: true},
{pattern: "veyron/alice/TV", want: true},
- {pattern: "veyron/alice/*", want: true},
+ {pattern: "veyron/alice/...", want: true},
{pattern: "ali", want: false},
{pattern: "aliced", want: false},
{pattern: "veyron", want: false},
@@ -131,7 +131,7 @@
{pattern: "veyron/bob", want: false},
{pattern: "google/alice", want: true},
{pattern: "google/alice/TV", want: true},
- {pattern: "google/alice/*", want: true},
+ {pattern: "google/alice/...", want: true},
},
},
}
@@ -308,8 +308,8 @@
cavOnlyPlayAtGoogle = methodRestrictionCaveat("google", S{"Play"})
// Can only talk to the "Google" service
cavOnlyGoogle = peerIdentityCaveat("google")
- // Can only call the PublicProfile method on veyron/alice/*
- cavOnlyPublicProfile = methodRestrictionCaveat("veyron/alice/*", S{"PublicProfile"})
+ // Can only call the PublicProfile method on veyron/alice/...
+ cavOnlyPublicProfile = methodRestrictionCaveat("veyron/alice/...", S{"PublicProfile"})
)
type rpc struct {
diff --git a/runtimes/google/security/publicid_store_test.go b/runtimes/google/security/publicid_store_test.go
index 394cb49..a60ada0 100644
--- a/runtimes/google/security/publicid_store_test.go
+++ b/runtimes/google/security/publicid_store_test.go
@@ -41,17 +41,17 @@
t.Fatalf("NewPublicIDStore failed: %s", err)
}
// First Add should succeed for any PublicID (cAlice.PublicID() below)
- if err := s.Add(cAlice.PublicID(), "alice/*"); err != nil {
+ if err := s.Add(cAlice.PublicID(), "alice/..."); err != nil {
t.Fatalf("%s.Add(%q, ...) failed unexpectedly: %s", s, cAlice.PublicID(), err)
}
// Subsequent Adds must succeed only for PublicIDs with cAlice's public key.
- if err := s.Add(cVeyronAlice.PublicID(), "*"); err != nil {
+ if err := s.Add(cVeyronAlice.PublicID(), "..."); err != nil {
t.Fatalf("%s.Add(%q, ...) failed unexpectedly: %s", s, cVeyronAlice.PublicID(), err)
}
- if err := s.Add(sAlice, "alice/*"); err != nil {
+ if err := s.Add(sAlice, "alice/..."); err != nil {
t.Fatalf("%s.Add(%q, ...) failed unexpectedly: %s", s, sAlice, err)
}
- if got, want := s.Add(cBob.PublicID(), "bob/*"), errStoreAddMismatch; got != want {
+ if got, want := s.Add(cBob.PublicID(), "bob/..."), errStoreAddMismatch; got != want {
t.Fatalf("%s.Add(%q, ...): got: %s, want: %s", s, cBob, got, want)
}
}
@@ -68,13 +68,13 @@
{"veyron", true},
{"veyron/alice@google", true},
{"veyron/alice@google/bob", true},
- {"veyron/alice@google/*", true},
+ {"veyron/alice@google/...", true},
{"", false},
- {"veyron*", false},
- {"*veyron", false},
+ {"veyron...", false},
+ {"...veyron", false},
{"/veyron", false},
{"veyron/", false},
- {"veyron/*/alice", false},
+ {"veyron/.../alice", false},
}
for _, d := range defaultPatterns {
if got := s.SetDefaultBlessingPattern(d.pattern); d.success != (got == nil) {
@@ -115,14 +115,14 @@
if err != nil {
t.Fatalf("NewPublicIDStore failed: %s", err)
}
- add(s, cGoogleAlice, "google") // use cGoogleAlice against all peers matching "google/*"
- add(s, cGoogleAlice, "veyron") // use cGoogleAlice against all peers matching "veyron/*" as well
- add(s, cVeyronAlice, "veyron/*") // use cVeyronAlice against peers matching "veyron/*"
- add(s, cVeyronAlice, "google") // use cVeyronAlice against peers matching "veyron/*"
- add(s, cVeyronServiceAlice, "veyron/service/*") // use cVeyronAlice against peers matching "veyron/service*"
- add(s, cGoogleServiceAlice, "google/service/*") // use cGoogleServiceAlice against peers matching "google/service/*"
- add(s, sGoogleAlice, "google/service") // use any PublicID from sGoogleAlice against peers matching "google/service"
- add(s, sAllAlice, "veyron") // use any PublicID from sAllAlice against peers matching "veyron"
+ add(s, cGoogleAlice, "google") // use cGoogleAlice against all peers matching "google/..."
+ add(s, cGoogleAlice, "veyron") // use cGoogleAlice against all peers matching "veyron/..." as well
+ add(s, cVeyronAlice, "veyron/...") // use cVeyronAlice against peers matching "veyron/..."
+ add(s, cVeyronAlice, "google") // use cVeyronAlice against peers matching "veyron/..."
+ add(s, cVeyronServiceAlice, "veyron/service/...") // use cVeyronAlice against peers matching "veyron/service/..."
+ add(s, cGoogleServiceAlice, "google/service/...") // use cGoogleServiceAlice against peers matching "google/service/..."
+ add(s, sGoogleAlice, "google/service") // use any PublicID from sGoogleAlice against peers matching "google/service"
+ add(s, sAllAlice, "veyron") // use any PublicID from sAllAlice against peers matching "veyron"
pkey := cAlice.PublicID().PublicKey()
@@ -157,13 +157,13 @@
defaultNames []string
}{
{"veyron", nil},
- {"veyron/*", []string{"veyron/alice", "veyron/service/user-24"}},
+ {"veyron/...", []string{"veyron/alice", "veyron/service/user-24"}},
{"veyron/alice", []string{"veyron/alice"}},
- {"veyron/service/*", []string{"veyron/service/user-24"}},
+ {"veyron/service/...", []string{"veyron/service/user-24"}},
{"google", nil},
- {"google/*", []string{"google/alice", "google/service/user-42"}},
+ {"google/...", []string{"google/alice", "google/service/user-42"}},
{"google/alice", []string{"google/alice"}},
- {"google/service/*", []string{"google/service/user-42"}},
+ {"google/service/...", []string{"google/service/user-42"}},
{"bob", nil},
}
for _, d := range testDataByBlessingPattern {
@@ -203,10 +203,10 @@
if err != nil {
t.Fatalf("NewPublicIDStore failed: %s", err)
}
- if err := s.Add(sAllAlice, "google/*"); err != nil {
+ if err := s.Add(sAllAlice, "google/..."); err != nil {
t.Fatalf("%s.Add(%q, ...) failed unexpectedly: %s", s, sAllAlice, err)
}
- if err := s.SetDefaultBlessingPattern("veyron/*"); err != nil {
+ if err := s.SetDefaultBlessingPattern("veyron/..."); err != nil {
t.Fatalf("%s.SetDefaultBlessingPattern failed: %s", s, err)
}
diff --git a/security/acl_authorizer_test.go b/security/acl_authorizer_test.go
index d71363f..1d04e89 100644
--- a/security/acl_authorizer_test.go
+++ b/security/acl_authorizer_test.go
@@ -187,35 +187,35 @@
// ACL for testing
acl := security.ACL{}
- acl.In.Principals = map[security.BlessingPattern]security.LabelSet{
- "*": LS(R),
- "fake/veyron/alice/*": LS(W, R),
- "fake/veyron/alice": LS(A, D, M),
- "fake/veyron/bob": LS(D, M),
- "fake/veyron/che/*": LS(W, R),
- "fake/veyron/che": LS(W, R),
+ acl.In = map[security.BlessingPattern]security.LabelSet{
+ "...": LS(R),
+ "fake/veyron/alice/...": LS(W, R),
+ "fake/veyron/alice": LS(A, D, M),
+ "fake/veyron/bob": LS(D, M),
+ "fake/veyron/che/...": LS(W, R),
+ "fake/veyron/che": LS(W, R),
}
- acl.NotIn.Principals = map[security.BlessingPattern]security.LabelSet{
+ acl.NotIn = map[string]security.LabelSet{
"fake/veyron/che/friend": LS(W),
}
// Authorizations for the above ACL.
authorizations := authMap{
- // alice and bob have only what "*" has.
+ // alice and bob have only what "..." has.
alice: LS(R),
bob: LS(R),
che: LS(R),
// veyron and veyronAlice have R, W, A, D, M from the "veyron/alice" and
- // "veyron/alice/*" ACL entries.
+ // "veyron/alice/..." ACL entries.
veyron: LS(R, W, A, D, M),
veyronAlice: LS(R, W, A, D, M),
- // veyronBob has R, D, M from "*" and "veyron/bob" ACL entries.
+ // veyronBob has R, D, M from "..." and "veyron/bob" ACL entries.
veyronBob: LS(R, D, M),
- // veyronAliceFriend has W, R from the "veyron/alice/*" ACL entry.
+ // veyronAliceFriend has W, R from the "veyron/alice/..." ACL entry.
veyronAliceFriend: LS(W, R),
// veyronChe has W, R from the "veyron/che" entry.
veyronChe: LS(W, R),
- // veyronCheFriend has W, R from the "veyron/che/*" entry, but loses W
+ // veyronCheFriend has W, R from the "veyron/che/..." entry, but loses W
// from the blacklist entry "veyron/che/friend".
veyronCheFriend: LS(R),
// nil PublicIDs are not authorized.
@@ -236,7 +236,7 @@
// Modify the ACL stored in the file and verify that the authorizations appropriately
// change for the fileACLAuthorizer.
- acl.In.Principals["fake/veyron/bob"] = LS(R, W, A, D, M)
+ acl.In["fake/veyron/bob"] = LS(R, W, A, D, M)
updateACLInFile(fileName, acl)
authorizations[veyronBob] = LS(R, W, A, D, M)
diff --git a/security/flag/flag_test.go b/security/flag/flag_test.go
index 4bd60fe..ffa8d93 100644
--- a/security/flag/flag_test.go
+++ b/security/flag/flag_test.go
@@ -30,10 +30,10 @@
}
var (
acl1 = security.ACL{}
- acl2 = vsecurity.NewWhitelistACL(map[security.BlessingPattern]security.LabelSet{
+ acl2 = security.ACL{In: map[security.BlessingPattern]security.LabelSet{
"veyron/alice": security.LabelSet(security.ReadLabel | security.WriteLabel),
"veyron/bob": security.LabelSet(security.ReadLabel),
- })
+ }}
)
acl2File := tsecurity.SaveACLToFile(acl2)
defer os.Remove(acl2File)
@@ -52,11 +52,11 @@
wantAuth: vsecurity.NewACLAuthorizer(acl1),
},
{
- flags: flagValue{"acl": "{\"In\":{\"Principals\":{\"veyron/alice\":\"RW\", \"veyron/bob\": \"R\"}}}"},
+ flags: flagValue{"acl": `{"In":{"veyron/alice":"RW", "veyron/bob": "R"}}`},
wantAuth: vsecurity.NewACLAuthorizer(acl2),
},
{
- flags: flagValue{"acl": "{\"In\":{\"Principals\":{\"veyron/bob\":\"R\", \"veyron/alice\": \"WR\"}}}"},
+ flags: flagValue{"acl": `{"In":{"veyron/bob":"R", "veyron/alice": "WR"}}`},
wantAuth: vsecurity.NewACLAuthorizer(acl2),
},
{
@@ -64,7 +64,7 @@
wantAuth: vsecurity.NewFileACLAuthorizer(acl2File),
},
{
- flags: flagValue{"acl_file": acl2File, "acl": "{\"In\":{\"Principals\":{\"veyron/alice\":\"RW\", \"veyron/bob\": \"R\"}}}"},
+ flags: flagValue{"acl_file": acl2File, "acl": `{"In":{"veyron/alice":"RW", "veyron/bob": "R"}}`},
wantPanic: true,
},
}
diff --git a/security/util.go b/security/util.go
index 7755797..541aa90 100644
--- a/security/util.go
+++ b/security/util.go
@@ -11,14 +11,6 @@
var nullACL security.ACL
-// NewWhitelistACL creates an ACL that grants access to only the provided
-// principals.
-func NewWhitelistACL(principals map[security.BlessingPattern]security.LabelSet) security.ACL {
- acl := security.ACL{}
- acl.In.Principals = principals
- return acl
-}
-
// LoadIdentity reads a PrivateID from r, assuming that it was written using
// SaveIdentity.
func LoadIdentity(r io.Reader) (security.PrivateID, error) {
diff --git a/security/util_test.go b/security/util_test.go
index 6c97fb6..d535039 100644
--- a/security/util_test.go
+++ b/security/util_test.go
@@ -27,12 +27,12 @@
func TestLoadSaveACL(t *testing.T) {
acl := security.ACL{}
- acl.In.Principals = map[security.BlessingPattern]security.LabelSet{
- "veyron/*": security.LabelSet(security.ReadLabel),
+ acl.In = map[security.BlessingPattern]security.LabelSet{
+ "veyron/...": security.LabelSet(security.ReadLabel),
"veyron/alice": security.LabelSet(security.ReadLabel | security.WriteLabel),
"veyron/bob": security.LabelSet(security.AdminLabel),
}
- acl.NotIn.Principals = map[security.BlessingPattern]security.LabelSet{
+ acl.NotIn = map[string]security.LabelSet{
"veyron/che": security.LabelSet(security.ReadLabel),
}
diff --git a/services/identity/identityd/main.go b/services/identity/identityd/main.go
index 48ba659..68cebb2 100644
--- a/services/identity/identityd/main.go
+++ b/services/identity/identityd/main.go
@@ -138,9 +138,9 @@
func newDispatcher(params blesser.GoogleParams) ipc.Dispatcher {
blessingService := ipc.ReflectInvoker(blesser.NewGoogleOAuthBlesserServer(params))
dischargerService := ipc.ReflectInvoker(services.NewServerDischarger(discharger.NewDischarger(params.R.Identity())))
- allowEveryoneACLAuth := vsecurity.NewACLAuthorizer(vsecurity.NewWhitelistACL(map[security.BlessingPattern]security.LabelSet{
+ allowEveryoneACLAuth := vsecurity.NewACLAuthorizer(security.ACL{In: map[security.BlessingPattern]security.LabelSet{
security.AllPrincipals: security.AllLabels,
- }))
+ }})
return &dispatcher{blessingService, dischargerService, allowEveryoneACLAuth}
}
diff --git a/services/mounttable/lib/testdata/test.acl b/services/mounttable/lib/testdata/test.acl
index b65c35b..9ffe006 100644
--- a/services/mounttable/lib/testdata/test.acl
+++ b/services/mounttable/lib/testdata/test.acl
@@ -1,5 +1,5 @@
{
-"/": {"In": {"Principals": {"fake/root": "RW", "*": "R"}}},
-"/stuff": {"In": {"Principals": {"fake/root": "RW", "fake/bob": "R"}}},
-"/a": {"In": {"Principals": {"fake/root": "RW", "fake/alice": "R"}}}
+"/": {"In": {"fake/root": "RW", "...": "R"}},
+"/stuff": {"In": {"fake/root": "RW", "fake/bob": "R"}},
+"/a": {"In": {"fake/root": "RW", "fake/alice": "R"}}
}
\ No newline at end of file
diff --git a/services/syncgroup/syncgroup.vdl.go b/services/syncgroup/syncgroup.vdl.go
index 962584c..78c38c5 100644
--- a/services/syncgroup/syncgroup.vdl.go
+++ b/services/syncgroup/syncgroup.vdl.go
@@ -496,14 +496,9 @@
}
result.TypeDefs = []_gen_vdlutil.Any{
- _gen_wiretype.NamedPrimitiveType{Type: 0x1, Name: "anydata", Tags: []string(nil)}, _gen_wiretype.MapType{Key: 0x3, Elem: 0x41, Name: "", Tags: []string(nil)}, _gen_wiretype.NamedPrimitiveType{Type: 0x3, Name: "veyron2/security.BlessingPattern", Tags: []string(nil)}, _gen_wiretype.NamedPrimitiveType{Type: 0x34, Name: "veyron2/security.LabelSet", Tags: []string(nil)}, _gen_wiretype.MapType{Key: 0x43, Elem: 0x44, Name: "", Tags: []string(nil)}, _gen_wiretype.StructType{
+ _gen_wiretype.NamedPrimitiveType{Type: 0x1, Name: "anydata", Tags: []string(nil)}, _gen_wiretype.MapType{Key: 0x3, Elem: 0x41, Name: "", Tags: []string(nil)}, _gen_wiretype.NamedPrimitiveType{Type: 0x3, Name: "veyron2/security.BlessingPattern", Tags: []string(nil)}, _gen_wiretype.NamedPrimitiveType{Type: 0x34, Name: "veyron2/security.LabelSet", Tags: []string(nil)}, _gen_wiretype.MapType{Key: 0x43, Elem: 0x44, Name: "", Tags: []string(nil)}, _gen_wiretype.MapType{Key: 0x3, Elem: 0x44, Name: "", Tags: []string(nil)}, _gen_wiretype.StructType{
[]_gen_wiretype.FieldType{
- _gen_wiretype.FieldType{Type: 0x45, Name: "Principals"},
- },
- "veyron2/security.Entries", []string(nil)},
- _gen_wiretype.StructType{
- []_gen_wiretype.FieldType{
- _gen_wiretype.FieldType{Type: 0x46, Name: "In"},
+ _gen_wiretype.FieldType{Type: 0x45, Name: "In"},
_gen_wiretype.FieldType{Type: 0x46, Name: "NotIn"},
},
"veyron2/security.ACL", []string(nil)},
diff --git a/services/wsprd/identity/identity_test.go b/services/wsprd/identity/identity_test.go
index 0ea8f0e..f1205a7 100644
--- a/services/wsprd/identity/identity_test.go
+++ b/services/wsprd/identity/identity_test.go
@@ -79,7 +79,7 @@
manager.AddAccount(googleAccount2, createChain(r, googleAccount2))
manager.AddAccount(facebookAccount, createChain(r, facebookAccount))
- result := manager.AccountsMatching(security.BlessingPattern(topLevelName + "/google/*"))
+ result := manager.AccountsMatching(security.BlessingPattern(topLevelName + "/google/..."))
sort.StringSlice(result).Sort()
expected := []string{googleAccount1, googleAccount2}
if !reflect.DeepEqual(result, expected) {
diff --git a/services/wsprd/ipc/server/server.go b/services/wsprd/ipc/server/server.go
index f0e78b6..b63f5e7 100644
--- a/services/wsprd/ipc/server/server.go
+++ b/services/wsprd/ipc/server/server.go
@@ -177,10 +177,9 @@
if s.dispatcher == nil {
s.dispatcher = newDispatcher(invoker,
- vsecurity.NewACLAuthorizer(vsecurity.NewWhitelistACL(
- map[security.BlessingPattern]security.LabelSet{
- security.AllPrincipals: security.AllLabels,
- })))
+ vsecurity.NewACLAuthorizer(security.ACL{In: map[security.BlessingPattern]security.LabelSet{
+ security.AllPrincipals: security.AllLabels,
+ }}))
}
if s.endpoint == "" {
diff --git a/services/wsprd/wspr/wspr_test.go b/services/wsprd/wspr/wspr_test.go
index 9c3af33..e84b1f6 100644
--- a/services/wsprd/wspr/wspr_test.go
+++ b/services/wsprd/wspr/wspr_test.go
@@ -124,7 +124,7 @@
}
// Verify that idManager has both accounts
- gotAccounts = wspr.idManager.AccountsMatching(security.BlessingPattern(topLevelName + "/*"))
+ gotAccounts = wspr.idManager.AccountsMatching(security.BlessingPattern(fmt.Sprintf("%s%s%v", topLevelName, security.ChainSeparator, security.AllPrincipals)))
if len(gotAccounts) != 2 {
t.Fatalf("Expected to have 2 accounts, but got %v: %v", len(gotAccounts), gotAccounts)
}