X-Git-Url: https://git.sthu.org/?p=pgp-tools.git;a=blobdiff_plain;f=gpg-key2ps%2Fgpg-key2ps;h=da3231c7dd8f224ac84629af26de5a3250f94018;hp=ca6244f03ffe871595445031f8177a412e2552bc;hb=e69aea6f5797cb54f3748b983ffc977958f347cc;hpb=11e1cae0f008f1a45dcc59ae93618711d0019e1b diff --git a/gpg-key2ps/gpg-key2ps b/gpg-key2ps/gpg-key2ps index ca6244f..da3231c 100755 --- a/gpg-key2ps/gpg-key2ps +++ b/gpg-key2ps/gpg-key2ps @@ -1,76 +1,113 @@ #!/usr/bin/perl -w # # gpg-key2ps: convert a PGP/GnuPG key into paper slips. -# Copyright (C) 2001-2005 Simon Richter and Thijs Kinkhorst +# Copyright (C) 2001-2005 Simon Richter +# Copyright (C) 2005-2007 Thijs Kinkhorst +# Copyright (C) 2005-2008 Christoph Berg # Licenced under the GNU General Public License, # version 2 or later. # # $Id$ use strict; -use Getopt::Std; +use Getopt::Long; my $version = '$Rev$'; $version =~ s/\$Rev:\s*(\d+)\s*\$/$1/; -my $usage = "Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name\n"; -my $keyids = ""; -my $revokestyle="hide"; +my $revokestyle = "hide"; +my $columns = 2; +my $creationdate = scalar(localtime); -if ( $#ARGV < 0 ) { - print $usage; - exit 1; +sub version($) { + my $fd = shift; + print $fd "gpg-key2ps $version - (c) 2001-2008 Simon Richter, Thijs Kinkhorst, Christoph Berg\n"; +} + +sub usage($$) { + my ($fd, $exitcode) = @_; + version ($fd); + print $fd < \$opts->{help}, + '--help' => \$opts->{help}, + '-v' => \$opts->{version}, + '--version' => \$opts->{version}, + '-p=s' => \$opts->{papersize}, + '--paper-size=s' => \$opts->{papersize}, + '-r=s' => \$opts->{revokestyle}, + '--revoked-style=s' => \$opts->{revokestyle}, + '-1' => \$opts->{1}, +)) { + usage(\*STDERR, 1); +} + +if ($opts->{help}) { + usage (\*STDOUT, 0); +} + +if ($opts->{version}) { + version (\*STDOUT); + exit 0; +} + +if ( $opts->{revokestyle} ) { $revokestyle = $opts->{revokestyle}; } +if ( $opts->{papersize} ) { $ENV{'PAPERSIZE'} = $opts->{papersize}; } if ( $revokestyle !~ /^(grey|hide|note|show|strike)$/ ) { - print STDERR "Unknown style \"$revokestyle\". Please use one of\n"; - print STDERR " grey - Print text in grey\n"; - print STDERR " hide - Don't show revoked uids\n"; - print STDERR " note - Add \"(revoked)\"\n"; - print STDERR " show - List revoked uids normally\n"; - print STDERR " strike - Strike through lines\n"; - exit 1; + print STDERR "Unknown revoked-style \"$revokestyle\".\n"; + usage (\*STDERR, 1); } -# determine default papersize through the paperconf tool +if ( $opts->{1} ) { $columns = 1; } + +usage(\*STDERR, 1) unless scalar @ARGV >= 1; + +# determine the paper size through the paperconf tool my $w; my $h; -if ( -x "/usr/bin/paperconf" ) { +if ( `which paperconf` && $? == 0 ) { $w=`paperconf -w`; $h=`paperconf -h`; chomp($w); chomp($h); } else { # Default to A4. + print STDERR "Warning: libpaper-utils is not installed, defaulting to A4.\n"; $w=596; $h=842; } -# check if key exists -# can't check that accurately through the 'open' call below -# so have to run gpg twice). Please supply a better way. -if ( system( "gpg --fingerprint $keyids >/dev/null" ) != 0 ) { - print STDERR "Key not found. Try 'gpg --list-keys'\n"; - exit 1; -} - # open a gpg process we'll be reading from below -open(GPG, "gpg --fingerprint --with-colons $keyids |"); +map { s/'/'\\''/g; } @ARGV; # quote single quotes +# --list-key due to #382794 +open(GPG, "gpg --list-key --with-fingerprint --with-colons '". (join "' '", @ARGV) ."' |"); +sub start_postscript { # start the PostScript output print <) { # we don't use these if ( /^(tru|uat):/ ) { next; } # every primary uid causes an extra line because of the separator - if ( /^pub:/ ) { $numlines++; } + if ( /^pub:/ ) { + start_postscript() unless $started; + $started = 1; + $numlines++; + } # primary uid s/^pub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:([^:]*):[^:]*:[^:]*:.*/ ($5) ($4) ($3) $2 ($1) pub/; # fingerprint, format it nicely with spaces @@ -183,38 +246,47 @@ while() { $fpr =~ s/(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})/$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16/g; $_ = " ($fpr) fpr\n"; } - # user id's - s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; + # user ids + s/\\x([0-9a-f][0-9a-f])/ chr(hex($1)) /gie; + $_ = `echo "$_" | iconv -ct latin1`; s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; # revoked user id - s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/; + if (s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/) { + next if $revokestyle eq "hide"; + } # subkey - s/^sub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/; + s/^sub:[^r:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/; + if (s/^sub:r[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) revsbk/) { + next if $revokestyle eq "hide"; + } $numlines++; # print this line print; } close(GPG); +unless ($started) { + print STDERR "No public key found.\n"; + exit 1; +} + # output the remaining postscript print < - generates a PS file from a GnuPG keyring =head1 SYNOPSIS -B [-r I] [-p I] II<[> I I<...>I<]>>I<]> +B [B<-r> I] [B<-p> I] I [ I<...> ] =head1 DESCRIPTION @@ -256,37 +336,62 @@ The PS data is written to stdout. =over -=item -p I +=item B<-p> B<--paper-size> I Select the output paper size. Default is to look into /etc/papersize or A4 if libpaper isn't installed. -=item -r I +=item B<-r> B<--revoked-style> I -Select how to mark revoked UIDs. Five styles are available: -B (don't show at all), -B (show normally), -B (display in 50% grey), -B (add a note), and -B (strike through). +Select how to mark revoked UIDs and subkeys. Five styles are available: + B don't show at all (default), + B show normally, + B display in 50% grey, + B add "[revoked]", and + B strike through. =item I -Keyid's to print. Multiple can be separated by spaces. +Keyids to print. Multiple can be separated by spaces. +=item B<-h> B<--help> -=back +Print usage and exit. +=item B<-v> B<--version> + +Print version and exit. + +=back =head1 SEE ALSO -gpg(1) +=over + +=item gpg(1) + +GNU Privacy Guard. -http://pgp-tools.alioth.debian.org/ +=item http://pgp-tools.alioth.debian.org/ + +The homepage of B and the other tools bundled in B. + +=item http://www.debian.org/events/materials/business-cards/ + +B prints plain fingerprint slips. If you are looking for something +more stylish, look at these latex templates for business cards that also +include fingerprints. + +=back =head1 AUTHORS AND COPYRIGHT -(c) 2001 - 2005 Simon Richter +=over + +=item (c) 2001-2005 Simon Richter -(c) 2005 Thijs Kinkhorst +=item (c) 2005-2007 Thijs Kinkhorst +=item (c) 2005-2008 Christoph Berg + +=back