#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:
if (keylist) {
SendDlgItemMessage(keylist, 100, LB_RESETCONTENT, 0, 0);
for (key = first234(rsakeys, &e); key; key = next234(&e)) {
+ char listentry[512], *p;
+ /*
+ * Replace two spaces in the fingerprint with tabs, for
+ * nice alignment in the box.
+ */
+ rsa_fingerprint(listentry, sizeof(listentry), key);
+ p = strchr(listentry, ' '); if (p) *p = '\t';
+ p = strchr(listentry, ' '); if (p) *p = '\t';
SendDlgItemMessage (keylist, 100, LB_ADDSTRING,
- 0, (LPARAM) key->comment);
+ 0, (LPARAM)listentry);
}
SendDlgItemMessage (keylist, 100, LB_SETCURSEL, (WPARAM) -1, 0);
}
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 */
}
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);
ret[4] = SSH_AGENT_SUCCESS;
} else {
freersakey(key);
+ free(key);
}
}
break;
if (key) {
del234(rsakeys, key);
keylist_update();
+ freersakey(key);
ret[4] = SSH_AGENT_SUCCESS;
}
}
switch (msg) {
case WM_INITDIALOG:
- for (key = first234(rsakeys, &e); key; key = next234(&e)) {
- SendDlgItemMessage (hwnd, 100, LB_ADDSTRING,
- 0, (LPARAM) key->comment);
- }
+ keylist = hwnd;
+ {
+ static int tabs[2] = {25, 175};
+ SendDlgItemMessage (hwnd, 100, LB_SETTABSTOPS, 2,
+ (LPARAM) tabs);
+ }
+ keylist_update();
return 0;
case WM_COMMAND:
switch (LOWORD(wParam)) {
break;
del234(rsakeys, key);
freersakey(key); free(key);
- SendDlgItemMessage(hwnd, 100, LB_RESETCONTENT, 0, 0);
- for (key = first234(rsakeys, &e); key; key = next234(&e)) {
- SendDlgItemMessage (hwnd, 100, LB_ADDSTRING,
- 0, (LPARAM) key->comment);
- }
- SendDlgItemMessage (hwnd, 100, LB_SETCURSEL, (WPARAM) -1, 0);
+ keylist_update();
}
return 0;
}