Jelajahi Sumber

Hardened repos name validation

Sam Alba 12 tahun lalu
induk
melakukan
316c8328aa
1 mengubah file dengan 7 tambahan dan 1 penghapusan
  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)