提交 b65f8513 编写于 作者: D Dr. Stephen Henson

Make -passin -passout etc work again.

Fix leak in ca.c when using -passin.
上级 35bf3541
...@@ -459,6 +459,15 @@ int password_callback(char *buf, int bufsiz, int verify, ...@@ -459,6 +459,15 @@ int password_callback(char *buf, int bufsiz, int verify,
prompt_info = cb_data->prompt_info; prompt_info = cb_data->prompt_info;
} }
if (password)
{
res = strlen(password);
if (res > bufsiz)
res = bufsiz;
memcpy(buf, password, res);
return res;
}
ui = UI_new_method(ui_method); ui = UI_new_method(ui_method);
if (ui) if (ui)
{ {
......
...@@ -264,6 +264,7 @@ int MAIN(int argc, char **argv) ...@@ -264,6 +264,7 @@ int MAIN(int argc, char **argv)
{ {
ENGINE *e = NULL; ENGINE *e = NULL;
char *key=NULL,*passargin=NULL; char *key=NULL,*passargin=NULL;
int free_key = 0;
int total=0; int total=0;
int total_done=0; int total_done=0;
int badops=0; int badops=0;
...@@ -677,10 +678,14 @@ bad: ...@@ -677,10 +678,14 @@ bad:
lookup_fail(section,ENV_PRIVATE_KEY); lookup_fail(section,ENV_PRIVATE_KEY);
goto err; goto err;
} }
if (!key && !app_passwd(bio_err, passargin, NULL, &key, NULL)) if (!key)
{ {
BIO_printf(bio_err,"Error getting password\n"); free_key = 1;
goto err; if (!app_passwd(bio_err, passargin, NULL, &key, NULL))
{
BIO_printf(bio_err,"Error getting password\n");
goto err;
}
} }
pkey = load_key(bio_err, keyfile, keyform, key, e, pkey = load_key(bio_err, keyfile, keyform, key, e,
"CA private key"); "CA private key");
...@@ -1577,6 +1582,8 @@ err: ...@@ -1577,6 +1582,8 @@ err:
if (ret) ERR_print_errors(bio_err); if (ret) ERR_print_errors(bio_err);
app_RAND_write_file(randfile, bio_err); app_RAND_write_file(randfile, bio_err);
if (free_key)
OPENSSL_free(key);
BN_free(serial); BN_free(serial);
TXT_DB_free(db); TXT_DB_free(db);
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册