diff --git a/g10/ChangeLog b/g10/ChangeLog index 0ffbea628..1eed7b183 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,17 @@ +2002-06-10 David Shaw + + * options.h, keyserver.c (keyserver_opts), g10.c (main): New + keyserver option "include-subkeys". This feature already existed, + but now can be turned off. It defaults to on. + + * options.h, keyserver.c (parse_keyserver_options, + keyserver_spawn): There are now enough options to justify making a + structure for the keyserver options rather than a page of + if-then-else-if-then-etc. + + * getkey.c (merge_keys_and_selfsig, merge_selfsigs_main): Fix bug + in calculating key expiration dates. + 2002-06-09 David Shaw * keydb.h, getkey.c (get_user_id_native), import.c (import_one): diff --git a/g10/g10.c b/g10/g10.c index e0e67989e..54eb009bc 100644 --- a/g10/g10.c +++ b/g10/g10.c @@ -907,6 +907,7 @@ main( int argc, char **argv ) opt.pgp2_workarounds = 1; opt.force_v3_sigs = 1; opt.escape_from = 1; + opt.keyserver_options.include_subkeys=1; #if defined (__MINGW32__) || defined (__CYGWIN32__) opt.homedir = read_w32_registry_string( NULL, "Software\\GNU\\GnuPG", "HomeDir" ); #else diff --git a/g10/getkey.c b/g10/getkey.c index fc6daab4d..87680502a 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1084,10 +1084,12 @@ merge_keys_and_selfsig( KBNODE keyblock ) } } - if(pk && (pk->expiredate==0 || pk->expiredate>pk->max_expiredate)) + if(pk && (pk->expiredate==0 || + (pk->max_expiredate && pk->expiredate>pk->max_expiredate))) pk->expiredate=pk->max_expiredate; - if(sk && (sk->expiredate==0 || sk->expiredate>sk->max_expiredate)) + if(sk && (sk->expiredate==0 || + (sk->max_expiredate && sk->expiredate>sk->max_expiredate))) sk->expiredate=sk->max_expiredate; } } @@ -1527,7 +1529,7 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked ) /* Currently only v3 keys have a maximum expiration date, but I'll bet v5 keys get this feature again. */ - if(key_expire==0 || key_expire>pk->max_expiredate) + if(key_expire==0 || (pk->max_expiredate && key_expire>pk->max_expiredate)) key_expire=pk->max_expiredate; pk->has_expired = key_expire >= curtime? 0 : key_expire; diff --git a/g10/keyserver.c b/g10/keyserver.c index 8ee1996c6..d84e14644 100644 --- a/g10/keyserver.c +++ b/g10/keyserver.c @@ -44,6 +44,24 @@ #define SEND 1 #define SEARCH 2 +struct kopts +{ + char *name; + int tell; /* tell remote process about this one */ + int *flag; +} keyserver_opts[]= +{ + {"include-revoked",1,&opt.keyserver_options.include_revoked}, + {"include-disabled",1,&opt.keyserver_options.include_disabled}, + {"include-subkeys",1,&opt.keyserver_options.include_subkeys}, + {"keep-temp-files",0,&opt.keyserver_options.keep_temp_files}, + {"honor-http-proxy",1,&opt.keyserver_options.honor_http_proxy}, + {"broken-http-proxy",1,&opt.keyserver_options.broken_http_proxy}, + {"refresh-add-fake-v3-keyids",0,&opt.keyserver_options.fake_v3_keyids}, + {"auto-key-retrieve",0,&opt.keyserver_options.auto_key_retrieve}, + {NULL} +}; + void parse_keyserver_options(char *options) { @@ -51,51 +69,47 @@ parse_keyserver_options(char *options) do { - if(ascii_strcasecmp(tok,"include-revoked")==0) - opt.keyserver_options.include_revoked=1; - else if(ascii_strcasecmp(tok,"no-include-revoked")==0) - opt.keyserver_options.include_revoked=0; - else if(ascii_strcasecmp(tok,"include-disabled")==0) - opt.keyserver_options.include_disabled=1; - else if(ascii_strcasecmp(tok,"no-include-disabled")==0) - opt.keyserver_options.include_disabled=0; + struct kopts *kopts=keyserver_opts; + int i,hit=0; + + for(i=0,kopts=keyserver_opts;kopts[i].name;i++) + { + if(ascii_strcasecmp(tok,kopts[i].name)==0) + { + *(kopts[i].flag)=1; + hit=1; + break; + } + else if(ascii_memcasecmp("no-",tok,3)==0 && strlen(tok)>3 && + ascii_strcasecmp(&tok[3],kopts[i].name)==0) + { + *(kopts[i].flag)=0; + hit=1; + break; + } + } + + /* These options need more than just a flag */ + if(!hit) + { + if(ascii_strcasecmp(tok,"verbose")==0) + opt.keyserver_options.verbose++; + else if(ascii_strcasecmp(tok,"no-verbose")==0) + opt.keyserver_options.verbose--; #ifdef EXEC_TEMPFILE_ONLY - else if(ascii_strcasecmp(tok,"use-temp-files")==0 || - ascii_strcasecmp(tok,"no-use-temp-files")==0) - log_info(_("Warning: keyserver option \"%s\" is not used " - "on this platform\n"),tok); + else if(ascii_strcasecmp(tok,"use-temp-files")==0 || + ascii_strcasecmp(tok,"no-use-temp-files")==0) + log_info(_("Warning: keyserver option \"%s\" is not used " + "on this platform\n"),tok); #else - else if(ascii_strcasecmp(tok,"use-temp-files")==0) - opt.keyserver_options.use_temp_files=1; - else if(ascii_strcasecmp(tok,"no-use-temp-files")==0) - opt.keyserver_options.use_temp_files=0; + else if(ascii_strcasecmp(tok,"use-temp-files")==0) + opt.keyserver_options.use_temp_files=1; + else if(ascii_strcasecmp(tok,"no-use-temp-files")==0) + opt.keyserver_options.use_temp_files=0; #endif - else if(ascii_strcasecmp(tok,"keep-temp-files")==0) - opt.keyserver_options.keep_temp_files=1; - else if(ascii_strcasecmp(tok,"no-keep-temp-files")==0) - opt.keyserver_options.keep_temp_files=0; - else if(ascii_strcasecmp(tok,"verbose")==0) - opt.keyserver_options.verbose++; - else if(ascii_strcasecmp(tok,"no-verbose")==0) - opt.keyserver_options.verbose--; - else if(ascii_strcasecmp(tok,"honor-http-proxy")==0) - opt.keyserver_options.honor_http_proxy=1; - else if(ascii_strcasecmp(tok,"no-honor-http-proxy")==0) - opt.keyserver_options.honor_http_proxy=0; - else if(ascii_strcasecmp(tok,"refresh-add-fake-v3-keyids")==0) - opt.keyserver_options.refresh_add_fake_v3_keyids=1; - else if(ascii_strcasecmp(tok,"no-refresh-add-fake-v3-keyids")==0) - opt.keyserver_options.refresh_add_fake_v3_keyids=0; - else if(ascii_strcasecmp(tok,"auto-key-retrieve")==0) - opt.keyserver_options.auto_key_retrieve=1; - else if(ascii_strcasecmp(tok,"no-auto-key-retrieve")==0) - opt.keyserver_options.auto_key_retrieve=0; - else if(ascii_strcasecmp(tok,"broken-http-proxy")==0) - opt.keyserver_options.broken_http_proxy=1; - else if(ascii_strcasecmp(tok,"no-broken-http-proxy")==0) - opt.keyserver_options.broken_http_proxy=0; - else if(strlen(tok)>0) - add_to_strlist(&opt.keyserver_options.other,tok); + else if(strlen(tok)>0) + add_to_strlist(&opt.keyserver_options.other,tok); + } tok=strsep(&options," ,"); } @@ -117,9 +131,9 @@ parse_keyserver_uri(char *uri) if(ascii_strcasecmp(opt.keyserver_scheme,"x-broken-hkp")==0) { log_info(_("WARNING: %s is a deprecated option.\n"), - "x-broken-hkp"); + "x-broken-hkp"); log_info(_("please use \"--keyserver-options %s\" instead\n"), - "broken-http-proxy"); + "broken-http-proxy"); opt.keyserver_scheme="hkp"; opt.keyserver_options.broken_http_proxy=1; } @@ -128,7 +142,7 @@ parse_keyserver_uri(char *uri) /* Canonicalize this to "hkp" so it works with both the internal and external keyserver interface. */ opt.keyserver_scheme="hkp"; - } + } /* Skip the "//", if any */ if(strlen(uri)>2 && uri[0]=='/' && uri[1]=='/') @@ -290,6 +304,7 @@ keyserver_spawn(int action,STRLIST list, unsigned int maxlen=256,buflen; char *command=NULL,*searchstr=NULL; byte *line=NULL; + struct kopts *kopts; struct exec_info *spawn; #ifdef EXEC_TEMPFILE_ONLY @@ -335,11 +350,9 @@ keyserver_spawn(int action,STRLIST list, /* Write options */ - fprintf(spawn->tochild,"OPTION %sinclude-revoked\n", - opt.keyserver_options.include_revoked?"":"no-"); - - fprintf(spawn->tochild,"OPTION %sinclude-disabled\n", - opt.keyserver_options.include_disabled?"":"no-"); + for(i=0,kopts=keyserver_opts;kopts[i].name;i++) + if(*(kopts[i].flag) && kopts[i].tell) + fprintf(spawn->tochild,"OPTION %s\n",kopts[i].name); for(i=0;itochild,"OPTION verbose\n"); @@ -874,8 +887,7 @@ keyserver_refresh(STRLIST users) /* If refresh_add_fake_v3_keyids is on and it's a HKP or MAILTO scheme, then enable fake v3 keyid generation. */ - if(opt.keyserver_options.refresh_add_fake_v3_keyids && - opt.keyserver_scheme && + if(opt.keyserver_options.fake_v3_keyids && opt.keyserver_scheme && (ascii_strcasecmp(opt.keyserver_scheme,"hkp")==0 || ascii_strcasecmp(opt.keyserver_scheme,"mailto")==0)) fakev3=1; diff --git a/g10/options.h b/g10/options.h index c4637b847..754c28611 100644 --- a/g10/options.h +++ b/g10/options.h @@ -117,14 +117,15 @@ struct { struct { int verbose; - int include_revoked:1; - int include_disabled:1; - int use_temp_files:1; - int keep_temp_files:1; - int refresh_add_fake_v3_keyids:1; - int auto_key_retrieve:1; - int honor_http_proxy:1; - int broken_http_proxy:1; + int include_revoked; + int include_disabled; + int include_subkeys; + int honor_http_proxy; + int broken_http_proxy; + int use_temp_files; + int keep_temp_files; + int fake_v3_keyids; + int auto_key_retrieve; STRLIST other; } keyserver_options; int exec_disable;