#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
# Keylookup is part of pgp-tools:
# http://pgp-tools.alioth.debian.org/
# svn://svn.debian.org/pgp-tools/trunk/
# http://svn.debian.org/wsvn/pgp-tools/trunk/
-delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV', 'PATH'};
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
$|=1; # Always flush buffers
my $version = '3.0 ($Id$)';
-# Where to find GnuPG's options file.
-# Full path to the dialog and whiptail executeable.
-my $Dialog = '/usr/bin/dialog';
-my $Whiptail = '/usr/bin/whiptail';
-
# Strings to use in the dialog|whiptail frontend
my $TITLE = 'Import Keys';
my $BACKTITLE = 'KeyLookup $Revision$';
push @ops, '--with-colons';
push @ops, '--fixed-list-mode';
push @ops, '--search';
- push @ops, $options->{'search'};
+ push @ops, @{$options->{'search'}};
exec(@ops);
die ("Cannot exec GnuPG: $!\n");
};
while (<KID>) {
chomp;
+ if ( $_ eq "" ) { next; }
my ($type, undef) = split /:/;
if ($type eq 'pub') {
my ($type, $keyid, $algo, $bits, $created, undef, $revoked) = split /:/;
my %unique;
my @keys = grep { !$unique{$_}++ }
- grep { /^[0-9A-Fa-f]{8}$/ }
+ # get the keyID; can be 8, 16 or 40 nibbles
+ grep { /^((([a-zA-Z0-9]{24})?[a-zA-Z0-9]{8})?[a-zA-Z0-9]{8})$/ }
map { s/\s//g; $_ } <ERRFH>;
wait;
$frontend = 'dialog' unless (defined $frontend);
if ($frontend eq 'dialog') {
- unless (-x $Dialog) {
- warn("Dialog ($Dialog) not executeable/installed. Falling back to Whiptail\n");
+ unless (`which dialog` && $? == 0) {
+ warn("Dialog not executeable/installed. Falling back to Whiptail\n");
$frontend = 'whiptail';
}
};
if ($frontend eq 'whiptail') {
- unless (-x $Whiptail ) {
- warn("Whiptail ($Whiptail) not executeable/installed. Falling back to plain\n");
+ unless (`which whiptail` && $? == 0 ) {
+ warn("Whiptail not executeable/installed. Falling back to plain\n");
$frontend = 'plain';
}
};
if ( $frontend eq 'dialog' ) {
calcDialogSize;
my @ARGS = (
- $Dialog,
+ 'dialog',
'--backtitle',
$BACKTITLE,
'--separate-output',
} elsif ( $frontend eq 'whiptail' ) {
calcDialogSize;
my @ARGS = (
- $Whiptail,
+ 'whiptail',
'--backtitle',
$BACKTITLE,
'--separate-output',
push @args, '--recv-keys';
for my $keyid (@$keyids) {
# untaint keyids
- my ($cleanid) = $keyid =~ /^([a-zA-Z0-9]{8})$/;
+ my ($cleanid) = $keyid =~ /^((([a-zA-Z0-9]{24})?[a-zA-Z0-9]{8})?[a-zA-Z0-9]{8})$/;
warn ("keyid '$keyid' has unexpected format - skipping\n"), next
unless defined $cleanid;
push @args, $cleanid;
## Take all additional arguments to the program as a search target,
## escape the string for use in URLs.
- $options{'search'} = join ' ', @ARGV;
- $options{'search'} =~ s/ ( [^A-Za-z0-9] )
- / '%' . unpack("H2", $1)
- /xeg;
+ $options{'search'} = \@ARGV;
my $keys = getHits( \%options );
my $keyids;
+ if (scalar keys %$keys == 0) {
+ print "GnuPG did not find any keys matching your search string.\n";
+ exit 0;
+ };
if ($options{'importall'}) {
my @allkeys = keys %$keys;
$keyids = \@allkeys;