@@ -4,11 +4,13 @@ package distribution
44
55import (
66 "fmt"
7+ "io"
78 "path/filepath"
89
910 "github.com/containers/image/docker"
1011 "github.com/containers/image/docker/daemon/signatures"
1112 containersImageRef "github.com/containers/image/docker/reference"
13+ ciImage "github.com/containers/image/image"
1214 "github.com/containers/image/manifest"
1315 "github.com/containers/image/signature"
1416 "github.com/containers/image/types"
@@ -44,19 +46,19 @@ func configurePolicyContext() (*signature.PolicyContext, error) {
4446 return pc , nil
4547}
4648
47- // ciImage returns a containers/image/types.Image for ref.
48- func (p * v2Puller ) ciImage (c gctx.Context , ref reference.Named ) (types. Image , error ) {
49+ // ciImage returns a * containers/image/image.UnparsedImage and a close callback for ref.
50+ func (p * v2Puller ) ciImage (c gctx.Context , ref reference.Named ) (* ciImage. UnparsedImage , io. Closer , error ) {
4951 // we can't use upstream docker/docker/reference since in projectatomic/docker
5052 // we modified docker/docker/reference and it's not doing any normalization.
5153 // we instead forked docker/docker/reference in containers/image and we need
5254 // this parsing here to make sure signature naming checks are consistent.
5355 dockerRef , err := containersImageRef .ParseNormalizedNamed (ref .String ())
5456 if err != nil {
55- return nil , err
57+ return nil , nil , err
5658 }
5759 imgRef , err := docker .NewReference (dockerRef )
5860 if err != nil {
59- return nil , err
61+ return nil , nil , err
6062 }
6163 isSecure := (p .endpoint .TLSConfig == nil || ! p .endpoint .TLSConfig .InsecureSkipVerify )
6264 authConfig := registry .ResolveAuthConfig (p .config .AuthConfigs , p .repoInfo .Index )
@@ -73,16 +75,17 @@ func (p *v2Puller) ciImage(c gctx.Context, ref reference.Named) (types.Image, er
7375 if p .config .RegistryService .SecureIndex (p .repoInfo .Index .Name ) {
7476 ctx .DockerCertPath = filepath .Join (registry .CertsDir , p .repoInfo .Index .Name )
7577 }
76- img , err := imgRef .NewImage (ctx )
78+ src , err := imgRef .NewImageSource (ctx )
7779 if err != nil {
78- return nil , err
80+ return nil , nil , err
7981 }
80- return img , nil
82+ unparsed := ciImage .UnparsedInstance (src , nil )
83+ return unparsed , src , nil
8184}
8285
83- func (p * v2Puller ) checkTrusted (ref reference.Named , ciImage types.Image ) (reference.Named , error ) {
86+ func (p * v2Puller ) checkTrusted (ref reference.Named , unparsed types.UnparsedImage ) (reference.Named , error ) {
8487 p .originalRef = ref
85- allowed , err := p .policyContext .IsRunningImageAllowed (ciImage )
88+ allowed , err := p .policyContext .IsRunningImageAllowed (unparsed )
8689 if ! allowed {
8790 if err != nil {
8891 return nil , fmt .Errorf ("%s isn't allowed: %v" , ref .String (), err )
@@ -92,7 +95,7 @@ func (p *v2Puller) checkTrusted(ref reference.Named, ciImage types.Image) (refer
9295 if err != nil {
9396 return nil , err
9497 }
95- mfst , _ , err := ciImage .Manifest ()
98+ mfst , _ , err := unparsed .Manifest ()
9699 if err != nil {
97100 return nil , err
98101 }
@@ -108,7 +111,11 @@ func (p *v2Puller) checkTrusted(ref reference.Named, ciImage types.Image) (refer
108111}
109112
110113// storeSignature stores the signatures of ciImage and updates the tag in ciImage.Reference() if necessary.
111- func (p * v2Puller ) storeSignatures (c gctx.Context , ciImage types.Image ) error {
114+ func (p * v2Puller ) storeSignatures (c gctx.Context , unparsed * ciImage.UnparsedImage ) error {
115+ img , err := ciImage .FromUnparsedImage (nil , unparsed )
116+ if err != nil {
117+ return err
118+ }
112119 store := signatures .NewStore (nil )
113- return store .RecordImage (c , ciImage )
120+ return store .RecordImage (c , img )
114121}
0 commit comments