mirror of
https://github.com/QuasarApp/openssl.git
synced 2025-05-01 12:09:42 +00:00
Fix the reading of DSA parameters files using the dsaparam app
DSA parameters files were failing to load correctly. We also fix a number of follow on issues which resulted in multiple similar errors messages being displayed for the same problem, as well as a seg-fault. Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/13317)
This commit is contained in:
parent
dee8eded24
commit
8b0ec09934
@ -179,14 +179,10 @@ int dsaparam_main(int argc, char **argv)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
params = load_keyparams(infile, 1, "DSA parameters");
|
params = load_keyparams(infile, 1, "DSA", "DSA parameters");
|
||||||
if (!EVP_PKEY_is_a(params, "DSA")) {
|
|
||||||
EVP_PKEY_free(params);
|
|
||||||
params = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (params == NULL) {
|
if (params == NULL) {
|
||||||
BIO_printf(bio_err, "Error, unable to load DSA parameters\n");
|
/* Error message should already have been displayed */
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,8 @@ EVP_PKEY *load_key(const char *uri, int format, int maybe_stdin,
|
|||||||
const char *pass, ENGINE *e, const char *desc);
|
const char *pass, ENGINE *e, const char *desc);
|
||||||
EVP_PKEY *load_pubkey(const char *uri, int format, int maybe_stdin,
|
EVP_PKEY *load_pubkey(const char *uri, int format, int maybe_stdin,
|
||||||
const char *pass, ENGINE *e, const char *desc);
|
const char *pass, ENGINE *e, const char *desc);
|
||||||
EVP_PKEY *load_keyparams(const char *uri, int maybe_stdin, const char *desc);
|
EVP_PKEY *load_keyparams(const char *uri, int maybe_stdin, const char *keytype,
|
||||||
|
const char *desc);
|
||||||
int load_certs(const char *uri, STACK_OF(X509) **certs,
|
int load_certs(const char *uri, STACK_OF(X509) **certs,
|
||||||
const char *pass, const char *desc);
|
const char *pass, const char *desc);
|
||||||
int load_crls(const char *uri, STACK_OF(X509_CRL) **crls,
|
int load_crls(const char *uri, STACK_OF(X509_CRL) **crls,
|
||||||
|
@ -598,7 +598,8 @@ EVP_PKEY *load_pubkey(const char *uri, int format, int maybe_stdin,
|
|||||||
return pkey;
|
return pkey;
|
||||||
}
|
}
|
||||||
|
|
||||||
EVP_PKEY *load_keyparams(const char *uri, int maybe_stdin, const char *desc)
|
EVP_PKEY *load_keyparams(const char *uri, int maybe_stdin, const char *keytype,
|
||||||
|
const char *desc)
|
||||||
{
|
{
|
||||||
EVP_PKEY *params = NULL;
|
EVP_PKEY *params = NULL;
|
||||||
|
|
||||||
@ -607,9 +608,13 @@ EVP_PKEY *load_keyparams(const char *uri, int maybe_stdin, const char *desc)
|
|||||||
|
|
||||||
(void)load_key_certs_crls(uri, maybe_stdin, NULL, desc,
|
(void)load_key_certs_crls(uri, maybe_stdin, NULL, desc,
|
||||||
NULL, NULL, ¶ms, NULL, NULL, NULL, NULL);
|
NULL, NULL, ¶ms, NULL, NULL, NULL, NULL);
|
||||||
if (params == NULL) {
|
if (params != NULL && keytype != NULL && !EVP_PKEY_is_a(params, keytype)) {
|
||||||
BIO_printf(bio_err, "Unable to load %s\n", desc);
|
BIO_printf(bio_err,
|
||||||
|
"Unable to load %s from %s (unexpected parameters type)\n",
|
||||||
|
desc, uri);
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
|
EVP_PKEY_free(params);
|
||||||
|
params = NULL;
|
||||||
}
|
}
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
@ -699,8 +704,9 @@ int load_key_certs_crls(const char *uri, int maybe_stdin,
|
|||||||
int ncrls = 0;
|
int ncrls = 0;
|
||||||
const char *failed =
|
const char *failed =
|
||||||
ppkey != NULL ? "key" : ppubkey != NULL ? "public key" :
|
ppkey != NULL ? "key" : ppubkey != NULL ? "public key" :
|
||||||
pcert != NULL ? "cert" : pcrl != NULL ? "CRL" :
|
pparams != NULL ? "params" : pcert != NULL ? "cert" :
|
||||||
pcerts != NULL ? "certs" : pcrls != NULL ? "CRLs" : NULL;
|
pcrl != NULL ? "CRL" : pcerts != NULL ? "certs" :
|
||||||
|
pcrls != NULL ? "CRLs" : NULL;
|
||||||
/* TODO make use of the engine reference 'eng' when loading pkeys */
|
/* TODO make use of the engine reference 'eng' when loading pkeys */
|
||||||
|
|
||||||
if (ppkey != NULL)
|
if (ppkey != NULL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user