Skip to content

Commit 1dd2cb9

Browse files
authored
Merge pull request #966 from chaosoffire-org/fix-3
Fix GPG verification for CentOS, Gentoo, Rocky Linux, and VoidLinux
2 parents 5c63598 + 6b6c3dd commit 1dd2cb9

File tree

4 files changed

+41
-24
lines changed

4 files changed

+41
-24
lines changed

sources/centos-http.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (s *centOS) Run() error {
102102
}
103103

104104
// Only verify file if possible.
105-
if strings.HasSuffix(checksumFile, ".asc") || checksumFile == "SHA256SUM" || checksumFile == "CHECKSUM" {
105+
if strings.HasSuffix(checksumFile, ".asc") {
106106
valid, err := s.VerifyFile(filepath.Join(fpath, checksumFile), "")
107107
if err != nil {
108108
return fmt.Errorf("Failed to verify %q: %w", checksumFile, err)

sources/gentoo.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,20 @@ func (s *gentoo) Run() error {
7676
}
7777

7878
if !s.definition.Source.SkipVerification {
79-
_, err = s.DownloadHash(s.definition.Image, tarball+".DIGESTS.asc", "", nil)
79+
_, err = s.DownloadHash(s.definition.Image, tarball+".DIGESTS", "", nil)
8080
if err != nil {
81-
return fmt.Errorf("Failed to download %q: %w", tarball+".DIGESTS.asc", err)
81+
return fmt.Errorf("Failed to download %q: %w", tarball+".DIGESTS", err)
8282
}
8383

8484
valid, err := s.VerifyFile(
85-
filepath.Join(fpath, fname+".DIGESTS.asc"),
85+
filepath.Join(fpath, fname+".DIGESTS"),
8686
"")
8787
if err != nil {
88-
return fmt.Errorf("Failed to verify %q: %w", filepath.Join(fpath, fname+".DIGESTS.asc"), err)
88+
return fmt.Errorf("Failed to verify %q: %w", filepath.Join(fpath, fname+".DIGESTS"), err)
8989
}
9090

9191
if !valid {
92-
return fmt.Errorf("Failed to verify %q", fname+".DIGESTS.asc")
92+
return fmt.Errorf("Failed to verify %q", fname+".DIGESTS")
9393
}
9494
}
9595

sources/rocky-http.go

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,38 @@ func (s *rockylinux) Run() error {
5050

5151
checksumFile := ""
5252
if !s.definition.Source.SkipVerification {
53-
checksumFile = "CHECKSUM"
54-
55-
fpath, err := s.DownloadHash(s.definition.Image, baseURL+checksumFile, "", nil)
56-
if err != nil {
57-
return fmt.Errorf("Failed to download %q: %w", baseURL+checksumFile, err)
58-
}
53+
// Rocky Linux 8 and 9 do not provide any GPG signature for the CHECKSUM file.
54+
// Rocky Linux 10 provides a detached signature.
55+
majorVersion := strings.Split(s.definition.Image.Release, ".")[0]
5956

60-
valid, err := s.VerifyFile(filepath.Join(fpath, checksumFile), "")
61-
if err != nil {
62-
return fmt.Errorf("Failed to verify %q: %w", checksumFile, err)
63-
}
57+
checksumFile = "CHECKSUM"
6458

65-
if !valid {
66-
return fmt.Errorf("Invalid signature for %q", checksumFile)
59+
switch majorVersion {
60+
case "8", "9":
61+
fpath, err = s.DownloadHash(s.definition.Image, baseURL+checksumFile, "", nil)
62+
if err != nil {
63+
return fmt.Errorf("Failed to download %q: %w", baseURL+checksumFile, err)
64+
}
65+
66+
default:
67+
fpath, err = s.DownloadHash(s.definition.Image, baseURL+checksumFile+".asc", "", nil)
68+
if err != nil {
69+
return fmt.Errorf("Failed to download %q: %w", baseURL+checksumFile+".asc", err)
70+
}
71+
72+
_, err = s.DownloadHash(s.definition.Image, baseURL+checksumFile, "", nil)
73+
if err != nil {
74+
return fmt.Errorf("Failed to download %q: %w", baseURL+checksumFile, err)
75+
}
76+
77+
valid, err := s.VerifyFile(filepath.Join(fpath, checksumFile), filepath.Join(fpath, checksumFile+".asc"))
78+
if err != nil {
79+
return fmt.Errorf("Failed to verify %q: %w", checksumFile, err)
80+
}
81+
82+
if !valid {
83+
return fmt.Errorf("Invalid signature for %q", checksumFile)
84+
}
6785
}
6886
}
6987

sources/voidlinux-http.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,11 @@ func (s *voidlinux) Run() error {
3939
return fmt.Errorf("Failed to parse URL %q: %w", tarball, err)
4040
}
4141

42-
skip, err := s.validateGPGRequirements(url)
43-
if err != nil {
44-
return fmt.Errorf("Failed to validate GPG requirements: %w", err)
42+
if !s.definition.Source.SkipVerification && url.Scheme != "https" &&
43+
len(s.definition.Source.Keys) == 0 {
44+
return errors.New("GPG keys are required if downloading from HTTP")
4545
}
4646

47-
s.definition.Source.SkipVerification = skip
48-
4947
var fpath string
5048

5149
if s.definition.Source.SkipVerification {
@@ -58,7 +56,8 @@ func (s *voidlinux) Run() error {
5856
return fmt.Errorf("Failed to download %q: %w", tarball, err)
5957
}
6058

61-
if !s.definition.Source.SkipVerification {
59+
// Force gpg checks when using http
60+
if !s.definition.Source.SkipVerification && url.Scheme != "https" {
6261
_, err = s.DownloadHash(s.definition.Image, digests, "", nil)
6362
if err != nil {
6463
return fmt.Errorf("Failed to download %q: %w", digests, err)

0 commit comments

Comments
 (0)