From d4de2d2aba8680cc4f6db95d24377b22d9b644e8 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 26 Sep 2000 13:31:15 +0000 Subject: [PATCH] Oops - free the key after removing it! git-svn-id: svn://svn.tartarus.org/sgt/putty@636 cda61777-01e9-0310-a592-d414129be87e --- pageant.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/pageant.c b/pageant.c index dc8914e0..950889d2 100644 --- a/pageant.c +++ b/pageant.c @@ -86,16 +86,25 @@ void logevent(char *msg) { #define PASSPHRASE_MAXLEN 512 +struct PassphraseProcStruct { + char *passphrase; + char *comment; +}; + /* * Dialog-box function for the passphrase box. */ static int CALLBACK PassphraseProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static char *passphrase; + struct PassphraseProcStruct *p; switch (msg) { case WM_INITDIALOG: - passphrase = (char *)lParam; + p = (struct PassphraseProcStruct *)lParam; + passphrase = p->passphrase; + if (p->comment) + SetDlgItemText(hwnd, 101, p->comment); *passphrase = 0; return 0; case WM_COMMAND: @@ -150,18 +159,22 @@ void add_keyfile(char *filename) { int needs_pass; int ret; int attempts; + char *comment; + struct PassphraseProcStruct pps; - /* FIXME: we can acquire comment here and use it in dialog */ - needs_pass = rsakey_encrypted(filename, NULL); + needs_pass = rsakey_encrypted(filename, &comment); attempts = 0; key = malloc(sizeof(*key)); + pps.passphrase = passphrase; + pps.comment = comment; do { if (needs_pass) { int dlgret; dlgret = DialogBoxParam(instance, MAKEINTRESOURCE(210), NULL, PassphraseProc, - (LPARAM)passphrase); + (LPARAM)&pps); if (!dlgret) { + if (comment) free(comment); free(key); return; /* operation cancelled */ } @@ -170,6 +183,7 @@ void add_keyfile(char *filename) { ret = loadrsakey(filename, key, passphrase); attempts++; } while (ret == -1); + if (comment) free(comment); if (ret == 0) { MessageBox(NULL, "Couldn't load public key.", APPNAME, MB_OK | MB_ICONERROR); @@ -334,6 +348,7 @@ void answer_msg(void *msg) { if (key) { del234(rsakeys, key); keylist_update(); + freersakey(key); ret[4] = SSH_AGENT_SUCCESS; } } -- 2.11.0