importd: support SUSE style checksums (#5206)
In order to verify a pulled container or disk image, importd only supports SHA256SUMS files with the detached signature in SHA256SUMS.gpg. SUSE is using an inline signed file with the name of the image itself and the suffix .sha256 instead. This commit adds support for this type of signature files. It is first attempted to pull the .sha256 file. If this fails with error 404, the SHA256SUMS and SHA256SUMS.gpg files are pulled and used for verification.
This commit is contained in:
committed by
Lennart Poettering
parent
8ea9aa9e88
commit
697be0be15
@@ -478,11 +478,9 @@ static void raw_pull_job_on_finished(PullJob *j) {
|
||||
} else if (j == i->settings_job) {
|
||||
if (j->error != 0)
|
||||
log_info_errno(j->error, "Settings file could not be retrieved, proceeding without.");
|
||||
} else if (j->error != 0) {
|
||||
} else if (j->error != 0 && j != i->signature_job) {
|
||||
if (j == i->checksum_job)
|
||||
log_error_errno(j->error, "Failed to retrieve SHA256 checksum, cannot verify. (Try --verify=no?)");
|
||||
else if (j == i->signature_job)
|
||||
log_error_errno(j->error, "Failed to retrieve signature file, cannot verify. (Try --verify=no?)");
|
||||
else
|
||||
log_error_errno(j->error, "Failed to retrieve image file. (Wrong URL?)");
|
||||
|
||||
@@ -500,6 +498,13 @@ static void raw_pull_job_on_finished(PullJob *j) {
|
||||
if (!raw_pull_is_done(i))
|
||||
return;
|
||||
|
||||
if (i->checksum_job->style == VERIFICATION_PER_DIRECTORY && i->signature_job->error != 0) {
|
||||
log_error_errno(j->error, "Failed to retrieve signature file, cannot verify. (Try --verify=no?)");
|
||||
|
||||
r = i->signature_job->error;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (i->roothash_job)
|
||||
i->roothash_job->disk_fd = safe_close(i->roothash_job->disk_fd);
|
||||
if (i->settings_job)
|
||||
@@ -744,6 +749,7 @@ int raw_pull_start(
|
||||
|
||||
if (i->checksum_job) {
|
||||
i->checksum_job->on_progress = raw_pull_job_on_progress;
|
||||
i->checksum_job->style = VERIFICATION_PER_FILE;
|
||||
|
||||
r = pull_job_begin(i->checksum_job);
|
||||
if (r < 0)
|
||||
|
||||
Reference in New Issue
Block a user