aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2005-10-26 16:09:23 +0000
committerDavid Shaw <[email protected]>2005-10-26 16:09:23 +0000
commitb9f1815947ca7ce2cd4de19d9fa5a8cdfac0c43b (patch)
tree67f7facb8972e6a3133982ff66f2a140bb830bd0
parent* readline.m4: Check for rl_completion_func_t and rl_completion_matches. (diff)
downloadgnupg-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/ChangeLog6
-rw-r--r--g10/keygen.c36
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;
}