mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-05-30 08:20:28 -05:00
Oops - free the key after removing it!
[originally from svn r636]
This commit is contained in:
parent
d6d53f4ae9
commit
3312fd2933
23
pageant.c
23
pageant.c
@ -86,16 +86,25 @@ void logevent(char *msg) {
|
|||||||
|
|
||||||
#define PASSPHRASE_MAXLEN 512
|
#define PASSPHRASE_MAXLEN 512
|
||||||
|
|
||||||
|
struct PassphraseProcStruct {
|
||||||
|
char *passphrase;
|
||||||
|
char *comment;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dialog-box function for the passphrase box.
|
* Dialog-box function for the passphrase box.
|
||||||
*/
|
*/
|
||||||
static int CALLBACK PassphraseProc(HWND hwnd, UINT msg,
|
static int CALLBACK PassphraseProc(HWND hwnd, UINT msg,
|
||||||
WPARAM wParam, LPARAM lParam) {
|
WPARAM wParam, LPARAM lParam) {
|
||||||
static char *passphrase;
|
static char *passphrase;
|
||||||
|
struct PassphraseProcStruct *p;
|
||||||
|
|
||||||
switch (msg) {
|
switch (msg) {
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
passphrase = (char *)lParam;
|
p = (struct PassphraseProcStruct *)lParam;
|
||||||
|
passphrase = p->passphrase;
|
||||||
|
if (p->comment)
|
||||||
|
SetDlgItemText(hwnd, 101, p->comment);
|
||||||
*passphrase = 0;
|
*passphrase = 0;
|
||||||
return 0;
|
return 0;
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
@ -150,18 +159,22 @@ void add_keyfile(char *filename) {
|
|||||||
int needs_pass;
|
int needs_pass;
|
||||||
int ret;
|
int ret;
|
||||||
int attempts;
|
int attempts;
|
||||||
|
char *comment;
|
||||||
|
struct PassphraseProcStruct pps;
|
||||||
|
|
||||||
/* FIXME: we can acquire comment here and use it in dialog */
|
needs_pass = rsakey_encrypted(filename, &comment);
|
||||||
needs_pass = rsakey_encrypted(filename, NULL);
|
|
||||||
attempts = 0;
|
attempts = 0;
|
||||||
key = malloc(sizeof(*key));
|
key = malloc(sizeof(*key));
|
||||||
|
pps.passphrase = passphrase;
|
||||||
|
pps.comment = comment;
|
||||||
do {
|
do {
|
||||||
if (needs_pass) {
|
if (needs_pass) {
|
||||||
int dlgret;
|
int dlgret;
|
||||||
dlgret = DialogBoxParam(instance, MAKEINTRESOURCE(210),
|
dlgret = DialogBoxParam(instance, MAKEINTRESOURCE(210),
|
||||||
NULL, PassphraseProc,
|
NULL, PassphraseProc,
|
||||||
(LPARAM)passphrase);
|
(LPARAM)&pps);
|
||||||
if (!dlgret) {
|
if (!dlgret) {
|
||||||
|
if (comment) free(comment);
|
||||||
free(key);
|
free(key);
|
||||||
return; /* operation cancelled */
|
return; /* operation cancelled */
|
||||||
}
|
}
|
||||||
@ -170,6 +183,7 @@ void add_keyfile(char *filename) {
|
|||||||
ret = loadrsakey(filename, key, passphrase);
|
ret = loadrsakey(filename, key, passphrase);
|
||||||
attempts++;
|
attempts++;
|
||||||
} while (ret == -1);
|
} while (ret == -1);
|
||||||
|
if (comment) free(comment);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
MessageBox(NULL, "Couldn't load public key.", APPNAME,
|
MessageBox(NULL, "Couldn't load public key.", APPNAME,
|
||||||
MB_OK | MB_ICONERROR);
|
MB_OK | MB_ICONERROR);
|
||||||
@ -334,6 +348,7 @@ void answer_msg(void *msg) {
|
|||||||
if (key) {
|
if (key) {
|
||||||
del234(rsakeys, key);
|
del234(rsakeys, key);
|
||||||
keylist_update();
|
keylist_update();
|
||||||
|
freersakey(key);
|
||||||
ret[4] = SSH_AGENT_SUCCESS;
|
ret[4] = SSH_AGENT_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user