1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-02-03 21:52:24 +00:00

Add a 'from_server' flag in prompts_t.

This goes with the existing 'to_server' flag (indicating whether the
values typed by the user are going to be sent over the wire or remain
local), to indicate whether the _text of the prompts_ has come over
the wire or is originated locally.

Like to_server, nothing yet uses this. It's a hedge against the
possibility of maybe having an option for all the auth prompts to work
via GUI dialog boxes.
This commit is contained in:
Simon Tatham 2019-03-09 15:50:23 +00:00
parent 530b6fed5d
commit 767a9c6e45
6 changed files with 23 additions and 0 deletions

View File

@ -753,6 +753,7 @@ int main(int argc, char **argv)
prompts_t *p = new_prompts(); prompts_t *p = new_prompts();
int ret; int ret;
p->to_server = false; p->to_server = false;
p->from_server = false;
p->name = dupstr("SSH key passphrase"); p->name = dupstr("SSH key passphrase");
add_prompt(p, dupstr("Enter passphrase to load key: "), false); add_prompt(p, dupstr("Enter passphrase to load key: "), false);
ret = console_get_userpass_input(p); ret = console_get_userpass_input(p);
@ -889,6 +890,7 @@ int main(int argc, char **argv)
int ret; int ret;
p->to_server = false; p->to_server = false;
p->from_server = false;
p->name = dupstr("New SSH key passphrase"); p->name = dupstr("New SSH key passphrase");
add_prompt(p, dupstr("Enter passphrase to save key: "), false); add_prompt(p, dupstr("Enter passphrase to save key: "), false);
add_prompt(p, dupstr("Re-enter passphrase to verify: "), false); add_prompt(p, dupstr("Re-enter passphrase to verify: "), false);

View File

@ -659,6 +659,15 @@ typedef struct {
* sufficient). * sufficient).
*/ */
bool to_server; bool to_server;
/*
* Indicates whether the prompts originated _at_ the server, so
* that the front end can display some kind of trust sigil that
* distinguishes (say) a legit private-key passphrase prompt from
* a fake one sent by a malicious server.
*/
bool from_server;
char *name; /* Short description, perhaps for dialog box title */ char *name; /* Short description, perhaps for dialog box title */
bool name_reqd; /* Display of `name' required or optional? */ bool name_reqd; /* Display of `name' required or optional? */
char *instruction; /* Long description, maybe with embedded newlines */ char *instruction; /* Long description, maybe with embedded newlines */

View File

@ -228,6 +228,7 @@ static const char *rlogin_init(Seat *seat, Backend **backend_handle,
rlogin->prompt = new_prompts(); rlogin->prompt = new_prompts();
rlogin->prompt->to_server = true; rlogin->prompt->to_server = true;
rlogin->prompt->from_server = false;
rlogin->prompt->name = dupstr("Rlogin login name"); rlogin->prompt->name = dupstr("Rlogin login name");
add_prompt(rlogin->prompt, dupstr("rlogin username: "), true); add_prompt(rlogin->prompt, dupstr("rlogin username: "), true);
ret = seat_get_userpass_input(rlogin->seat, rlogin->prompt, NULL); ret = seat_get_userpass_input(rlogin->seat, rlogin->prompt, NULL);

View File

@ -383,6 +383,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl)
if ((s->username = get_remote_username(s->conf)) == NULL) { if ((s->username = get_remote_username(s->conf)) == NULL) {
s->cur_prompt = new_prompts(); s->cur_prompt = new_prompts();
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = false;
s->cur_prompt->name = dupstr("SSH login name"); s->cur_prompt->name = dupstr("SSH login name");
add_prompt(s->cur_prompt, dupstr("login as: "), true); add_prompt(s->cur_prompt, dupstr("login as: "), true);
s->userpass_ret = seat_get_userpass_input( s->userpass_ret = seat_get_userpass_input(
@ -641,6 +642,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl)
} else { } else {
s->cur_prompt = new_prompts(s->ppl.seat); s->cur_prompt = new_prompts(s->ppl.seat);
s->cur_prompt->to_server = false; s->cur_prompt->to_server = false;
s->cur_prompt->from_server = false;
s->cur_prompt->name = dupstr("SSH key passphrase"); s->cur_prompt->name = dupstr("SSH key passphrase");
add_prompt(s->cur_prompt, add_prompt(s->cur_prompt,
dupprintf("Passphrase for key \"%s\": ", dupprintf("Passphrase for key \"%s\": ",
@ -805,6 +807,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl)
} }
ppl_logevent("Received TIS challenge"); ppl_logevent("Received TIS challenge");
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = true;
s->cur_prompt->name = dupstr("SSH TIS authentication"); s->cur_prompt->name = dupstr("SSH TIS authentication");
/* Prompt heuristic comes from OpenSSH */ /* Prompt heuristic comes from OpenSSH */
if (!memchr(challenge.ptr, '\n', challenge.len)) { if (!memchr(challenge.ptr, '\n', challenge.len)) {
@ -853,6 +856,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl)
} }
ppl_logevent("Received CryptoCard challenge"); ppl_logevent("Received CryptoCard challenge");
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = true;
s->cur_prompt->name = dupstr("SSH CryptoCard authentication"); s->cur_prompt->name = dupstr("SSH CryptoCard authentication");
s->cur_prompt->name_reqd = false; s->cur_prompt->name_reqd = false;
/* Prompt heuristic comes from OpenSSH */ /* Prompt heuristic comes from OpenSSH */
@ -885,6 +889,7 @@ static void ssh1_login_process_queue(PacketProtocolLayer *ppl)
return; return;
} }
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = false;
s->cur_prompt->name = dupstr("SSH password"); s->cur_prompt->name = dupstr("SSH password");
add_prompt(s->cur_prompt, dupprintf("%s@%s's password: ", add_prompt(s->cur_prompt, dupprintf("%s@%s's password: ",
s->username, s->savedhost), s->username, s->savedhost),

View File

@ -385,6 +385,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl)
} else if ((s->username = s->default_username) == NULL) { } else if ((s->username = s->default_username) == NULL) {
s->cur_prompt = new_prompts(); s->cur_prompt = new_prompts();
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = false;
s->cur_prompt->name = dupstr("SSH login name"); s->cur_prompt->name = dupstr("SSH login name");
add_prompt(s->cur_prompt, dupstr("login as: "), true); add_prompt(s->cur_prompt, dupstr("login as: "), true);
s->userpass_ret = seat_get_userpass_input( s->userpass_ret = seat_get_userpass_input(
@ -822,6 +823,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl)
*/ */
s->cur_prompt = new_prompts(); s->cur_prompt = new_prompts();
s->cur_prompt->to_server = false; s->cur_prompt->to_server = false;
s->cur_prompt->from_server = false;
s->cur_prompt->name = dupstr("SSH key passphrase"); s->cur_prompt->name = dupstr("SSH key passphrase");
add_prompt(s->cur_prompt, add_prompt(s->cur_prompt,
dupprintf("Passphrase for key \"%s\": ", dupprintf("Passphrase for key \"%s\": ",
@ -1201,6 +1203,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl)
get_string(pktin); /* skip language tag */ get_string(pktin); /* skip language tag */
s->cur_prompt = new_prompts(); s->cur_prompt = new_prompts();
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = true;
/* /*
* Get any prompt(s) from the packet. * Get any prompt(s) from the packet.
@ -1326,6 +1329,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl)
s->cur_prompt = new_prompts(); s->cur_prompt = new_prompts();
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = false;
s->cur_prompt->name = dupstr("SSH password"); s->cur_prompt->name = dupstr("SSH password");
add_prompt(s->cur_prompt, dupprintf("%s@%s's password: ", add_prompt(s->cur_prompt, dupprintf("%s@%s's password: ",
s->username, s->hostname), s->username, s->hostname),
@ -1420,6 +1424,7 @@ static void ssh2_userauth_process_queue(PacketProtocolLayer *ppl)
s->cur_prompt = new_prompts(); s->cur_prompt = new_prompts();
s->cur_prompt->to_server = true; s->cur_prompt->to_server = true;
s->cur_prompt->from_server = false;
s->cur_prompt->name = dupstr("New SSH password"); s->cur_prompt->name = dupstr("New SSH password");
s->cur_prompt->instruction = mkstr(prompt); s->cur_prompt->instruction = mkstr(prompt);
s->cur_prompt->instr_reqd = true; s->cur_prompt->instr_reqd = true;

View File

@ -328,6 +328,7 @@ static char *askpass_tty(const char *prompt)
int ret; int ret;
prompts_t *p = new_prompts(); prompts_t *p = new_prompts();
p->to_server = false; p->to_server = false;
p->from_server = false;
p->name = dupstr("Pageant passphrase prompt"); p->name = dupstr("Pageant passphrase prompt");
add_prompt(p, dupcat(prompt, ": ", (const char *)NULL), false); add_prompt(p, dupcat(prompt, ": ", (const char *)NULL), false);
ret = console_get_userpass_input(p); ret = console_get_userpass_input(p);