Sfoglia il codice sorgente

verify blob digest

Michael Yang 1 anno fa
parent
commit
bf198c3918
1 ha cambiato i file con 27 aggiunte e 0 eliminazioni
  1. 27 0
      server/images.go

+ 27 - 0
server/images.go

@@ -623,6 +623,13 @@ func PullModel(name, username, password string, fn func(api.ProgressResponse)) e
 		completed += layer.Size
 		completed += layer.Size
 	}
 	}
 
 
+	fn(api.ProgressResponse{Status: "verifying sha256 digest"})
+	for _, layer := range layers {
+		if err := verifyBlob(layer.Digest); err != nil {
+			return err
+		}
+	}
+
 	fn(api.ProgressResponse{Status: "writing manifest"})
 	fn(api.ProgressResponse{Status: "writing manifest"})
 
 
 	manifestJSON, err := json.Marshal(manifest)
 	manifestJSON, err := json.Marshal(manifest)
@@ -917,3 +924,23 @@ func makeRequest(method, url string, headers map[string]string, body io.Reader,
 
 
 	return resp, nil
 	return resp, nil
 }
 }
+
+func verifyBlob(digest string) error {
+	fp, err := GetBlobsPath(digest)
+	if err != nil {
+		return err
+	}
+
+	f, err := os.Open(fp)
+	if err != nil {
+		return err
+	}
+	defer f.Close()
+
+	fileDigest, _ := GetSHA256Digest(f)
+	if digest != fileDigest {
+		return fmt.Errorf("digest mismatch: want %s, got %s", digest, fileDigest)
+	}
+
+	return nil
+}