1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-04-17 15:44:34 +02:00

See ChangeLog: Thu May 6 14:18:17 CEST 1999 Werner Koch

This commit is contained in:
Werner Koch 1999-05-06 12:26:10 +00:00
parent e5a79b2da8
commit 7cb8838061
27 changed files with 4036 additions and 3151 deletions

21
BUGS
View File

@ -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 5. key has expiration date from 1. and gpg reports that pubkey
and seckey differ. and seckey differ.
The for loop the exp.date is set before v3 detection? The for loop the exp.date is set before v3 detection?
[is this bug still there?] [is this bug still alive?]
[ *] #5 [ *] #5
/home/jam/.gnupg/pubring.gpg: can't open gdbm file: Can't be writer /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 --> IRIX bug still there
[ *] #13 1999-04-05 Next #17
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

View File

@ -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> Thu Apr 8 09:35:53 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
* acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for

20
OBUGS
View File

@ -44,4 +44,24 @@
gpg --list-secret-keys --with-colon SEGVs gpg --list-secret-keys --with-colon SEGVs
FIX: 1999-03-10 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
View File

@ -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----- -----BEGIN PGP SIGNED MESSAGE-----
GnuPG - The GNU Privacy Guard 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 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 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 GnuPG works best on GNU/Linux or *BSD. Other Unices are
also supported but are not as well tested as the Free Unices. 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 signatures provided. My PGP2 key is well known and published in
the "Global Trust Register for 1998", ISBN 0-9532397-0-5. the "Global Trust Register for 1998", ISBN 0-9532397-0-5.
I have included my pubring as "g10/pubring.asc", which contains I have included my pubring as "g10/pubring.asc", which contains
the key used to make GnuPG signatures: the key used to make GnuPG signatures:
"pub 1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) <dd9jn@gnu.org>" "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" "Key fingerprint = 6BD9 050F D8FC 941B 4341 2DCC 68B7 AB89 5754 8DCD"
My new DSA key is: You may want to add this DSA key to your GnuPG pubring and use it in
"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
the future to verify new releases. Because you verified this README 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 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 Please subscribe to announce@gnupg.org by sending a mail with
the word "subscribe" in the body to "g10-request@net.lut.ac.uk". a subject of "subscribe" to "announce-request@gnupg.org". If you
This mailing list is closed (only subscribers are allowed to post) have problems, please subscribe to "gnupg-users@gnupg.org" by sending
to avoid misuse by folks who don't know the Netiquette and trash mail with the subject "subscribe" to "gnupg-users-request@gnupg.org"
your mailspool with commercial junk. 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. 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" 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. key - different keys will always have different fingerprints.
It is easy to compare fingerprints by phone and I suggest It is easy to compare fingerprints by phone and I suggest
that you print your fingerprint on the back of your business 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. 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 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. Have fun and remember: Echelon is looking at you kid.
-----BEGIN PGP SIGNATURE----- -----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 Comment: For info see http://www.gnupg.org
iQB1AwUBNr2fPh0Z9MEMmFelAQHqNAL/e7pApR0CGUJ/zuIsjaVhNGPEgKAglcEd iQB1AwUBNzFgoB0Z9MEMmFelAQG1EgL/UlmBc7X9UoSh0ge1FNSNncHQGIX8wHkG
YuVdB+RCN0wq7ZfI0AHU2FdVISRACmSN3xituTTgeiOUsczM40EZ4l1XNfyRF768 0BHOkcHS9XNxZokgkxoUTSRDFlXxW9auWpYKYeNkkck8S9ExtOJK6FABme6Daof0
fglui6XxEeYHFY7mSQMgzzFWDG0Squx0 Hfe4E7TA82T73gvsMMlN6wyys3k5gTRt
=enRo =FP1e
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

1
THANKS
View File

@ -5,6 +5,7 @@ errors.
Anand Kumria wildfire@progsoc.uts.edu.au Anand Kumria wildfire@progsoc.uts.edu.au
Ariel T Glenn ariel@columbia.edu Ariel T Glenn ariel@columbia.edu
Bodo Moeller Bodo_Moeller@public.uni-hamburg.de
Bryan Fullerton bryanf@samurai.com Bryan Fullerton bryanf@samurai.com
Brian Moore bem@cmc.net Brian Moore bem@cmc.net
Brian Warner warner@lothar.com Brian Warner warner@lothar.com

3
TODO
View File

@ -2,8 +2,6 @@
* add some status output put for signing and encryption. * add some status output put for signing and encryption.
replace the putc in primegen with some kind of status-fd outputs. 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. * Speed up calculation of key validity.
* See why we always get this "Hmmm, public key not anymore available" * 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. encrypt package was found. Extension: display a list of all recipients.
* Add NO_PUBKEY and NO_SECKEY status lines. * 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 * Solaris make has problems with the generated POTFILES - seems to be a
gettext bug. gettext bug.

View File

@ -1 +1 @@
0.9.5b 0.9.6

View File

@ -60,7 +60,7 @@ chdir () {
have_hash_algo () { have_hash_algo () {
if ../g10/gpgm --homedir . --version | grep "Hash:.*$1" >/dev/null if ../g10/gpg --homedir . --version | grep "Hash:.*$1" >/dev/null
then then
true true
else else

View File

@ -41,7 +41,6 @@ libcipher_a_SOURCES = cipher.c \
des.c \ des.c \
des.h \ des.h \
twofish.c \ twofish.c \
twofish.h \
blowfish.c \ blowfish.c \
blowfish.h \ blowfish.h \
cast5.c \ cast5.c \

View File

@ -77,6 +77,9 @@ more arguments in future versions.
NODATA <what> NODATA <what>
No data has been found. Codes for what are: No data has been found. Codes for what are:
1 - No armored data. 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_UNDEFINED
TRUST_NEVER TRUST_NEVER

View File

@ -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> 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. * sign.c (sign_file): Fixed hashing in case of no subpackets.

View File

@ -258,38 +258,42 @@ hash_public_key( MD_HANDLE md, PKT_public_key *pk )
pkt.pkt.public_key = pk; pkt.pkt.public_key = pk;
if( (rc = build_packet( a, &pkt )) ) if( (rc = build_packet( a, &pkt )) )
log_fatal("build public_key for hashing failed: %s\n", g10_errstr(rc)); log_fatal("build public_key for hashing failed: %s\n", g10_errstr(rc));
/* skip the constructed header */
ctb = iobuf_get_noeof(a); if( !(pk->version == 3 && pk->pubkey_algo == 16) ) {
pktlen = 0; /* skip the constructed header but don't do this for our very old
if( (ctb & 0x40) ) { * v3 ElG keys */
c = iobuf_get_noeof(a); ctb = iobuf_get_noeof(a);
if( c < 192 ) pktlen = 0;
pktlen = c; if( (ctb & 0x40) ) {
else if( c < 224 ) {
pktlen = (c - 192) * 256;
c = iobuf_get_noeof(a); 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 ) { else {
pktlen = iobuf_get_noeof(a) << 24; int lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3));
pktlen |= iobuf_get_noeof(a) << 16; for( ; lenbytes; lenbytes-- ) {
pktlen |= iobuf_get_noeof(a) << 8; pktlen <<= 8;
pktlen |= iobuf_get_noeof(a); 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 { /* hash the packet body */
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!) */
while( (c=iobuf_get(a)) != -1 ) { while( (c=iobuf_get(a)) != -1 ) {
#if 0 #if 0
fprintf( fp," %02x", c ); fprintf( fp," %02x", c );

View File

@ -1243,7 +1243,9 @@ main( int argc, char **argv )
set_packet_list_mode(1); set_packet_list_mode(1);
opt.list_packets=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); iobuf_close(a);
} }
break; break;

View File

@ -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 ); keyid_from_pk( k->pkt->pkt.public_key, aki );
log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n", log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n",
(ulong)aki[0], (ulong)aki[1], (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 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 ); keyid_from_sk( k->pkt->pkt.secret_key, aki );
log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n", log_debug(" aki=%08lx%08lx algo=%d mode=%d an=%u\n",
(ulong)aki[0], (ulong)aki[1], (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 if( an == mode

View File

@ -302,7 +302,8 @@ dump_kbnode( KBNODE node )
fputs("\"\n", stderr); fputs("\"\n", stderr);
} }
else if( node->pkt->pkttype == PKT_SIGNATURE ) { 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] ); (ulong)node->pkt->pkt.signature->keyid[1] );
} }
else if( node->pkt->pkttype == PKT_PUBLIC_KEY else if( node->pkt->pkttype == PKT_PUBLIC_KEY

View File

@ -122,8 +122,6 @@ check_all_keysigs( KBNODE keyblock, int only_selected )
int anyuid = 0; int anyuid = 0;
for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) { for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
int is_rev = 0;
if( node->pkt->pkttype == PKT_USER_ID ) { if( node->pkt->pkttype == PKT_USER_ID ) {
PKT_user_id *uid = node->pkt->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 else if( selected && node->pkt->pkttype == PKT_SIGNATURE
&& (node->pkt->pkt.signature->sig_class&~3) == 0x10 && ( (node->pkt->pkt.signature->sig_class&~3) == 0x10
&& (is_rev = node->pkt->pkt.signature->sig_class == 0x30) ) { || node->pkt->pkt.signature->sig_class == 0x30 ) ) {
PKT_signature *sig = node->pkt->pkt.signature; PKT_signature *sig = node->pkt->pkt.signature;
int sigrc, selfsig; int sigrc, selfsig;
int is_rev = sig->sig_class == 0x30;
switch( (rc = check_key_signature( keyblock, node, &selfsig)) ) { switch( (rc = check_key_signature( keyblock, node, &selfsig)) ) {
case 0: 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 ) int with_fpr, int with_subkeys, int with_prefs )
{ {
KBNODE node; KBNODE node;
int i; int i, rc;
/* the keys */ /* the keys */
for( node = keyblock; node; node = node->next ) { 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), datestr_from_sk(sk),
expirestr_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 */ /* the user ids */
i = 0; i = 0;
@ -1677,7 +1690,7 @@ menu_revsig( KBNODE keyblock )
pkt = m_alloc_clear( sizeof *pkt ); pkt = m_alloc_clear( sizeof *pkt );
pkt->pkttype = PKT_SIGNATURE; pkt->pkttype = PKT_SIGNATURE;
pkt->pkt.signature = sig; pkt->pkt.signature = sig;
insert_kbnode( unode, new_kbnode(pkt), PKT_SIGNATURE ); insert_kbnode( unode, new_kbnode(pkt), 0 );
goto reloop; goto reloop;
} }
@ -1701,7 +1714,7 @@ menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock )
int upd_trust = 0; int upd_trust = 0;
int rc; 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; mainpk = pub_keyblock->pkt->pkt.public_key;
for( node = pub_keyblock; node; node = node->next ) { for( node = pub_keyblock; node; node = node->next ) {
if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY 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 = m_alloc_clear( sizeof *pkt );
pkt->pkttype = PKT_SIGNATURE; pkt->pkttype = PKT_SIGNATURE;
pkt->pkt.signature = sig; pkt->pkt.signature = sig;
insert_kbnode( node, new_kbnode(pkt), PKT_SIGNATURE ); insert_kbnode( node, new_kbnode(pkt), 0 );
goto reloop; goto reloop;
} }
} }

View File

@ -215,7 +215,7 @@ proc_pubkey_enc( CTX c, PACKET *pkt )
else { else {
/* fixme: defer this message until we have parsed all packets of /* fixme: defer this message until we have parsed all packets of
* this type - do this by building a list of keys with their stati * 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 */ * this list to display some information */
log_error(_("public key decryption failed: %s\n"), g10_errstr(result)); 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_SHA1 );
md_enable( c->mfx.md, DIGEST_ALGO_MD5 ); md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
} }
#if 1 #if 0
#warning md_start_debug is enabled #warning md_start_debug is enabled
md_start_debug( c->mfx.md, "verify" ); md_start_debug( c->mfx.md, "verify" );
#endif #endif
@ -753,12 +753,13 @@ do_proc_packets( CTX c, IOBUF a )
{ {
PACKET *pkt = m_alloc( sizeof *pkt ); PACKET *pkt = m_alloc( sizeof *pkt );
int rc=0; int rc=0;
int any_data=0;
int newpkt; int newpkt;
c->iobuf = a; c->iobuf = a;
init_packet(pkt); init_packet(pkt);
while( (rc=parse_packet(a, pkt)) != -1 ) { while( (rc=parse_packet(a, pkt)) != -1 ) {
any_data = 1;
if( rc ) { if( rc ) {
free_packet(pkt); free_packet(pkt);
if( rc == G10ERR_INVALID_PACKET ) if( rc == G10ERR_INVALID_PACKET )
@ -844,7 +845,13 @@ do_proc_packets( CTX c, IOBUF a )
else else
free_packet(pkt); 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: leave:
release_list( c ); release_list( c );

View File

@ -287,6 +287,16 @@ do_we_trust( PKT_public_key *pk, int trustlevel )
_("Use this key anyway? ")) ) _("Use this key anyway? ")) )
return 0; 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) ) { switch( (trustlevel & TRUST_MASK) ) {
@ -368,6 +378,8 @@ do_we_trust_pre( PKT_public_key *pk, int trustlevel )
if( (trustlevel & TRUST_FLAG_REVOKED) && !rc ) if( (trustlevel & TRUST_FLAG_REVOKED) && !rc )
return 0; return 0;
if( (trustlevel & TRUST_FLAG_SUB_REVOKED) && !rc )
return 0;
else if( !opt.batch && !rc ) { else if( !opt.batch && !rc ) {
char *p; char *p;
u32 keyid[2]; 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(_("WARNING: This key has been revoked by its owner!\n"));
log_info(_(" This could mean that the signature is forgery.\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) ) { switch( (trustlevel & TRUST_MASK) ) {

View File

@ -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: leave:
if( DBG_TRUST ) if( DBG_TRUST )

View File

@ -33,6 +33,7 @@
#define TRUST_ULTIMATE 6 /* u: ultimately trusted */ #define TRUST_ULTIMATE 6 /* u: ultimately trusted */
/* trust values not covered by the mask */ /* trust values not covered by the mask */
#define TRUST_FLAG_REVOKED 32 /* r: revoked */ #define TRUST_FLAG_REVOKED 32 /* r: revoked */
#define TRUST_FLAG_SUB_REVOKED 64
#define PREFTYPE_SYM 1 #define PREFTYPE_SYM 1

987
po/de.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

988
po/fr.po

File diff suppressed because it is too large Load Diff

985
po/it.po

File diff suppressed because it is too large Load Diff

987
po/pl.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

987
po/ru.po

File diff suppressed because it is too large Load Diff