|
@@ -8,11 +8,11 @@ import (
|
|
"io/ioutil"
|
|
"io/ioutil"
|
|
"os"
|
|
"os"
|
|
"path/filepath"
|
|
"path/filepath"
|
|
- "regexp"
|
|
|
|
"sort"
|
|
"sort"
|
|
"strings"
|
|
"strings"
|
|
"sync"
|
|
"sync"
|
|
|
|
|
|
|
|
+ "github.com/docker/distribution/digest"
|
|
"github.com/docker/docker/daemon/events"
|
|
"github.com/docker/docker/daemon/events"
|
|
"github.com/docker/docker/graph/tags"
|
|
"github.com/docker/docker/graph/tags"
|
|
"github.com/docker/docker/pkg/parsers"
|
|
"github.com/docker/docker/pkg/parsers"
|
|
@@ -25,11 +25,6 @@ import (
|
|
|
|
|
|
const DEFAULTTAG = "latest"
|
|
const DEFAULTTAG = "latest"
|
|
|
|
|
|
-var (
|
|
|
|
- //FIXME this regex also exists in registry/v2/regexp.go
|
|
|
|
- validDigest = regexp.MustCompile(`[a-zA-Z0-9-_+.]+:[a-fA-F0-9]+`)
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
type TagStore struct {
|
|
type TagStore struct {
|
|
path string
|
|
path string
|
|
graph *Graph
|
|
graph *Graph
|
|
@@ -253,7 +248,14 @@ func (store *TagStore) SetLoad(repoName, tag, imageName string, force bool, out
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
if err := tags.ValidateTagName(tag); err != nil {
|
|
if err := tags.ValidateTagName(tag); err != nil {
|
|
- return err
|
|
|
|
|
|
+ if _, formatError := err.(tags.ErrTagInvalidFormat); !formatError {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ if _, dErr := digest.ParseDigest(tag); dErr != nil {
|
|
|
|
+ // Still return the tag validation error.
|
|
|
|
+ // It's more likely to be a user generated issue.
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
}
|
|
}
|
|
if err := store.reload(); err != nil {
|
|
if err := store.reload(); err != nil {
|
|
return err
|
|
return err
|
|
@@ -387,8 +389,8 @@ func validateDigest(dgst string) error {
|
|
if dgst == "" {
|
|
if dgst == "" {
|
|
return errors.New("digest can't be empty")
|
|
return errors.New("digest can't be empty")
|
|
}
|
|
}
|
|
- if !validDigest.MatchString(dgst) {
|
|
|
|
- return fmt.Errorf("illegal digest (%s): must be of the form [a-zA-Z0-9-_+.]+:[a-fA-F0-9]+", dgst)
|
|
|
|
|
|
+ if _, err := digest.ParseDigest(dgst); err != nil {
|
|
|
|
+ return err
|
|
}
|
|
}
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|