#! /usr/bin/perl use warnings; use strict; use IO::Dir; use Getopt::Long; my $config = {gpg => 'gpg', }; ($config->{program_name}) = $0 =~/([^\/]+)\s*$/; GetOptions($config,'gpg=s',); $config->{gpg_command} = qq($config->{gpg}); my @keys_to_check = @ARGV; my %got_uid_already; sub _get_unknown_keys { my ($config,$key_id) = @_; my @keys_to_get; my $uid_listing = qx($config->{gpg_command} --with-colons --list-sigs $key_id 2>/dev/null); foreach my $key_record (split(/\n/,$uid_listing)) { next unless $key_record =~ /\:/; my ($record_type,$calculated_trust,$key_length,$algorithm, $full_key_id,$creation_date,$expiration_date,$serial_no, $owner_trust,$user_id,$signature_class,$key_capabilities, $smime_fingerprint,$flag_field, ) = split(/\:/,$key_record); next unless defined $user_id and lc($user_id) eq lc('[User ID not found]'); next if exists $got_uid_already{$full_key_id}; $got_uid_already{$full_key_id} = 1; push @keys_to_get,$full_key_id; } system($config->{gpg_command},'--recv-keys',@keys_to_get); } foreach my $key_id (@keys_to_check) { _get_unknown_keys($config,$key_id); system($config->{gpg_command},'--check-sigs',$key_id); } __END__ # Local Variables: # indent-tabs-mode: nil # cperl-indent-level: 4 # End: