diff --git a/en_US.ISO8859-1/books/handbook/pgpkeys/keyring.pl b/en_US.ISO8859-1/books/handbook/pgpkeys/keyring.pl new file mode 100644 index 0000000000..870e0cc109 --- /dev/null +++ b/en_US.ISO8859-1/books/handbook/pgpkeys/keyring.pl @@ -0,0 +1,82 @@ +#!/usr/bin/perl -w +# +# $FreeBSD$ +# + +use strict; +use Fcntl; +use Getopt::Std; +use vars qw(%KEYS); + +sub add_file($); +sub add_dir($); + +sub add_dir($) { + my $dn = shift; + + local *DIR; + my $ent; + + $dn =~ s|/+|/|g; + $dn =~ s|^(.+)/$|$1|; + opendir(DIR, $dn) + or die("$dn: opendir(): $!\n"); + while ($ent = readdir(DIR)) { + next if ($ent eq "." || $ent eq ".."); + add_file("$dn/$ent"); + } + closedir(DIR); +} + +sub add_file($) { + my $fn = shift; + + local *FILE; + my $line; + my $key; + + if (-d $fn) { + return add_dir($fn); + } + + sysopen(FILE, $fn, O_RDONLY) + or die("$fn: open(): $!\n"); + while () { + if (m'-----BEGIN PGP PUBLIC KEY BLOCK-----$') { + $key = $_; + } elsif (m'^-----END PGP PUBLIC KEY BLOCK-----') { + $key .= $_; + chomp($key); + $KEYS{$key}++ + if defined($key); + $key = undef; + } elsif (defined($key)) { + $key .= $_; + } + } +} + +sub usage() { + + print(STDERR "Usage: keyring [-o outfile] [dir|file] ...\n"); +} + +MAIN:{ + my %opts; + + getopts('o:', \%opts) + or usage(); + + if ($opts{'o'}) { + sysopen(STDOUT, $opts{'o'}, O_RDWR|O_CREAT|O_TRUNC) + or die("$opts{'o'}: open(): $!\n"); + } + if (!@ARGV) { + add_dir("."); + } else { + while (@ARGV) { + add_file(shift(@ARGV)); + } + } + print(join("\n", sort(keys(%KEYS)))); +}