diff options
author | Andrew Ruthven <andrew@etc.gen.nz> | 2021-01-28 21:21:26 +1300 |
---|---|---|
committer | Andrew Ruthven <andrew@etc.gen.nz> | 2021-01-28 21:21:26 +1300 |
commit | b32eb32e0881f3a30ab15c708ce82b669abb26f7 (patch) | |
tree | 9057543db43d935585dc923ca515ed3fd7f812a0 | |
parent | a9d620f12037ecc62bc18915e2eb7e5b81c43afb (diff) |
New upstream version 1.01
-rw-r--r-- | Changes | 4 | ||||
-rw-r--r-- | MANIFEST | 3 | ||||
-rw-r--r-- | META.yml | 3 | ||||
-rw-r--r-- | Makefile.PL | 1 | ||||
-rw-r--r-- | SIGNATURE | 31 | ||||
-rw-r--r-- | lib/GnuPG/Interface.pm | 28 | ||||
-rw-r--r-- | t/Interface.t | 4 | ||||
-rw-r--r-- | t/version_updates.t | 30 | ||||
-rwxr-xr-x | test/fake-gpg-v1 | 2 | ||||
-rwxr-xr-x | test/fake-gpg-v2 | 2 |
10 files changed, 83 insertions, 25 deletions
@@ -1,5 +1,9 @@ Revision history for GnuPG-Interface +1.01 - 2021-01-26 + - Make $gnupg->call('foo') update the internal GnuPG version number. + - Localize tainted PATH env to make exec happy + 1.0 - 2020-05-13 - Limit support to GnuPG 2.2+ and 1.4 - Additional information from keys when using GnuPG 2.2 or higher @@ -50,10 +50,13 @@ t/sign.t t/sign_and_encrypt.t t/UserId.t t/verify.t +t/version_updates.t t/wrap_call.t t/zzz_cleanup.t test/encrypted.1.gpg test/encrypted.2.gpg +test/fake-gpg-v1 +test/fake-gpg-v2 test/fake-pinentry.pl test/gpg.conf test/key.1.asc @@ -25,6 +25,7 @@ requires: Moo: '0.091011' MooX::HandlesVia: '0.001004' MooX::late: '0.014' + Scalar::Util: 0 resources: license: http://dev.perl.org/licenses/ -version: '1.00' +version: '1.01' diff --git a/Makefile.PL b/Makefile.PL index 7066a69..2181b51 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -23,6 +23,7 @@ requires 'MooX::HandlesVia' => '0.001004'; requires 'MooX::late' => '0.014'; requires 'Math::BigInt' => '1.78'; requires 'Fatal'; +requires 'Scalar::Util'; license 'perl'; @@ -14,11 +14,11 @@ not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 -SHA256 40fd03ca91f8ff428c8dbe217c646e7d8c6777b2016d95b5a4003dce0ce30143 Changes -SHA256 a88d644002b8f00f1c369da77144fc79cb289ca2c7912eadd44c246ee08c2d1c MANIFEST +SHA256 46114e4d5efdb0e076638a3ed4323d2627af62bcb7825abd62d209d4416caa7c Changes +SHA256 9549a01cd180a966a56ba008021c6ea800ec56bc6660a5b2ac8ba3ab629c97f1 MANIFEST SHA256 93d50f37fd222dbe3a8590a019f39d7a79ba725227b53ea6f9dd195830e2fb77 MANIFEST.SKIP -SHA256 8bd01c7a116d2cbd561e0d56199e95967e5b1ca9b24f0fac15a9b39486295088 META.yml -SHA256 898ed6f95b1700265f483d0fad3fe337438ac022c597bdfe904a9bf987410655 Makefile.PL +SHA256 d3b1d1c04545934179ccfe71c1327013e62897514d349471126783e8ce05add8 META.yml +SHA256 d66b805878b178c170e04ea8e8c06bff2b83c43463e191fd38472360f60835b0 Makefile.PL SHA256 c0d74f2b2987828dc66017694f36454f429b5be29ca235db1e626f12d67cc1b2 README SHA256 67d139199c03b8bf8447a5a62f0d0b6dc1bd5bf6dbe04de6d21998c577823ed6 inc/Module/Install.pm SHA256 6ebcc53a161dd5dc0aae69e4704575f2b00181901d768a82e26722a309cfdbe4 inc/Module/Install/Base.pm @@ -32,7 +32,7 @@ SHA256 5f73a6851a91ea44e65b924f918743ad6e860620ad7a38a39d0295e0c5652a9f inc/Modu SHA256 21170a181c773923aa779477d62eed6357f44c9ab27b2abd216f097d78901c9e lib/GnuPG/Fingerprint.pm SHA256 341fe948514a63dc081708c3a5356e0237ef1f333d964d99e9829a9e956f82d9 lib/GnuPG/Handles.pm SHA256 fa9fca26659ef2baba11543b4cbcb141dc6d66191cea9bc07140a8cb3bccec9f lib/GnuPG/HashInit.pm -SHA256 64cfdfa5cd59c60cbbb36cd4c7c9a8cd87a39049f5ba690155910508005324e7 lib/GnuPG/Interface.pm +SHA256 64886a851994347d1921732245a31beed1536aab0bd99dc1f57356017986796b lib/GnuPG/Interface.pm SHA256 f53d8e10107713b8c72d1e0ae13021964344ed205e412fb49621ada6fd32bf3e lib/GnuPG/Key.pm SHA256 729f79dfaf58ba9d7321a8005f90a9dea1614b61556c50120bc323fe753e0022 lib/GnuPG/Options.pm SHA256 de1dbcd19ece6fd939367f1132f08afdede2553e4c20028d08c186d10ec0d9c8 lib/GnuPG/PrimaryKey.pm @@ -45,7 +45,7 @@ SHA256 89c853903cc9220a8e2ae05483b5b295ef0d100fe91066ab955addf720b26249 lib/GnuP SHA256 57892e62bf1291be5dbf56f75691022f344ef3850524e1d65051bdd6dc4797c8 lib/GnuPG/UserId.pm SHA256 dae227d6b1c5dfc5fa0e404c747ed3258a221dea7ab773927bd199530c299b38 t/000_setup.t SHA256 2ba7457456a05dc99a4ad7240127c0fa04655c7bcefd41ca40bf8cc89e72fd0c t/Fingerprint.t -SHA256 4e3d72d1d66cde3777a1aaa43b482edfab79845e76570f5fab09532761f47cc5 t/Interface.t +SHA256 a1f98f817ab9ed6260f1d5d5afcf06c560074d5630348e88a62e866668a96869 t/Interface.t SHA256 13a39c1c8e9ef2335b01c194caa83b48fd15bee9bc35723df2532fac6cbcb204 t/MyTest.pm SHA256 96050358ec301df2c456a4216817bfd6cb359fae4348a717c4a56325de522fcc t/MyTestSpecific.pm SHA256 ecc3d7593ee9580b2a247a8bbe8384e51f4659d21d21878d0e8925d8520d55a1 t/UserId.t @@ -65,10 +65,13 @@ SHA256 998f85987922a9f55895b696808c677b036e199ba6054773cc0318ab55f21150 t/passph SHA256 dbba8768ec668f5963cda97b50ebf0bd4759cf53c7d584afe724e05f2e3ecc32 t/sign.t SHA256 58dd4921945ed7347ba028f52c87fe5ea43487ec3c4765afb73e97686e277a15 t/sign_and_encrypt.t SHA256 845140735d2be4acc0ae4c3459ef06646d26843584d370b18f49fcc17d27ccae t/verify.t +SHA256 f7c37ee27283212cbbbe15046060ae76007c346041a8111528a0a64efe4b4db1 t/version_updates.t SHA256 4fe916000a3a23c7a06386252ae5731ffb5c08d2f03c07826908529844cc3c27 t/wrap_call.t SHA256 a38c6762ac3bc3fe324a3e2a729259f780cb6d5d1f5fec24a2b362010be475e0 t/zzz_cleanup.t SHA256 5a829fe0270a33d5157563fe555f395aae1c0fa6ed0aaf68308af50f880fa259 test/encrypted.1.gpg SHA256 d595ad88a2af6192660ef386fb36ac90d55088e5a9e55294fb54c06d9260fd97 test/encrypted.2.gpg +SHA256 88667f20118c71b9d2051e65d1d44a4a83b5c1ecac4351d3364f401863e582dd test/fake-gpg-v1 +SHA256 5e6ff767d39a313bfb4a9fd2fdae747aca4b50830fe79dc2394f693d275b24ca test/fake-gpg-v2 SHA256 90de0e214326e6cc05c49813836ebc9f0b67805b8d8d37bd160dd34c02334b12 test/fake-pinentry.pl SHA256 73e66c46bb07993b2df8b785c90737dc4cd708a3c6ae50a8721d4a20434cd62f test/gpg.conf SHA256 d51ec60087f52f6f4e7dfc2cd2eca5b2130c06051fadaf99994eeb14954d80a5 test/key.1.asc @@ -93,12 +96,12 @@ SHA256 b84cf371c144ae5bdb201c7a8fa0461562ac7d87395c94406b8611bc855d5bb3 test/sec SHA256 1fb329b56306f80d4c23398f2f8076b8f7fffa19fcda7193be24c8792807ea80 test/signed.1.asc -----BEGIN PGP SIGNATURE----- -iQEzBAEBCAAdFiEExJs3Lyv4ShkBFmAnDfCig/6sgLIFAl68Uk8ACgkQDfCig/6s -gLJp7gf/Ys444GmW0i6k+NhnW/kpFqn+P8seuGMfIoxFm04nr5AWhtmac5rkjk0k -FGyoxL8NX3Zzxt55o4mN3+edDRsWRummFqa1clpHl3FSMye/GRXQUsavTLVnjCNX -DyE8/38cdaGcOQccLisS0Hud+C4HEXK/zW9EKyr6shGkMSkx8sKwe7ghN8yYAoMr -JnS8Bp1q1/BUpc9PosNsC6dEmPrHkhN5fj01APvNm2SbR7ipk0Njn9Xwtip+8yKY -vZRnC4lzDn5Og0VVGyUCYjpocQkzFWc0X7UMO7bhEqmH3eyYgh+z8OT7/hO3tw/K -MnbjDHaYcmmnDhN3gwldobM6/Akb6Q== -=ClL/ +iQEzBAEBCAAdFiEExJs3Lyv4ShkBFmAnDfCig/6sgLIFAmAQg5UACgkQDfCig/6s +gLLjQwf+JxM9VTKl97pyTYcw3a1sFPgdodAUXLJ+l4W6+FNbS1a9F/4dyzfn0xS1 +pe+iMgd2nmdv4e6r/TsFUHmRpuB19NYC2MpzBpeTLwp/FHQ3W7XVgon6BAa+8hZF +1SG91yfxhoks4wR/FlYaJ9AUQsGTkCCqcBJ60CQCY5pkLIm5iDSa+jXCLjRz0fkw +2sGVtrmEMOBskOk0OCEKqLyo4OdyQNsfYtkK15mzqyK6fXkyH3r0sjwKUBNDXIfc +5H2uwVQhG3oN+xk5Mbb1Kgwwo3vRfH1FhrW3TQyUAxFch8fyyJ9ELlvLbghMoqiD +ayGDvO78HnpOMET68VM+T8Jolb4Auw== +=MgDn -----END PGP SIGNATURE----- diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm index b11e4d2..13b313e 100644 --- a/lib/GnuPG/Interface.pm +++ b/lib/GnuPG/Interface.pm @@ -27,14 +27,22 @@ use IO::Handle; use Math::BigInt try => 'GMP'; use GnuPG::Options; use GnuPG::Handles; +use Scalar::Util 'tainted'; -$VERSION = '1.00'; +$VERSION = '1.01'; -has $_ => ( +has passphrase => ( isa => 'Any', is => 'rw', - clearer => 'clear_' . $_, -) for qw(call passphrase); + clearer => 'clear_passphrase', +); + +has call => ( + isa => 'Any', + is => 'rw', + trigger => 1, + clearer => 'clear_call', +); # NB: GnuPG versions # @@ -68,10 +76,7 @@ sub gnupg_call { shift->call(@_); } sub BUILD { my ( $self, $args ) = @_; - - $self->hash_init( call => 'gpg' ); - $self->hash_init(%$args); - $self->_set_version($self->_version()); + $self->hash_init( call => 'gpg', %$args ); } struct( @@ -82,6 +87,12 @@ struct( } ); +# Update version if "call" is updated +sub _trigger_call { + my ( $self, $gpg ) = @_; + $self->_set_version( $self->_version() ); +} + ################################################################# # real worker functions @@ -333,6 +344,7 @@ sub fork_attach_exec( $% ) { @commands, @command_args ); + local $ENV{PATH} if tainted $ENV{PATH}; exec @command or die "exec() error: $ERRNO"; } diff --git a/t/Interface.t b/t/Interface.t index 6d97956..ec5dfe5 100644 --- a/t/Interface.t +++ b/t/Interface.t @@ -10,8 +10,8 @@ use MyTest; use GnuPG::Interface; -my $v1 = 'gpg'; -my $v2 = 'gnupg'; +my $v1 = './test/fake-gpg-v1'; +my $v2 = './test/fake-gpg-v2'; my $gnupg = GnuPG::Interface->new( call => $v1 ); diff --git a/t/version_updates.t b/t/version_updates.t new file mode 100644 index 0000000..758ee7b --- /dev/null +++ b/t/version_updates.t @@ -0,0 +1,30 @@ +#!/usr/bin/perl -w + +use strict; + +use lib './t'; +use MyTest; +use MyTestSpecific; + +TEST +{ + my $gpg = GnuPG::Interface->new(call => './test/fake-gpg-v1'); + return ($gpg->version() eq '1.4.23'); +}; + + +TEST +{ + my $gpg = GnuPG::Interface->new(call => './test/fake-gpg-v2'); + return ($gpg->version() eq '2.2.12'); +}; + +TEST +{ + my $gpg = GnuPG::Interface->new(call => './test/fake-gpg-v1'); + my $v1 = $gpg->version(); + $gpg->call('./test/fake-gpg-v2'); + my $v2 = $gpg->version(); + + return ($v1 eq '1.4.23' && $v2 eq '2.2.12'); +} diff --git a/test/fake-gpg-v1 b/test/fake-gpg-v1 new file mode 100755 index 0000000..0a2a68f --- /dev/null +++ b/test/fake-gpg-v1 @@ -0,0 +1,2 @@ +#!/bin/sh +echo 'gpg (GnuPG) 1.4.23' diff --git a/test/fake-gpg-v2 b/test/fake-gpg-v2 new file mode 100755 index 0000000..2578a44 --- /dev/null +++ b/test/fake-gpg-v2 @@ -0,0 +1,2 @@ +#!/bin/sh +echo 'gpg (GnuPG) 2.2.12' |