mirror of
git://git.gnupg.org/gnupg.git
synced 2025-03-11 22:52:47 +01:00
Made --fixed-list-mode obsolete.
This commit is contained in:
parent
5a788b9e00
commit
035c838f71
2
NEWS
2
NEWS
@ -17,6 +17,8 @@ Noteworthy changes in version 2.0.10 (unreleased)
|
|||||||
|
|
||||||
* gpg-connect-agent accepts commands given as command line arguments.
|
* gpg-connect-agent accepts commands given as command line arguments.
|
||||||
|
|
||||||
|
* The gpg2 option --fixed-list-mode is now implicitly used and obsolete.
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 2.0.9 (2008-03-26)
|
Noteworthy changes in version 2.0.9 (2008-03-26)
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
@ -16,9 +16,9 @@ sub:r:1536:20:5CE086B5B5A18FF4:899817788:1025961788:::::esc:
|
|||||||
fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4:
|
fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4:
|
||||||
|
|
||||||
The double --with-fingerprint prints the fingerprint for the subkeys
|
The double --with-fingerprint prints the fingerprint for the subkeys
|
||||||
too, --fixed-list-mode is themodern listing way printing dates in
|
too. --fixed-list-mode is the modern listing way printing dates in
|
||||||
seconds since Epoch and does not merge the first userID with the pub
|
seconds since Epoch and does not merge the first userID with the pub
|
||||||
record.
|
record; gpg2 does this by default and the option is a dummy.
|
||||||
|
|
||||||
|
|
||||||
1. Field: Type of record
|
1. Field: Type of record
|
||||||
|
@ -1846,6 +1846,10 @@ source distribution.
|
|||||||
@opindex fixed-list-mode
|
@opindex fixed-list-mode
|
||||||
Do not merge primary user ID and primary key in @option{--with-colon}
|
Do not merge primary user ID and primary key in @option{--with-colon}
|
||||||
listing mode and print all timestamps as seconds since 1970-01-01.
|
listing mode and print all timestamps as seconds since 1970-01-01.
|
||||||
|
@ifclear gpgone
|
||||||
|
Since GnuPG 2.0.10, this mode is always used and thus this option is
|
||||||
|
obsolete; it does not harm to use it though.
|
||||||
|
@end ifclear
|
||||||
|
|
||||||
@item --with-fingerprint
|
@item --with-fingerprint
|
||||||
@opindex with-fingerprint
|
@opindex with-fingerprint
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2008-06-11 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* gpg.c: Make --fixed-list-mode a dummy.
|
||||||
|
* options.h (struct): Removed FIXED_LIST_MODE.
|
||||||
|
* keyid.c (colon_strtime, colon_datestr_from_pk)
|
||||||
|
(colon_datestr_from_sk, colon_datestr_from_sig)
|
||||||
|
(colon_expirestr_from_sig): Remove fixed_list_mode case.
|
||||||
|
* keylist.c (list_keyblock_colon): Ditto. Remove all now unsed
|
||||||
|
code and reindent.
|
||||||
|
|
||||||
2008-05-31 Werner Koch <wk@g10code.com>
|
2008-05-31 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
* keygen.c (ask_user_id): Change the string printed as header of
|
* keygen.c (ask_user_id): Change the string printed as header of
|
||||||
|
@ -2734,7 +2734,7 @@ main (int argc, char **argv)
|
|||||||
"--keyserver-options ","http-proxy");
|
"--keyserver-options ","http-proxy");
|
||||||
break;
|
break;
|
||||||
case oFastListMode: opt.fast_list_mode = 1; break;
|
case oFastListMode: opt.fast_list_mode = 1; break;
|
||||||
case oFixedListMode: opt.fixed_list_mode = 1; break;
|
case oFixedListMode: /* Dummy */ break;
|
||||||
case oListOnly: opt.list_only=1; break;
|
case oListOnly: opt.list_only=1; break;
|
||||||
case oIgnoreTimeConflict: opt.ignore_time_conflict = 1; break;
|
case oIgnoreTimeConflict: opt.ignore_time_conflict = 1; break;
|
||||||
case oIgnoreValidFrom: opt.ignore_valid_from = 1; break;
|
case oIgnoreValidFrom: opt.ignore_valid_from = 1; break;
|
||||||
|
59
g10/keyid.c
59
g10/keyid.c
@ -607,60 +607,51 @@ usagestr_from_pk( PKT_public_key *pk )
|
|||||||
const char *
|
const char *
|
||||||
colon_strtime (u32 t)
|
colon_strtime (u32 t)
|
||||||
{
|
{
|
||||||
if (!t)
|
static char buf[20];
|
||||||
return "";
|
|
||||||
if (opt.fixed_list_mode) {
|
if (!t)
|
||||||
static char buf[15];
|
return "";
|
||||||
sprintf (buf, "%lu", (ulong)t);
|
snprintf (buf, sizeof buf, "%lu", (ulong)t);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
|
||||||
return strtimestamp(t);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
colon_datestr_from_pk (PKT_public_key *pk)
|
colon_datestr_from_pk (PKT_public_key *pk)
|
||||||
{
|
{
|
||||||
if (opt.fixed_list_mode) {
|
static char buf[20];
|
||||||
static char buf[15];
|
|
||||||
sprintf (buf, "%lu", (ulong)pk->timestamp);
|
snprintf (buf, sizeof buf, "%lu", (ulong)pk->timestamp);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
|
||||||
return datestr_from_pk (pk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
colon_datestr_from_sk (PKT_secret_key *sk)
|
colon_datestr_from_sk (PKT_secret_key *sk)
|
||||||
{
|
{
|
||||||
if (opt.fixed_list_mode) {
|
static char buf[20];
|
||||||
static char buf[15];
|
|
||||||
sprintf (buf, "%lu", (ulong)sk->timestamp);
|
snprintf (buf, sizeof buf, "%lu", (ulong)sk->timestamp);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
|
||||||
return datestr_from_sk (sk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
colon_datestr_from_sig (PKT_signature *sig)
|
colon_datestr_from_sig (PKT_signature *sig)
|
||||||
{
|
{
|
||||||
if (opt.fixed_list_mode) {
|
static char buf[20];
|
||||||
static char buf[15];
|
|
||||||
sprintf (buf, "%lu", (ulong)sig->timestamp);
|
snprintf (buf, sizeof buf, "%lu", (ulong)sig->timestamp);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
|
||||||
return datestr_from_sig (sig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
colon_expirestr_from_sig (PKT_signature *sig)
|
colon_expirestr_from_sig (PKT_signature *sig)
|
||||||
{
|
{
|
||||||
if(!sig->expiredate)
|
static char buf[20];
|
||||||
return "";
|
|
||||||
if (opt.fixed_list_mode) {
|
if (!sig->expiredate)
|
||||||
static char buf[15];
|
return "";
|
||||||
sprintf (buf, "%lu", (ulong)sig->expiredate);
|
|
||||||
return buf;
|
snprintf (buf, sizeof buf,"%lu", (ulong)sig->expiredate);
|
||||||
}
|
return buf;
|
||||||
return expirestr_from_sig (sig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
627
g10/keylist.c
627
g10/keylist.c
@ -1,6 +1,6 @@
|
|||||||
/* keylist.c - print keys
|
/* keylist.c - print keys
|
||||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003,
|
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003,
|
||||||
* 2004, 2005 Free Software Foundation, Inc.
|
* 2004, 2005, 2008 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -1062,366 +1062,323 @@ print_revokers(PKT_public_key *pk)
|
|||||||
static void
|
static void
|
||||||
list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
|
list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
KBNODE kbctx;
|
KBNODE kbctx;
|
||||||
KBNODE node;
|
KBNODE node;
|
||||||
PKT_public_key *pk;
|
PKT_public_key *pk;
|
||||||
PKT_secret_key *sk;
|
PKT_secret_key *sk;
|
||||||
u32 keyid[2];
|
u32 keyid[2];
|
||||||
int any=0;
|
int trustletter = 0;
|
||||||
int trustletter = 0;
|
int ulti_hack = 0;
|
||||||
int ulti_hack = 0;
|
int i;
|
||||||
int i;
|
|
||||||
|
|
||||||
/* get the keyid from the keyblock */
|
/* get the keyid from the keyblock */
|
||||||
node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
|
node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
|
||||||
if( !node ) {
|
if ( !node )
|
||||||
log_error("Oops; key lost!\n");
|
{
|
||||||
dump_kbnode( keyblock );
|
log_error("Oops; key lost!\n");
|
||||||
return;
|
dump_kbnode( keyblock );
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( secret ) {
|
if ( secret )
|
||||||
pk = NULL;
|
{
|
||||||
sk = node->pkt->pkt.secret_key;
|
pk = NULL;
|
||||||
keyid_from_sk( sk, keyid );
|
sk = node->pkt->pkt.secret_key;
|
||||||
printf("sec::%u:%d:%08lX%08lX:%s:%s:::",
|
keyid_from_sk ( sk, keyid );
|
||||||
nbits_from_sk( sk ),
|
printf ("sec::%u:%d:%08lX%08lX:%s:%s:::",
|
||||||
sk->pubkey_algo,
|
nbits_from_sk( sk ),
|
||||||
(ulong)keyid[0],(ulong)keyid[1],
|
sk->pubkey_algo,
|
||||||
colon_datestr_from_sk( sk ),
|
(ulong)keyid[0],(ulong)keyid[1],
|
||||||
colon_strtime (sk->expiredate)
|
colon_datestr_from_sk( sk ),
|
||||||
/* fixme: add LID here */ );
|
colon_strtime (sk->expiredate)
|
||||||
|
/* fixme: add LID here */ );
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
pk = node->pkt->pkt.public_key;
|
{
|
||||||
sk = NULL;
|
pk = node->pkt->pkt.public_key;
|
||||||
keyid_from_pk( pk, keyid );
|
sk = NULL;
|
||||||
fputs( "pub:", stdout );
|
keyid_from_pk( pk, keyid );
|
||||||
if ( !pk->is_valid )
|
fputs( "pub:", stdout );
|
||||||
putchar ('i');
|
if ( !pk->is_valid )
|
||||||
else if ( pk->is_revoked )
|
putchar ('i');
|
||||||
putchar ('r');
|
else if ( pk->is_revoked )
|
||||||
else if ( pk->has_expired )
|
putchar ('r');
|
||||||
putchar ('e');
|
else if ( pk->has_expired )
|
||||||
else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
|
putchar ('e');
|
||||||
;
|
else if ( opt.fast_list_mode || opt.no_expensive_trust_checks )
|
||||||
else {
|
;
|
||||||
trustletter = get_validity_info ( pk, NULL );
|
else
|
||||||
if( trustletter == 'u' )
|
{
|
||||||
ulti_hack = 1;
|
trustletter = get_validity_info ( pk, NULL );
|
||||||
putchar(trustletter);
|
if ( trustletter == 'u' )
|
||||||
|
ulti_hack = 1;
|
||||||
|
putchar(trustletter);
|
||||||
}
|
}
|
||||||
printf(":%u:%d:%08lX%08lX:%s:%s::",
|
printf (":%u:%d:%08lX%08lX:%s:%s::",
|
||||||
nbits_from_pk( pk ),
|
nbits_from_pk( pk ),
|
||||||
pk->pubkey_algo,
|
pk->pubkey_algo,
|
||||||
(ulong)keyid[0],(ulong)keyid[1],
|
(ulong)keyid[0],(ulong)keyid[1],
|
||||||
colon_datestr_from_pk( pk ),
|
colon_datestr_from_pk( pk ),
|
||||||
colon_strtime (pk->expiredate) );
|
colon_strtime (pk->expiredate) );
|
||||||
if( !opt.fast_list_mode && !opt.no_expensive_trust_checks )
|
if ( !opt.fast_list_mode && !opt.no_expensive_trust_checks )
|
||||||
putchar( get_ownertrust_info(pk) );
|
putchar( get_ownertrust_info(pk) );
|
||||||
putchar(':');
|
putchar(':');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.fixed_list_mode) {
|
putchar (':');
|
||||||
/* do not merge the first uid with the primary key */
|
putchar (':');
|
||||||
putchar(':');
|
print_capabilities (pk, sk, keyblock);
|
||||||
putchar(':');
|
if (secret)
|
||||||
print_capabilities (pk, sk, keyblock);
|
{
|
||||||
if (secret) {
|
putchar (':'); /* End of field 13. */
|
||||||
|
putchar (':'); /* End of field 14. */
|
||||||
|
if (sk->protect.s2k.mode == 1001)
|
||||||
|
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. */
|
||||||
|
}
|
||||||
|
putchar('\n');
|
||||||
|
if (pk)
|
||||||
|
print_revokers (pk);
|
||||||
|
if (fpr)
|
||||||
|
print_fingerprint (pk, sk, 0);
|
||||||
|
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 )
|
||||||
|
{
|
||||||
|
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 13. */
|
||||||
putchar(':'); /* End of field 14. */
|
putchar(':'); /* End of field 14. */
|
||||||
if (sk->protect.s2k.mode == 1001)
|
if (sk2->protect.s2k.mode == 1001)
|
||||||
putchar('#'); /* Key is just a stub. */
|
putchar ('#'); /* Key is just a stub. */
|
||||||
else if (sk->protect.s2k.mode == 1002) {
|
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
|
/* Key is stored on an external token (card) or handled by
|
||||||
here. */
|
the gpg-agent. Print the serial number of that token
|
||||||
for (i=0; i < sk->protect.ivlen; i++)
|
here. */
|
||||||
printf ("%02X", sk->protect.iv[i]);
|
for (i=0; i < sk2->protect.ivlen; i++)
|
||||||
}
|
printf ("%02X", sk2->protect.iv[i]);
|
||||||
|
}
|
||||||
putchar(':'); /* End of field 15. */
|
putchar(':'); /* End of field 15. */
|
||||||
|
putchar ('\n');
|
||||||
|
|
||||||
|
if ( fpr > 1 )
|
||||||
|
print_fingerprint ( NULL, sk2, 0 );
|
||||||
}
|
}
|
||||||
putchar('\n');
|
else if ( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE )
|
||||||
if(pk)
|
{
|
||||||
print_revokers(pk);
|
PKT_signature *sig = node->pkt->pkt.signature;
|
||||||
if( fpr )
|
int sigrc,fprokay=0;
|
||||||
print_fingerprint( pk, sk, 0 );
|
char *sigstr;
|
||||||
if( opt.with_key_data )
|
size_t fplen;
|
||||||
print_key_data( pk );
|
byte fparray[MAX_FINGERPRINT_LEN];
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
|
if ( sig->sig_class == 0x20 || sig->sig_class == 0x28
|
||||||
if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) {
|
|| sig->sig_class == 0x30 )
|
||||||
PKT_user_id *uid=node->pkt->pkt.user_id;
|
sigstr = "rev";
|
||||||
if(attrib_fp && node->pkt->pkt.user_id->attrib_data!=NULL)
|
else if ( (sig->sig_class&~3) == 0x10 )
|
||||||
dump_attribs(node->pkt->pkt.user_id,pk,sk);
|
sigstr = "sig";
|
||||||
/*
|
else if ( sig->sig_class == 0x18 )
|
||||||
* Fixme: We need a is_valid flag here too
|
sigstr = "sig";
|
||||||
*/
|
else if ( sig->sig_class == 0x1F )
|
||||||
if( any ) {
|
sigstr = "sig";
|
||||||
char *str=uid->attrib_data?"uat":"uid";
|
else
|
||||||
/* If we're listing a secret key, leave out the
|
{
|
||||||
validity values for now. This is handled better in
|
printf ("sig::::::::::%02x%c:\n",
|
||||||
1.9. */
|
sig->sig_class, sig->flags.exportable?'x':'l');
|
||||||
if ( sk )
|
continue;
|
||||||
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 )
|
if ( opt.check_sigs )
|
||||||
uid_validity=get_validity_info (pk, uid);
|
{
|
||||||
else
|
PKT_public_key *signer_pk=NULL;
|
||||||
uid_validity = 'u';
|
|
||||||
printf("%s:%c::::",str,uid_validity);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%s:",colon_strtime(uid->created));
|
if (opt.no_sig_cache)
|
||||||
printf("%s:",colon_strtime(uid->expiredate));
|
{
|
||||||
|
if (!rc)
|
||||||
namehash_from_uid(uid);
|
{
|
||||||
|
fingerprint_from_pk (signer_pk, fparray, &fplen);
|
||||||
for(i=0; i < 20; i++ )
|
fprokay = 1;
|
||||||
printf("%02X",uid->namehash[i]);
|
}
|
||||||
|
free_public_key(signer_pk);
|
||||||
printf("::");
|
}
|
||||||
}
|
|
||||||
if(uid->attrib_data)
|
|
||||||
printf("%u %lu",uid->numattribs,uid->attrib_len);
|
|
||||||
else
|
|
||||||
print_string(stdout,uid->name,uid->len, ':' );
|
|
||||||
putchar(':');
|
|
||||||
if (any)
|
|
||||||
putchar('\n');
|
|
||||||
else {
|
|
||||||
putchar(':');
|
|
||||||
print_capabilities (pk, sk, keyblock);
|
|
||||||
putchar('\n');
|
|
||||||
if( fpr )
|
|
||||||
print_fingerprint( pk, sk, 0 );
|
|
||||||
if( opt.with_key_data )
|
|
||||||
print_key_data( pk );
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
|
|
||||||
u32 keyid2[2];
|
|
||||||
PKT_public_key *pk2 = node->pkt->pkt.public_key;
|
|
||||||
|
|
||||||
if( !any ) {
|
|
||||||
putchar(':');
|
|
||||||
putchar(':');
|
|
||||||
print_capabilities (pk, sk, keyblock);
|
|
||||||
putchar('\n');
|
|
||||||
if( fpr )
|
|
||||||
print_fingerprint( pk, sk, 0 ); /* of the main key */
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
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:::::",
|
else
|
||||||
nbits_from_pk( pk2 ),
|
{
|
||||||
pk2->pubkey_algo,
|
rc = 0;
|
||||||
(ulong)keyid2[0],(ulong)keyid2[1],
|
sigrc = ' ';
|
||||||
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;
|
|
||||||
|
|
||||||
if( !any ) {
|
|
||||||
putchar(':');
|
|
||||||
putchar(':');
|
|
||||||
print_capabilities (pk, sk, keyblock);
|
|
||||||
putchar('\n');
|
|
||||||
if( fpr )
|
|
||||||
print_fingerprint( pk, sk, 0 ); /* of the main key */
|
|
||||||
any = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
if (opt.fixed_list_mode) {
|
|
||||||
/* We print the serial number only in fixed list mode
|
|
||||||
for the primary key so, so avoid questions we print
|
|
||||||
it for subkeys also only in this mode. There is no
|
|
||||||
technical reason, though. */
|
|
||||||
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');
|
fputs ( sigstr, stdout );
|
||||||
if( fpr > 1 )
|
putchar (':');
|
||||||
print_fingerprint( NULL, sk2, 0 );
|
if ( sigrc != ' ' )
|
||||||
}
|
putchar (sigrc);
|
||||||
else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) {
|
printf ("::%d:%08lX%08lX:%s:%s:", sig->pubkey_algo,
|
||||||
PKT_signature *sig = node->pkt->pkt.signature;
|
(ulong)sig->keyid[0], (ulong)sig->keyid[1],
|
||||||
int sigrc,fprokay=0;
|
colon_datestr_from_sig(sig),
|
||||||
char *sigstr;
|
colon_expirestr_from_sig(sig));
|
||||||
size_t fplen;
|
|
||||||
byte fparray[MAX_FINGERPRINT_LEN];
|
|
||||||
|
|
||||||
if( !any ) { /* no user id, (maybe a revocation follows)*/
|
if (sig->trust_depth || sig->trust_value)
|
||||||
if( sig->sig_class == 0x20 )
|
printf("%d %d",sig->trust_depth,sig->trust_value);
|
||||||
fputs("[revoked]:", stdout);
|
printf (":");
|
||||||
else if( sig->sig_class == 0x18 )
|
|
||||||
fputs("[key binding]:", stdout);
|
|
||||||
else if( sig->sig_class == 0x28 )
|
|
||||||
fputs("[subkey revoked]:", stdout);
|
|
||||||
else
|
|
||||||
putchar (':');
|
|
||||||
putchar(':');
|
|
||||||
print_capabilities (pk, sk, keyblock);
|
|
||||||
putchar('\n');
|
|
||||||
if( fpr )
|
|
||||||
print_fingerprint( pk, sk, 0 );
|
|
||||||
any=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( sig->sig_class == 0x20 || sig->sig_class == 0x28
|
if (sig->trust_regexp)
|
||||||
|| sig->sig_class == 0x30 )
|
print_string (stdout,sig->trust_regexp,
|
||||||
sigstr = "rev";
|
strlen(sig->trust_regexp),':');
|
||||||
else if( (sig->sig_class&~3) == 0x10 )
|
printf(":");
|
||||||
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 ( sigrc == '%' )
|
||||||
if(opt.no_sig_cache)
|
printf("[%s] ", g10_errstr(rc) );
|
||||||
signer_pk=xmalloc_clear(sizeof(PKT_public_key));
|
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');
|
||||||
|
|
||||||
rc = check_key_signature2( keyblock, node, NULL, signer_pk,
|
if (opt.no_sig_cache && opt.check_sigs && fprokay)
|
||||||
NULL, NULL, NULL );
|
{
|
||||||
switch ( gpg_err_code (rc) ) {
|
putchar (':');
|
||||||
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)
|
for (i=0; i < fplen ; i++ )
|
||||||
{
|
printf ("%02X", fparray[i] );
|
||||||
if(rc==0)
|
|
||||||
{
|
|
||||||
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)
|
putchar (':');
|
||||||
printf("%d %d",sig->trust_depth,sig->trust_value);
|
}
|
||||||
printf(":");
|
|
||||||
|
|
||||||
if(sig->trust_regexp)
|
printf ("\n");
|
||||||
print_string(stdout,sig->trust_regexp,
|
|
||||||
strlen(sig->trust_regexp),':');
|
|
||||||
printf(":");
|
|
||||||
|
|
||||||
if( sigrc == '%' )
|
if (opt.show_subpackets)
|
||||||
printf("[%s] ", g10_errstr(rc) );
|
print_subpackets_colon (sig);
|
||||||
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)
|
/* fixme: check or list other sigs here */
|
||||||
{
|
}
|
||||||
printf(":");
|
|
||||||
|
|
||||||
for (i=0; i < fplen ; i++ )
|
|
||||||
printf ("%02X", fparray[i] );
|
|
||||||
|
|
||||||
printf(":");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
if(opt.show_subpackets)
|
|
||||||
print_subpackets_colon(sig);
|
|
||||||
|
|
||||||
/* fixme: check or list other sigs here */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( !any ) {/* oops, no user id */
|
|
||||||
putchar(':');
|
|
||||||
putchar(':');
|
|
||||||
print_capabilities (pk, sk, keyblock);
|
|
||||||
putchar('\n');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +179,6 @@ struct
|
|||||||
int no_literal;
|
int no_literal;
|
||||||
ulong set_filesize;
|
ulong set_filesize;
|
||||||
int fast_list_mode;
|
int fast_list_mode;
|
||||||
int fixed_list_mode;
|
|
||||||
int ignore_time_conflict;
|
int ignore_time_conflict;
|
||||||
int ignore_valid_from;
|
int ignore_valid_from;
|
||||||
int ignore_crc_error;
|
int ignore_crc_error;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user