Skip to content

Commit b96ef9a

Browse files
author
OpenShift Bot
authored
Merge pull request #14125 from mfojtik/signature-follow-up
Merged by openshift-bot
2 parents 38be652 + 8008488 commit b96ef9a

File tree

2 files changed

+24
-25
lines changed

2 files changed

+24
-25
lines changed

pkg/cmd/admin/admin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func NewCommandAdmin(name, fullName string, in io.Reader, out io.Writer, errout
9595
migratestorage.NewCmdMigrateAPIStorage("storage", fullName+" "+migrate.MigrateRecommendedName+" storage", f, in, out, errout),
9696
),
9797
top.NewCommandTop(top.TopRecommendedName, fullName+" "+top.TopRecommendedName, f, out, errout),
98-
image.NewCmdVerifyImageSignature("verify-image-signature", fullName, f, out, errout),
98+
image.NewCmdVerifyImageSignature(name, fullName+" "+image.VerifyRecommendedName, f, out, errout),
9999
},
100100
},
101101
{

pkg/cmd/admin/image/verify-signature.go

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ var (
5757
--expected-identity=registry.local:5000/foo/bar:v1 --save
5858
5959
# Remove all signature verifications from the image
60-
%[1]s sha256:c841e9b64e4579bd56c794bdd7c36e1c257110fd2404bebbb8b613e4935228c4 \
61-
--expected-identity=registry.local:5000/foo/bar:v1 --remove-all
60+
%[1]s sha256:c841e9b64e4579bd56c794bdd7c36e1c257110fd2404bebbb8b613e4935228c4 --remove-all
6261
`)
6362
)
6463

@@ -79,6 +78,10 @@ type VerifyImageSignatureOptions struct {
7978
ErrOut io.Writer
8079
}
8180

81+
const (
82+
VerifyRecommendedName = "verify-image-signature"
83+
)
84+
8285
func NewCmdVerifyImageSignature(name, fullName string, f *clientcmd.Factory, out, errOut io.Writer) *cobra.Command {
8386
opts := &VerifyImageSignatureOptions{
8487
ErrOut: errOut,
@@ -90,10 +93,10 @@ func NewCmdVerifyImageSignature(name, fullName string, f *clientcmd.Factory, out
9093
PublicKeyFilename: filepath.Join(os.Getenv("GNUPGHOME"), "pubring.gpg"),
9194
}
9295
cmd := &cobra.Command{
93-
Use: fmt.Sprintf("%s IMAGE --expected-identity=EXPECTED_IDENTITY [--save]", name),
96+
Use: fmt.Sprintf("%s IMAGE --expected-identity=EXPECTED_IDENTITY [--save]", VerifyRecommendedName),
9497
Short: "Verify the image identity contained in the image signature",
9598
Long: verifyImageSignatureLongDesc,
96-
Example: fmt.Sprintf(verifyImageSignatureExample, name),
99+
Example: fmt.Sprintf(verifyImageSignatureExample, fullName),
97100
Run: func(cmd *cobra.Command, args []string) {
98101
kcmdutil.CheckErr(opts.Validate())
99102
kcmdutil.CheckErr(opts.Complete(f, cmd, args, out))
@@ -109,11 +112,16 @@ func NewCmdVerifyImageSignature(name, fullName string, f *clientcmd.Factory, out
109112
}
110113

111114
func (o *VerifyImageSignatureOptions) Validate() error {
112-
if len(o.ExpectedIdentity) == 0 {
113-
return errors.New("the --expected-identity is required")
115+
if !o.RemoveAll {
116+
if len(o.ExpectedIdentity) == 0 {
117+
return errors.New("the --expected-identity is required")
118+
}
119+
if _, err := imageapi.ParseDockerImageReference(o.ExpectedIdentity); err != nil {
120+
return errors.New("the --expected-identity must be valid image reference")
121+
}
114122
}
115-
if _, err := imageapi.ParseDockerImageReference(o.ExpectedIdentity); err != nil {
116-
return errors.New("the --expected-identity must be valid image reference")
123+
if o.RemoveAll && len(o.ExpectedIdentity) > 0 {
124+
return errors.New("the --expected-identity cannot be used when removing all verifications")
117125
}
118126
return nil
119127
}
@@ -173,17 +181,16 @@ func (o VerifyImageSignatureOptions) Run() error {
173181
}
174182
defer pc.Destroy()
175183

176-
for i, s := range img.Signatures {
177-
if o.RemoveAll {
178-
o.clearSignatureVerificationStatus(&img.Signatures[i])
179-
continue
180-
}
184+
if o.RemoveAll {
185+
img.Signatures = []imageapi.ImageSignature{}
186+
}
181187

188+
for i, s := range img.Signatures {
182189
// Verify the signature against the policy
183190
signedBy, err := o.verifySignature(pc, img, s.Content)
184191
if err != nil {
185-
fmt.Fprintf(o.ErrOut, "error: %s: %v\n", o.InputImage, err)
186-
o.clearSignatureVerificationStatus(&img.Signatures[i])
192+
fmt.Fprintf(o.ErrOut, "error verifying signature %s for image %s (verification status will be removed): %v\n", img.Signatures[i].Name, o.InputImage, err)
193+
img.Signatures[i] = imageapi.ImageSignature{}
187194
continue
188195
}
189196
fmt.Fprintf(o.Out, "image %q identity is now confirmed (signed by GPG key %q)\n", o.InputImage, signedBy)
@@ -212,7 +219,7 @@ func (o VerifyImageSignatureOptions) Run() error {
212219
img.Signatures[i].IssuedBy.CommonName = signedBy
213220
}
214221

215-
if o.Save {
222+
if o.Save || o.RemoveAll {
216223
_, err := o.Client.Images().Update(img)
217224
return err
218225
}
@@ -253,14 +260,6 @@ func (o *VerifyImageSignatureOptions) verifySignature(pc *signature.PolicyContex
253260
}
254261
}
255262

256-
// clearSignatureVerificationStatus removes the current image signature from the Image object by
257-
// erasing all signature fields that were previously set (when image signature was
258-
// previously verified).
259-
func (o *VerifyImageSignatureOptions) clearSignatureVerificationStatus(s *imageapi.ImageSignature) {
260-
s.Conditions = []imageapi.SignatureCondition{}
261-
s.IssuedBy = nil
262-
}
263-
264263
// dummyDockerTransport is containers/image/docker.Transport, except that it only provides identity information.
265264
var dummyDockerTransport = dockerTransport{}
266265

0 commit comments

Comments
 (0)