identity/entity-alias: fix bug where alias metadata was shared if alias had same name (#16838)

This commit is contained in:
Jason O'Donnell 2022-08-23 15:39:45 -04:00 committed by GitHub
parent 3bd38fd5dc
commit 1200020fdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 1 deletions

View File

@ -1223,7 +1223,7 @@ func (i *IdentityStore) CreateOrFetchEntity(ctx context.Context, alias *logical.
// names match or no metadata is different, -1 is returned.
func changedAliasIndex(entity *identity.Entity, alias *logical.Alias) int {
for i, a := range entity.Aliases {
if a.Name == alias.Name && !strutil.EqualStringMaps(a.Metadata, alias.Metadata) {
if a.Name == alias.Name && a.MountAccessor == alias.MountAccessor && !strutil.EqualStringMaps(a.Metadata, alias.Metadata) {
return i
}
}

View File

@ -805,3 +805,52 @@ func TestIdentityStore_NewEntityCounter(t *testing.T) {
expectSingleCount(t, sink, "identity.entity.creation")
}
func TestIdentityStore_UpdateAliasMetadataPerAccessor(t *testing.T) {
entity := &identity.Entity{
ID: "testEntityID",
Name: "testEntityName",
Policies: []string{"foo", "bar"},
Aliases: []*identity.Alias{
{
ID: "testAliasID1",
CanonicalID: "testEntityID",
MountType: "testMountType",
MountAccessor: "testMountAccessor",
Name: "sameAliasName",
},
{
ID: "testAliasID2",
CanonicalID: "testEntityID",
MountType: "testMountType",
MountAccessor: "testMountAccessor2",
Name: "sameAliasName",
},
},
NamespaceID: namespace.RootNamespaceID,
}
login := &logical.Alias{
MountType: "testMountType",
MountAccessor: "testMountAccessor",
Name: "sameAliasName",
ID: "testAliasID",
Metadata: map[string]string{"foo": "bar"},
}
if i := changedAliasIndex(entity, login); i != 0 {
t.Fatalf("wrong alias index changed. Expected 0, got %d", i)
}
login2 := &logical.Alias{
MountType: "testMountType",
MountAccessor: "testMountAccessor2",
Name: "sameAliasName",
ID: "testAliasID2",
Metadata: map[string]string{"bar": "foo"},
}
if i := changedAliasIndex(entity, login2); i != 1 {
t.Fatalf("wrong alias index changed. Expected 1, got %d", i)
}
}