X-Git-Url: https://git.sthu.org/?a=blobdiff_plain;f=keylookup%2Fkeylookup;h=a69f888ec8857a0eea50a2f0e9c3c14abd194b80;hb=HEAD;hp=3f2de1487394d68f2b6e9a6c56abca8795ee33f6;hpb=e0a862a5d077f8d925cc2380f6dc4355ff42c17c;p=pgp-tools.git diff --git a/keylookup/keylookup b/keylookup/keylookup index 3f2de14..a69f888 100755 --- a/keylookup/keylookup +++ b/keylookup/keylookup @@ -17,12 +17,14 @@ # # 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 homepage: http://www.palfrader.org/keylookup/ -# CVS, BTS: http://savannah.gnu.org/projects/keylookup/ +# 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 @@ -33,11 +35,6 @@ use Getopt::Long; 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$'; @@ -93,7 +90,7 @@ sub getHits($) { 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"); }; @@ -102,6 +99,7 @@ sub getHits($) { while () { chomp; + if ( $_ eq "" ) { next; } my ($type, undef) = split /:/; if ($type eq 'pub') { my ($type, $keyid, $algo, $bits, $created, undef, $revoked) = split /:/; @@ -212,7 +210,8 @@ sub callDialog { 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; $_ } ; wait; @@ -230,14 +229,14 @@ sub selectKeys { $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'; } }; @@ -245,7 +244,7 @@ sub selectKeys { if ( $frontend eq 'dialog' ) { calcDialogSize; my @ARGS = ( - $Dialog, + 'dialog', '--backtitle', $BACKTITLE, '--separate-output', @@ -259,7 +258,7 @@ sub selectKeys { } elsif ( $frontend eq 'whiptail' ) { calcDialogSize; my @ARGS = ( - $Whiptail, + 'whiptail', '--backtitle', $BACKTITLE, '--separate-output', @@ -298,7 +297,7 @@ sub importKeys { 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; @@ -343,13 +342,14 @@ sub version { ## 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;