mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-21 22:28:37 -05:00
Remote addition and removal of keys in Pageant
[originally from svn r635]
This commit is contained in:
parent
99dc6ef4f7
commit
d6d53f4ae9
65
pageant.c
65
pageant.c
@ -124,6 +124,23 @@ static int CALLBACK PassphraseProc(HWND hwnd, UINT msg,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update the visible key list.
|
||||||
|
*/
|
||||||
|
void keylist_update(void) {
|
||||||
|
struct RSAKey *key;
|
||||||
|
enum234 e;
|
||||||
|
|
||||||
|
if (keylist) {
|
||||||
|
SendDlgItemMessage(keylist, 100, LB_RESETCONTENT, 0, 0);
|
||||||
|
for (key = first234(rsakeys, &e); key; key = next234(&e)) {
|
||||||
|
SendDlgItemMessage (keylist, 100, LB_ADDSTRING,
|
||||||
|
0, (LPARAM) key->comment);
|
||||||
|
}
|
||||||
|
SendDlgItemMessage (keylist, 100, LB_SETCURSEL, (WPARAM) -1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function loads a key from a file and adds it.
|
* This function loads a key from a file and adds it.
|
||||||
*/
|
*/
|
||||||
@ -269,12 +286,35 @@ void answer_msg(void *msg) {
|
|||||||
memcpy(ret+5, response_md5, 16);
|
memcpy(ret+5, response_md5, 16);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#if 0 /* FIXME: implement these */
|
|
||||||
case SSH_AGENTC_ADD_RSA_IDENTITY:
|
case SSH_AGENTC_ADD_RSA_IDENTITY:
|
||||||
/*
|
/*
|
||||||
* Add to the list and return SSH_AGENT_SUCCESS, or
|
* Add to the list and return SSH_AGENT_SUCCESS, or
|
||||||
* SSH_AGENT_FAILURE if the key was malformed.
|
* SSH_AGENT_FAILURE if the key was malformed.
|
||||||
*/
|
*/
|
||||||
|
{
|
||||||
|
struct RSAKey *key;
|
||||||
|
char *comment;
|
||||||
|
key = malloc(sizeof(struct RSAKey));
|
||||||
|
memset(key, 0, sizeof(key));
|
||||||
|
p += makekey(p, key, NULL, 1);
|
||||||
|
p += makeprivate(p, key);
|
||||||
|
p += ssh1_read_bignum(p, NULL); /* p^-1 mod q */
|
||||||
|
p += ssh1_read_bignum(p, NULL); /* p */
|
||||||
|
p += ssh1_read_bignum(p, NULL); /* q */
|
||||||
|
comment = malloc(GET_32BIT(p));
|
||||||
|
if (comment) {
|
||||||
|
memcpy(comment, p+4, GET_32BIT(p));
|
||||||
|
key->comment = comment;
|
||||||
|
}
|
||||||
|
PUT_32BIT(ret, 1);
|
||||||
|
ret[4] = SSH_AGENT_FAILURE;
|
||||||
|
if (add234(rsakeys, key) == key) {
|
||||||
|
keylist_update();
|
||||||
|
ret[4] = SSH_AGENT_SUCCESS;
|
||||||
|
} else {
|
||||||
|
freersakey(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SSH_AGENTC_REMOVE_RSA_IDENTITY:
|
case SSH_AGENTC_REMOVE_RSA_IDENTITY:
|
||||||
/*
|
/*
|
||||||
@ -282,8 +322,22 @@ void answer_msg(void *msg) {
|
|||||||
* perhaps SSH_AGENT_FAILURE if it wasn't in the list to
|
* perhaps SSH_AGENT_FAILURE if it wasn't in the list to
|
||||||
* start with.
|
* start with.
|
||||||
*/
|
*/
|
||||||
|
{
|
||||||
|
struct RSAKey reqkey, *key;
|
||||||
|
|
||||||
|
p += makekey(p, &reqkey, NULL, 0);
|
||||||
|
key = find234(rsakeys, &reqkey, NULL);
|
||||||
|
freebn(reqkey.exponent);
|
||||||
|
freebn(reqkey.modulus);
|
||||||
|
PUT_32BIT(ret, 1);
|
||||||
|
ret[4] = SSH_AGENT_FAILURE;
|
||||||
|
if (key) {
|
||||||
|
del234(rsakeys, key);
|
||||||
|
keylist_update();
|
||||||
|
ret[4] = SSH_AGENT_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
failure:
|
failure:
|
||||||
/*
|
/*
|
||||||
@ -377,13 +431,8 @@ static int CALLBACK KeyListProc(HWND hwnd, UINT msg,
|
|||||||
of.Flags = 0;
|
of.Flags = 0;
|
||||||
if (GetOpenFileName(&of)) {
|
if (GetOpenFileName(&of)) {
|
||||||
add_keyfile(filename);
|
add_keyfile(filename);
|
||||||
|
keylist_update();
|
||||||
}
|
}
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
case 102: /* remove key */
|
case 102: /* remove key */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user