diff options
author | David Shaw <[email protected]> | 2005-10-26 16:09:23 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2005-10-26 16:09:23 +0000 |
commit | b9f1815947ca7ce2cd4de19d9fa5a8cdfac0c43b (patch) | |
tree | 67f7facb8972e6a3133982ff66f2a140bb830bd0 | |
parent | * readline.m4: Check for rl_completion_func_t and rl_completion_matches. (diff) | |
download | gnupg-b9f1815947ca7ce2cd4de19d9fa5a8cdfac0c43b.tar.gz gnupg-b9f1815947ca7ce2cd4de19d9fa5a8cdfac0c43b.zip |
* keygen.c (proc_parameter_file): Default key and subkey usage flags to
algo capabilities if parameter file doesn't specify them. Noted by Timo
Schulz.
Diffstat (limited to '')
-rw-r--r-- | g10/ChangeLog | 6 | ||||
-rw-r--r-- | g10/keygen.c | 36 |
2 files changed, 35 insertions, 7 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog index 46f0a4179..14abfb3cb 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,9 @@ +2005-10-26 David Shaw <[email protected]> + + * keygen.c (proc_parameter_file): Default key and subkey usage + flags to algo capabilities if parameter file doesn't specify them. + Noted by Timo Schulz. + 2005-10-18 Werner Koch <[email protected]> * cardglue.c (pin_cb): Fixed prompt for repeated PIN. Return diff --git a/g10/keygen.c b/g10/keygen.c index d2348c07c..61f9bf871 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -1955,7 +1955,7 @@ parse_parameter_usage (const char *fname, } } r->u.usage = use; - return 0; + return 1; } static int @@ -2062,14 +2062,14 @@ proc_parameter_file( struct para_data_s *para, const char *fname, const char *s1, *s2, *s3; size_t n; char *p; - int have_user_id=0; + int have_user_id=0,err,algo; /* Check that we have all required parameters. */ r = get_parameter( para, pKEYTYPE ); if(r) { - if(check_pubkey_algo2(get_parameter_algo(para,pKEYTYPE), - PUBKEY_USAGE_SIG)) + algo=get_parameter_algo(para,pKEYTYPE); + if(check_pubkey_algo2(algo,PUBKEY_USAGE_SIG)) { log_error("%s:%d: invalid algorithm\n", fname, r->lnr ); return -1; @@ -2081,19 +2081,41 @@ proc_parameter_file( struct para_data_s *para, const char *fname, return -1; } - if (parse_parameter_usage (fname, para, pKEYUSAGE)) + err=parse_parameter_usage (fname, para, pKEYUSAGE); + if(err==0) + { + /* Default to algo capabilities if key-usage is not provided */ + r=xmalloc_clear(sizeof(*r)); + r->key=pKEYUSAGE; + r->u.usage=openpgp_pk_algo_usage(algo); + r->next=para; + para=r; + } + else if(err==-1) return -1; r = get_parameter( para, pSUBKEYTYPE ); if(r) { - if(check_pubkey_algo( get_parameter_algo( para, pSUBKEYTYPE))) + algo=get_parameter_algo( para, pSUBKEYTYPE); + if(check_pubkey_algo(algo)) { log_error("%s:%d: invalid algorithm\n", fname, r->lnr ); return -1; } - if(parse_parameter_usage (fname, para, pSUBKEYUSAGE)) + err=parse_parameter_usage (fname, para, pSUBKEYUSAGE); + if(err==0) + { + /* Default to algo capabilities if subkey-usage is not + provided */ + r=xmalloc_clear(sizeof(*r)); + r->key=pSUBKEYUSAGE; + r->u.usage=openpgp_pk_algo_usage(algo); + r->next=para; + para=r; + } + else if(err==-1) return -1; } |