diff --git a/commands.go b/commands.go index e9c1197f3f..04eb994f01 100644 --- a/commands.go +++ b/commands.go @@ -20,6 +20,7 @@ import ( "path" "path/filepath" "reflect" + "regexp" "strconv" "strings" "syscall" @@ -727,6 +728,15 @@ func (cli *DockerCli) CmdPush(args ...string) error { if err != nil { return err } + nameParts := strings.SplitN(name, "/", 2) + validNamespace := regexp.MustCompile(`^([a-z0-9_]{4,30})$`) + if !validNamespace.MatchString(nameParts[0]) { + return fmt.Errorf("Invalid namespace name (%s), only [a-z0-9_] are allowed, size between 4 and 30", nameParts[0]) + } + validRepo := regexp.MustCompile(`^([a-zA-Z0-9-_.]+)$`) + if !validRepo.MatchString(nameParts[1]) { + return fmt.Errorf("Invalid repository name (%s), only [a-zA-Z0-9-_.] are allowed", nameParts[1]) + } v := url.Values{} v.Set("registry", *registry)