summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/tlpkg/TeXLive/TLUtils.pm37
1 files changed, 33 insertions, 4 deletions
diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm
index bd91a62f6b1..8831b881d63 100644
--- a/Master/tlpkg/TeXLive/TLUtils.pm
+++ b/Master/tlpkg/TeXLive/TLUtils.pm
@@ -101,6 +101,7 @@ C<TeXLive::TLUtils> -- utilities used in TeX Live infrastructure
TeXLive::TLUtils::tlmd5($path);
TeXLive::TLUtils::tlchecksum($path);
TeXLive::TLUtils::verify_checksum($file, $checksum);
+ TeXLive::TLUtils::setup_gpg();
TeXLive::TLUtils::verify_download($file, $url);
TeXLive::TLUtils::compare_tlpobjs($tlpA, $tlpB);
TeXLive::TLUtils::compare_tlpdbs($tlpdbA, $tlpdbB);
@@ -178,6 +179,7 @@ BEGIN {
&tlmd5
&tlchecksum
&verify_checksum
+ &setup_gpg
&verify_download
&wsystem
&xsystem
@@ -3661,6 +3663,35 @@ sub verify_checksum {
=pod
+=item C<< setup_gpg() >>
+
+Tries to set up the global TeXLive::GPG instance C<$::gpg> used for
+verification of downloads.
+
+Returns 1/0 on success/failure.
+
+=cut
+
+sub setup_gpg {
+ my $master = shift;
+ # first search for a gpg binary
+ return 0 if (setup_unix_one( 'gpg' , '/no/such/path', '--version', 1));
+ # ok, we found one
+ $::gpg = new Crypt::GPG;
+ $gpg->gpgbin($::progs{'gpg'});
+ # now we need to set up GNUPGHOME to make sure that gpg uses the
+ # right codes
+ if ($ENV{'TL_GNUPGHOME'}) {
+ # the user wants us to use this directory, sure, do it
+ $ENV{'GNUPGHOME'} = $ENV{'TL_GNUPGHOME'};
+ } else {
+ $ENV{'GNUPGHOME'} = "$master/tlpkg/gpg";
+ }
+ return 1;
+}
+
+=pod
+
=item C<< verify_download($file, $url) >>
Verifies a download of C<$url> into C<$file> by checking C<$url.checksum>
@@ -3683,9 +3714,7 @@ sub verify_download {
return($ret,$mst) if (!$ret);
# next try to verify gpg
$ret = 1; # default for gpg download
- if ($::progs{'gpg'}) {
- my $gpg = new Crypt::GPG;
- $gpg->gpgbin($::progs{'gpg'});
+ if ($::gpg) {
my $urlgpg = "$url.asc";
my ($gpg_fh, $gpg_file);
if ($gpg =~ m,^(http|ftp|file)://,) {
@@ -3700,7 +3729,7 @@ sub verify_download {
$gpg_file = $urlgpg;
}
if ($ret && (-r "$gpg_file")) {
- my ($plaintext, $signature) = $gpg->verify($file, $gpg_file);
+ my ($plaintext, $signature) = $::gpg->verify($file, $gpg_file);
if ($signature->validity ne "GOOD") {
tldie(<<GPGERROR);
Verification of downloaded file