From 5a713534c6ced21c7ab08ab0de7028c8ba1d724d Mon Sep 17 00:00:00 2001 From: Harald Sitter Date: Thu, 26 Apr 2018 09:18:06 +0200 Subject: [PATCH] fix gpg setting Init is actually never called and I have no clue why it is there if it is not called. Take this opportunity to introduce a New function which only does the helper lookup and panics iff that fails. Panic may be a bit too aggressive, but seems the most certain way to get out of not finding a suitable gpg1 binary. --- context/context.go | 4 ++-- pgp/gnupg.go | 30 ++++++++++++++++++++++++------ pgp/gnupg_test.go | 26 ++++++-------------------- 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/context/context.go b/context/context.go index 11436873..eae6f1b5 100644 --- a/context/context.go +++ b/context/context.go @@ -400,7 +400,7 @@ func (context *AptlyContext) GetSigner() pgp.Signer { defer context.Unlock() if context.pgpProvider() == "gpg" { // nolint: goconst - return &pgp.GpgSigner{} + return pgp.NewGpgSigner() } return &pgp.GoSigner{} @@ -412,7 +412,7 @@ func (context *AptlyContext) GetVerifier() pgp.Verifier { defer context.Unlock() if context.pgpProvider() == "gpg" { // nolint: goconst - return &pgp.GpgVerifier{} + return pgp.NewGpgVerifier() } return &pgp.GoVerifier{} diff --git a/pgp/gnupg.go b/pgp/gnupg.go index 3afe61a3..4f576193 100644 --- a/pgp/gnupg.go +++ b/pgp/gnupg.go @@ -114,14 +114,17 @@ func findGPGV1() (string, error) { return "", fmt.Errorf("Couldn't find a suitable gpgv executable. Make sure gpgv1 is available as either gpgv or gpgv1 in $PATH") } +// NewGpgSigner creates a new gpg signer +func NewGpgSigner() *GpgSigner { + gpg, err := findGPG1() + if err != nil { + panic(err) + } + return &GpgSigner{gpg: gpg} +} + // Init verifies availability of gpg & presence of keys func (g *GpgSigner) Init() error { - cmd, err := findGPG1() - if err != nil { - return err - } - g.gpg = cmd - output, err := exec.Command(g.gpg, "--list-keys", "--dry-run", "--no-auto-check-trustdb").CombinedOutput() if err != nil { return fmt.Errorf("unable to execute gpg: %s (is gpg installed?): %s", err, string(output)) @@ -168,6 +171,21 @@ type GpgVerifier struct { keyRings []string } +// NewGpgVerifier creates a new gpg signer +func NewGpgVerifier() *GpgVerifier { + gpg, err := findGPG1() + if err != nil { + panic(err) + } + + gpgv, err := findGPGV1() + if err != nil { + panic(err) + } + + return &GpgVerifier{gpg: gpg, gpgv: gpgv} +} + // InitKeyring verifies that gpg is installed and some keys are trusted func (g *GpgVerifier) InitKeyring() error { cmd, err := findGPG1() diff --git a/pgp/gnupg_test.go b/pgp/gnupg_test.go index 24d91396..670ab114 100644 --- a/pgp/gnupg_test.go +++ b/pgp/gnupg_test.go @@ -26,9 +26,7 @@ func (s *GnupgSuite) TestGPG1(c *C) { os.Setenv("PATH", filepath.Join(s.bins, "gpg1")) defer func() { os.Setenv("PATH", origPath) }() - signer := GpgSigner{} - err := signer.Init() - c.Assert(err, IsNil) + signer := NewGpgSigner() c.Assert(signer.gpg, Equals, "gpg") } @@ -38,9 +36,7 @@ func (s *GnupgSuite) TestGPG1Not2(c *C) { os.Setenv("PATH", filepath.Join(s.bins, "gpg2-and-1")) defer func() { os.Setenv("PATH", origPath) }() - signer := GpgSigner{} - err := signer.Init() - c.Assert(err, IsNil) + signer := NewGpgSigner() c.Assert(signer.gpg, Equals, "gpg1") } @@ -50,10 +46,7 @@ func (s *GnupgSuite) TestGPGNothing(c *C) { os.Setenv("PATH", filepath.Join(s.bins, "gpg2-only")) defer func() { os.Setenv("PATH", origPath) }() - signer := GpgSigner{} - err := signer.Init() - c.Assert(err, NotNil) - c.Assert(signer.gpg, Equals, "") + c.Assert(func() { NewGpgSigner() }, PanicMatches, `Couldn't find a suitable gpg executable.+`) } // If gpgv == gpgv1 = pick gpgv @@ -62,9 +55,7 @@ func (s *GnupgSuite) TestGPGV1(c *C) { os.Setenv("PATH", filepath.Join(s.bins, "gpgv1")+":"+filepath.Join(s.bins, "gpg1")) defer func() { os.Setenv("PATH", origPath) }() - verifier := GpgVerifier{} - err := verifier.InitKeyring() - c.Assert(err, IsNil) + verifier := NewGpgVerifier() c.Assert(verifier.gpgv, Equals, "gpgv") } @@ -74,9 +65,7 @@ func (s *GnupgSuite) TestGPGV1Not2(c *C) { os.Setenv("PATH", filepath.Join(s.bins, "gpgv2-and-1")+":"+filepath.Join(s.bins, "gpg1")) defer func() { os.Setenv("PATH", origPath) }() - verifier := GpgVerifier{} - err := verifier.InitKeyring() - c.Assert(err, IsNil) + verifier := NewGpgVerifier() c.Assert(verifier.gpgv, Equals, "gpgv1") } @@ -86,8 +75,5 @@ func (s *GnupgSuite) TestGPGVNothing(c *C) { os.Setenv("PATH", filepath.Join(s.bins, "gpgv2-only")+":"+filepath.Join(s.bins, "gpg1")) defer func() { os.Setenv("PATH", origPath) }() - verifier := GpgVerifier{} - err := verifier.InitKeyring() - c.Assert(err, NotNil) - c.Assert(verifier.gpgv, Equals, "") + c.Assert(func() { NewGpgVerifier() }, PanicMatches, `Couldn't find a suitable gpgv executable.+`) }