mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-10-25 23:37:37 +00:00
Improve validation of data in ImageEngine.SetTrust
- Also reject public keys with types that don't use them - Reject unknown trust types - And add unit tests Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
parent
a1f234e141
commit
567a0bb948
2 changed files with 47 additions and 3 deletions
|
|
@ -143,10 +143,22 @@ func AddPolicyEntries(policyPath string, input AddPolicyEntriesInput) error {
|
|||
if trustType == "accept" {
|
||||
trustType = "insecureAcceptAnything"
|
||||
}
|
||||
|
||||
pubkeysfile := input.PubKeyFiles
|
||||
if len(pubkeysfile) == 0 && trustType == "signedBy" {
|
||||
return errors.New("at least one public key must be defined for type 'signedBy'")
|
||||
|
||||
// The error messages in validation failures use input.Type instead of trustType to match the user’s input.
|
||||
switch trustType {
|
||||
case "insecureAcceptAnything", "reject":
|
||||
if len(pubkeysfile) != 0 {
|
||||
return fmt.Errorf("%d public keys unexpectedly provided for trust type %v", len(pubkeysfile), input.Type)
|
||||
}
|
||||
|
||||
case "signedBy":
|
||||
if len(pubkeysfile) == 0 {
|
||||
return errors.New("at least one public key must be defined for type 'signedBy'")
|
||||
}
|
||||
|
||||
default:
|
||||
return fmt.Errorf("unknown trust type %q", input.Type)
|
||||
}
|
||||
|
||||
_, err := os.Stat(policyPath)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,38 @@ func TestAddPolicyEntries(t *testing.T) {
|
|||
err = os.WriteFile(policyPath, minimalPolicyJSON, 0600)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Invalid input:
|
||||
for _, invalid := range []AddPolicyEntriesInput{
|
||||
{
|
||||
Scope: "default",
|
||||
Type: "accept",
|
||||
PubKeyFiles: []string{"/does-not-make-sense"},
|
||||
},
|
||||
{
|
||||
Scope: "default",
|
||||
Type: "insecureAcceptAnything",
|
||||
PubKeyFiles: []string{"/does-not-make-sense"},
|
||||
},
|
||||
{
|
||||
Scope: "default",
|
||||
Type: "reject",
|
||||
PubKeyFiles: []string{"/does-not-make-sense"},
|
||||
},
|
||||
{
|
||||
Scope: "default",
|
||||
Type: "signedBy",
|
||||
PubKeyFiles: []string{}, // A key is missing
|
||||
},
|
||||
{
|
||||
Scope: "default",
|
||||
Type: "this-is-unknown",
|
||||
PubKeyFiles: []string{},
|
||||
},
|
||||
} {
|
||||
err := AddPolicyEntries(policyPath, invalid)
|
||||
assert.Error(t, err, "%#v", invalid)
|
||||
}
|
||||
|
||||
err = AddPolicyEntries(policyPath, AddPolicyEntriesInput{
|
||||
Scope: "default",
|
||||
Type: "reject",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue