X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/ee8b0370d9152880e05fd9cfb530438bb4f5aefa..37d868ecb7ff6ba8aad4b8325c016c0a045f6bb3:/scp.c diff --git a/scp.c b/scp.c index fcd5e1a7..413cf4c8 100644 --- a/scp.c +++ b/scp.c @@ -134,12 +134,14 @@ void verify_ssh_host_key(char *host, int port, char *keytype, return; if (ret == 2) { /* key was different */ fprintf(stderr, wrongmsg, fingerprint); + fflush(stderr); if (fgets(line, sizeof(line), stdin) && line[0] != '\0' && line[0] != '\n') { if (line[0] == 'y' || line[0] == 'Y') store_host_key(host, port, keytype, keystr); } else { fprintf(stderr, abandoned); + fflush(stderr); exit(0); } } @@ -395,12 +397,12 @@ static void bump(char *fmt, ...) exit(1); } -static int get_password(const char *prompt, char *str, int maxlen) +static int get_line(const char *prompt, char *str, int maxlen, int is_pw) { HANDLE hin, hout; - DWORD savemode, i; + DWORD savemode, newmode, i; - if (password) { + if (is_pw && password) { static int tried_once = 0; if (tried_once) { @@ -423,8 +425,12 @@ static int get_password(const char *prompt, char *str, int maxlen) bump("Cannot get standard input/output handles"); GetConsoleMode(hin, &savemode); - SetConsoleMode(hin, (savemode & (~ENABLE_ECHO_INPUT)) | - ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT); + newmode = savemode | ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT; + if (is_pw) + newmode &= ~ENABLE_ECHO_INPUT; + else + newmode |= ENABLE_ECHO_INPUT; + SetConsoleMode(hin, newmode); WriteFile(hout, prompt, strlen(prompt), &i, NULL); ReadFile(hin, str, maxlen-1, &i, NULL); @@ -434,7 +440,8 @@ static int get_password(const char *prompt, char *str, int maxlen) if ((int)i > maxlen) i = maxlen-1; else i = i - 2; str[i] = '\0'; - WriteFile(hout, "\r\n", 2, &i, NULL); + if (is_pw) + WriteFile(hout, "\r\n", 2, &i, NULL); } return 1; @@ -609,6 +616,7 @@ static void run_err(const char *fmt, ...) strcpy(str, "scp: "); vsprintf(str+strlen(str), fmt, ap); strcat(str, "\n"); + back->send("\001", 1); /* scp protocol error prefix */ back->send(str, strlen(str)); tell_user(stderr, "%s",str); va_end(ap); @@ -1223,7 +1231,7 @@ int main(int argc, char *argv[]) default_protocol = PROT_TELNET; flags = FLAG_STDERR; - ssh_get_password = &get_password; + ssh_get_line = &get_line; init_winsock(); sk_init();