1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-23 10:29:58 +01:00

* hkp.c (dehtmlize): Fix bug #121 (memory corruption on some platforms).

Special thanks to Michael C. Toren for his help in lining up a sparc to
test this fix on.

* keyserver.c (keyserver_work): Call out error for keyserver helper with a
different version than us.

* main.h, g10.c (main), import.c (parse_import_options,
fix_pks_corruption): It's really PKS corruption, not HKP corruption.
Keep the old repair-hkp-subkey-bug command as an alias.

* g10.c (main): Rename --no-version to --no-emit-version for consistency.
Keep --no-version as an alias.
This commit is contained in:
David Shaw 2003-04-09 01:01:22 +00:00
parent 001ff9a09e
commit 78da3fdfaa
6 changed files with 38 additions and 10 deletions

View File

@ -1,3 +1,20 @@
2003-04-08 David Shaw <dshaw@jabberwocky.com>
* hkp.c (dehtmlize): Fix bug #121 (memory corruption on some
platforms). Special thanks to Michael C. Toren for his help in
lining up a sparc to test this fix on.
* keyserver.c (keyserver_work): Call out error for keyserver
helper with a different version than us.
* main.h, g10.c (main), import.c (parse_import_options,
fix_pks_corruption): It's really PKS corruption, not HKP
corruption. Keep the old repair-hkp-subkey-bug command as an
alias.
* g10.c (main): Rename --no-version to --no-emit-version for
consistency. Keep --no-version as an alias.
2003-04-04 David Shaw <dshaw@jabberwocky.com> 2003-04-04 David Shaw <dshaw@jabberwocky.com>
* pkclist.c (algo_available): PGP 8 can use the SHA-256 hash. * pkclist.c (algo_available): PGP 8 can use the SHA-256 hash.

View File

@ -155,8 +155,8 @@ enum cmd_and_opt_values { aNull = 0,
oAttributeFile, /* only used with risc os */ oAttributeFile, /* only used with risc os */
oSKComments, oSKComments,
oNoSKComments, oNoSKComments,
oNoVersion,
oEmitVersion, oEmitVersion,
oNoEmitVersion,
oCompletesNeeded, oCompletesNeeded,
oMarginalsNeeded, oMarginalsNeeded,
oMaxCertDepth, oMaxCertDepth,
@ -530,8 +530,9 @@ static ARGPARSE_OPTS opts[] = {
{ oNoShowNotation, "no-show-notation", 0, "@" }, { oNoShowNotation, "no-show-notation", 0, "@" },
{ oComment, "comment", 2, "@" }, { oComment, "comment", 2, "@" },
{ oDefaultComment, "default-comment", 0, "@" }, { oDefaultComment, "default-comment", 0, "@" },
{ oNoVersion, "no-version", 0, "@"},
{ oEmitVersion, "emit-version", 0, "@"}, { oEmitVersion, "emit-version", 0, "@"},
{ oNoEmitVersion, "no-emit-version", 0, "@"},
{ oNoEmitVersion, "no-version", 0, "@"}, /* alias */
{ oNotDashEscaped, "not-dash-escaped", 0, "@" }, { oNotDashEscaped, "not-dash-escaped", 0, "@" },
{ oEscapeFrom, "escape-from-lines", 0, "@" }, { oEscapeFrom, "escape-from-lines", 0, "@" },
{ oNoEscapeFrom, "no-escape-from-lines", 0, "@" }, { oNoEscapeFrom, "no-escape-from-lines", 0, "@" },
@ -1108,7 +1109,7 @@ main( int argc, char **argv )
opt.import_options=0; opt.import_options=0;
opt.export_options= opt.export_options=
EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES; EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES;
opt.keyserver_options.import_options=IMPORT_REPAIR_HKP_SUBKEY_BUG; opt.keyserver_options.import_options=IMPORT_REPAIR_PKS_SUBKEY_BUG;
opt.keyserver_options.export_options= opt.keyserver_options.export_options=
EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES; EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES;
opt.keyserver_options.include_subkeys=1; opt.keyserver_options.include_subkeys=1;
@ -1379,8 +1380,8 @@ main( int argc, char **argv )
case oQuickRandom: quick_random_gen(1); break; case oQuickRandom: quick_random_gen(1); break;
case oSKComments: opt.sk_comments=1; break; case oSKComments: opt.sk_comments=1; break;
case oNoSKComments: opt.sk_comments=0; break; case oNoSKComments: opt.sk_comments=0; break;
case oNoVersion: opt.no_version=1; break;
case oEmitVersion: opt.no_version=0; break; case oEmitVersion: opt.no_version=0; break;
case oNoEmitVersion: opt.no_version=1; break;
case oCompletesNeeded: opt.completes_needed = pargs.r.ret_int; break; case oCompletesNeeded: opt.completes_needed = pargs.r.ret_int; break;
case oMarginalsNeeded: opt.marginals_needed = pargs.r.ret_int; break; case oMarginalsNeeded: opt.marginals_needed = pargs.r.ret_int; break;
case oMaxCertDepth: opt.max_cert_depth = pargs.r.ret_int; break; case oMaxCertDepth: opt.max_cert_depth = pargs.r.ret_int; break;

View File

@ -320,6 +320,8 @@ dehtmlize(char *line)
while(isspace(((unsigned char*)parsed)[parsedindex])) while(isspace(((unsigned char*)parsed)[parsedindex]))
{ {
parsed[parsedindex]='\0'; parsed[parsedindex]='\0';
if(parsedindex==0)
break;
parsedindex--; parsedindex--;
} }
} }
@ -411,7 +413,7 @@ parse_hkp_index(IOBUF buffer,char *line)
line+=4; line+=4;
tok=strsep(&line,"/"); tok=strsep(&line,"/");
if(tok==NULL) if(tok==NULL || strlen(tok)==0)
return ret; return ret;
if(tok[strlen(tok)-1]=='R') if(tok[strlen(tok)-1]=='R')

View File

@ -96,7 +96,8 @@ parse_import_options(char *str,unsigned int *options)
} import_opts[]= } import_opts[]=
{ {
{"allow-local-sigs",IMPORT_ALLOW_LOCAL_SIGS}, {"allow-local-sigs",IMPORT_ALLOW_LOCAL_SIGS},
{"repair-hkp-subkey-bug",IMPORT_REPAIR_HKP_SUBKEY_BUG}, {"repair-hkp-subkey-bug",IMPORT_REPAIR_PKS_SUBKEY_BUG},
{"repair-pks-subkey-bug",IMPORT_REPAIR_PKS_SUBKEY_BUG},
{NULL,0} {NULL,0}
}; };
@ -452,7 +453,7 @@ remove_bad_stuff (KBNODE keyblock)
} }
} }
/* Walk through the subkeys on a pk to find if we have the HKP /* Walk through the subkeys on a pk to find if we have the PKS
disease: multiple subkeys with their binding sigs stripped, and the disease: multiple subkeys with their binding sigs stripped, and the
sig for the first subkey placed after the last subkey. That is, sig for the first subkey placed after the last subkey. That is,
instead of "pk uid sig sub1 bind1 sub2 bind2 sub3 bind3" we have instead of "pk uid sig sub1 bind1 sub2 bind2 sub3 bind3" we have
@ -462,7 +463,7 @@ remove_bad_stuff (KBNODE keyblock)
sub2 sub3". Returns TRUE if the keyblock was modified. */ sub2 sub3". Returns TRUE if the keyblock was modified. */
static int static int
fix_hkp_corruption(KBNODE keyblock) fix_pks_corruption(KBNODE keyblock)
{ {
int changed=0,keycount=0; int changed=0,keycount=0;
KBNODE node,last=NULL,sknode=NULL; KBNODE node,last=NULL,sknode=NULL;
@ -627,7 +628,9 @@ import_one( const char *fname, KBNODE keyblock, int fast,
clear_kbnode_flags( keyblock ); clear_kbnode_flags( keyblock );
if((options&IMPORT_REPAIR_HKP_SUBKEY_BUG) && fix_hkp_corruption(keyblock)) /* It's really PKS corruption, not HKP corruption, but I won't
change the string in stable. */
if((options&IMPORT_REPAIR_PKS_SUBKEY_BUG) && fix_pks_corruption(keyblock))
log_info(_("key %08lX: HKP subkey corruption repaired\n"), log_info(_("key %08lX: HKP subkey corruption repaired\n"),
(ulong)keyid[1]); (ulong)keyid[1]);

View File

@ -728,6 +728,11 @@ keyserver_work(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,int count)
action==SEARCH?"search":"unknown", action==SEARCH?"search":"unknown",
opt.keyserver_scheme); opt.keyserver_scheme);
case KEYSERVER_VERSION_ERROR:
log_error(_("gpgkeys_%s does not support handler version %d\n"),
opt.keyserver_scheme,KEYSERVER_PROTO_VERSION);
break;
case KEYSERVER_INTERNAL_ERROR: case KEYSERVER_INTERNAL_ERROR:
default: default:
log_error(_("keyserver internal error\n")); log_error(_("keyserver internal error\n"));

View File

@ -153,7 +153,7 @@ KBNODE make_mpi_comment_node( const char *s, MPI a );
/*-- import.c --*/ /*-- import.c --*/
#define IMPORT_ALLOW_LOCAL_SIGS 1 #define IMPORT_ALLOW_LOCAL_SIGS 1
#define IMPORT_REPAIR_HKP_SUBKEY_BUG 2 #define IMPORT_REPAIR_PKS_SUBKEY_BUG 2
int parse_import_options(char *str,unsigned int *options); int parse_import_options(char *str,unsigned int *options);
void import_keys( char **fnames, int nnames, int fast, void import_keys( char **fnames, int nnames, int fast,