1
0
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:
Simon Tatham 2000-09-26 13:31:15 +00:00
parent d6d53f4ae9
commit 3312fd2933

View File

@ -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;
} }
} }