Skip to content

Commit 70d4e4c

Browse files
committed
Merge branch 'master' into remove-seq-entry-after-unsequenced-message-is-processed
2 parents 334547f + d3e3858 commit 70d4e4c

5 files changed

Lines changed: 1053 additions & 71 deletions

File tree

overlord/assertstate/assertstate.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,3 +1485,33 @@ func ValidatedIntegrityData(st *state.State, snapID string, rev snap.Revision) (
14851485

14861486
return integrity.NewIntegrityDataParamsFromRevision(revAssertion)
14871487
}
1488+
1489+
// AccountKey returns the account-key assertion for the given signing key ID,
1490+
// if it's present in the system assertion database.
1491+
func AccountKey(st *state.State, signKeyID string) (*asserts.AccountKey, error) {
1492+
db := DB(st)
1493+
as, err := db.Find(asserts.AccountKeyType, map[string]string{
1494+
"public-key-sha3-384": signKeyID,
1495+
})
1496+
if err != nil {
1497+
return nil, err
1498+
}
1499+
1500+
return as.(*asserts.AccountKey), nil
1501+
}
1502+
1503+
// FetchAccountKey fetches the account-key assertion for the given signing key ID.
1504+
func FetchAccountKey(st *state.State, userID int, signKeyID string) error {
1505+
deviceCtx, err := snapstate.DevicePastSeeding(st, nil)
1506+
if err != nil {
1507+
return err
1508+
}
1509+
1510+
return doFetch(st, userID, deviceCtx, nil, func(f asserts.Fetcher) error {
1511+
ref := &asserts.Ref{
1512+
Type: asserts.AccountKeyType,
1513+
PrimaryKey: []string{signKeyID},
1514+
}
1515+
return f.Fetch(ref)
1516+
})
1517+
}

overlord/assertstate/assertstate_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6315,3 +6315,53 @@ func (s *assertMgrSuite) TestValidatedIntegrityDataErrorNoRevisionsFound(c *C) {
63156315
expErr: regexp.QuoteMeta("no snap-revision assertion found that matches (snap-id=snap-id-1, snap-revision=10)."),
63166316
})
63176317
}
6318+
6319+
func (s *assertMgrSuite) TestFetchAccountKeyOK(c *C) {
6320+
s.state.Lock()
6321+
defer s.state.Unlock()
6322+
6323+
storeAs := s.setupModelAndStore(c)
6324+
err := s.storeSigning.Add(storeAs)
6325+
c.Assert(err, IsNil)
6326+
6327+
db, err := asserts.OpenDatabase(&asserts.DatabaseConfig{
6328+
Backstore: asserts.NewMemoryBackstore(),
6329+
Trusted: s.storeSigning.Trusted,
6330+
})
6331+
c.Assert(err, IsNil)
6332+
6333+
assertstate.ReplaceDB(s.state, db)
6334+
6335+
keyID := s.dev1AcctKey.PublicKeyID()
6336+
6337+
// not found locally
6338+
_, err = assertstate.AccountKey(s.state, keyID)
6339+
c.Assert(err, testutil.ErrorIs, &asserts.NotFoundError{})
6340+
6341+
err = assertstate.FetchAccountKey(s.state, 0, keyID)
6342+
c.Assert(err, IsNil)
6343+
6344+
// found after fetch
6345+
_, err = assertstate.AccountKey(s.state, keyID)
6346+
c.Assert(err, IsNil)
6347+
}
6348+
6349+
func (s *assertMgrSuite) TestFetchAccountKeyError(c *C) {
6350+
s.state.Lock()
6351+
defer s.state.Unlock()
6352+
6353+
storeAs := s.setupModelAndStore(c)
6354+
err := s.storeSigning.Add(storeAs)
6355+
c.Assert(err, IsNil)
6356+
6357+
db, err := asserts.OpenDatabase(&asserts.DatabaseConfig{
6358+
Backstore: asserts.NewMemoryBackstore(),
6359+
Trusted: s.storeSigning.Trusted,
6360+
})
6361+
c.Assert(err, IsNil)
6362+
6363+
assertstate.ReplaceDB(s.state, db)
6364+
6365+
err = assertstate.FetchAccountKey(s.state, 0, "no-such-key-id")
6366+
c.Assert(err, testutil.ErrorIs, &asserts.NotFoundError{})
6367+
}

0 commit comments

Comments
 (0)