1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 09:58:01 +00:00

Handle more gracefully the possibility of a keyboard-interactive

prompts packet containing no actual prompts (perhaps due to odd
server organisation, or perhaps so it can print a banner message and
do nothing else). Previously, the get_userpass_input functions
always returned failure when in '-batch' mode, even in this case
where no actual input would be required.

[originally from svn r8490]
This commit is contained in:
Simon Tatham 2009-03-03 18:35:53 +00:00
parent 80623557c6
commit d0661ca94e
2 changed files with 25 additions and 8 deletions

View File

@ -344,7 +344,7 @@ int console_get_userpass_input(prompts_t *p, unsigned char *in, int inlen)
memset(p->prompts[i]->result, 0, p->prompts[i]->result_len); memset(p->prompts[i]->result, 0, p->prompts[i]->result_len);
} }
if (console_batch_mode) if (p->n_prompts && console_batch_mode)
return 0; return 0;
/* /*

View File

@ -318,15 +318,32 @@ int console_get_userpass_input(prompts_t *p, unsigned char *in, int inlen)
memset(p->prompts[i]->result, 0, p->prompts[i]->result_len); memset(p->prompts[i]->result, 0, p->prompts[i]->result_len);
} }
/*
* The prompts_t might contain a message to be displayed but no
* actual prompt. More usually, though, it will contain
* questions that the user needs to answer, in which case we
* need to ensure that we're able to get the answers.
*/
if (p->n_prompts) {
if (console_batch_mode) if (console_batch_mode)
return 0; return 0;
hin = GetStdHandle(STD_INPUT_HANDLE); hin = GetStdHandle(STD_INPUT_HANDLE);
hout = GetStdHandle(STD_OUTPUT_HANDLE); if (hin == INVALID_HANDLE_VALUE) {
if (hin == INVALID_HANDLE_VALUE || hout == INVALID_HANDLE_VALUE) { fprintf(stderr, "Cannot get standard input handle\n");
fprintf(stderr, "Cannot get standard input/output handles\n");
cleanup_exit(1); cleanup_exit(1);
} }
}
/*
* And if we have anything to print, we need standard output.
*/
if ((p->name_reqd && p->name) || p->instruction || p->n_prompts) {
hout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hout == INVALID_HANDLE_VALUE) {
fprintf(stderr, "Cannot get standard output handle\n");
cleanup_exit(1);
}
}
/* /*
* Preamble. * Preamble.