From: kink-guest Date: Sat, 13 Aug 2005 16:24:43 +0000 (+0000) Subject: Reimplement gpg-key2ps in perl. Didn't seem to be so difficult. X-Git-Url: https://git.sthu.org/?a=commitdiff_plain;h=2d69c06eb060ddb74a79a6f0aefaacf1fa051b1b;p=pgp-tools.git Reimplement gpg-key2ps in perl. Didn't seem to be so difficult. Functional changes: * Doesn't use tempfiles, reads from gpg process directly * Doesn't exit anymore on key-not-found, this is the single regression, but I have to leave now. Feel free to fix. git-svn-id: svn://svn.debian.org/pgp-tools/trunk@171 b513b33f-fedd-0310-b452-c3deb5f4c849 --- diff --git a/gpg-key2ps/gpg-key2ps b/gpg-key2ps/gpg-key2ps index 0d370e3..4186ba0 100755 --- a/gpg-key2ps/gpg-key2ps +++ b/gpg-key2ps/gpg-key2ps @@ -1,95 +1,57 @@ -#! /bin/sh +#!/usr/bin/perl # # gpg-key2ps: convert a PGP/GnuPG key into paper slips. # # $Id$ -set -e - -VERSION='$Rev$' -USAGE="Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name" - - -if [ -z "$*" ]; then - echo $USAGE - exit 1 -fi - -KEYIDS= -REVOKESTYLE=hide - -while [ -n "$1" ]; do - case "$1" in - -p) - PAPERSIZE=$2 - export PAPERSIZE - shift 2 - ;; - -p*) - PAPERSIZE=`echo $1 | sed -e 's/^-p//'` - export PAPERSIZE - shift 1 - ;; - -r) - REVOKESTYLE=$2 - shift 2 - ;; - -r*) - REVOKESTYLE=`echo $1 | sed -e 's/^-r//'` - shift 1 - ;; - -*) - echo $USAGE - exit 1 - ;; - *) - KEYIDS=$1 - shift 1 - ;; - esac -done - -case "$REVOKESTYLE" in -grey|hide|note|show|strike) - ;; -*) - echo >&2 "Unknown style \"$REVOKESTYLE\". Please use one of" - echo >&2 " grey - Print text in grey" - echo >&2 " hide - Don't show revoked uids" - echo >&2 " note - Add \"(revoked)\"" - echo >&2 " show - List revoked uids normally" - echo >&2 " strike - Strike through lines" - exit 1 - ;; -esac - -TMPFILE=`mktemp -t gpg-key2ps.XXXXXX` - -if ! gpg --fingerprint --with-colons $KEYIDS 2>/dev/null >$TMPFILE; then - echo >&2 "Key not found. Try 'gpg --list-keys'" - rm $TMPFILE - exit 1 -fi - -NUMLINES=$((`wc -l <$TMPFILE` + `grep '^pub:' $TMPFILE | wc -l` - 1)) - -if test -x /usr/bin/paperconf; then - w=`paperconf -w` - h=`paperconf -h` -else +$version = '$Rev$'; +$version =~ s/\$Rev:\s*(\d+)\s*\$/$1/; +$usage = "Usage: $0 [-p papersize] [-r revoked-style] keyid-or-name\n"; +$keyids = ""; +$revokestyle="hide"; + +if ( $#ARGV < 0 ) { + print $usage; + exit 1; +} + +use Getopt::Std; +getopt('pr', \%opts); +if ( $opts{r} ) { $revokestyle = $opts{'r'}; } +if ( $opts{p} ) { $ENV{'PAPERSIZE'} = $opts{'p'}; } +foreach (@ARGV) { $keyids .= $_ . " "; } + +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; +} + +if ( -x "/usr/bin/paperconf" ) { + $w=`paperconf -w`; + $h=`paperconf -h`; + chomp($w); + chomp($h); +} else { # Default to A4. - w=596 - h=842 -fi + $w=596; + $h=842; +} -cat <) { + if ( /^(tru|uat):/ ) { next; } + if ( /^pub:/ ) { $numlines++; } + s/^pub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:([^:]*):[^:]*:[^:]*:.*/ ($5) ($4) ($3) $2 ($1) pub/; + if ( /^fpr:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ) { + $fpr = $1; + # v4 key + $fpr =~ s/(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})/$1 $2 $3 $4 $5 $6 $7 $8 $9 $10/; + # v3 key + $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"; + } + s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; + s/^uid:[^:r]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) uid/; + s/^uid:r[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^:]*):.*/ ($1) revuid/; + s/^sub:[^:]*:([^:]*):([0-9]*):.{8,8}(.{8,8}):([^:]*):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:.*/ ($4) ($3) $2 ($1) sbk/; + $numlines++; + print; +} +$numlines -= 1; + +close(GPG); + +print <