From fb192e832a5dbb595232d18c56bcd5c7d1eb5578 Mon Sep 17 00:00:00 2001 From: Manoj Ampalam Date: Fri, 2 Jun 2017 15:08:02 -0700 Subject: [PATCH] Fixed issue with binary input stream over ssh PowerShell/Win32-OpenSSH#658 --- .../win32/openssh/Win32-OpenSSh-design.pptx | Bin 31637 -> 37646 bytes contrib/win32/win32compat/shell-host.c | 69 +++++++++++++++--- 2 files changed, 60 insertions(+), 9 deletions(-) diff --git a/contrib/win32/openssh/Win32-OpenSSh-design.pptx b/contrib/win32/openssh/Win32-OpenSSh-design.pptx index 4c95fb82361e4229d2e376d8da83669a0e4bd76e..bbc01fda8026e98123e9818ac03522ac80fb077e 100644 GIT binary patch delta 22661 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 3 && wcsncmp(command, L"cmd", 4) == 0) || + (command_len >= 7 && wcsncmp(command, L"cmd.exe", 8) == 0) || + (command_len >= 4 && wcsncmp(command, L"cmd ", 4) == 0) || + (command_len >= 8 && wcsncmp(command, L"cmd.exe ", 8) == 0)) + process_input = TRUE; } + + /* Try launching command as is first */ + if (command) { + ret = CreateProcessW(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); + if (ret == FALSE) { + /* it was probably this case - ssh user@target dir */ + if (GetLastError() == ERROR_FILE_NOT_FOUND) + run_under_cmd = TRUE; + else + goto cleanup; + } + } + else + run_under_cmd = TRUE; + + /* if above failed with FILE_NOT_FOUND, try running the provided command under cmd*/ + if (run_under_cmd) { + /*TODO - pick this up from system32*/ + cmd[0] = L'\0'; + GOTO_CLEANUP_ON_ERR(wcscat_s(cmd, MAX_CMD_LEN, L"cmd.exe")); + if (command) { + GOTO_CLEANUP_ON_ERR(wcscat_s(cmd, MAX_CMD_LEN, L" /c")); + GOTO_CLEANUP_ON_ERR(wcscat_s(cmd, MAX_CMD_LEN, L" ")); + GOTO_CLEANUP_ON_ERR(wcscat_s(cmd, MAX_CMD_LEN, command)); + } - GOTO_CLEANUP_ON_FALSE(CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)); + GOTO_CLEANUP_ON_FALSE(CreateProcessW(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)); + /* Create process succeeded when running under cmd. input stream needs to be processed */ + process_input = TRUE; + } /* close unwanted handles*/ CloseHandle(child_pipe_read); @@ -1152,6 +1197,12 @@ start_withno_pty(wchar_t *command) rd = wr = i = 0; GOTO_CLEANUP_ON_FALSE(ReadFile(pipe_in, buf, sizeof(buf)-1, &rd, NULL)); + if (process_input == FALSE) { + /* write stream directly to child stdin */ + GOTO_CLEANUP_ON_FALSE(WriteFile(child_pipe_write, buf, rd, &wr, NULL)); + continue; + } + /* else - process input before routing it to child */ while (i < rd) { /* skip arrow keys */ if ((rd - i >= 3) && (buf[i] == '\033') && (buf[i + 1] == '[') &&