summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Ruthven <andrew@etc.gen.nz>2021-01-28 21:21:26 +1300
committerAndrew Ruthven <andrew@etc.gen.nz>2021-01-28 21:21:26 +1300
commitb32eb32e0881f3a30ab15c708ce82b669abb26f7 (patch)
tree9057543db43d935585dc923ca515ed3fd7f812a0
parenta9d620f12037ecc62bc18915e2eb7e5b81c43afb (diff)
New upstream version 1.01
-rw-r--r--Changes4
-rw-r--r--MANIFEST3
-rw-r--r--META.yml3
-rw-r--r--Makefile.PL1
-rw-r--r--SIGNATURE31
-rw-r--r--lib/GnuPG/Interface.pm28
-rw-r--r--t/Interface.t4
-rw-r--r--t/version_updates.t30
-rwxr-xr-xtest/fake-gpg-v12
-rwxr-xr-xtest/fake-gpg-v22
10 files changed, 83 insertions, 25 deletions
diff --git a/Changes b/Changes
index 55e1ec6..3e9c55c 100644
--- a/Changes
+++ b/Changes
@@ -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
diff --git a/MANIFEST b/MANIFEST
index 7c04bb9..8b9c4a4 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -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
diff --git a/META.yml b/META.yml
index 9c183c6..7da7e22 100644
--- a/META.yml
+++ b/META.yml
@@ -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';
diff --git a/SIGNATURE b/SIGNATURE
index de01497..1b4cc49 100644
--- a/SIGNATURE
+++ b/SIGNATURE
@@ -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'