mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-30 16:17:02 +01:00
See ChangeLog: Thu May 6 14:18:17 CEST 1999 Werner Koch
This commit is contained in:
parent
e5a79b2da8
commit
7cb8838061
21
BUGS
21
BUGS
@ -32,7 +32,7 @@ and after about half a day in the rsync snapshots.
|
||||
5. key has expiration date from 1. and gpg reports that pubkey
|
||||
and seckey differ.
|
||||
The for loop the exp.date is set before v3 detection?
|
||||
[is this bug still there?]
|
||||
[is this bug still alive?]
|
||||
|
||||
[ *] #5
|
||||
/home/jam/.gnupg/pubring.gpg: can't open gdbm file: Can't be writer
|
||||
@ -48,22 +48,5 @@ and after about half a day in the rsync snapshots.
|
||||
--> IRIX bug still there
|
||||
|
||||
|
||||
[ *] #13 1999-04-05
|
||||
Trying to generate very large keys fails with a BUG in read_pool()
|
||||
FIX: 1999-04-06
|
||||
|
||||
|
||||
[ *] #14 1999-04-05 <anonymous>
|
||||
If you use --s2k-cipher-algo twofish, the the program crashes with
|
||||
a BUG at line 226 of passphrase.c.
|
||||
FIX: 1999-04-06
|
||||
|
||||
|
||||
[ **] #15 1999-04-05
|
||||
Hash calculation for subkey bindings is not according to rfc2440 if
|
||||
a 4 byte length header is used for the subkey.
|
||||
FIX: 1999-04-06
|
||||
|
||||
|
||||
Next #16
|
||||
Next #17
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
Thu May 6 14:18:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* README: Minor updates
|
||||
|
||||
* VERSION: Now 0.9.6
|
||||
|
||||
Thu Apr 8 09:35:53 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for
|
||||
|
20
OBUGS
20
OBUGS
@ -44,4 +44,24 @@
|
||||
gpg --list-secret-keys --with-colon SEGVs
|
||||
FIX: 1999-03-10
|
||||
|
||||
[ *] #13 1999-04-05
|
||||
Trying to generate very large keys fails with a BUG in read_pool()
|
||||
FIX: 1999-04-06
|
||||
|
||||
|
||||
[ *] #14 1999-04-05 <anonymous>
|
||||
If you use --s2k-cipher-algo twofish, the the program crashes with
|
||||
a BUG at line 226 of passphrase.c.
|
||||
FIX: 1999-04-06
|
||||
|
||||
|
||||
[ **] #15 1999-04-05
|
||||
Hash calculation for subkey bindings is not according to rfc2440 if
|
||||
a 4 byte length header is used for the subkey.
|
||||
FIX: 1999-04-06
|
||||
|
||||
[***] #16 1999-03-23 <jafo@tummy.com>
|
||||
Verifying detached signatures with an empty file yields a rc of 0.
|
||||
FIX: 1999-05-06
|
||||
|
||||
|
||||
|
49
README
49
README
@ -1,13 +1,8 @@
|
||||
Please note that this is only a bug fix release and some things
|
||||
do not yet work - see TODO for parts which are problematic
|
||||
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
|
||||
GnuPG - The GNU Privacy Guard
|
||||
-------------------------------
|
||||
Version 0.9
|
||||
Version 0.9.6
|
||||
|
||||
GnuPG is now in Beta test and you should report all bugs to the
|
||||
mailing list (see below). The 0.9.x versions are released mainly
|
||||
@ -17,29 +12,28 @@ do not yet work - see TODO for parts which are problematic
|
||||
|
||||
GnuPG works best on GNU/Linux or *BSD. Other Unices are
|
||||
also supported but are not as well tested as the Free Unices.
|
||||
Please verify the tar file with the PGP2 or GnuPG/PGP5
|
||||
Please verify the tar file with the PGP2 or OpenPGP
|
||||
signatures provided. My PGP2 key is well known and published in
|
||||
the "Global Trust Register for 1998", ISBN 0-9532397-0-5.
|
||||
|
||||
I have included my pubring as "g10/pubring.asc", which contains
|
||||
the key used to make GnuPG signatures:
|
||||
|
||||
"pub 1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) <dd9jn@gnu.org>"
|
||||
"Key fingerprint = 6BD9 050F D8FC 941B 4341 2DCC 68B7 AB89 5754 8DCD"
|
||||
|
||||
My new DSA key is:
|
||||
"pub 1024D/621CC013 1998-07-07 Werner Koch <werner.koch@guug.de>"
|
||||
"Key fingerprint = ECAF 7590 EB34 43B5 C7CF 3ACB 6C7E E1B8 621C C013"
|
||||
|
||||
You may want add my new DSA key to your GnuPG pubring and use it in
|
||||
You may want to add this DSA key to your GnuPG pubring and use it in
|
||||
the future to verify new releases. Because you verified this README
|
||||
file and _checked_that_it_is_really_my PGP2 key 0C9857A5, you can be
|
||||
sure that the above fingerprints are correct.
|
||||
quite sure that the above fingerprint is correct.
|
||||
|
||||
Please subscribe to g10@net.lut.ac.uk by sending a mail with
|
||||
the word "subscribe" in the body to "g10-request@net.lut.ac.uk".
|
||||
This mailing list is closed (only subscribers are allowed to post)
|
||||
to avoid misuse by folks who don't know the Netiquette and trash
|
||||
your mailspool with commercial junk.
|
||||
Please subscribe to announce@gnupg.org by sending a mail with
|
||||
a subject of "subscribe" to "announce-request@gnupg.org". If you
|
||||
have problems, please subscribe to "gnupg-users@gnupg.org" by sending
|
||||
mail with the subject "subscribe" to "gnupg-users-request@gnupg.org"
|
||||
and ask there. The gnupg.org domain is hosted in Germany to avoid
|
||||
possible legal problems with gnu.org (technical advices may count
|
||||
as a violation of ITAR).
|
||||
|
||||
See the file COPYING for copyright and warranty information.
|
||||
|
||||
@ -72,9 +66,11 @@ do not yet work - see TODO for parts which are problematic
|
||||
|
||||
3) "make install"
|
||||
|
||||
4) You end up with the binaries "gpg" and "gpgm" in /usr/local/bin.
|
||||
4) You end up with a "gpg" binray in /usr/local/bin.
|
||||
|
||||
5) Optional, but suggested, install the binary "gpg" as suid root.
|
||||
5) To avoid swapping out of sensitive data, you can install "gpg" as
|
||||
suid root. If you don't do so, you may want to add the option
|
||||
"no-secmem-warning" to ~/.gnupg/options
|
||||
|
||||
|
||||
|
||||
@ -230,7 +226,8 @@ do not yet work - see TODO for parts which are problematic
|
||||
key - different keys will always have different fingerprints.
|
||||
It is easy to compare fingerprints by phone and I suggest
|
||||
that you print your fingerprint on the back of your business
|
||||
card.
|
||||
card. To see the fingerprints of the secondary keys, you can
|
||||
give the command twice; but this is normally not needed.
|
||||
|
||||
If you don't know the owner of the public key you are in trouble.
|
||||
Suppose however that friend of yours knows someone who knows someone
|
||||
@ -442,11 +439,11 @@ do not yet work - see TODO for parts which are problematic
|
||||
Have fun and remember: Echelon is looking at you kid.
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v0.9.2 (GNU/Linux)
|
||||
Version: GnuPG v0.9.5 (GNU/Linux)
|
||||
Comment: For info see http://www.gnupg.org
|
||||
|
||||
iQB1AwUBNr2fPh0Z9MEMmFelAQHqNAL/e7pApR0CGUJ/zuIsjaVhNGPEgKAglcEd
|
||||
YuVdB+RCN0wq7ZfI0AHU2FdVISRACmSN3xituTTgeiOUsczM40EZ4l1XNfyRF768
|
||||
fglui6XxEeYHFY7mSQMgzzFWDG0Squx0
|
||||
=enRo
|
||||
iQB1AwUBNzFgoB0Z9MEMmFelAQG1EgL/UlmBc7X9UoSh0ge1FNSNncHQGIX8wHkG
|
||||
0BHOkcHS9XNxZokgkxoUTSRDFlXxW9auWpYKYeNkkck8S9ExtOJK6FABme6Daof0
|
||||
Hfe4E7TA82T73gvsMMlN6wyys3k5gTRt
|
||||
=FP1e
|
||||
-----END PGP SIGNATURE-----
|
||||
|
1
THANKS
1
THANKS
@ -5,6 +5,7 @@ errors.
|
||||
|
||||
Anand Kumria wildfire@progsoc.uts.edu.au
|
||||
Ariel T Glenn ariel@columbia.edu
|
||||
Bodo Moeller Bodo_Moeller@public.uni-hamburg.de
|
||||
Bryan Fullerton bryanf@samurai.com
|
||||
Brian Moore bem@cmc.net
|
||||
Brian Warner warner@lothar.com
|
||||
|
3
TODO
3
TODO
@ -2,8 +2,6 @@
|
||||
* add some status output put for signing and encryption.
|
||||
replace the putc in primegen with some kind of status-fd outputs.
|
||||
|
||||
* Fix revocation and expire stuff. Subkey revocations are not detected.
|
||||
|
||||
* Speed up calculation of key validity.
|
||||
|
||||
* See why we always get this "Hmmm, public key not anymore available"
|
||||
@ -19,7 +17,6 @@
|
||||
encrypt package was found. Extension: display a list of all recipients.
|
||||
|
||||
* Add NO_PUBKEY and NO_SECKEY status lines.
|
||||
* Add more NODATA status lines
|
||||
|
||||
* Solaris make has problems with the generated POTFILES - seems to be a
|
||||
gettext bug.
|
||||
|
@ -60,7 +60,7 @@ chdir () {
|
||||
|
||||
|
||||
have_hash_algo () {
|
||||
if ../g10/gpgm --homedir . --version | grep "Hash:.*$1" >/dev/null
|
||||
if ../g10/gpg --homedir . --version | grep "Hash:.*$1" >/dev/null
|
||||
then
|
||||
true
|
||||
else
|
||||
|
@ -41,7 +41,6 @@ libcipher_a_SOURCES = cipher.c \
|
||||
des.c \
|
||||
des.h \
|
||||
twofish.c \
|
||||
twofish.h \
|
||||
blowfish.c \
|
||||
blowfish.h \
|
||||
cast5.c \
|
||||
|
@ -77,6 +77,9 @@ more arguments in future versions.
|
||||
NODATA <what>
|
||||
No data has been found. Codes for what are:
|
||||
1 - No armored data.
|
||||
2 - Expected a packet but did not found one.
|
||||
3 - Invalid packet found, this may indicate a non OpenPGP message.
|
||||
You may see more than one of these status lines.
|
||||
|
||||
TRUST_UNDEFINED
|
||||
TRUST_NEVER
|
||||
|
@ -1,3 +1,15 @@
|
||||
Thu May 6 14:18:17 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* trustdb.c (check_trust): Check for revoked subkeys.
|
||||
* pkclist.c (do_we_trust): Handled revoked subkeys.
|
||||
(do_we_trust_pre): Ditto.
|
||||
(check_signatures_trust): Ditto.
|
||||
|
||||
* build-packet.c (hash_public_key): Fix for ancient g10 keys.
|
||||
|
||||
* mainproc.c (do_proc_packets): Return EOF if no data has been read.
|
||||
* g10.c (main): Catch errors for default operation.
|
||||
|
||||
Thu Apr 29 12:29:22 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
|
||||
|
||||
* sign.c (sign_file): Fixed hashing in case of no subpackets.
|
||||
|
@ -258,38 +258,42 @@ hash_public_key( MD_HANDLE md, PKT_public_key *pk )
|
||||
pkt.pkt.public_key = pk;
|
||||
if( (rc = build_packet( a, &pkt )) )
|
||||
log_fatal("build public_key for hashing failed: %s\n", g10_errstr(rc));
|
||||
/* skip the constructed header */
|
||||
ctb = iobuf_get_noeof(a);
|
||||
pktlen = 0;
|
||||
if( (ctb & 0x40) ) {
|
||||
c = iobuf_get_noeof(a);
|
||||
if( c < 192 )
|
||||
pktlen = c;
|
||||
else if( c < 224 ) {
|
||||
pktlen = (c - 192) * 256;
|
||||
|
||||
if( !(pk->version == 3 && pk->pubkey_algo == 16) ) {
|
||||
/* skip the constructed header but don't do this for our very old
|
||||
* v3 ElG keys */
|
||||
ctb = iobuf_get_noeof(a);
|
||||
pktlen = 0;
|
||||
if( (ctb & 0x40) ) {
|
||||
c = iobuf_get_noeof(a);
|
||||
pktlen += c + 192;
|
||||
if( c < 192 )
|
||||
pktlen = c;
|
||||
else if( c < 224 ) {
|
||||
pktlen = (c - 192) * 256;
|
||||
c = iobuf_get_noeof(a);
|
||||
pktlen += c + 192;
|
||||
}
|
||||
else if( c == 255 ) {
|
||||
pktlen = iobuf_get_noeof(a) << 24;
|
||||
pktlen |= iobuf_get_noeof(a) << 16;
|
||||
pktlen |= iobuf_get_noeof(a) << 8;
|
||||
pktlen |= iobuf_get_noeof(a);
|
||||
}
|
||||
}
|
||||
else if( c == 255 ) {
|
||||
pktlen = iobuf_get_noeof(a) << 24;
|
||||
pktlen |= iobuf_get_noeof(a) << 16;
|
||||
pktlen |= iobuf_get_noeof(a) << 8;
|
||||
pktlen |= iobuf_get_noeof(a);
|
||||
else {
|
||||
int lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
|
||||
for( ; lenbytes; lenbytes-- ) {
|
||||
pktlen <<= 8;
|
||||
pktlen |= iobuf_get_noeof(a);
|
||||
}
|
||||
}
|
||||
/* hash a header */
|
||||
md_putc( md, 0x99 );
|
||||
pktlen &= 0xffff; /* can't handle longer packets */
|
||||
md_putc( md, pktlen >> 8 );
|
||||
md_putc( md, pktlen & 0xff );
|
||||
}
|
||||
else {
|
||||
int lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
|
||||
for( ; lenbytes; lenbytes-- ) {
|
||||
pktlen <<= 8;
|
||||
pktlen |= iobuf_get_noeof(a);
|
||||
}
|
||||
}
|
||||
/* hash a header */
|
||||
md_putc( md, 0x99 );
|
||||
pktlen &= 0xffff; /* can't handle longer packets */
|
||||
md_putc( md, pktlen >> 8 );
|
||||
md_putc( md, pktlen & 0xff );
|
||||
/* hash the packet body (don't use pktlen here!) */
|
||||
/* hash the packet body */
|
||||
while( (c=iobuf_get(a)) != -1 ) {
|
||||
#if 0
|
||||
fprintf( fp," %02x", c );
|
||||
|
@ -1243,7 +1243,9 @@ main( int argc, char **argv )
|
||||
set_packet_list_mode(1);
|
||||
opt.list_packets=1;
|
||||
}
|
||||
proc_packets(NULL, a );
|
||||
rc = proc_packets(NULL, a );
|
||||
if( rc )
|
||||
log_error("processing message failed: %s\n", g10_errstr(rc) );
|
||||
iobuf_close(a);
|
||||
}
|
||||
break;
|
||||
|
@ -1438,7 +1438,8 @@ find_by_fpr( KBNODE keyblock, PKT_public_key *pk, const char *name, int mode )
|
||||
keyid_from_pk( k->pkt->pkt.public_key, aki );
|
||||
log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n",
|
||||
(ulong)aki[0], (ulong)aki[1],
|
||||
k->pkt->pkt.public_key->pubkey_algo, mode, an );
|
||||
k->pkt->pkt.public_key->pubkey_algo, mode,
|
||||
(unsigned)an );
|
||||
}
|
||||
|
||||
if( an == mode
|
||||
@ -1470,7 +1471,8 @@ find_by_fpr_sk( KBNODE keyblock, PKT_secret_key *sk,
|
||||
keyid_from_sk( k->pkt->pkt.secret_key, aki );
|
||||
log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n",
|
||||
(ulong)aki[0], (ulong)aki[1],
|
||||
k->pkt->pkt.secret_key->pubkey_algo, mode, an );
|
||||
k->pkt->pkt.secret_key->pubkey_algo, mode,
|
||||
(unsigned)an );
|
||||
}
|
||||
|
||||
if( an == mode
|
||||
|
@ -302,7 +302,8 @@ dump_kbnode( KBNODE node )
|
||||
fputs("\"\n", stderr);
|
||||
}
|
||||
else if( node->pkt->pkttype == PKT_SIGNATURE ) {
|
||||
fprintf(stderr, " keyid=%08lX\n",
|
||||
fprintf(stderr, " class=%02x keyid=%08lX\n",
|
||||
node->pkt->pkt.signature->sig_class,
|
||||
(ulong)node->pkt->pkt.signature->keyid[1] );
|
||||
}
|
||||
else if( node->pkt->pkttype == PKT_PUBLIC_KEY
|
||||
|
@ -122,8 +122,6 @@ check_all_keysigs( KBNODE keyblock, int only_selected )
|
||||
int anyuid = 0;
|
||||
|
||||
for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
|
||||
int is_rev = 0;
|
||||
|
||||
if( node->pkt->pkttype == PKT_USER_ID ) {
|
||||
PKT_user_id *uid = node->pkt->pkt.user_id;
|
||||
|
||||
@ -140,10 +138,11 @@ check_all_keysigs( KBNODE keyblock, int only_selected )
|
||||
}
|
||||
}
|
||||
else if( selected && node->pkt->pkttype == PKT_SIGNATURE
|
||||
&& (node->pkt->pkt.signature->sig_class&~3) == 0x10
|
||||
&& (is_rev = node->pkt->pkt.signature->sig_class == 0x30) ) {
|
||||
&& ( (node->pkt->pkt.signature->sig_class&~3) == 0x10
|
||||
|| node->pkt->pkt.signature->sig_class == 0x30 ) ) {
|
||||
PKT_signature *sig = node->pkt->pkt.signature;
|
||||
int sigrc, selfsig;
|
||||
int is_rev = sig->sig_class == 0x30;
|
||||
|
||||
switch( (rc = check_key_signature( keyblock, node, &selfsig)) ) {
|
||||
case 0:
|
||||
@ -956,7 +955,7 @@ show_key_with_all_names( KBNODE keyblock, int only_marked,
|
||||
int with_fpr, int with_subkeys, int with_prefs )
|
||||
{
|
||||
KBNODE node;
|
||||
int i;
|
||||
int i, rc;
|
||||
|
||||
/* the keys */
|
||||
for( node = keyblock; node; node = node->next ) {
|
||||
@ -1001,6 +1000,20 @@ show_key_with_all_names( KBNODE keyblock, int only_marked,
|
||||
datestr_from_sk(sk),
|
||||
expirestr_from_sk(sk) );
|
||||
}
|
||||
else if( with_subkeys && node->pkt->pkttype == PKT_SIGNATURE
|
||||
&& node->pkt->pkt.signature->sig_class == 0x28 ) {
|
||||
PKT_signature *sig = node->pkt->pkt.signature;
|
||||
|
||||
rc = check_key_signature( keyblock, node, NULL );
|
||||
if( !rc )
|
||||
tty_printf( "rev! subkey has been revoked: %s\n",
|
||||
datestr_from_sig( sig ) );
|
||||
else if( rc == G10ERR_BAD_SIGN )
|
||||
tty_printf( "rev- faked revocation found\n" );
|
||||
else if( rc )
|
||||
tty_printf( "rev? problem checking revocation: %s\n",
|
||||
g10_errstr(rc) );
|
||||
}
|
||||
}
|
||||
/* the user ids */
|
||||
i = 0;
|
||||
@ -1677,7 +1690,7 @@ menu_revsig( KBNODE keyblock )
|
||||
pkt = m_alloc_clear( sizeof *pkt );
|
||||
pkt->pkttype = PKT_SIGNATURE;
|
||||
pkt->pkt.signature = sig;
|
||||
insert_kbnode( unode, new_kbnode(pkt), PKT_SIGNATURE );
|
||||
insert_kbnode( unode, new_kbnode(pkt), 0 );
|
||||
goto reloop;
|
||||
}
|
||||
|
||||
@ -1701,7 +1714,7 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock )
|
||||
int upd_trust = 0;
|
||||
int rc;
|
||||
|
||||
reloop: /* (better this way becuase we are modifing the keyring) */
|
||||
reloop: /* (better this way because we are modifing the keyring) */
|
||||
mainpk = pub_keyblock->pkt->pkt.public_key;
|
||||
for( node = pub_keyblock; node; node = node->next ) {
|
||||
if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY
|
||||
@ -1726,7 +1739,7 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock )
|
||||
pkt = m_alloc_clear( sizeof *pkt );
|
||||
pkt->pkttype = PKT_SIGNATURE;
|
||||
pkt->pkt.signature = sig;
|
||||
insert_kbnode( node, new_kbnode(pkt), PKT_SIGNATURE );
|
||||
insert_kbnode( node, new_kbnode(pkt), 0 );
|
||||
goto reloop;
|
||||
}
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ proc_pubkey_enc( CTX c, PACKET *pkt )
|
||||
else {
|
||||
/* fixme: defer this message until we have parsed all packets of
|
||||
* this type - do this by building a list of keys with their stati
|
||||
* and store it with the conetxt. do_proc_packets can then use
|
||||
* and store it with the context. do_proc_packets can then use
|
||||
* this list to display some information */
|
||||
log_error(_("public key decryption failed: %s\n"), g10_errstr(result));
|
||||
}
|
||||
@ -307,7 +307,7 @@ proc_plaintext( CTX c, PACKET *pkt )
|
||||
md_enable( c->mfx.md, DIGEST_ALGO_SHA1 );
|
||||
md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
|
||||
}
|
||||
#if 1
|
||||
#if 0
|
||||
#warning md_start_debug is enabled
|
||||
md_start_debug( c->mfx.md, "verify" );
|
||||
#endif
|
||||
@ -753,12 +753,13 @@ do_proc_packets( CTX c, IOBUF a )
|
||||
{
|
||||
PACKET *pkt = m_alloc( sizeof *pkt );
|
||||
int rc=0;
|
||||
int any_data=0;
|
||||
int newpkt;
|
||||
|
||||
c->iobuf = a;
|
||||
init_packet(pkt);
|
||||
while( (rc=parse_packet(a, pkt)) != -1 ) {
|
||||
|
||||
any_data = 1;
|
||||
if( rc ) {
|
||||
free_packet(pkt);
|
||||
if( rc == G10ERR_INVALID_PACKET )
|
||||
@ -844,7 +845,13 @@ do_proc_packets( CTX c, IOBUF a )
|
||||
else
|
||||
free_packet(pkt);
|
||||
}
|
||||
rc = 0;
|
||||
if( rc == G10ERR_INVALID_PACKET )
|
||||
write_status_text( STATUS_NODATA, "3" );
|
||||
if( any_data )
|
||||
rc = 0;
|
||||
else if( rc == -1 )
|
||||
write_status_text( STATUS_NODATA, "2" );
|
||||
|
||||
|
||||
leave:
|
||||
release_list( c );
|
||||
|
@ -287,6 +287,16 @@ do_we_trust( PKT_public_key *pk, int trustlevel )
|
||||
_("Use this key anyway? ")) )
|
||||
return 0;
|
||||
}
|
||||
else if( (trustlevel & TRUST_FLAG_SUB_REVOKED) ) {
|
||||
log_info(_("key %08lX: subkey has been revoked!\n"),
|
||||
(ulong)keyid_from_pk( pk, NULL) );
|
||||
if( opt.batch )
|
||||
return 0;
|
||||
|
||||
if( !cpr_get_answer_is_yes("revoked_key.override",
|
||||
_("Use this key anyway? ")) )
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
switch( (trustlevel & TRUST_MASK) ) {
|
||||
@ -368,6 +378,8 @@ do_we_trust_pre( PKT_public_key *pk, int trustlevel )
|
||||
|
||||
if( (trustlevel & TRUST_FLAG_REVOKED) && !rc )
|
||||
return 0;
|
||||
if( (trustlevel & TRUST_FLAG_SUB_REVOKED) && !rc )
|
||||
return 0;
|
||||
else if( !opt.batch && !rc ) {
|
||||
char *p;
|
||||
u32 keyid[2];
|
||||
@ -435,6 +447,10 @@ check_signatures_trust( PKT_signature *sig )
|
||||
log_info(_("WARNING: This key has been revoked by its owner!\n"));
|
||||
log_info(_(" This could mean that the signature is forgery.\n"));
|
||||
}
|
||||
else if( (trustlevel & TRUST_FLAG_SUB_REVOKED) ) {
|
||||
write_status( STATUS_KEYREVOKED );
|
||||
log_info(_("WARNING: This subkey has been revoked by its owner!\n"));
|
||||
}
|
||||
|
||||
|
||||
switch( (trustlevel & TRUST_MASK) ) {
|
||||
|
@ -2780,6 +2780,36 @@ check_trust( PKT_public_key *pk, unsigned *r_trustlevel,
|
||||
}
|
||||
}
|
||||
|
||||
/* is a subkey has been requested, we have to check its keyflags */
|
||||
if( !rc ) {
|
||||
TRUSTREC krec;
|
||||
byte fpr[MAX_FINGERPRINT_LEN] = {0}; /* to avoid compiler warnings */
|
||||
size_t fprlen = 0;
|
||||
ulong recno;
|
||||
int kcount=0;
|
||||
|
||||
for( recno = rec.r.dir.keylist; recno; recno = krec.r.key.next ) {
|
||||
read_record( recno, &krec, RECTYPE_KEY );
|
||||
if( ++kcount == 1 )
|
||||
continue; /* skip the primary key */
|
||||
if( kcount == 2 ) /* now we need the fingerprint */
|
||||
fingerprint_from_pk( pk, fpr, &fprlen );
|
||||
|
||||
if( krec.r.key.fingerprint_len == fprlen
|
||||
&& !memcmp( krec.r.key.fingerprint, fpr, fprlen ) ) {
|
||||
/* found the subkey */
|
||||
if( (krec.r.key.keyflags & KEYF_REVOKED) )
|
||||
trustlevel |= TRUST_FLAG_SUB_REVOKED;
|
||||
/* should we check for keybinding here??? */
|
||||
/* Hmmm: Maybe this whole checking stuff should not go
|
||||
* into the trustdb, but be done direct from the keyblock.
|
||||
* Chnage this all when we add an abstarction layer around
|
||||
* the way certificates are handled by different standards */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
leave:
|
||||
if( DBG_TRUST )
|
||||
|
@ -33,6 +33,7 @@
|
||||
#define TRUST_ULTIMATE 6 /* u: ultimately trusted */
|
||||
/* trust values not covered by the mask */
|
||||
#define TRUST_FLAG_REVOKED 32 /* r: revoked */
|
||||
#define TRUST_FLAG_SUB_REVOKED 64
|
||||
|
||||
|
||||
#define PREFTYPE_SYM 1
|
||||
|
984
po/es_ES.po
984
po/es_ES.po
File diff suppressed because it is too large
Load Diff
985
po/pt_BR.po
985
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user