# * better charset conversion
# * pod documentation
-my $VERSION = '$Rev$';
+my $VERSION = qq$Rev$;
use strict;
use warnings;
my ($fd) = @_;
print $fd <<EOF;
-gpgsigs $VERSION - http://pgp-tools.alioth.debian.org/
+gpgsigs $VERSION- http://pgp-tools.alioth.debian.org/
(c) 2004 Uli Martens <uli\@youam.net>
(c) 2004, 2005 Peter Palfrader <peter\@palfrader.org>
(c) 2004, 2005 Christoph Berg <cb\@df7cb.de>
my ($fromcharset, $charset, $recv_keys);
+Getopt::Long::config('bundling');
GetOptions(
- f => \$fromcharset,
- t => \$charset,
+ '-f=s' => \$fromcharset,
+ '-t=s' => \$charset,
r => \$recv_keys,
help => sub { usage(*STDOUT, 0); },
version => sub { version(*STDOUT); exit 0;},
if (!@mykeys || scalar @ARGV) {
usage(*STDERR, 1);
}
-if (!grep { /^([0-9A-F]{16,16}|[0-9A-F]{8,8})$/ } @mykeys) {
- print STDERR "Invalid keyid given\n";
+foreach my $falsekey (grep { $_ !~ /^([0-9A-F]{16,16}|[0-9A-F]{8,8})$/ } @mykeys) {
+ print STDERR "Invalid keyid $falsekey given\n";
usage(*STDERR, 1);
}
$uid = myrecode($1);
next;
}
- if ( m/^sig:(?:.*?:){3,3}([0-9A-F]{8})([0-9A-F]{8}):(?:.*?:){3,3}(.*):.*?:/ ) {
- $sigs->{$key}->{$uid}->{$1.$2} = $3;
- $sigs->{$key}->{$uid}->{$2} = $3;
+ if ( m/^sig:(?:.*?:){3,3}([0-9A-F]{8})([0-9A-F]{8}):(?:.*?:){5,5}(.*?):/ ) {
+ my $class = $3;
+ if ($class eq '10x') {
+ $class = 'S';
+ } elsif ($class eq '11x') {
+ $class = '1';
+ } elsif ($class eq '12x') {
+ $class = '2';
+ } elsif ($class eq '13x') {
+ $class = '3';
+ } else {
+ $class = 's';
+ };
+ # Handle the case where one UID was signed multiple times
+ # with different signature classes.
+ my $before = $sigs->{$key}->{$uid}->{$1.$2};
+ if (defined $before) {
+ if ($before eq 'S' || $before eq 's') {
+ $sigs->{$key}->{$uid}->{$1.$2} = $class;
+ } elsif ($before < $class) {
+ $sigs->{$key}->{$uid}->{$1.$2} = $class;
+ };
+ } else {
+ $sigs->{$key}->{$uid}->{$1.$2} .= $class;
+ };
+ $sigs->{$key}->{$uid}->{$2} = $sigs->{$key}->{$uid}->{$1.$2}
next;
}
if ( m/^uat:/ ) {
my ($key, $uid) = @_;
if (! defined $sigs->{$key}->{$uid}) {
warn "uid '$uid' not found on key $key\n";
- return '(_)';
+ return '(' . (' ' x @mykeys) . ')';
}
my $r = '(';
foreach my $mykey (@mykeys) {
- $r .= defined $sigs->{$key}->{$uid}->{$mykey} ? "S" : " ";
+ $r .= defined $sigs->{$key}->{$uid}->{$mykey} ? $sigs->{$key}->{$uid}->{$mykey} : ' ';
}
$r .= ')';
return $r;
while (<TXT>) {
$_ = myfromrecode($_);
if (/^MD5 Checksum:/ && defined $MD5) {
- s/_[_ ]+_/$MD5/;
+ s/[_[:xdigit:]][_ [:xdigit:]]+_/$MD5/;
}
if (/^SHA1 Checksum:/ && defined $SHA1) {
- s/_[_ ]+_/$SHA1/;
+ s/[_[:xdigit:]][_ [:xdigit:]]+_/$SHA1/;
}
if ( m/^pub +(?:\d+)[DR]\/([0-9A-F]{8}) [0-9]{4}-[0-9]{2}-[0-9]{2} *(.*)/ ) {
$key = $1;