aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keylist.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/keylist.c')
-rw-r--r--g10/keylist.c2400
1 files changed, 1242 insertions, 1158 deletions
diff --git a/g10/keylist.c b/g10/keylist.c
index 4a76ee065..460e889b2 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -1,6 +1,6 @@
-/* keylist.c - print keys
+/* keylist.c - Print information about OpenPGP keys
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- * 2008 Free Software Foundation, Inc.
+ * 2008, 2010 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@@ -25,7 +25,7 @@
#include <errno.h>
#include <assert.h>
#ifdef HAVE_DOSISH_SYSTEM
-#include <fcntl.h> /* for setmode() */
+#include <fcntl.h> /* for setmode() */
#endif
#include "gpg.h"
@@ -41,10 +41,10 @@
#include "i18n.h"
#include "status.h"
-static void list_all(int);
-static void list_one( strlist_t names, int secret);
+static void list_all (int);
+static void list_one (strlist_t names, int secret);
static void locate_one (strlist_t names);
-static void print_card_serialno (PKT_secret_key *sk);
+static void print_card_serialno (PKT_secret_key * sk);
struct sig_stats
{
@@ -56,47 +56,47 @@ struct sig_stats
/* The stream used to write attribute packets to. */
static FILE *attrib_fp = NULL;
-/****************
- * List the keys
- * If list is NULL, all available keys are listed
- */
+
+/* List the keys. If list is NULL, all available keys are listed.
+ With LOCATE_MODE set the locate algorithm is used to find a
+ key. */
void
-public_key_list( strlist_t list, int locate_mode )
+public_key_list (strlist_t list, int locate_mode)
{
if (opt.with_colons)
{
- byte trust_model,marginals,completes,cert_depth;
- ulong created,nextcheck;
+ byte trust_model, marginals, completes, cert_depth;
+ ulong created, nextcheck;
- read_trust_options(&trust_model,&created,&nextcheck,
- &marginals,&completes,&cert_depth);
+ read_trust_options (&trust_model, &created, &nextcheck,
+ &marginals, &completes, &cert_depth);
- printf("tru:");
+ printf ("tru:");
- if(nextcheck && nextcheck <= make_timestamp())
- printf("o");
- if(trust_model!=opt.trust_model)
- printf("t");
- if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC)
+ if (nextcheck && nextcheck <= make_timestamp ())
+ printf ("o");
+ if (trust_model != opt.trust_model)
+ printf ("t");
+ if (opt.trust_model == TM_PGP || opt.trust_model == TM_CLASSIC)
{
- if(marginals!=opt.marginals_needed)
- printf("m");
- if(completes!=opt.completes_needed)
- printf("c");
- if(cert_depth!=opt.max_cert_depth)
- printf("d");
+ if (marginals != opt.marginals_needed)
+ printf ("m");
+ if (completes != opt.completes_needed)
+ printf ("c");
+ if (cert_depth != opt.max_cert_depth)
+ printf ("d");
}
- printf(":%d:%lu:%lu",trust_model,created,nextcheck);
+ printf (":%d:%lu:%lu", trust_model, created, nextcheck);
/* Only show marginals, completes, and cert_depth in the classic
- or PGP trust models since they are not meaningful
- otherwise. */
+ or PGP trust models since they are not meaningful
+ otherwise. */
- if(trust_model==TM_PGP || trust_model==TM_CLASSIC)
- printf(":%d:%d:%d",marginals,completes,cert_depth);
+ if (trust_model == TM_PGP || trust_model == TM_CLASSIC)
+ printf (":%d:%d:%d", marginals, completes, cert_depth);
- printf("\n");
+ printf ("\n");
}
/* We need to do the stale check right here because it might need to
@@ -116,38 +116,38 @@ public_key_list( strlist_t list, int locate_mode )
void
-secret_key_list( strlist_t list )
+secret_key_list (strlist_t list)
{
- check_trustdb_stale ();
+ check_trustdb_stale ();
- if( !list )
- list_all(1);
- else /* List by user id */
- list_one( list, 1 );
+ if (!list)
+ list_all (1);
+ else /* List by user id */
+ list_one (list, 1);
}
void
-print_seckey_info (PKT_secret_key *sk)
+print_seckey_info (PKT_secret_key * sk)
{
u32 keyid[2];
char *p;
keyid_from_sk (sk, keyid);
- p=get_user_id_native(keyid);
+ p = get_user_id_native (keyid);
tty_printf ("\nsec %4u%c/%s %s %s\n",
nbits_from_sk (sk),
pubkey_letter (sk->pubkey_algo),
- keystr(keyid), datestr_from_sk (sk), p);
-
+ keystr (keyid), datestr_from_sk (sk), p);
+
xfree (p);
}
/* Print information about the public key. With FP passed as NULL,
the tty output interface is used, otherwise output is directted to
- the given stream. */
+ the given stream. */
void
-print_pubkey_info (FILE *fp, PKT_public_key *pk)
+print_pubkey_info (FILE * fp, PKT_public_key * pk)
{
u32 keyid[2];
char *p;
@@ -155,135 +155,138 @@ print_pubkey_info (FILE *fp, PKT_public_key *pk)
keyid_from_pk (pk, keyid);
/* If the pk was chosen by a particular user ID, that is the one to
- print. */
- if(pk->user_id)
- p=utf8_to_native(pk->user_id->name,pk->user_id->len,0);
+ print. */
+ if (pk->user_id)
+ p = utf8_to_native (pk->user_id->name, pk->user_id->len, 0);
else
- p=get_user_id_native(keyid);
+ p = get_user_id_native (keyid);
if (fp)
fprintf (fp, "pub %4u%c/%s %s %s\n",
- nbits_from_pk (pk),
- pubkey_letter (pk->pubkey_algo),
- keystr(keyid), datestr_from_pk (pk), p);
+ nbits_from_pk (pk),
+ pubkey_letter (pk->pubkey_algo),
+ keystr (keyid), datestr_from_pk (pk), p);
else
tty_printf ("\npub %4u%c/%s %s %s\n",
- nbits_from_pk (pk), pubkey_letter (pk->pubkey_algo),
- keystr(keyid), datestr_from_pk (pk), p);
+ nbits_from_pk (pk), pubkey_letter (pk->pubkey_algo),
+ keystr (keyid), datestr_from_pk (pk), p);
xfree (p);
}
/* Print basic information of a secret key including the card serial
- number information. */
+ number information. */
void
-print_card_key_info (FILE *fp, KBNODE keyblock)
+print_card_key_info (FILE * fp, KBNODE keyblock)
{
KBNODE node;
int i;
- for (node = keyblock; node; node = node->next )
+ for (node = keyblock; node; node = node->next)
{
if (node->pkt->pkttype == PKT_SECRET_KEY
- || (node->pkt->pkttype == PKT_SECRET_SUBKEY) )
- {
- PKT_secret_key *sk = node->pkt->pkt.secret_key;
-
- tty_fprintf (fp, "%s%c %4u%c/%s ",
- node->pkt->pkttype == PKT_SECRET_KEY? "sec":"ssb",
- (sk->protect.s2k.mode==1001)?'#':
- (sk->protect.s2k.mode==1002)?'>':' ',
+ || (node->pkt->pkttype == PKT_SECRET_SUBKEY))
+ {
+ PKT_secret_key *sk = node->pkt->pkt.secret_key;
+
+ tty_fprintf (fp, "%s%c %4u%c/%s ",
+ node->pkt->pkttype == PKT_SECRET_KEY ? "sec" : "ssb",
+ (sk->protect.s2k.mode == 1001) ? '#' :
+ (sk->protect.s2k.mode == 1002) ? '>' : ' ',
nbits_from_sk (sk),
- pubkey_letter (sk->pubkey_algo),
- keystr_from_sk(sk));
- tty_fprintf (fp, _("created: %s"), datestr_from_sk (sk));
- tty_fprintf (fp, " ");
- tty_fprintf (fp, _("expires: %s"), expirestr_from_sk (sk));
- if (sk->is_protected && sk->protect.s2k.mode == 1002)
- {
- tty_fprintf (fp, "\n ");
- tty_fprintf (fp, _("card-no: "));
- if (sk->protect.ivlen == 16
- && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6))
- {
- /* This is an OpenPGP card. */
- for (i=8; i < 14; i++)
- {
- if (i == 10)
- tty_fprintf (fp, " ");
- tty_fprintf (fp, "%02X", sk->protect.iv[i]);
- }
- }
- else
- { /* Something is wrong: Print all. */
- for (i=0; i < sk->protect.ivlen; i++)
- tty_fprintf (fp, "%02X", sk->protect.iv[i]);
- }
- }
- tty_fprintf (fp, "\n");
- }
+ pubkey_letter (sk->pubkey_algo), keystr_from_sk (sk));
+ tty_fprintf (fp, _("created: %s"), datestr_from_sk (sk));
+ tty_fprintf (fp, " ");
+ tty_fprintf (fp, _("expires: %s"), expirestr_from_sk (sk));
+ if (sk->is_protected && sk->protect.s2k.mode == 1002)
+ {
+ tty_fprintf (fp, "\n ");
+ tty_fprintf (fp, _("card-no: "));
+ if (sk->protect.ivlen == 16
+ && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6))
+ {
+ /* This is an OpenPGP card. */
+ for (i = 8; i < 14; i++)
+ {
+ if (i == 10)
+ tty_fprintf (fp, " ");
+ tty_fprintf (fp, "%02X", sk->protect.iv[i]);
+ }
+ }
+ else
+ {
+ /* Something is wrong: Print all. */
+ for (i = 0; i < sk->protect.ivlen; i++)
+ tty_fprintf (fp, "%02X", sk->protect.iv[i]);
+ }
+ }
+ tty_fprintf (fp, "\n");
+ }
}
}
-/* Flags = 0x01 hashed 0x02 critical */
+/* Flags = 0x01 hashed 0x02 critical. */
static void
-status_one_subpacket(sigsubpkttype_t type,size_t len,int flags,const byte *buf)
+status_one_subpacket (sigsubpkttype_t type, size_t len, int flags,
+ const byte * buf)
{
char status[40];
/* Don't print these. */
- if(len>256)
+ if (len > 256)
return;
- sprintf(status,"%d %u %u ",type,flags,(unsigned int)len);
+ sprintf (status, "%d %u %u ", type, flags, (unsigned int) len);
- write_status_text_and_buffer(STATUS_SIG_SUBPACKET,status,buf,len,0);
+ write_status_text_and_buffer (STATUS_SIG_SUBPACKET, status, buf, len, 0);
}
-/*
- mode=0 for stdout.
- mode=1 for log_info + status messages
- mode=2 for status messages only
-*/
+/* Print a policy URL. Allowed values for MODE are:
+ * 0 - print to stdout.
+ * 1 - use log_info and emit status messages.
+ * 2 - emit only status messages.
+ */
void
-show_policy_url(PKT_signature *sig,int indent,int mode)
+show_policy_url (PKT_signature * sig, int indent, int mode)
{
const byte *p;
size_t len;
- int seq=0,crit;
- FILE *fp=mode?log_get_stream():stdout;
+ int seq = 0, crit;
+ FILE *fp = mode ? log_get_stream () : stdout;
- while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&len,&seq,&crit)))
+ while ((p =
+ enum_sig_subpkt (sig->hashed, SIGSUBPKT_POLICY, &len, &seq, &crit)))
{
- if(mode!=2)
+ if (mode != 2)
{
int i;
const char *str;
- for(i=0;i<indent;i++)
- putchar(' ');
+ for (i = 0; i < indent; i++)
+ putchar (' ');
- if(crit)
- str=_("Critical signature policy: ");
+ if (crit)
+ str = _("Critical signature policy: ");
else
- str=_("Signature policy: ");
- if(mode)
- log_info("%s",str);
+ str = _("Signature policy: ");
+ if (mode)
+ log_info ("%s", str);
else
- printf("%s",str);
- print_utf8_string(fp,p,len);
- fprintf(fp,"\n");
+ printf ("%s", str);
+ print_utf8_string (fp, p, len);
+ fprintf (fp, "\n");
}
- if(mode)
- write_status_buffer ( STATUS_POLICY_URL, p, len, 0 );
+ if (mode)
+ write_status_buffer (STATUS_POLICY_URL, p, len, 0);
}
}
+
/*
mode=0 for stdout.
mode=1 for log_info + status messages
@@ -291,37 +294,40 @@ show_policy_url(PKT_signature *sig,int indent,int mode)
*/
/* TODO: use this */
void
-show_keyserver_url(PKT_signature *sig,int indent,int mode)
+show_keyserver_url (PKT_signature * sig, int indent, int mode)
{
const byte *p;
size_t len;
- int seq=0,crit;
- FILE *fp=mode?log_get_stream():stdout;
+ int seq = 0, crit;
+ FILE *fp = mode ? log_get_stream () : stdout;
- while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_PREF_KS,&len,&seq,&crit)))
+ while ((p =
+ enum_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_KS, &len, &seq,
+ &crit)))
{
- if(mode!=2)
+ if (mode != 2)
{
int i;
const char *str;
- for(i=0;i<indent;i++)
- putchar(' ');
+ for (i = 0; i < indent; i++)
+ putchar (' ');
- if(crit)
- str=_("Critical preferred keyserver: ");
+ if (crit)
+ str = _("Critical preferred keyserver: ");
else
- str=_("Preferred keyserver: ");
- if(mode)
- log_info("%s",str);
+ str = _("Preferred keyserver: ");
+ if (mode)
+ log_info ("%s", str);
else
- printf("%s",str);
- print_utf8_string(fp,p,len);
- fprintf(fp,"\n");
+ printf ("%s", str);
+ print_utf8_string (fp, p, len);
+ fprintf (fp, "\n");
}
- if(mode)
- status_one_subpacket(SIGSUBPKT_PREF_KS,len,(crit?0x02:0)|0x01,p);
+ if (mode)
+ status_one_subpacket (SIGSUBPKT_PREF_KS, len,
+ (crit ? 0x02 : 0) | 0x01, p);
}
}
@@ -330,209 +336,223 @@ show_keyserver_url(PKT_signature *sig,int indent,int mode)
mode=1 for log_info + status messages
mode=2 for status messages only
- which bits:
- 1 == standard notations
- 2 == user notations
+ Defined bits in WHICH:
+ 1 == standard notations
+ 2 == user notations
*/
-
void
-show_notation(PKT_signature *sig,int indent,int mode,int which)
+show_notation (PKT_signature * sig, int indent, int mode, int which)
{
- FILE *fp=mode?log_get_stream():stdout;
- struct notation *nd,*notations;
+ FILE *fp = mode ? log_get_stream () : stdout;
+ struct notation *nd, *notations;
- if(which==0)
- which=3;
+ if (which == 0)
+ which = 3;
- notations=sig_to_notation(sig);
+ notations = sig_to_notation (sig);
/* There may be multiple notations in the same sig. */
- for(nd=notations;nd;nd=nd->next)
+ for (nd = notations; nd; nd = nd->next)
{
- if(mode!=2)
+ if (mode != 2)
{
- int has_at=!!strchr(nd->name,'@');
+ int has_at = !!strchr (nd->name, '@');
- if((which&1 && !has_at) || (which&2 && has_at))
+ if ((which & 1 && !has_at) || (which & 2 && has_at))
{
int i;
const char *str;
- for(i=0;i<indent;i++)
- putchar(' ');
+ for (i = 0; i < indent; i++)
+ putchar (' ');
- if(nd->flags.critical)
- str=_("Critical signature notation: ");
+ if (nd->flags.critical)
+ str = _("Critical signature notation: ");
else
- str=_("Signature notation: ");
- if(mode)
- log_info("%s",str);
+ str = _("Signature notation: ");
+ if (mode)
+ log_info ("%s", str);
else
- printf("%s",str);
+ printf ("%s", str);
/* This is all UTF8 */
- print_utf8_string(fp,nd->name,strlen(nd->name));
- fprintf(fp,"=");
- print_utf8_string(fp,nd->value,strlen(nd->value));
- fprintf(fp,"\n");
+ print_utf8_string (fp, nd->name, strlen (nd->name));
+ fprintf (fp, "=");
+ print_utf8_string (fp, nd->value, strlen (nd->value));
+ fprintf (fp, "\n");
}
}
- if(mode)
+ if (mode)
{
- write_status_buffer(STATUS_NOTATION_NAME,
- nd->name,strlen(nd->name),0);
- write_status_buffer(STATUS_NOTATION_DATA,
- nd->value,strlen(nd->value),50);
+ write_status_buffer (STATUS_NOTATION_NAME,
+ nd->name, strlen (nd->name), 0);
+ write_status_buffer (STATUS_NOTATION_DATA,
+ nd->value, strlen (nd->value), 50);
}
}
- free_notation(notations);
+ free_notation (notations);
}
static void
-print_signature_stats(struct sig_stats *s)
+print_signature_stats (struct sig_stats *s)
{
- if( s->inv_sigs == 1 )
- tty_printf(_("1 bad signature\n") );
- else if( s->inv_sigs )
- tty_printf(_("%d bad signatures\n"), s->inv_sigs );
- if( s->no_key == 1 )
- tty_printf(_("1 signature not checked due to a missing key\n") );
- else if( s->no_key )
- tty_printf(_("%d signatures not checked due to missing keys\n"),s->no_key);
- if( s->oth_err == 1 )
- tty_printf(_("1 signature not checked due to an error\n") );
- else if( s->oth_err )
- tty_printf(_("%d signatures not checked due to errors\n"), s->oth_err );
+ if (s->inv_sigs == 1)
+ tty_printf (_("1 bad signature\n"));
+ else if (s->inv_sigs)
+ tty_printf (_("%d bad signatures\n"), s->inv_sigs);
+ if (s->no_key == 1)
+ tty_printf (_("1 signature not checked due to a missing key\n"));
+ else if (s->no_key)
+ tty_printf (_("%d signatures not checked due to missing keys\n"),
+ s->no_key);
+ if (s->oth_err == 1)
+ tty_printf (_("1 signature not checked due to an error\n"));
+ else if (s->oth_err)
+ tty_printf (_("%d signatures not checked due to errors\n"), s->oth_err);
}
static void
-list_all( int secret )
+list_all (int secret)
{
- KEYDB_HANDLE hd;
- KBNODE keyblock = NULL;
- int rc=0;
- const char *lastresname, *resname;
- struct sig_stats stats;
-
- memset(&stats,0,sizeof(stats));
-
- hd = keydb_new (secret);
- if (!hd)
- rc = G10ERR_GENERAL;
- else
- rc = keydb_search_first (hd);
- if( rc ) {
- if( rc != -1 )
- log_error("keydb_search_first failed: %s\n", g10_errstr(rc) );
- goto leave;
+ KEYDB_HANDLE hd;
+ KBNODE keyblock = NULL;
+ int rc = 0;
+ const char *lastresname, *resname;
+ struct sig_stats stats;
+
+ memset (&stats, 0, sizeof (stats));
+
+ hd = keydb_new (secret);
+ if (!hd)
+ rc = G10ERR_GENERAL;
+ else
+ rc = keydb_search_first (hd);
+ if (rc)
+ {
+ if (rc != -1)
+ log_error ("keydb_search_first failed: %s\n", g10_errstr (rc));
+ goto leave;
}
- lastresname = NULL;
- do {
- rc = keydb_get_keyblock (hd, &keyblock);
- if (rc) {
- log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc));
- goto leave;
- }
- if(!opt.with_colons)
- {
- resname = keydb_get_resource_name (hd);
- if (lastresname != resname )
- {
- int i;
-
- printf("%s\n", resname );
- for(i=strlen(resname); i; i-- )
- putchar('-');
- putchar('\n');
- lastresname = resname;
- }
- }
- merge_keys_and_selfsig( keyblock );
- list_keyblock( keyblock, secret, opt.fingerprint,
- opt.check_sigs?&stats:NULL);
- release_kbnode( keyblock );
- keyblock = NULL;
- } while (!(rc = keydb_search_next (hd)));
- if( rc && rc != -1 )
- log_error ("keydb_search_next failed: %s\n", g10_errstr(rc));
-
- if(opt.check_sigs && !opt.with_colons)
- print_signature_stats(&stats);
-
- leave:
- release_kbnode (keyblock);
- keydb_release (hd);
+ lastresname = NULL;
+ do
+ {
+ rc = keydb_get_keyblock (hd, &keyblock);
+ if (rc)
+ {
+ log_error ("keydb_get_keyblock failed: %s\n", g10_errstr (rc));
+ goto leave;
+ }
+ if (!opt.with_colons)
+ {
+ resname = keydb_get_resource_name (hd);
+ if (lastresname != resname)
+ {
+ int i;
+
+ printf ("%s\n", resname);
+ for (i = strlen (resname); i; i--)
+ putchar ('-');
+ putchar ('\n');
+ lastresname = resname;
+ }
+ }
+ merge_keys_and_selfsig (keyblock);
+ list_keyblock (keyblock, secret, opt.fingerprint,
+ opt.check_sigs ? &stats : NULL);
+ release_kbnode (keyblock);
+ keyblock = NULL;
+ }
+ while (!(rc = keydb_search_next (hd)));
+ if (rc && rc != -1)
+ log_error ("keydb_search_next failed: %s\n", g10_errstr (rc));
+
+ if (opt.check_sigs && !opt.with_colons)
+ print_signature_stats (&stats);
+
+leave:
+ release_kbnode (keyblock);
+ keydb_release (hd);
}
static void
-list_one( strlist_t names, int secret )
+list_one (strlist_t names, int secret)
{
- int rc = 0;
- KBNODE keyblock = NULL;
- GETKEY_CTX ctx;
- const char *resname;
- const char *keyring_str = _("Keyring");
- int i;
- struct sig_stats stats;
-
- memset(&stats,0,sizeof(stats));
-
- /* fixme: using the bynames function has the disadvantage that we
- * don't know wether one of the names given was not found. OTOH,
- * this function has the advantage to list the names in the
- * sequence as defined by the keyDB and does not duplicate
- * outputs. A solution could be do test whether all given have
- * been listed (this needs a way to use the keyDB search
- * functions) or to have the search function return indicators for
- * found names. Yet another way is to use the keydb search
- * facilities directly. */
- if( secret ) {
- rc = get_seckey_bynames( &ctx, NULL, names, &keyblock );
- if( rc ) {
- log_error("error reading key: %s\n", g10_errstr(rc) );
- get_seckey_end( ctx );
- return;
+ int rc = 0;
+ KBNODE keyblock = NULL;
+ GETKEY_CTX ctx;
+ const char *resname;
+ const char *keyring_str = _("Keyring");
+ int i;
+ struct sig_stats stats;
+
+ memset (&stats, 0, sizeof (stats));
+
+ /* fixme: using the bynames function has the disadvantage that we
+ * don't know wether one of the names given was not found. OTOH,
+ * this function has the advantage to list the names in the
+ * sequence as defined by the keyDB and does not duplicate
+ * outputs. A solution could be do test whether all given have
+ * been listed (this needs a way to use the keyDB search
+ * functions) or to have the search function return indicators for
+ * found names. Yet another way is to use the keydb search
+ * facilities directly. */
+ if (secret)
+ {
+ rc = get_seckey_bynames (&ctx, NULL, names, &keyblock);
+ if (rc)
+ {
+ log_error ("error reading key: %s\n", g10_errstr (rc));
+ get_seckey_end (ctx);
+ return;
}
- do {
- if ((opt.list_options&LIST_SHOW_KEYRING) && !opt.with_colons) {
- resname = keydb_get_resource_name (get_ctx_handle(ctx));
- printf("%s: %s\n", keyring_str, resname);
- for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- )
- putchar('-');
- putchar('\n');
+ do
+ {
+ if ((opt.list_options & LIST_SHOW_KEYRING) && !opt.with_colons)
+ {
+ resname = keydb_get_resource_name (get_ctx_handle (ctx));
+ printf ("%s: %s\n", keyring_str, resname);
+ for (i = strlen (resname) + strlen (keyring_str) + 2; i; i--)
+ putchar ('-');
+ putchar ('\n');
}
- list_keyblock( keyblock, 1, opt.fingerprint, NULL );
- release_kbnode( keyblock );
- } while( !get_seckey_next( ctx, NULL, &keyblock ) );
- get_seckey_end( ctx );
+ list_keyblock (keyblock, 1, opt.fingerprint, NULL);
+ release_kbnode (keyblock);
+ }
+ while (!get_seckey_next (ctx, NULL, &keyblock));
+ get_seckey_end (ctx);
}
- else {
- rc = get_pubkey_bynames( &ctx, NULL, names, &keyblock );
- if( rc ) {
- log_error("error reading key: %s\n", g10_errstr(rc) );
- get_pubkey_end( ctx );
- return;
+ else
+ {
+ rc = get_pubkey_bynames (&ctx, NULL, names, &keyblock);
+ if (rc)
+ {
+ log_error ("error reading key: %s\n", g10_errstr (rc));
+ get_pubkey_end (ctx);
+ return;
}
- do {
- if ((opt.list_options&LIST_SHOW_KEYRING) && !opt.with_colons) {
- resname = keydb_get_resource_name (get_ctx_handle(ctx));
- printf("%s: %s\n", keyring_str, resname);
- for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- )
- putchar('-');
- putchar('\n');
+ do
+ {
+ if ((opt.list_options & LIST_SHOW_KEYRING) && !opt.with_colons)
+ {
+ resname = keydb_get_resource_name (get_ctx_handle (ctx));
+ printf ("%s: %s\n", keyring_str, resname);
+ for (i = strlen (resname) + strlen (keyring_str) + 2; i; i--)
+ putchar ('-');
+ putchar ('\n');
}
- list_keyblock( keyblock, 0, opt.fingerprint,
- opt.check_sigs?&stats:NULL );
- release_kbnode( keyblock );
- } while( !get_pubkey_next( ctx, NULL, &keyblock ) );
- get_pubkey_end( ctx );
+ list_keyblock (keyblock, 0, opt.fingerprint,
+ opt.check_sigs ? &stats : NULL);
+ release_kbnode (keyblock);
+ }
+ while (!get_pubkey_next (ctx, NULL, &keyblock));
+ get_pubkey_end (ctx);
}
- if(opt.check_sigs && !opt.with_colons)
- print_signature_stats(&stats);
+ if (opt.check_sigs && !opt.with_colons)
+ print_signature_stats (&stats);
}
@@ -545,542 +565,578 @@ locate_one (strlist_t names)
KBNODE keyblock = NULL;
struct sig_stats stats;
- memset (&stats,0,sizeof(stats));
-
- for (sl=names; sl; sl = sl->next)
+ memset (&stats, 0, sizeof (stats));
+
+ for (sl = names; sl; sl = sl->next)
{
rc = get_pubkey_byname (&ctx, NULL, sl->d, &keyblock, NULL, 1, 0);
if (rc)
- {
- if (gpg_err_code (rc) != GPG_ERR_NO_PUBKEY)
- log_error ("error reading key: %s\n", g10_errstr(rc) );
+ {
+ if (gpg_err_code (rc) != GPG_ERR_NO_PUBKEY)
+ log_error ("error reading key: %s\n", g10_errstr (rc));
}
else
- {
- do
- {
- list_keyblock (keyblock, 0, opt.fingerprint,
- opt.check_sigs? &stats : NULL );
- release_kbnode (keyblock);
- }
- while ( ctx && !get_pubkey_next (ctx, NULL, &keyblock));
- get_pubkey_end (ctx);
- ctx = NULL;
- }
+ {
+ do
+ {
+ list_keyblock (keyblock, 0, opt.fingerprint,
+ opt.check_sigs ? &stats : NULL);
+ release_kbnode (keyblock);
+ }
+ while (ctx && !get_pubkey_next (ctx, NULL, &keyblock));
+ get_pubkey_end (ctx);
+ ctx = NULL;
+ }
}
-
+
if (opt.check_sigs && !opt.with_colons)
print_signature_stats (&stats);
}
static void
-print_key_data( PKT_public_key *pk )
+print_key_data (PKT_public_key * pk)
{
- int n = pk ? pubkey_get_npkey( pk->pubkey_algo ) : 0;
- int i;
-
- for(i=0; i < n; i++ ) {
- printf("pkd:%d:%u:", i, mpi_get_nbits( pk->pkey[i] ) );
- mpi_print(stdout, pk->pkey[i], 1 );
- putchar(':');
- putchar('\n');
+ int n = pk ? pubkey_get_npkey (pk->pubkey_algo) : 0;
+ int i;
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("pkd:%d:%u:", i, mpi_get_nbits (pk->pkey[i]));
+ mpi_print (stdout, pk->pkey[i], 1);
+ putchar (':');
+ putchar ('\n');
}
}
static void
-print_capabilities (PKT_public_key *pk, PKT_secret_key *sk, KBNODE keyblock)
+print_capabilities (PKT_public_key * pk, PKT_secret_key * sk, KBNODE keyblock)
{
- if(pk || (sk && sk->protect.s2k.mode!=1001))
+ if (pk || (sk && sk->protect.s2k.mode != 1001))
{
- unsigned int use = pk? pk->pubkey_usage : sk->pubkey_usage;
+ unsigned int use = pk ? pk->pubkey_usage : sk->pubkey_usage;
int c_printed = 0;
-
- if ( use & PUBKEY_USAGE_ENC )
- putchar ('e');
- if ( use & PUBKEY_USAGE_SIG )
+ if (use & PUBKEY_USAGE_ENC)
+ putchar ('e');
+
+ if (use & PUBKEY_USAGE_SIG)
{
putchar ('s');
- if( pk? pk->is_primary : sk->is_primary )
- {
- putchar ('c');
- /* The PUBKEY_USAGE_CERT flag was introduced later and
- we used to always print 'c' for a primary key. To
- avoid any regression here we better track whether we
- printed 'c' already. */
- c_printed = 1;
- }
+ if (pk ? pk->is_primary : sk->is_primary)
+ {
+ putchar ('c');
+ /* The PUBKEY_USAGE_CERT flag was introduced later and
+ we used to always print 'c' for a primary key. To
+ avoid any regression here we better track whether we
+ printed 'c' already. */
+ c_printed = 1;
+ }
}
- if ( (use & PUBKEY_USAGE_CERT) && !c_printed )
- putchar ('c');
+ if ((use & PUBKEY_USAGE_CERT) && !c_printed)
+ putchar ('c');
- if ( (use & PUBKEY_USAGE_AUTH) )
- putchar ('a');
+ if ((use & PUBKEY_USAGE_AUTH))
+ putchar ('a');
}
- if ( keyblock ) { /* figure out the usable capabilities */
- KBNODE k;
- int enc=0, sign=0, cert=0, auth=0, disabled=0;
-
- for (k=keyblock; k; k = k->next ) {
- if ( k->pkt->pkttype == PKT_PUBLIC_KEY
- || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
- pk = k->pkt->pkt.public_key;
-
- if(pk->is_primary)
- disabled=pk_is_disabled(pk);
-
- if ( pk->is_valid && !pk->is_revoked && !pk->has_expired ) {
- if ( pk->pubkey_usage & PUBKEY_USAGE_ENC )
- enc = 1;
- if ( pk->pubkey_usage & PUBKEY_USAGE_SIG )
- {
- sign = 1;
- if(pk->is_primary)
- cert = 1;
- }
- if ( pk->pubkey_usage & PUBKEY_USAGE_CERT )
- cert = 1;
- if ( (pk->pubkey_usage & PUBKEY_USAGE_AUTH) )
- auth = 1;
- }
- }
- else if ( k->pkt->pkttype == PKT_SECRET_KEY
- || k->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- sk = k->pkt->pkt.secret_key;
- if ( sk->is_valid && !sk->is_revoked && !sk->has_expired
- && sk->protect.s2k.mode!=1001 ) {
- if ( sk->pubkey_usage & PUBKEY_USAGE_ENC )
- enc = 1;
- if ( sk->pubkey_usage & PUBKEY_USAGE_SIG )
- {
- sign = 1;
- if(sk->is_primary)
- cert = 1;
- }
- if ( (sk->pubkey_usage & PUBKEY_USAGE_CERT) )
- cert = 1;
- if ( (sk->pubkey_usage & PUBKEY_USAGE_AUTH) )
- auth = 1;
- }
- }
- }
- if (enc)
- putchar ('E');
- if (sign)
- putchar ('S');
- if (cert)
- putchar ('C');
- if (auth)
- putchar ('A');
- if (disabled)
- putchar ('D');
+ if (keyblock)
+ { /* figure out the usable capabilities */
+ KBNODE k;
+ int enc = 0, sign = 0, cert = 0, auth = 0, disabled = 0;
+
+ for (k = keyblock; k; k = k->next)
+ {
+ if (k->pkt->pkttype == PKT_PUBLIC_KEY
+ || k->pkt->pkttype == PKT_PUBLIC_SUBKEY)
+ {
+ pk = k->pkt->pkt.public_key;
+
+ if (pk->is_primary)
+ disabled = pk_is_disabled (pk);
+
+ if (pk->is_valid && !pk->is_revoked && !pk->has_expired)
+ {
+ if (pk->pubkey_usage & PUBKEY_USAGE_ENC)
+ enc = 1;
+ if (pk->pubkey_usage & PUBKEY_USAGE_SIG)
+ {
+ sign = 1;
+ if (pk->is_primary)
+ cert = 1;
+ }
+ if (pk->pubkey_usage & PUBKEY_USAGE_CERT)
+ cert = 1;
+ if ((pk->pubkey_usage & PUBKEY_USAGE_AUTH))
+ auth = 1;
+ }
+ }
+ else if (k->pkt->pkttype == PKT_SECRET_KEY
+ || k->pkt->pkttype == PKT_SECRET_SUBKEY)
+ {
+ sk = k->pkt->pkt.secret_key;
+ if (sk->is_valid && !sk->is_revoked && !sk->has_expired
+ && sk->protect.s2k.mode != 1001)
+ {
+ if (sk->pubkey_usage & PUBKEY_USAGE_ENC)
+ enc = 1;
+ if (sk->pubkey_usage & PUBKEY_USAGE_SIG)
+ {
+ sign = 1;
+ if (sk->is_primary)
+ cert = 1;
+ }
+ if ((sk->pubkey_usage & PUBKEY_USAGE_CERT))
+ cert = 1;
+ if ((sk->pubkey_usage & PUBKEY_USAGE_AUTH))
+ auth = 1;
+ }
+ }
+ }
+ if (enc)
+ putchar ('E');
+ if (sign)
+ putchar ('S');
+ if (cert)
+ putchar ('C');
+ if (auth)
+ putchar ('A');
+ if (disabled)
+ putchar ('D');
}
- putchar(':');
+ putchar (':');
}
-/* Flags = 0x01 hashed 0x02 critical */
+/* FLAGS: 0x01 hashed
+ 0x02 critical */
static void
-print_one_subpacket(sigsubpkttype_t type,size_t len,int flags,const byte *buf)
+print_one_subpacket (sigsubpkttype_t type, size_t len, int flags,
+ const byte * buf)
{
size_t i;
- printf("spk:%d:%u:%u:",type,flags,(unsigned int)len);
+ printf ("spk:%d:%u:%u:", type, flags, (unsigned int) len);
- for(i=0;i<len;i++)
+ for (i = 0; i < len; i++)
{
/* printable ascii other than : and % */
- if(buf[i]>=32 && buf[i]<=126 && buf[i]!=':' && buf[i]!='%')
- printf("%c",buf[i]);
+ if (buf[i] >= 32 && buf[i] <= 126 && buf[i] != ':' && buf[i] != '%')
+ printf ("%c", buf[i]);
else
- printf("%%%02X",buf[i]);
+ printf ("%%%02X", buf[i]);
}
- printf("\n");
+ printf ("\n");
}
void
-print_subpackets_colon(PKT_signature *sig)
+print_subpackets_colon (PKT_signature * sig)
{
byte *i;
- assert(opt.show_subpackets);
+ assert (opt.show_subpackets);
- for(i=opt.show_subpackets;*i;i++)
+ for (i = opt.show_subpackets; *i; i++)
{
const byte *p;
size_t len;
- int seq,crit;
+ int seq, crit;
- seq=0;
+ seq = 0;
- while((p=enum_sig_subpkt(sig->hashed,*i,&len,&seq,&crit)))
- print_one_subpacket(*i,len,0x01|(crit?0x02:0),p);
+ while ((p = enum_sig_subpkt (sig->hashed, *i, &len, &seq, &crit)))
+ print_one_subpacket (*i, len, 0x01 | (crit ? 0x02 : 0), p);
- seq=0;
+ seq = 0;
- while((p=enum_sig_subpkt(sig->unhashed,*i,&len,&seq,&crit)))
- print_one_subpacket(*i,len,0x00|(crit?0x02:0),p);
+ while ((p = enum_sig_subpkt (sig->unhashed, *i, &len, &seq, &crit)))
+ print_one_subpacket (*i, len, 0x00 | (crit ? 0x02 : 0), p);
}
}
void
-dump_attribs(const PKT_user_id *uid,PKT_public_key *pk,PKT_secret_key *sk)
+dump_attribs (const PKT_user_id * uid, PKT_public_key * pk,
+ PKT_secret_key * sk)
{
int i;
- if(!attrib_fp)
+ if (!attrib_fp)
return;
- for(i=0;i<uid->numattribs;i++)
+ for (i = 0; i < uid->numattribs; i++)
{
- if(is_status_enabled())
+ if (is_status_enabled ())
{
byte array[MAX_FINGERPRINT_LEN], *p;
- char buf[(MAX_FINGERPRINT_LEN*2)+90];
- size_t j,n;
+ char buf[(MAX_FINGERPRINT_LEN * 2) + 90];
+ size_t j, n;
- if(pk)
- fingerprint_from_pk( pk, array, &n );
- else if(sk)
- fingerprint_from_sk( sk, array, &n );
+ if (pk)
+ fingerprint_from_pk (pk, array, &n);
+ else if (sk)
+ fingerprint_from_sk (sk, array, &n);
else
- BUG();
+ BUG ();
p = array;
- for(j=0; j < n ; j++, p++ )
- sprintf(buf+2*j, "%02X", *p );
-
- sprintf(buf+strlen(buf)," %lu %u %u %u %lu %lu %u",
- (ulong)uid->attribs[i].len,uid->attribs[i].type,i+1,
- uid->numattribs,(ulong)uid->created,(ulong)uid->expiredate,
- ((uid->is_primary?0x01:0)|
- (uid->is_revoked?0x02:0)|
- (uid->is_expired?0x04:0)));
- write_status_text(STATUS_ATTRIBUTE,buf);
+ for (j = 0; j < n; j++, p++)
+ sprintf (buf + 2 * j, "%02X", *p);
+
+ sprintf (buf + strlen (buf), " %lu %u %u %u %lu %lu %u",
+ (ulong) uid->attribs[i].len, uid->attribs[i].type, i + 1,
+ uid->numattribs, (ulong) uid->created,
+ (ulong) uid->expiredate,
+ ((uid->is_primary ? 0x01 : 0) | (uid->
+ is_revoked ? 0x02 : 0) |
+ (uid->is_expired ? 0x04 : 0)));
+ write_status_text (STATUS_ATTRIBUTE, buf);
}
- fwrite(uid->attribs[i].data,uid->attribs[i].len,1,attrib_fp);
+ fwrite (uid->attribs[i].data, uid->attribs[i].len, 1, attrib_fp);
fflush (attrib_fp);
}
}
static void
-list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
+list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque)
{
- int rc = 0;
- KBNODE kbctx;
- KBNODE node;
- PKT_public_key *pk;
- PKT_secret_key *sk;
- struct sig_stats *stats=opaque;
- int skip_sigs=0;
-
- /* get the keyid from the keyblock */
- node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
- if( !node ) {
- log_error("Oops; key lost!\n");
- dump_kbnode( keyblock );
- return;
+ int rc = 0;
+ KBNODE kbctx;
+ KBNODE node;
+ PKT_public_key *pk;
+ PKT_secret_key *sk;
+ struct sig_stats *stats = opaque;
+ int skip_sigs = 0;
+
+ /* get the keyid from the keyblock */
+ node = find_kbnode (keyblock, secret ? PKT_SECRET_KEY : PKT_PUBLIC_KEY);
+ if (!node)
+ {
+ log_error ("Oops; key lost!\n");
+ dump_kbnode (keyblock);
+ return;
+ }
+
+ if (secret)
+ {
+ pk = NULL;
+ sk = node->pkt->pkt.secret_key;
+
+ printf ("sec%c %4u%c/%s %s", (sk->protect.s2k.mode == 1001) ? '#' :
+ (sk->protect.s2k.mode == 1002) ? '>' : ' ',
+ nbits_from_sk (sk), pubkey_letter (sk->pubkey_algo),
+ keystr_from_sk (sk), datestr_from_sk (sk));
+
+ if (sk->has_expired)
+ {
+ printf (" [");
+ printf (_("expired: %s"), expirestr_from_sk (sk));
+ printf ("]");
+ }
+ else if (sk->expiredate)
+ {
+ printf (" [");
+ printf (_("expires: %s"), expirestr_from_sk (sk));
+ printf ("]");
+ }
+
+ printf ("\n");
}
+ else
+ {
+ pk = node->pkt->pkt.public_key;
+ sk = NULL;
+
+ check_trustdb_stale ();
+
+ printf ("pub %4u%c/%s %s",
+ nbits_from_pk (pk), pubkey_letter (pk->pubkey_algo),
+ keystr_from_pk (pk), datestr_from_pk (pk));
- if( secret )
- {
- pk = NULL;
- sk = node->pkt->pkt.secret_key;
-
- printf("sec%c %4u%c/%s %s",(sk->protect.s2k.mode==1001)?'#':
- (sk->protect.s2k.mode==1002)?'>':' ',
- nbits_from_sk( sk ),pubkey_letter( sk->pubkey_algo ),
- keystr_from_sk(sk),datestr_from_sk( sk ));
-
- if(sk->has_expired)
- {
- printf(" [");
- printf(_("expired: %s"),expirestr_from_sk(sk));
- printf("]");
- }
- else if(sk->expiredate )
- {
- printf(" [");
- printf(_("expires: %s"),expirestr_from_sk(sk));
- printf("]");
- }
-
- printf("\n");
- }
- else
- {
- pk = node->pkt->pkt.public_key;
- sk = NULL;
-
- check_trustdb_stale();
-
- printf("pub %4u%c/%s %s",
- nbits_from_pk(pk),pubkey_letter(pk->pubkey_algo),
- keystr_from_pk(pk),datestr_from_pk( pk ));
-
- /* We didn't include this before in the key listing, but there
- is room in the new format, so why not? */
-
- if(pk->is_revoked)
- {
- printf(" [");
- printf(_("revoked: %s"),revokestr_from_pk(pk));
- printf("]");
- }
- else if(pk->has_expired)
- {
- printf(" [");
- printf(_("expired: %s"),expirestr_from_pk(pk));
- printf("]");
- }
- else if(pk->expiredate)
- {
- printf(" [");
- printf(_("expires: %s"),expirestr_from_pk(pk));
- printf("]");
- }
+ /* We didn't include this before in the key listing, but there
+ is room in the new format, so why not? */
+
+ if (pk->is_revoked)
+ {
+ printf (" [");
+ printf (_("revoked: %s"), revokestr_from_pk (pk));
+ printf ("]");
+ }
+ else if (pk->has_expired)
+ {
+ printf (" [");
+ printf (_("expired: %s"), expirestr_from_pk (pk));
+ printf ("]");
+ }
+ else if (pk->expiredate)
+ {
+ printf (" [");
+ printf (_("expires: %s"), expirestr_from_pk (pk));
+ printf ("]");
+ }
#if 0
- /* I need to think about this some more. It's easy enough to
- include, but it looks sort of confusing in the
- listing... */
- if(opt.list_options&LIST_SHOW_VALIDITY)
- {
- int validity=get_validity(pk,NULL);
- printf(" [%s]",trust_value_to_string(validity));
- }
+ /* I need to think about this some more. It's easy enough to
+ include, but it looks sort of confusing in the
+ listing... */
+ if (opt.list_options & LIST_SHOW_VALIDITY)
+ {
+ int validity = get_validity (pk, NULL);
+ printf (" [%s]", trust_value_to_string (validity));
+ }
#endif
- printf("\n");
- }
-
- if( fpr )
- print_fingerprint( pk, sk, 0 );
- print_card_serialno (sk);
- if( opt.with_key_data )
- print_key_data( pk );
-
- for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
- if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) {
- PKT_user_id *uid=node->pkt->pkt.user_id;
-
- if(pk && (uid->is_expired || uid->is_revoked)
- && !(opt.list_options&LIST_SHOW_UNUSABLE_UIDS))
- {
- skip_sigs=1;
- continue;
- }
- else
- skip_sigs=0;
-
- if(attrib_fp && uid->attrib_data!=NULL)
- dump_attribs(uid,pk,sk);
-
- if((uid->is_revoked || uid->is_expired)
- || ((opt.list_options&LIST_SHOW_UID_VALIDITY) && pk))
- {
- const char *validity;
- int indent;
-
- validity=uid_trust_string_fixed(pk,uid);
- indent=(keystrlen()+9)-atoi(uid_trust_string_fixed(NULL,NULL));
-
- if(indent<0 || indent>40)
- indent=0;
-
- printf("uid%*s%s ",indent,"",validity);
- }
- else
- printf("uid%*s", (int)keystrlen()+10,"");
-
- print_utf8_string( stdout, uid->name, uid->len );
- putchar('\n');
-
- if((opt.list_options&LIST_SHOW_PHOTOS) && uid->attribs!=NULL)
- show_photos(uid->attribs,uid->numattribs,pk,sk,uid);
- }
- else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- {
- PKT_public_key *pk2 = node->pkt->pkt.public_key;
-
- if((pk2->is_revoked || pk2->has_expired)
- && !(opt.list_options&LIST_SHOW_UNUSABLE_SUBKEYS))
- {
- skip_sigs=1;
- continue;
- }
- else
- skip_sigs=0;
-
- printf("sub %4u%c/%s %s",
- nbits_from_pk( pk2 ),pubkey_letter( pk2->pubkey_algo ),
- keystr_from_pk(pk2),datestr_from_pk(pk2));
- if( pk2->is_revoked )
- {
- printf(" [");
- printf(_("revoked: %s"),revokestr_from_pk(pk2));
- printf("]");
- }
- else if( pk2->has_expired )
- {
- printf(" [");
- printf(_("expired: %s"),expirestr_from_pk(pk2));
- printf("]");
- }
- else if( pk2->expiredate )
- {
- printf(" [");
- printf(_("expires: %s"),expirestr_from_pk(pk2));
- printf("]");
- }
- putchar('\n');
- if( fpr > 1 )
- print_fingerprint( pk2, NULL, 0 );
- if( opt.with_key_data )
- print_key_data( pk2 );
- }
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY )
- {
- PKT_secret_key *sk2 = node->pkt->pkt.secret_key;
-
- printf("ssb%c %4u%c/%s %s",
- (sk2->protect.s2k.mode==1001)?'#':
- (sk2->protect.s2k.mode==1002)?'>':' ',
- nbits_from_sk( sk2 ),pubkey_letter( sk2->pubkey_algo ),
- keystr_from_sk(sk2),datestr_from_sk( sk2 ) );
- if( sk2->expiredate )
- {
- printf(" [");
- printf(_("expires: %s"),expirestr_from_sk(sk2));
- printf("]");
- }
- putchar('\n');
- if( fpr > 1 )
- {
- print_fingerprint( NULL, sk2, 0 );
- print_card_serialno (sk2);
- }
- }
- else if( opt.list_sigs
- && node->pkt->pkttype == PKT_SIGNATURE
- && !skip_sigs ) {
- PKT_signature *sig = node->pkt->pkt.signature;
- int sigrc;
- char *sigstr;
-
- if( stats ) {
- /*fflush(stdout);*/
- rc = check_key_signature( keyblock, node, NULL );
- switch( gpg_err_code (rc) ) {
- case 0: sigrc = '!'; break;
- case GPG_ERR_BAD_SIGNATURE:
- stats->inv_sigs++; sigrc = '-'; break;
- case GPG_ERR_NO_PUBKEY:
- case GPG_ERR_UNUSABLE_PUBKEY: stats->no_key++; continue;
- default: stats->oth_err++; sigrc = '%'; break;
- }
+ printf ("\n");
+ }
+
+ if (fpr)
+ print_fingerprint (pk, sk, 0);
+ print_card_serialno (sk);
+ if (opt.with_key_data)
+ print_key_data (pk);
- /* TODO: Make sure a cached sig record here still has
- the pk that issued it. See also
- keyedit.c:print_and_check_one_sig */
+ for (kbctx = NULL; (node = walk_kbnode (keyblock, &kbctx, 0));)
+ {
+ if (node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode)
+ {
+ PKT_user_id *uid = node->pkt->pkt.user_id;
+
+ if (pk && (uid->is_expired || uid->is_revoked)
+ && !(opt.list_options & LIST_SHOW_UNUSABLE_UIDS))
+ {
+ skip_sigs = 1;
+ continue;
}
- else {
- rc = 0;
- sigrc = ' ';
+ else
+ skip_sigs = 0;
+
+ if (attrib_fp && uid->attrib_data != NULL)
+ dump_attribs (uid, pk, sk);
+
+ if ((uid->is_revoked || uid->is_expired)
+ || ((opt.list_options & LIST_SHOW_UID_VALIDITY) && pk))
+ {
+ const char *validity;
+ int indent;
+
+ validity = uid_trust_string_fixed (pk, uid);
+ indent =
+ (keystrlen () + 9) -
+ atoi (uid_trust_string_fixed (NULL, NULL));
+
+ if (indent < 0 || indent > 40)
+ indent = 0;
+
+ printf ("uid%*s%s ", indent, "", validity);
}
+ else
+ printf ("uid%*s", (int) keystrlen () + 10, "");
- if( sig->sig_class == 0x20 || sig->sig_class == 0x28
- || sig->sig_class == 0x30 )
- sigstr = "rev";
- else if( (sig->sig_class&~3) == 0x10 )
- sigstr = "sig";
- else if( sig->sig_class == 0x18 )
- sigstr = "sig";
- else if( sig->sig_class == 0x1F )
- sigstr = "sig";
- else {
- printf("sig "
- "[unexpected signature class 0x%02x]\n",sig->sig_class );
- continue;
+ print_utf8_string (stdout, uid->name, uid->len);
+ putchar ('\n');
+
+ if ((opt.list_options & LIST_SHOW_PHOTOS) && uid->attribs != NULL)
+ show_photos (uid->attribs, uid->numattribs, pk, sk, uid);
+ }
+ else if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
+ {
+ PKT_public_key *pk2 = node->pkt->pkt.public_key;
+
+ if ((pk2->is_revoked || pk2->has_expired)
+ && !(opt.list_options & LIST_SHOW_UNUSABLE_SUBKEYS))
+ {
+ skip_sigs = 1;
+ continue;
}
+ else
+ skip_sigs = 0;
- fputs( sigstr, stdout );
- printf("%c%c %c%c%c%c%c%c %s %s",
- sigrc,(sig->sig_class-0x10>0 &&
- sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ',
- sig->flags.exportable?' ':'L',
- sig->flags.revocable?' ':'R',
- sig->flags.policy_url?'P':' ',
- sig->flags.notation?'N':' ',
- sig->flags.expired?'X':' ',
- (sig->trust_depth>9)?'T':
- (sig->trust_depth>0)?'0'+sig->trust_depth:' ',
- keystr(sig->keyid),datestr_from_sig(sig));
- if(opt.list_options&LIST_SHOW_SIG_EXPIRE)
- printf(" %s", expirestr_from_sig(sig));
- printf(" ");
- if( sigrc == '%' )
- printf("[%s] ", g10_errstr(rc) );
- else if( sigrc == '?' )
- ;
- else if ( !opt.fast_list_mode ) {
- size_t n;
- char *p = get_user_id( sig->keyid, &n );
- print_utf8_string( stdout, p, n );
- xfree(p);
+ printf ("sub %4u%c/%s %s",
+ nbits_from_pk (pk2), pubkey_letter (pk2->pubkey_algo),
+ keystr_from_pk (pk2), datestr_from_pk (pk2));
+ if (pk2->is_revoked)
+ {
+ printf (" [");
+ printf (_("revoked: %s"), revokestr_from_pk (pk2));
+ printf ("]");
+ }
+ else if (pk2->has_expired)
+ {
+ printf (" [");
+ printf (_("expired: %s"), expirestr_from_pk (pk2));
+ printf ("]");
+ }
+ else if (pk2->expiredate)
+ {
+ printf (" [");
+ printf (_("expires: %s"), expirestr_from_pk (pk2));
+ printf ("]");
}
- putchar('\n');
+ putchar ('\n');
+ if (fpr > 1)
+ print_fingerprint (pk2, NULL, 0);
+ if (opt.with_key_data)
+ print_key_data (pk2);
+ }
+ else if (node->pkt->pkttype == PKT_SECRET_SUBKEY)
+ {
+ PKT_secret_key *sk2 = node->pkt->pkt.secret_key;
+
+ printf ("ssb%c %4u%c/%s %s",
+ (sk2->protect.s2k.mode == 1001) ? '#' :
+ (sk2->protect.s2k.mode == 1002) ? '>' : ' ',
+ nbits_from_sk (sk2), pubkey_letter (sk2->pubkey_algo),
+ keystr_from_sk (sk2), datestr_from_sk (sk2));
+ if (sk2->expiredate)
+ {
+ printf (" [");
+ printf (_("expires: %s"), expirestr_from_sk (sk2));
+ printf ("]");
+ }
+ putchar ('\n');
+ if (fpr > 1)
+ {
+ print_fingerprint (NULL, sk2, 0);
+ print_card_serialno (sk2);
+ }
+ }
+ else if (opt.list_sigs
+ && node->pkt->pkttype == PKT_SIGNATURE && !skip_sigs)
+ {
+ PKT_signature *sig = node->pkt->pkt.signature;
+ int sigrc;
+ char *sigstr;
- if(sig->flags.policy_url
- && (opt.list_options&LIST_SHOW_POLICY_URLS))
- show_policy_url(sig,3,0);
+ if (stats)
+ {
+ rc = check_key_signature (keyblock, node, NULL);
+ switch (gpg_err_code (rc))
+ {
+ case 0:
+ sigrc = '!';
+ break;
+ case GPG_ERR_BAD_SIGNATURE:
+ stats->inv_sigs++;
+ sigrc = '-';
+ break;
+ case GPG_ERR_NO_PUBKEY:
+ case GPG_ERR_UNUSABLE_PUBKEY:
+ stats->no_key++;
+ continue;
+ default:
+ stats->oth_err++;
+ sigrc = '%';
+ break;
+ }
- if(sig->flags.notation && (opt.list_options&LIST_SHOW_NOTATIONS))
- show_notation(sig,3,0,
- ((opt.list_options&LIST_SHOW_STD_NOTATIONS)?1:0)+
- ((opt.list_options&LIST_SHOW_USER_NOTATIONS)?2:0));
+ /* TODO: Make sure a cached sig record here still has
+ the pk that issued it. See also
+ keyedit.c:print_and_check_one_sig */
+ }
+ else
+ {
+ rc = 0;
+ sigrc = ' ';
+ }
- if(sig->flags.pref_ks
- && (opt.list_options&LIST_SHOW_KEYSERVER_URLS))
- show_keyserver_url(sig,3,0);
+ if (sig->sig_class == 0x20 || sig->sig_class == 0x28
+ || sig->sig_class == 0x30)
+ sigstr = "rev";
+ else if ((sig->sig_class & ~3) == 0x10)
+ sigstr = "sig";
+ else if (sig->sig_class == 0x18)
+ sigstr = "sig";
+ else if (sig->sig_class == 0x1F)
+ sigstr = "sig";
+ else
+ {
+ printf ("sig "
+ "[unexpected signature class 0x%02x]\n",
+ sig->sig_class);
+ continue;
+ }
- /* fixme: check or list other sigs here */
+ fputs (sigstr, stdout);
+ printf ("%c%c %c%c%c%c%c%c %s %s",
+ sigrc, (sig->sig_class - 0x10 > 0 &&
+ sig->sig_class - 0x10 <
+ 4) ? '0' + sig->sig_class - 0x10 : ' ',
+ sig->flags.exportable ? ' ' : 'L',
+ sig->flags.revocable ? ' ' : 'R',
+ sig->flags.policy_url ? 'P' : ' ',
+ sig->flags.notation ? 'N' : ' ',
+ sig->flags.expired ? 'X' : ' ',
+ (sig->trust_depth > 9) ? 'T' : (sig->trust_depth >
+ 0) ? '0' +
+ sig->trust_depth : ' ', keystr (sig->keyid),
+ datestr_from_sig (sig));
+ if (opt.list_options & LIST_SHOW_SIG_EXPIRE)
+ printf (" %s", expirestr_from_sig (sig));
+ printf (" ");
+ if (sigrc == '%')
+ printf ("[%s] ", g10_errstr (rc));
+ else if (sigrc == '?')
+ ;
+ else if (!opt.fast_list_mode)
+ {
+ size_t n;
+ char *p = get_user_id (sig->keyid, &n);
+ print_utf8_string (stdout, p, n);
+ xfree (p);
+ }
+ putchar ('\n');
+
+ if (sig->flags.policy_url
+ && (opt.list_options & LIST_SHOW_POLICY_URLS))
+ show_policy_url (sig, 3, 0);
+
+ if (sig->flags.notation && (opt.list_options & LIST_SHOW_NOTATIONS))
+ show_notation (sig, 3, 0,
+ ((opt.
+ list_options & LIST_SHOW_STD_NOTATIONS) ? 1 : 0)
+ +
+ ((opt.
+ list_options & LIST_SHOW_USER_NOTATIONS) ? 2 :
+ 0));
+
+ if (sig->flags.pref_ks
+ && (opt.list_options & LIST_SHOW_KEYSERVER_URLS))
+ show_keyserver_url (sig, 3, 0);
+
+ /* fixme: check or list other sigs here */
}
}
- putchar('\n');
+ putchar ('\n');
}
void
-print_revokers(PKT_public_key *pk)
+print_revokers (PKT_public_key * pk)
{
/* print the revoker record */
- if( !pk->revkey && pk->numrevkeys )
- BUG();
+ if (!pk->revkey && pk->numrevkeys)
+ BUG ();
else
{
- int i,j;
+ int i, j;
- for (i=0; i < pk->numrevkeys; i++)
+ for (i = 0; i < pk->numrevkeys; i++)
{
byte *p;
printf ("rvk:::%d::::::", pk->revkey[i].algid);
p = pk->revkey[i].fpr;
- for (j=0; j < 20; j++, p++ )
+ for (j = 0; j < 20; j++, p++)
printf ("%02X", *p);
printf (":%02x%s:\n", pk->revkey[i].class,
- (pk->revkey[i].class&0x40)?"s":"");
+ (pk->revkey[i].class & 0x40) ? "s" : "");
}
}
}
static void
-list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
+list_keyblock_colon (KBNODE keyblock, int secret, int fpr)
{
int rc = 0;
KBNODE kbctx;
@@ -1093,57 +1149,55 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
int i;
/* get the keyid from the keyblock */
- node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
- if ( !node )
+ node = find_kbnode (keyblock, secret ? PKT_SECRET_KEY : PKT_PUBLIC_KEY);
+ if (!node)
{
- log_error("Oops; key lost!\n");
- dump_kbnode( keyblock );
+ log_error ("Oops; key lost!\n");
+ dump_kbnode (keyblock);
return;
}
- if ( secret )
+ if (secret)
{
pk = NULL;
sk = node->pkt->pkt.secret_key;
- keyid_from_sk ( sk, keyid );
+ keyid_from_sk (sk, keyid);
printf ("sec::%u:%d:%08lX%08lX:%s:%s:::",
- nbits_from_sk( sk ),
- sk->pubkey_algo,
- (ulong)keyid[0],(ulong)keyid[1],
- colon_datestr_from_sk( sk ),
- colon_strtime (sk->expiredate)
- /* fixme: add LID here */ );
+ nbits_from_sk (sk),
+ sk->pubkey_algo,
+ (ulong) keyid[0], (ulong) keyid[1],
+ colon_datestr_from_sk (sk), colon_strtime (sk->expiredate)
+ /* fixme: add LID here */ );
}
else
{
pk = node->pkt->pkt.public_key;
sk = NULL;
- keyid_from_pk( pk, keyid );
- fputs( "pub:", stdout );
- if ( !pk->is_valid )
- putchar ('i');
- else if ( pk->is_revoked )
- putchar ('r');
- else if ( pk->has_expired )
- putchar ('e');
- else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
- ;
- else
- {
- trustletter = get_validity_info ( pk, NULL );
- if ( trustletter == 'u' )
- ulti_hack = 1;
- putchar(trustletter);
- }
+ keyid_from_pk (pk, keyid);
+ fputs ("pub:", stdout);
+ if (!pk->is_valid)
+ putchar ('i');
+ else if (pk->is_revoked)
+ putchar ('r');
+ else if (pk->has_expired)
+ putchar ('e');
+ else if (opt.fast_list_mode || opt.no_expensive_trust_checks)
+ ;
+ else
+ {
+ trustletter = get_validity_info (pk, NULL);
+ if (trustletter == 'u')
+ ulti_hack = 1;
+ putchar (trustletter);
+ }
printf (":%u:%d:%08lX%08lX:%s:%s::",
- nbits_from_pk( pk ),
- pk->pubkey_algo,
- (ulong)keyid[0],(ulong)keyid[1],
- colon_datestr_from_pk( pk ),
- colon_strtime (pk->expiredate) );
- if ( !opt.fast_list_mode && !opt.no_expensive_trust_checks )
- putchar( get_ownertrust_info(pk) );
- putchar(':');
+ nbits_from_pk (pk),
+ pk->pubkey_algo,
+ (ulong) keyid[0], (ulong) keyid[1],
+ colon_datestr_from_pk (pk), colon_strtime (pk->expiredate));
+ if (!opt.fast_list_mode && !opt.no_expensive_trust_checks)
+ putchar (get_ownertrust_info (pk));
+ putchar (':');
}
putchar (':');
@@ -1151,21 +1205,21 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
print_capabilities (pk, sk, keyblock);
if (secret)
{
- putchar (':'); /* End of field 13. */
- putchar (':'); /* End of field 14. */
+ putchar (':'); /* End of field 13. */
+ putchar (':'); /* End of field 14. */
if (sk->protect.s2k.mode == 1001)
- putchar ('#'); /* Key is just a stub. */
+ putchar ('#'); /* Key is just a stub. */
else if (sk->protect.s2k.mode == 1002)
- {
- /* Key is stored on an external token (card) or handled by
- the gpg-agent. Print the serial number of that token
- here. */
- for (i=0; i < sk->protect.ivlen; i++)
- printf ("%02X", sk->protect.iv[i]);
- }
- putchar (':'); /* End of field 15. */
+ {
+ /* Key is stored on an external token (card) or handled by
+ the gpg-agent. Print the serial number of that token
+ here. */
+ for (i = 0; i < sk->protect.ivlen; i++)
+ printf ("%02X", sk->protect.iv[i]);
+ }
+ putchar (':'); /* End of field 15. */
}
- putchar('\n');
+ putchar ('\n');
if (pk)
print_revokers (pk);
if (fpr)
@@ -1174,231 +1228,238 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
print_key_data (pk);
- for ( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; )
+ for (kbctx = NULL; (node = walk_kbnode (keyblock, &kbctx, 0));)
{
- if ( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode )
- {
- char *str;
- PKT_user_id *uid=node->pkt->pkt.user_id;
-
- if (attrib_fp && node->pkt->pkt.user_id->attrib_data != NULL)
- dump_attribs (node->pkt->pkt.user_id,pk,sk);
- /*
- * Fixme: We need a is_valid flag here too
- */
- str = uid->attrib_data? "uat":"uid";
- /* If we're listing a secret key, leave out the validity
- values for now. This is handled better in 1.9. */
- if (sk)
- printf ("%s:::::",str);
- else if ( uid->is_revoked )
- printf ("%s:r::::",str);
- else if ( uid->is_expired )
- printf ("%s:e::::",str);
- else if ( opt.no_expensive_trust_checks )
- printf ("%s:::::",str);
- else
- {
- int uid_validity;
-
- if ( pk && !ulti_hack )
- uid_validity=get_validity_info (pk, uid);
- else
- uid_validity = 'u';
- printf ("%s:%c::::",str,uid_validity);
- }
-
- printf ("%s:", colon_strtime (uid->created));
- printf ("%s:", colon_strtime (uid->expiredate));
-
- namehash_from_uid (uid);
-
- for (i=0; i < 20; i++ )
- printf ("%02X",uid->namehash[i]);
-
- printf ("::");
-
- if (uid->attrib_data)
- printf ("%u %lu",uid->numattribs,uid->attrib_len);
- else
- print_string (stdout,uid->name,uid->len, ':' );
- putchar (':');
- putchar ('\n');
- }
- else if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY )
- {
- u32 keyid2[2];
- PKT_public_key *pk2 = node->pkt->pkt.public_key;
-
- keyid_from_pk ( pk2, keyid2 );
- fputs ("sub:", stdout );
- if ( !pk2->is_valid )
- putchar ('i');
- else if ( pk2->is_revoked )
- putchar ('r');
- else if ( pk2->has_expired )
- putchar ('e');
- else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
- ;
- else
- {
- /* TRUSTLETTER should always be defined here. */
- if (trustletter)
- printf ("%c", trustletter );
- }
- printf(":%u:%d:%08lX%08lX:%s:%s:::::",
- nbits_from_pk( pk2 ),
- pk2->pubkey_algo,
- (ulong)keyid2[0],(ulong)keyid2[1],
- colon_datestr_from_pk( pk2 ),
- colon_strtime (pk2->expiredate)
- /* fixme: add LID and ownertrust here */
- );
- print_capabilities (pk2, NULL, NULL);
- putchar ('\n');
- if ( fpr > 1 )
- print_fingerprint ( pk2, NULL, 0 );
- if ( opt.with_key_data )
- print_key_data( pk2 );
- }
- else if( node->pkt->pkttype == PKT_SECRET_SUBKEY )
- {
- u32 keyid2[2];
- PKT_secret_key *sk2 = node->pkt->pkt.secret_key;
-
- keyid_from_sk ( sk2, keyid2 );
- printf ("ssb::%u:%d:%08lX%08lX:%s:%s:::::",
- nbits_from_sk( sk2 ),
- sk2->pubkey_algo,
- (ulong)keyid2[0],(ulong)keyid2[1],
- colon_datestr_from_sk( sk2 ),
- colon_strtime (sk2->expiredate)
- /* fixme: add LID */ );
- print_capabilities (NULL, sk2, NULL);
- putchar(':'); /* End of field 13. */
- putchar(':'); /* End of field 14. */
- if (sk2->protect.s2k.mode == 1001)
- putchar ('#'); /* Key is just a stub. */
- else if (sk2->protect.s2k.mode == 1002)
- {
- /* Key is stored on an external token (card) or handled by
- the gpg-agent. Print the serial number of that token
- here. */
- for (i=0; i < sk2->protect.ivlen; i++)
- printf ("%02X", sk2->protect.iv[i]);
- }
- putchar(':'); /* End of field 15. */
- putchar ('\n');
-
- if ( fpr > 1 )
- print_fingerprint ( NULL, sk2, 0 );
- }
- else if ( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE )
- {
- PKT_signature *sig = node->pkt->pkt.signature;
- int sigrc,fprokay=0;
- char *sigstr;
- size_t fplen;
- byte fparray[MAX_FINGERPRINT_LEN];
-
- if ( sig->sig_class == 0x20 || sig->sig_class == 0x28
- || sig->sig_class == 0x30 )
- sigstr = "rev";
- else if ( (sig->sig_class&~3) == 0x10 )
- sigstr = "sig";
- else if ( sig->sig_class == 0x18 )
- sigstr = "sig";
- else if ( sig->sig_class == 0x1F )
- sigstr = "sig";
- else
- {
- printf ("sig::::::::::%02x%c:\n",
- sig->sig_class, sig->flags.exportable?'x':'l');
- continue;
- }
-
- if ( opt.check_sigs )
- {
- PKT_public_key *signer_pk=NULL;
-
- fflush (stdout);
- if (opt.no_sig_cache)
- signer_pk = xmalloc_clear (sizeof(PKT_public_key));
-
- rc = check_key_signature2 ( keyblock, node, NULL, signer_pk,
- NULL, NULL, NULL );
- switch ( gpg_err_code (rc) )
- {
- case 0: sigrc = '!'; break;
- case GPG_ERR_BAD_SIGNATURE: sigrc = '-'; break;
- case GPG_ERR_NO_PUBKEY:
- case GPG_ERR_UNUSABLE_PUBKEY: sigrc = '?'; break;
- default: sigrc = '%'; break;
- }
-
- if (opt.no_sig_cache)
- {
- if (!rc)
- {
- fingerprint_from_pk (signer_pk, fparray, &fplen);
- fprokay = 1;
- }
- free_public_key(signer_pk);
- }
- }
- else
- {
- rc = 0;
- sigrc = ' ';
- }
- fputs ( sigstr, stdout );
- putchar (':');
- if ( sigrc != ' ' )
- putchar (sigrc);
- printf ("::%d:%08lX%08lX:%s:%s:", sig->pubkey_algo,
- (ulong)sig->keyid[0], (ulong)sig->keyid[1],
- colon_datestr_from_sig(sig),
- colon_expirestr_from_sig(sig));
-
- if (sig->trust_depth || sig->trust_value)
- printf("%d %d",sig->trust_depth,sig->trust_value);
- printf (":");
-
- if (sig->trust_regexp)
- print_string (stdout,sig->trust_regexp,
- strlen(sig->trust_regexp),':');
- printf(":");
-
- if ( sigrc == '%' )
- printf("[%s] ", g10_errstr(rc) );
- else if ( sigrc == '?' )
- ;
- else if ( !opt.fast_list_mode )
- {
- size_t n;
- char *p = get_user_id( sig->keyid, &n );
- print_string( stdout, p, n, ':' );
- xfree(p);
- }
- printf (":%02x%c:", sig->sig_class,sig->flags.exportable?'x':'l');
-
- if (opt.no_sig_cache && opt.check_sigs && fprokay)
- {
- putchar (':');
-
- for (i=0; i < fplen ; i++ )
- printf ("%02X", fparray[i] );
-
- putchar (':');
- }
-
- printf ("\n");
-
- if (opt.show_subpackets)
- print_subpackets_colon (sig);
-
- /* fixme: check or list other sigs here */
- }
+ if (node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode)
+ {
+ char *str;
+ PKT_user_id *uid = node->pkt->pkt.user_id;
+
+ if (attrib_fp && node->pkt->pkt.user_id->attrib_data != NULL)
+ dump_attribs (node->pkt->pkt.user_id, pk, sk);
+ /*
+ * Fixme: We need a is_valid flag here too
+ */
+ str = uid->attrib_data ? "uat" : "uid";
+ /* If we're listing a secret key, leave out the validity
+ values for now. This is handled better in 1.9. */
+ if (sk)
+ printf ("%s:::::", str);
+ else if (uid->is_revoked)
+ printf ("%s:r::::", str);
+ else if (uid->is_expired)
+ printf ("%s:e::::", str);
+ else if (opt.no_expensive_trust_checks)
+ printf ("%s:::::", str);
+ else
+ {
+ int uid_validity;
+
+ if (pk && !ulti_hack)
+ uid_validity = get_validity_info (pk, uid);
+ else
+ uid_validity = 'u';
+ printf ("%s:%c::::", str, uid_validity);
+ }
+
+ printf ("%s:", colon_strtime (uid->created));
+ printf ("%s:", colon_strtime (uid->expiredate));
+
+ namehash_from_uid (uid);
+
+ for (i = 0; i < 20; i++)
+ printf ("%02X", uid->namehash[i]);
+
+ printf ("::");
+
+ if (uid->attrib_data)
+ printf ("%u %lu", uid->numattribs, uid->attrib_len);
+ else
+ print_string (stdout, uid->name, uid->len, ':');
+ putchar (':');
+ putchar ('\n');
+ }
+ else if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
+ {
+ u32 keyid2[2];
+ PKT_public_key *pk2 = node->pkt->pkt.public_key;
+
+ keyid_from_pk (pk2, keyid2);
+ fputs ("sub:", stdout);
+ if (!pk2->is_valid)
+ putchar ('i');
+ else if (pk2->is_revoked)
+ putchar ('r');
+ else if (pk2->has_expired)
+ putchar ('e');
+ else if (opt.fast_list_mode || opt.no_expensive_trust_checks)
+ ;
+ else
+ {
+ /* TRUSTLETTER should always be defined here. */
+ if (trustletter)
+ printf ("%c", trustletter);
+ }
+ printf (":%u:%d:%08lX%08lX:%s:%s:::::",
+ nbits_from_pk (pk2),
+ pk2->pubkey_algo,
+ (ulong) keyid2[0], (ulong) keyid2[1],
+ colon_datestr_from_pk (pk2), colon_strtime (pk2->expiredate)
+ /* fixme: add LID and ownertrust here */
+ );
+ print_capabilities (pk2, NULL, NULL);
+ putchar ('\n');
+ if (fpr > 1)
+ print_fingerprint (pk2, NULL, 0);
+ if (opt.with_key_data)
+ print_key_data (pk2);
+ }
+ else if (node->pkt->pkttype == PKT_SECRET_SUBKEY)
+ {
+ u32 keyid2[2];
+ PKT_secret_key *sk2 = node->pkt->pkt.secret_key;
+
+ keyid_from_sk (sk2, keyid2);
+ printf ("ssb::%u:%d:%08lX%08lX:%s:%s:::::",
+ nbits_from_sk (sk2),
+ sk2->pubkey_algo,
+ (ulong) keyid2[0], (ulong) keyid2[1],
+ colon_datestr_from_sk (sk2), colon_strtime (sk2->expiredate)
+ /* fixme: add LID */ );
+ print_capabilities (NULL, sk2, NULL);
+ putchar (':'); /* End of field 13. */
+ putchar (':'); /* End of field 14. */
+ if (sk2->protect.s2k.mode == 1001)
+ putchar ('#'); /* Key is just a stub. */
+ else if (sk2->protect.s2k.mode == 1002)
+ {
+ /* Key is stored on an external token (card) or handled by
+ the gpg-agent. Print the serial number of that token
+ here. */
+ for (i = 0; i < sk2->protect.ivlen; i++)
+ printf ("%02X", sk2->protect.iv[i]);
+ }
+ putchar (':'); /* End of field 15. */
+ putchar ('\n');
+
+ if (fpr > 1)
+ print_fingerprint (NULL, sk2, 0);
+ }
+ else if (opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE)
+ {
+ PKT_signature *sig = node->pkt->pkt.signature;
+ int sigrc, fprokay = 0;
+ char *sigstr;
+ size_t fplen;
+ byte fparray[MAX_FINGERPRINT_LEN];
+
+ if (sig->sig_class == 0x20 || sig->sig_class == 0x28
+ || sig->sig_class == 0x30)
+ sigstr = "rev";
+ else if ((sig->sig_class & ~3) == 0x10)
+ sigstr = "sig";
+ else if (sig->sig_class == 0x18)
+ sigstr = "sig";
+ else if (sig->sig_class == 0x1F)
+ sigstr = "sig";
+ else
+ {
+ printf ("sig::::::::::%02x%c:\n",
+ sig->sig_class, sig->flags.exportable ? 'x' : 'l');
+ continue;
+ }
+
+ if (opt.check_sigs)
+ {
+ PKT_public_key *signer_pk = NULL;
+
+ fflush (stdout);
+ if (opt.no_sig_cache)
+ signer_pk = xmalloc_clear (sizeof (PKT_public_key));
+
+ rc = check_key_signature2 (keyblock, node, NULL, signer_pk,
+ NULL, NULL, NULL);
+ switch (gpg_err_code (rc))
+ {
+ case 0:
+ sigrc = '!';
+ break;
+ case GPG_ERR_BAD_SIGNATURE:
+ sigrc = '-';
+ break;
+ case GPG_ERR_NO_PUBKEY:
+ case GPG_ERR_UNUSABLE_PUBKEY:
+ sigrc = '?';
+ break;
+ default:
+ sigrc = '%';
+ break;
+ }
+
+ if (opt.no_sig_cache)
+ {
+ if (!rc)
+ {
+ fingerprint_from_pk (signer_pk, fparray, &fplen);
+ fprokay = 1;
+ }
+ free_public_key (signer_pk);
+ }
+ }
+ else
+ {
+ rc = 0;
+ sigrc = ' ';
+ }
+ fputs (sigstr, stdout);
+ putchar (':');
+ if (sigrc != ' ')
+ putchar (sigrc);
+ printf ("::%d:%08lX%08lX:%s:%s:", sig->pubkey_algo,
+ (ulong) sig->keyid[0], (ulong) sig->keyid[1],
+ colon_datestr_from_sig (sig),
+ colon_expirestr_from_sig (sig));
+
+ if (sig->trust_depth || sig->trust_value)
+ printf ("%d %d", sig->trust_depth, sig->trust_value);
+ printf (":");
+
+ if (sig->trust_regexp)
+ print_string (stdout, sig->trust_regexp,
+ strlen (sig->trust_regexp), ':');
+ printf (":");
+
+ if (sigrc == '%')
+ printf ("[%s] ", g10_errstr (rc));
+ else if (sigrc == '?')
+ ;
+ else if (!opt.fast_list_mode)
+ {
+ size_t n;
+ char *p = get_user_id (sig->keyid, &n);
+ print_string (stdout, p, n, ':');
+ xfree (p);
+ }
+ printf (":%02x%c:", sig->sig_class,
+ sig->flags.exportable ? 'x' : 'l');
+
+ if (opt.no_sig_cache && opt.check_sigs && fprokay)
+ {
+ putchar (':');
+
+ for (i = 0; i < fplen; i++)
+ printf ("%02X", fparray[i]);
+
+ putchar (':');
+ }
+
+ printf ("\n");
+
+ if (opt.show_subpackets)
+ print_subpackets_colon (sig);
+
+ /* fixme: check or list other sigs here */
+ }
}
}
@@ -1407,60 +1468,65 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
* packet) comes first. Fixme: Replace this by a generic sort
* function. */
static void
-do_reorder_keyblock (KBNODE keyblock,int attr)
+do_reorder_keyblock (KBNODE keyblock, int attr)
{
- KBNODE primary = NULL, primary0 = NULL, primary2 = NULL;
- KBNODE last, node;
-
- for (node=keyblock; node; primary0=node, node = node->next) {
- if( node->pkt->pkttype == PKT_USER_ID &&
- ((attr && node->pkt->pkt.user_id->attrib_data) ||
- (!attr && !node->pkt->pkt.user_id->attrib_data)) &&
- node->pkt->pkt.user_id->is_primary ) {
- primary = primary2 = node;
- for (node=node->next; node; primary2=node, node = node->next ) {
- if( node->pkt->pkttype == PKT_USER_ID
- || node->pkt->pkttype == PKT_PUBLIC_SUBKEY
- || node->pkt->pkttype == PKT_SECRET_SUBKEY ) {
- break;
- }
- }
- break;
- }
+ KBNODE primary = NULL, primary0 = NULL, primary2 = NULL;
+ KBNODE last, node;
+
+ for (node = keyblock; node; primary0 = node, node = node->next)
+ {
+ if (node->pkt->pkttype == PKT_USER_ID &&
+ ((attr && node->pkt->pkt.user_id->attrib_data) ||
+ (!attr && !node->pkt->pkt.user_id->attrib_data)) &&
+ node->pkt->pkt.user_id->is_primary)
+ {
+ primary = primary2 = node;
+ for (node = node->next; node; primary2 = node, node = node->next)
+ {
+ if (node->pkt->pkttype == PKT_USER_ID
+ || node->pkt->pkttype == PKT_PUBLIC_SUBKEY
+ || node->pkt->pkttype == PKT_SECRET_SUBKEY)
+ {
+ break;
+ }
+ }
+ break;
+ }
}
- if ( !primary )
- return; /* no primary key flag found (should not happen) */
+ if (!primary)
+ return; /* No primary key flag found (should not happen). */
- for (last=NULL, node=keyblock; node; last = node, node = node->next) {
- if( node->pkt->pkttype == PKT_USER_ID )
- break;
+ for (last = NULL, node = keyblock; node; last = node, node = node->next)
+ {
+ if (node->pkt->pkttype == PKT_USER_ID)
+ break;
}
- assert (node);
- assert (last); /* the user ID is never the first packet */
- assert (primary0); /* ditto (this is the node before primary) */
- if ( node == primary )
- return; /* already the first one */
-
- last->next = primary;
- primary0->next = primary2->next;
- primary2->next = node;
+ assert (node);
+ assert (last); /* The user ID is never the first packet. */
+ assert (primary0); /* Ditto (this is the node before primary). */
+ if (node == primary)
+ return; /* Already the first one. */
+
+ last->next = primary;
+ primary0->next = primary2->next;
+ primary2->next = node;
}
void
reorder_keyblock (KBNODE keyblock)
{
- do_reorder_keyblock(keyblock,1);
- do_reorder_keyblock(keyblock,0);
+ do_reorder_keyblock (keyblock, 1);
+ do_reorder_keyblock (keyblock, 0);
}
void
-list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque )
+list_keyblock (KBNODE keyblock, int secret, int fpr, void *opaque)
{
- reorder_keyblock (keyblock);
- if (opt.with_colons)
- list_keyblock_colon (keyblock, secret, fpr );
- else
- list_keyblock_print (keyblock, secret, fpr, opaque );
+ reorder_keyblock (keyblock);
+ if (opt.with_colons)
+ list_keyblock_colon (keyblock, secret, fpr);
+ else
+ list_keyblock_print (keyblock, secret, fpr, opaque);
}
/*
@@ -1472,137 +1538,153 @@ list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque )
* modes 1 and 2 will try and print both subkey and primary key fingerprints
*/
void
-print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode )
+print_fingerprint (PKT_public_key * pk, PKT_secret_key * sk, int mode)
{
- byte array[MAX_FINGERPRINT_LEN], *p;
- size_t i, n;
- FILE *fp;
- const char *text;
- int primary=0;
-
- if(sk)
- {
- if(sk->main_keyid[0]==sk->keyid[0] && sk->main_keyid[1]==sk->keyid[1])
- primary=1;
- }
- else
- {
- if(pk->main_keyid[0]==pk->keyid[0] && pk->main_keyid[1]==pk->keyid[1])
- primary=1;
- }
-
- /* Just to be safe */
- if(mode&0x80 && !primary)
- {
- log_error("primary key is not really primary!\n");
- return;
- }
-
- mode&=~0x80;
-
- if(!primary && (mode==1 || mode==2))
- {
- if(sk)
- {
- PKT_secret_key *primary_sk=xmalloc_clear(sizeof(*primary_sk));
- get_seckey(primary_sk,sk->main_keyid);
- print_fingerprint(NULL,primary_sk,mode|0x80);
- free_secret_key(primary_sk);
- }
- else
- {
- PKT_public_key *primary_pk=xmalloc_clear(sizeof(*primary_pk));
- get_pubkey(primary_pk,pk->main_keyid);
- print_fingerprint(primary_pk,NULL,mode|0x80);
- free_public_key(primary_pk);
- }
- }
-
- if (mode == 1) {
- fp = log_get_stream ();
- if(primary)
- text = _("Primary key fingerprint:");
- else
- text = _(" Subkey fingerprint:");
+ byte array[MAX_FINGERPRINT_LEN], *p;
+ size_t i, n;
+ FILE *fp;
+ const char *text;
+ int primary = 0;
+
+ if (sk)
+ {
+ if (sk->main_keyid[0] == sk->keyid[0]
+ && sk->main_keyid[1] == sk->keyid[1])
+ primary = 1;
+ }
+ else
+ {
+ if (pk->main_keyid[0] == pk->keyid[0]
+ && pk->main_keyid[1] == pk->keyid[1])
+ primary = 1;
+ }
+
+ /* Just to be safe */
+ if (mode & 0x80 && !primary)
+ {
+ log_error ("primary key is not really primary!\n");
+ return;
+ }
+
+ mode &= ~0x80;
+
+ if (!primary && (mode == 1 || mode == 2))
+ {
+ if (sk)
+ {
+ PKT_secret_key *primary_sk = xmalloc_clear (sizeof (*primary_sk));
+ get_seckey (primary_sk, sk->main_keyid);
+ print_fingerprint (NULL, primary_sk, mode | 0x80);
+ free_secret_key (primary_sk);
+ }
+ else
+ {
+ PKT_public_key *primary_pk = xmalloc_clear (sizeof (*primary_pk));
+ get_pubkey (primary_pk, pk->main_keyid);
+ print_fingerprint (primary_pk, NULL, mode | 0x80);
+ free_public_key (primary_pk);
+ }
}
- else if (mode == 2) {
- fp = NULL; /* use tty */
- if(primary)
- /* TRANSLATORS: this should fit into 24 bytes to that the
- * fingerprint data is properly aligned with the user ID */
- text = _(" Primary key fingerprint:");
- else
- text = _(" Subkey fingerprint:");
+
+ if (mode == 1)
+ {
+ fp = log_get_stream ();
+ if (primary)
+ text = _("Primary key fingerprint:");
+ else
+ text = _(" Subkey fingerprint:");
+ }
+ else if (mode == 2)
+ {
+ fp = NULL; /* Use tty. */
+ if (primary)
+ /* TRANSLATORS: this should fit into 24 bytes to that the
+ * fingerprint data is properly aligned with the user ID */
+ text = _(" Primary key fingerprint:");
+ else
+ text = _(" Subkey fingerprint:");
}
- else if (mode == 3) {
- fp = NULL; /* use tty */
- text = _(" Key fingerprint =");
+ else if (mode == 3)
+ {
+ fp = NULL; /* Use tty. */
+ text = _(" Key fingerprint =");
}
- else {
- fp = stdout;
- text = _(" Key fingerprint =");
+ else
+ {
+ fp = stdout;
+ text = _(" Key fingerprint =");
}
-
- if (sk)
- fingerprint_from_sk (sk, array, &n);
- else
- fingerprint_from_pk (pk, array, &n);
- p = array;
- if (opt.with_colons && !mode) {
- fprintf (fp, "fpr:::::::::");
- for (i=0; i < n ; i++, p++ )
- fprintf (fp, "%02X", *p );
- putc(':', fp);
+
+ if (sk)
+ fingerprint_from_sk (sk, array, &n);
+ else
+ fingerprint_from_pk (pk, array, &n);
+ p = array;
+ if (opt.with_colons && !mode)
+ {
+ fprintf (fp, "fpr:::::::::");
+ for (i = 0; i < n; i++, p++)
+ fprintf (fp, "%02X", *p);
+ putc (':', fp);
}
- else {
- if (fp)
- fputs (text, fp);
- else
- tty_printf ("%s", text);
- if (n == 20) {
- for (i=0; i < n ; i++, i++, p += 2 ) {
- if (fp) {
- if (i == 10 )
- putc(' ', fp);
- fprintf (fp, " %02X%02X", *p, p[1] );
- }
- else {
- if (i == 10 )
- tty_printf (" ");
- tty_printf (" %02X%02X", *p, p[1]);
- }
+ else
+ {
+ if (fp)
+ fputs (text, fp);
+ else
+ tty_printf ("%s", text);
+ if (n == 20)
+ {
+ for (i = 0; i < n; i++, i++, p += 2)
+ {
+ if (fp)
+ {
+ if (i == 10)
+ putc (' ', fp);
+ fprintf (fp, " %02X%02X", *p, p[1]);
+ }
+ else
+ {
+ if (i == 10)
+ tty_printf (" ");
+ tty_printf (" %02X%02X", *p, p[1]);
+ }
}
}
- else {
- for (i=0; i < n ; i++, p++ ) {
- if (fp) {
- if (i && !(i%8) )
- putc (' ', fp);
- fprintf (fp, " %02X", *p );
- }
- else {
- if (i && !(i%8) )
- tty_printf (" ");
- tty_printf (" %02X", *p );
- }
+ else
+ {
+ for (i = 0; i < n; i++, p++)
+ {
+ if (fp)
+ {
+ if (i && !(i % 8))
+ putc (' ', fp);
+ fprintf (fp, " %02X", *p);
+ }
+ else
+ {
+ if (i && !(i % 8))
+ tty_printf (" ");
+ tty_printf (" %02X", *p);
+ }
}
}
}
- if (fp)
- putc ('\n', fp);
- else
- tty_printf ("\n");
+ if (fp)
+ putc ('\n', fp);
+ else
+ tty_printf ("\n");
}
-/* Print the serial number of an OpenPGP card if available. */
+/* Print the serial number of an OpenPGP card if available. */
static void
-print_card_serialno (PKT_secret_key *sk)
+print_card_serialno (PKT_secret_key * sk)
{
int i;
if (!sk)
return;
- if (!sk->is_protected || sk->protect.s2k.mode != 1002)
+ if (!sk->is_protected || sk->protect.s2k.mode != 1002)
return; /* Not a card. */
if (opt.with_colons)
return; /* Handled elsewhere. */
@@ -1610,19 +1692,21 @@ print_card_serialno (PKT_secret_key *sk)
fputs (_(" Card serial no. ="), stdout);
putchar (' ');
if (sk->protect.ivlen == 16
- && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6) )
- { /* This is an OpenPGP card. Just print the relevant part. */
- for (i=8; i < 14; i++)
- {
- if (i == 10)
- putchar (' ');
- printf ("%02X", sk->protect.iv[i]);
- }
+ && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6))
+ {
+ /* This is an OpenPGP card. Just print the relevant part. */
+ for (i = 8; i < 14; i++)
+ {
+ if (i == 10)
+ putchar (' ');
+ printf ("%02X", sk->protect.iv[i]);
+ }
}
else
- { /* Something is wrong: Print all. */
- for (i=0; i < sk->protect.ivlen; i++)
- printf ("%02X", sk->protect.iv[i]);
+ {
+ /* Something is wrong: Print all. */
+ for (i = 0; i < sk->protect.ivlen; i++)
+ printf ("%02X", sk->protect.iv[i]);
}
putchar ('\n');
}
@@ -1632,32 +1716,32 @@ print_card_serialno (PKT_secret_key *sk)
void
set_attrib_fd (int fd)
{
- static int last_fd=-1;
+ static int last_fd = -1;
- if ( fd != -1 && last_fd == fd )
+ if (fd != -1 && last_fd == fd)
return;
- if ( attrib_fp && attrib_fp != stdout && attrib_fp != stderr
- && attrib_fp != log_get_stream () )
+ if (attrib_fp && attrib_fp != stdout && attrib_fp != stderr
+ && attrib_fp != log_get_stream ())
fclose (attrib_fp);
attrib_fp = NULL;
- if ( fd == -1 )
+ if (fd == -1)
return;
#ifdef HAVE_DOSISH_SYSTEM
setmode (fd, O_BINARY);
#endif
- if( fd == 1 )
+ if (fd == 1)
attrib_fp = stdout;
- else if( fd == 2 )
+ else if (fd == 2)
attrib_fp = stderr;
else
attrib_fp = fdopen (fd, "wb");
- if (!attrib_fp)
+ if (!attrib_fp)
{
- log_fatal("can't open fd %d for attribute output: %s\n",
- fd, strerror(errno));
+ log_fatal ("can't open fd %d for attribute output: %s\n",
+ fd, strerror (errno));
}
-
+
last_fd = fd;
}