X-Git-Url: https://git.sthu.org/?a=blobdiff_plain;f=caff%2Fpgp-fixkey;h=48d47be19e717b581ea0c41822fb527eed90cd78;hb=8542119444e2f6ea5fe122434f4e6fca0ad41209;hp=903b97b55c0eed850ab5bba70e1a5d2604bc371a;hpb=adc4d76614a11e684f0a0b43270f87366766cab8;p=pgp-tools.git diff --git a/caff/pgp-fixkey b/caff/pgp-fixkey index 903b97b..48d47be 100755 --- a/caff/pgp-fixkey +++ b/caff/pgp-fixkey @@ -1,7 +1,7 @@ #!/usr/bin/perl -w -# caff -- CA - Fire and Forget -# $Id: caff 37 2005-02-28 23:20:15Z weasel $ +# pgp-fixkey -- remove broken packets from keys +# $Id$ # # Copyright (c) 2004, 2005 Peter Palfrader # @@ -85,7 +85,7 @@ use Fcntl; use IO::Select; use GnuPG::Interface; -my $REVISION = '$Rev: 37 $'; +my $REVISION = '$Rev$'; my ($REVISION_NUMER) = $REVISION =~ /(\d+)/; my $VERSION = "0.0.0.$REVISION_NUMER"; @@ -262,10 +262,12 @@ if (scalar @KEYIDS == 0) { if ($type eq 'pub') { $thiskey = $keyid; debug("Found key $thiskey"); + } elsif (!defined $thiskey) { + next; } elsif ($type eq 'sig' || $type eq 'rev') { - if (($keyid eq '0' x 16) && ($created == 0)) { - push @KEYIDS, $thiskey if defined $thiskey; - info("Adding $thiskey"); + if (($keyid eq '0' x 16) || ($created eq "") || ($created == 0)) { + push @KEYIDS, $thiskey; + info("Key $thiskey needs cleaning."); $thiskey = undef; }; }; @@ -289,6 +291,10 @@ for my $keyid (@KEYIDS) { }; my $keyinfo = $stdout; my @publine = grep { /^pub/ } (split /\n/, $stdout); + if ($#publine < 0) { + warn ("No public key found for $keyid.\n"); + next; + } my (undef, undef, undef, undef, $longkeyid, undef, undef, undef, undef, undef, undef, $flags) = split /:/, pop @publine; my $can_encrypt = $flags =~ /E/; unless (defined $longkeyid) { @@ -353,8 +359,8 @@ for my $keyid (@KEYIDS) { if (defined $line) { # only if we found a sig here - we never remove revocation packets for instance debug("[sigremoval] doing line $line."); my (undef, undef, undef, undef, $signer, $created, undef, undef, undef) = split /:/, $line; - if ($signer eq ('0' x 16)) { - debug("[sigremoval] not interested in that sig ($signer)."); + if (($signer eq '0' x 16) || ($created == 0)) { + debug("[sigremoval] not interested in that sig ($signer, created: $created)."); $answer = "yes"; }; } else {