X-Git-Url: http://git.sthu.org/?a=blobdiff_plain;f=gpgsigs%2Fgpgsigs;h=35d6d71f2c5348b7e9406faa713b1c0e1cf6667b;hb=d5571c62a48a210e691a7864a70b9c2bf3890336;hp=0caf08f68f730bcd8246b4686bb9545468df93ff;hpb=d90154fd1046ab7aaf6cb3d3c316e857887a0ade;p=pgp-tools.git diff --git a/gpgsigs/gpgsigs b/gpgsigs/gpgsigs index 0caf08f..35d6d71 100755 --- a/gpgsigs/gpgsigs +++ b/gpgsigs/gpgsigs @@ -59,9 +59,10 @@ EOF 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;}, @@ -142,8 +143,8 @@ map { s/^0x//i; } @mykeys; 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); } @@ -195,8 +196,21 @@ while () { } else { $class = 's'; }; - $sigs->{$key}->{$uid}->{$1.$2} = $class; - $sigs->{$key}->{$uid}->{$2} = $class; + # 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 ($class eq 'S' || $class eq 's') { + # intentionall left blank + } 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:/ ) { @@ -247,10 +261,14 @@ sub print_tag return $r; } +$key = undef; +$uid = undef; +my $line = 0; print STDERR "Annotating $keytxt, writing into $outfile\n"; open (TXT, $keytxt) or die ("Cannot open $keytxt\n"); open (WRITE, '>'.$outfile) or die ("Cannot open $outfile for writing\n"); while () { + $line++; $_ = myfromrecode($_); if (/^MD5 Checksum:/ && defined $MD5) { s/[_[:xdigit:]][_ [:xdigit:]]+_/$MD5/; @@ -268,7 +286,10 @@ while () { } if ( m/^uid +(.*)$/ ) { $uid = $1; - die "key is undefined" unless defined $key; + unless (defined $key) { + warn "key is undefined - input text is possibly malformed near line $line\n"; + next; + }; die "uid is undefined, key $key" unless defined $uid; die "bad tag from $key | $uid" unless defined (print_tag($key, $uid)); print WRITE print_tag($key, $uid) . " $_";