浏览代码

Hardened repos name validation

Sam Alba 12 年之前
父节点
当前提交
316c8328aa
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      registry/registry.go

+ 7 - 1
registry/registry.go

@@ -67,7 +67,7 @@ func ResolveRepositoryName(reposName string) (string, string, error) {
 		return "", "", ErrInvalidRepositoryName
 	}
 	nameParts := strings.SplitN(reposName, "/", 2)
-	if !strings.Contains(nameParts[0], ".") {
+	if !strings.Contains(nameParts[0], ".") && !strings.Contains(nameParts[0], ":") {
 		// This is a Docker Index repos (ex: samalba/hipache or ubuntu)
 		err := validateRepositoryName(reposName)
 		return auth.IndexServerAddress(), reposName, err
@@ -79,6 +79,12 @@ func ResolveRepositoryName(reposName string) (string, string, error) {
 	}
 	hostname := nameParts[0]
 	reposName = nameParts[1]
+	if strings.Contains(hostname, "index.docker.io") {
+		return "", "", fmt.Errorf("Invalid repository name, try \"%s\" instead", reposName)
+	}
+	if err := validateRepositoryName(reposName); err != nil {
+		return "", "", err
+	}
 	endpoint := fmt.Sprintf("https://%s/v1/", hostname)
 	if err := pingRegistryEndpoint(endpoint); err != nil {
 		utils.Debugf("Registry %s does not work (%s), falling back to http", endpoint, err)