[Pkg-privacy-commits] [msva-perl] 299/356: Interrogate the GnuPG::Interface object to get $GPGHOME, when guessing a keyserver.
Ximin Luo
infinity0 at moszumanska.debian.org
Mon Aug 24 07:42:07 UTC 2015
This is an automated email from the git hooks/post-receive script.
infinity0 pushed a commit to branch debian
in repository msva-perl.
commit 626e59e0e1d665f2e81b29b53671008ec2dcd5a6
Author: David Bremner <bremner at unb.ca>
Date: Thu Mar 10 12:08:07 2011 -0400
Interrogate the GnuPG::Interface object to get $GPGHOME, when guessing
a keyserver.
We fall back on the environment, as before. This required splitting
untaint out into its own module.
---
Crypt/Monkeysphere/Keyserver.pm | 38 ++++++++++++++++++++++++++-------
Crypt/Monkeysphere/MSVA.pm | 10 +--------
Crypt/Monkeysphere/Util.pm | 19 +++++++++++++++++
unit-tests/10.keyserver/10.gnupghome.t | 39 ++++++++++++++++++++++++++++++++++
4 files changed, 89 insertions(+), 17 deletions(-)
diff --git a/Crypt/Monkeysphere/Keyserver.pm b/Crypt/Monkeysphere/Keyserver.pm
index ff436eb..9799868 100644
--- a/Crypt/Monkeysphere/Keyserver.pm
+++ b/Crypt/Monkeysphere/Keyserver.pm
@@ -10,6 +10,7 @@ use POSIX;
use strict;
use warnings;
use parent qw(Crypt::Monkeysphere::Logger);
+use Crypt::Monkeysphere::Util qw(untaint);
our $default_keyserver='hkp://pool.sks-keyservers.net';
@@ -19,8 +20,12 @@ sub new {
my $self=$class->SUPER::new($opts{loglevel} || 'info');
- $self->{keyserver} = $opts{keyserver} || $self->_get_keyserver();
+ # gnupg should be initialized first, before figuring out
+ # what keyserver to use.
+
$self->{gnupg} = $opts{gnupg} || new GnuPG::Interface();
+
+ $self->{keyserver} = $opts{keyserver} || $self->_get_keyserver();
return $self;
}
@@ -28,13 +33,31 @@ sub _get_keyserver{
my $self=shift;
- my $gpghome;
+ my $gpghome=$self->{gnupg}->options->homedir;
+
+ if (!defined($gpghome)) {
+ if (exists $ENV{GNUPGHOME} and $ENV{GNUPGHOME} ne '') {
+ $gpghome = untaint($ENV{GNUPGHOME});
+ } else {
+ my $userhome=File::HomeDir->my_home;
+ if (defined($userhome)) {
+ $gpghome = File::Spec->catfile($userhome, '.gnupg');
+ }
+ }
+ }
- if (exists $ENV{GNUPGHOME} and $ENV{GNUPGHOME} ne '') {
- $gpghome = untaint($ENV{GNUPGHOME});
+ if (defined $gpghome) {
+ return $self->_read_keyserver_from_gpg_conf($gpghome) || $default_keyserver;
} else {
- $gpghome = File::Spec->catfile(File::HomeDir->my_home, '.gnupg');
+ return $default_keyserver;
}
+
+}
+
+sub _read_keyserver_from_gpg_conf() {
+ my $self=shift;
+ my $gpghome=shift;
+
my $gpgconf = File::Spec->catfile($gpghome, 'gpg.conf');
if (-f $gpgconf) {
if (-r $gpgconf) {
@@ -51,12 +74,11 @@ sub _get_keyserver{
} else {
$self->log('info', "Did not find GnuPG configuration file while looking for keyserver '%s'\n", $gpgconf);
}
-
- return $default_keyserver;
+ return undef;
+
}
-
sub fetch_uid {
my $self= shift;
my $uid = shift || croak("uid argument mandatory");
diff --git a/Crypt/Monkeysphere/MSVA.pm b/Crypt/Monkeysphere/MSVA.pm
index f3fe0d7..9436671 100755
--- a/Crypt/Monkeysphere/MSVA.pm
+++ b/Crypt/Monkeysphere/MSVA.pm
@@ -37,6 +37,7 @@
use Config::General;
use Crypt::Monkeysphere::MSVA::MarginalUI;
use Crypt::Monkeysphere::Logger;
+ use Crypt::Monkeysphere::Util qw(untaint);
use Crypt::Monkeysphere::MSVA::Monitor;
use JSON;
@@ -749,15 +750,6 @@
}
}
- # use sparingly! We want to keep taint mode around for the data we
- # get over the network. this is only here because we want to treat
- # the command line arguments differently for the subprocess.
- sub untaint {
- my $x = shift;
- $x =~ /^(.*)$/ ;
- return $1;
- }
-
sub post_bind_hook {
my $self = shift;
my $server = shift;
diff --git a/Crypt/Monkeysphere/Util.pm b/Crypt/Monkeysphere/Util.pm
new file mode 100644
index 0000000..d4694d5
--- /dev/null
+++ b/Crypt/Monkeysphere/Util.pm
@@ -0,0 +1,19 @@
+package Crypt::Monkeysphere::Util;
+
+use strict;
+use warnings;
+
+use Exporter qw(import);
+our @EXPORT_OK=qw(untaint);
+
+
+# use sparingly! We want to keep taint mode around for the data we
+# get over the network. this is only here because we want to treat
+# the command line arguments differently for the subprocess.
+sub untaint {
+ my $x = shift;
+ $x =~ /^(.*)$/ ;
+ return $1;
+}
+
+1;
diff --git a/unit-tests/10.keyserver/10.gnupghome.t b/unit-tests/10.keyserver/10.gnupghome.t
new file mode 100644
index 0000000..c8ec61b
--- /dev/null
+++ b/unit-tests/10.keyserver/10.gnupghome.t
@@ -0,0 +1,39 @@
+# -*- perl -*-
+use Test::More;
+
+use Crypt::Monkeysphere::Keyserver;
+use GnuPG::Interface;
+use File::Temp qw(tempdir);
+use strict;
+use warnings;
+
+my $fpr='762B57BB784206AD';
+plan tests =>5;
+
+{
+
+ $ENV{HOME}='/nonexistant';
+ my $ks = new Crypt::Monkeysphere::Keyserver();
+
+ isa_ok($ks,'Crypt::Monkeysphere::Keyserver');
+ is($ks->{keyserver},$Crypt::Monkeysphere::Keyserver::default_keyserver);
+
+}
+
+my $tempdir = tempdir("/tmp/unitXXXXX", CLEANUP=> 1);
+my $gnupg = new GnuPG::Interface();
+my $testks = 'hkp://keys.gnupg.net';
+$gnupg->options->hash_init(homedir=>$tempdir);
+
+is($gnupg->options->homedir,$tempdir);
+
+open GPGCONF, '>', "$tempdir/gpg.conf";
+print GPGCONF "keyserver $testks\n";
+close GPGCONF;
+
+my $ks=new Crypt::Monkeysphere::Keyserver(gnupg=>$gnupg,
+ loglevel=>'debug');
+
+isa_ok($ks,'Crypt::Monkeysphere::Keyserver');
+
+is($ks->{keyserver},$testks);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/msva-perl.git
More information about the Pkg-privacy-commits
mailing list