mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-07-20 20:44:50 +02:00
Initial WIN32_FIXME changes.
This commit is contained in:
parent
1f4283265d
commit
2447272622
@ -1581,6 +1581,7 @@
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
#define _CRT_NONSTDC_NO_DEPRECATE 1
|
||||
#define WIN32_FIXME 1
|
||||
#define WINDOWS 1
|
||||
|
||||
/* Define if you must implement a startup_needs function for your platform */
|
||||
#define HAVE_STARTUP_NEEDS 1
|
||||
@ -1631,6 +1632,9 @@
|
||||
#define HAVE_STRNCASECMP 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the locale.h header. */
|
||||
#define HAVE_LOCALE_H 1
|
||||
|
||||
#define HAVE_STRUCT_IN6_ADDR 1
|
||||
#define HAVE_STRUCT_SOCKADDR_IN6 1
|
||||
#define HAVE_STRUCT_TIMEVAL 1
|
||||
|
@ -4,10 +4,12 @@
|
||||
<OpenSSH-Src-Path>$(SolutionDir)..\..\..\</OpenSSH-Src-Path>
|
||||
<OpenSSH-Bin-Path>$(SolutionDir)..\..\..\bin\</OpenSSH-Bin-Path>
|
||||
<OpenSSH-Lib-Path>$(SolutionDir)lib\</OpenSSH-Lib-Path>
|
||||
<OpenSSL-Path>$(SolutionDir)..\..\..\..\OpenSSL\1.0.2d\VS2015\</OpenSSL-Path>
|
||||
<OpenSSL-Win32-Release-Path>$(SolutionDir)..\..\..\..\OpenSSL\1.0.2d\VS2015\Win32\Release\</OpenSSL-Win32-Release-Path>
|
||||
<OpenSSL-Win32-Debug-Path>$(SolutionDir)..\..\..\..\OpenSSL\1.0.2d\VS2015\Win32\Debug\</OpenSSL-Win32-Debug-Path>
|
||||
<OpenSSL-x64-Release-Path>$(SolutionDir)..\..\..\..\OpenSSL\1.0.2d\VS2015\x64\Release\</OpenSSL-x64-Release-Path>
|
||||
<OpenSSL-x64-Debug-Path>$(SolutionDir)..\..\..\..\OpenSSL\1.0.2d\VS2015\x64\Debug\</OpenSSL-x64-Debug-Path>
|
||||
<OpenSSL-Path>g:\openssl-1.0.2h-x64\OpenSSLInstallx64_vs2015-debug\</OpenSSL-Path>
|
||||
<OpenSSL-Win32-Release-Path>g:\openssl-1.0.2h-x86\OpenSSLInstallx86_vs2015\</OpenSSL-Win32-Release-Path>
|
||||
<OpenSSL-Win32-Debug-Path>g:\openssl-1.0.2h-x86\OpenSSLInstallx86_vs2015-debug\</OpenSSL-Win32-Debug-Path>
|
||||
<OpenSSL-x64-Release-Path>g:\openssl-1.0.2h-x64\OpenSSLInstallx64_vs2015\</OpenSSL-x64-Release-Path>
|
||||
<OpenSSL-x64-Debug-Path>g:\openssl-1.0.2h-x64\OpenSSLInstallx64_vs2015-debug\</OpenSSL-x64-Debug-Path>
|
||||
<OpenSSL-x86-ARM-Release-Path>g:\openssl-1.0.2h-arm-x86\OpenSSLInstallx86_vs2015\</OpenSSL-x86-ARM-Release-Path>
|
||||
<OpenSSL-x86-ARM-Debug-Path>g:\openssl-1.0.2h-arm-x86\OpenSSLInstallx86_vs2015\</OpenSSL-x86-ARM-Debug-Path>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define open w32_open
|
||||
#define read w32_read
|
||||
#define write w32_write
|
||||
#define writev w32_writev
|
||||
//#define isatty w32_isatty
|
||||
#define close w32_close
|
||||
#define dup w32_dup
|
||||
|
@ -44,6 +44,7 @@ int w32_pipe(int *pfds);
|
||||
int w32_open(const char *pathname, int flags, ...);
|
||||
int w32_read(int fd, void *dst, size_t max);
|
||||
int w32_write(int fd, const void *buf, unsigned int max);
|
||||
int w32_writev(int fd, const struct iovec *iov, int iovcnt);
|
||||
int w32_fstat(int fd, struct w32_stat *buf);
|
||||
int w32_stat(const char *path, struct w32_stat *buf);
|
||||
long w32_lseek( int fd, long offset, int origin);
|
||||
@ -117,7 +118,6 @@ int sw_add_child(HANDLE child, DWORD pid);
|
||||
#define allocate_sfd(a, b) w32_allocate_fd_for_handle((a, b))
|
||||
//#define WSHELPwopen(a, b) w32_open((a, b))
|
||||
|
||||
|
||||
/* TODO - These defs need to revisited and positioned appropriately */
|
||||
#define environ _environ
|
||||
|
||||
|
@ -50,6 +50,33 @@
|
||||
#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
|
||||
#endif
|
||||
|
||||
HINSTANCE hUserLibrary;
|
||||
HINSTANCE hKernelLibrary;
|
||||
|
||||
// kernel32.dll
|
||||
typedef BOOL(WINAPI * fSetCurrentConsoleFontEx)(
|
||||
_In_ HANDLE hConsoleOutput,
|
||||
_In_ BOOL bMaximumWindow,
|
||||
_In_ PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);
|
||||
fSetCurrentConsoleFontEx fnSetCurrentConsoleFontEx = NULL;
|
||||
|
||||
// user32.dll
|
||||
typedef HWINEVENTHOOK (WINAPI * fSetWinEventHook)(
|
||||
_In_ UINT eventMin,
|
||||
_In_ UINT eventMax,
|
||||
_In_ HMODULE hmodWinEventProc,
|
||||
_In_ WINEVENTPROC lpfnWinEventProc,
|
||||
_In_ DWORD idProcess,
|
||||
_In_ DWORD idThread,
|
||||
_In_ UINT dwflags
|
||||
);
|
||||
fSetWinEventHook fnSetWinEventHook = NULL;
|
||||
|
||||
typedef BOOL (WINAPI * fUnhookWinEvent)(
|
||||
_In_ HWINEVENTHOOK hWinEventHook
|
||||
);
|
||||
fUnhookWinEvent fnUnhookWinEvent = NULL;
|
||||
|
||||
typedef struct consoleEvent {
|
||||
DWORD event;
|
||||
HWND hwnd;
|
||||
@ -66,6 +93,7 @@ BOOL bRet = FALSE;
|
||||
BOOL bNoScrollRegion = FALSE;
|
||||
BOOL bStartup = TRUE;
|
||||
BOOL bAnsi = FALSE;
|
||||
BOOL bHookEvents = FALSE;
|
||||
|
||||
HANDLE child_out = INVALID_HANDLE_VALUE;
|
||||
HANDLE child_in = INVALID_HANDLE_VALUE;
|
||||
@ -389,7 +417,8 @@ void SizeWindow(HANDLE hInput) {
|
||||
matchingFont.FontWeight = FW_NORMAL;
|
||||
wcscpy(matchingFont.FaceName, L"Consolas");
|
||||
|
||||
bSuccess = SetCurrentConsoleFontEx(child_out, FALSE, &matchingFont);
|
||||
if(fnSetCurrentConsoleFontEx != NULL)
|
||||
bSuccess = fnSetCurrentConsoleFontEx(child_out, FALSE, &matchingFont);
|
||||
|
||||
// This information is the live screen
|
||||
ZeroMemory(&consoleInfo, sizeof(consoleInfo));
|
||||
@ -1058,6 +1087,22 @@ int wmain(int ac, wchar_t **av) {
|
||||
DWORD dwStatus;
|
||||
HANDLE hEventHook = NULL;
|
||||
|
||||
HINSTANCE hUserLibrary;
|
||||
HINSTANCE hKernelLibrary;
|
||||
|
||||
hKernelLibrary = LoadLibrary(L"kernel32.dll");
|
||||
if (hKernelLibrary != NULL)
|
||||
{
|
||||
fnSetCurrentConsoleFontEx = (fSetCurrentConsoleFontEx)GetProcAddress(hKernelLibrary, "SetCurrentConsoleFontEx");
|
||||
}
|
||||
|
||||
hUserLibrary = LoadLibrary(L"user32.dll");
|
||||
if (hUserLibrary != NULL)
|
||||
{
|
||||
fnSetWinEventHook = (fSetWinEventHook)GetProcAddress(hUserLibrary, "SetWinEventHook");
|
||||
fnUnhookWinEvent = (fUnhookWinEvent)GetProcAddress(hUserLibrary, "UnhookWinEvent");
|
||||
}
|
||||
|
||||
pipe_in = GetStdHandle(STD_INPUT_HANDLE);
|
||||
pipe_out = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
pipe_err = GetStdHandle(STD_ERROR_HANDLE);
|
||||
@ -1094,8 +1139,9 @@ int wmain(int ac, wchar_t **av) {
|
||||
|
||||
InitializeCriticalSection(&criticalSection);
|
||||
|
||||
hEventHook = SetWinEventHook(EVENT_CONSOLE_CARET, EVENT_CONSOLE_LAYOUT, NULL,
|
||||
ConsoleEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);
|
||||
if(fnSetWinEventHook != NULL)
|
||||
hEventHook = SetWinEventHook(EVENT_CONSOLE_CARET, EVENT_CONSOLE_LAYOUT, NULL,
|
||||
ConsoleEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);
|
||||
|
||||
memset(&si, 0, sizeof(STARTUPINFO));
|
||||
memset(&pi, 0, sizeof(PROCESS_INFORMATION));
|
||||
@ -1103,6 +1149,12 @@ int wmain(int ac, wchar_t **av) {
|
||||
// Copy our parent buffer sizes
|
||||
si.cb = sizeof(STARTUPINFO);
|
||||
si.dwFlags = 0;
|
||||
if (fnSetWinEventHook == NULL) {
|
||||
si.hStdInput = INVALID_HANDLE_VALUE;
|
||||
si.hStdOutput = pipe_out;
|
||||
si.hStdError = pipe_err;
|
||||
si.dwFlags = STARTF_USESTDHANDLES;
|
||||
}
|
||||
|
||||
/* disable inheritance on pipe_in*/
|
||||
GOTO_CLEANUP_ON_FALSE(SetHandleInformation(pipe_in, HANDLE_FLAG_INHERIT, 0));
|
||||
@ -1163,8 +1215,13 @@ cleanup:
|
||||
WaitForSingleObject(monitor_thread, INFINITE);
|
||||
if (ux_thread != INVALID_HANDLE_VALUE)
|
||||
TerminateThread(ux_thread, S_OK);
|
||||
if (hEventHook)
|
||||
UnhookWinEvent(hEventHook);
|
||||
if (hEventHook && fnUnhookWinEvent != NULL)
|
||||
fnUnhookWinEvent(hEventHook);
|
||||
|
||||
if (hKernelLibrary != NULL)
|
||||
FreeLibrary(hKernelLibrary);
|
||||
if (hUserLibrary != NULL)
|
||||
FreeLibrary(hUserLibrary);
|
||||
|
||||
FreeConsole();
|
||||
|
||||
|
@ -382,6 +382,23 @@ w32_write(int fd, const void *buf, unsigned int max) {
|
||||
return fileio_write(fd_table.w32_ios[fd], buf, max);
|
||||
}
|
||||
|
||||
int w32_writev(int fd, const struct iovec *iov, int iovcnt) {
|
||||
int written = 0;
|
||||
int i = 0;
|
||||
|
||||
CHECK_FD(fd);
|
||||
|
||||
for (i = 0; i < iovcnt; i++) {
|
||||
int ret = write(fd, iov[i].iov_base, iov[i].iov_len);
|
||||
|
||||
if (ret > 0) {
|
||||
written += ret;
|
||||
}
|
||||
}
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
int
|
||||
w32_fstat(int fd, struct w32_stat *buf) {
|
||||
CHECK_FD(fd);
|
||||
|
28
misc.c
28
misc.c
@ -436,9 +436,34 @@ char *
|
||||
colon(char *cp)
|
||||
{
|
||||
int flag = 0;
|
||||
int len = 0;
|
||||
|
||||
if (*cp == ':') /* Leading colon is part of file name. */
|
||||
return NULL;
|
||||
|
||||
#ifdef WINDOWS
|
||||
for (; *cp; ++cp) {
|
||||
len++;
|
||||
|
||||
if (*cp == '[')
|
||||
flag = 1;
|
||||
|
||||
if (flag && *cp != ']')
|
||||
continue;
|
||||
|
||||
if (*cp == ']')
|
||||
flag = 0;
|
||||
|
||||
if (*cp == ':') {
|
||||
if (len != 2) { // avoid x: format for drive letter in Windows
|
||||
return (cp);
|
||||
}
|
||||
}
|
||||
// if ( (*cp == '/') || (*cp == '\\') )
|
||||
// return (0);
|
||||
}
|
||||
return NULL;
|
||||
#else
|
||||
if (*cp == '[')
|
||||
flag = 1;
|
||||
|
||||
@ -452,7 +477,8 @@ colon(char *cp)
|
||||
if (*cp == '/')
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* function to assist building execv() arguments */
|
||||
|
@ -81,10 +81,16 @@ static const char unit[] = " KMGT";
|
||||
static int
|
||||
can_output(void)
|
||||
{
|
||||
#ifndef WIN32_FIXME//R
|
||||
return (getpgrp() == tcgetpgrp(STDOUT_FILENO));
|
||||
#ifndef WINDOWS
|
||||
return (getpgrp() == tcgetpgrp(STDOUT_FILENO));
|
||||
#else
|
||||
return 1;
|
||||
DWORD dwProcessId = -1;
|
||||
if (GetWindowThreadProcessId(GetStdHandle(STD_OUTPUT_HANDLE), &dwProcessId)) {
|
||||
return(GetCurrentProcess() == dwProcessId);
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -298,7 +304,7 @@ sig_winch(int sig)
|
||||
static void
|
||||
setscreensize(void)
|
||||
{
|
||||
#ifndef WIN32_FIXME//N
|
||||
#ifndef WINDOWS
|
||||
struct winsize winsize;
|
||||
|
||||
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize) != -1 &&
|
||||
@ -310,6 +316,7 @@ setscreensize(void)
|
||||
} else
|
||||
win_size = DEFAULT_WINSIZE;
|
||||
win_size += 1; /* trailing \0 */
|
||||
#else
|
||||
win_size = ConScreenSizeX() + 1;
|
||||
#endif
|
||||
win_size = DEFAULT_WINSIZE + 1;
|
||||
}
|
||||
|
429
scp.c
429
scp.c
@ -93,7 +93,7 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#ifndef WIN32_FIXME
|
||||
#ifndef WINDOWS
|
||||
#include <dirent.h>
|
||||
#endif
|
||||
|
||||
@ -159,14 +159,11 @@ char *ssh_program = _PATH_SSH_PROGRAM;
|
||||
pid_t do_cmd_pid = -1;
|
||||
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
#ifdef WINDOWS
|
||||
typedef BOOL bool;
|
||||
#define false FALSE
|
||||
#define true TRUE
|
||||
|
||||
char *win32colon(char *);
|
||||
#define colon win32colon
|
||||
|
||||
#ifndef _SH_DENYNO
|
||||
#define _SH_DENYNO 0x40
|
||||
#endif
|
||||
@ -293,21 +290,27 @@ int start_process_io(char *exename, char **argv, char **envv,
|
||||
unsigned long CreateFlags, PROCESS_INFORMATION *pi,
|
||||
char *homedir, char *lpDesktop);
|
||||
|
||||
#ifdef WINDOWS
|
||||
|
||||
// InitForMicrosoftWindows() will initialize Unix like settings in Windows operating system.
|
||||
struct passwd pw;
|
||||
char username[128];
|
||||
int InitForMicrosoftWindows()
|
||||
{
|
||||
int rc;
|
||||
struct passwd *pwd;
|
||||
int rc;
|
||||
struct passwd *pwd;
|
||||
|
||||
/* Get user\'s passwd structure. We need this for the home directory. */
|
||||
pwd = &pw ;
|
||||
rc = sizeof(username);
|
||||
GetUserName(username,(LPDWORD)&rc);
|
||||
pwd->pw_name = username;
|
||||
/* Get user\'s passwd structure. We need this for the home directory. */
|
||||
pwd = &pw ;
|
||||
rc = sizeof(username);
|
||||
if (GetUserName(username, (LPDWORD)&rc)) {
|
||||
pwd->pw_name = username;
|
||||
}
|
||||
else {
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// start of direntry functions in Windows NT like UNIX
|
||||
@ -324,8 +327,8 @@ struct scp_dirent {
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
long hFile;
|
||||
struct _finddata_t c_file;
|
||||
long hFile;
|
||||
struct _finddata_t c_file;
|
||||
} SCPDIR;
|
||||
|
||||
|
||||
@ -343,21 +346,7 @@ char * fixslashes(char * str)
|
||||
return str;
|
||||
}
|
||||
|
||||
char * unfixslashes(char * str)
|
||||
{
|
||||
int i;
|
||||
if (str == NULL)
|
||||
return str;
|
||||
|
||||
int len = (int)strlen(str);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
if (str[i] == '//')
|
||||
str[i] = '/';
|
||||
return str;
|
||||
}
|
||||
|
||||
// force path separator to
|
||||
// force path separator to sep
|
||||
char * forcepathsep(char * str, char sep)
|
||||
{
|
||||
int i;
|
||||
@ -374,7 +363,6 @@ char * forcepathsep(char * str, char sep)
|
||||
if (sep == '/')
|
||||
antisep = '\\';
|
||||
|
||||
|
||||
int len = (int)strlen(str);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
@ -406,13 +394,10 @@ bool getRootFrompath(char * path, char * root)
|
||||
return (lastslash != NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* get option letter from argument vector
|
||||
*/
|
||||
|
||||
|
||||
char * getfilenamefrompath(char * path)
|
||||
{
|
||||
char * lastslash;
|
||||
@ -447,7 +432,7 @@ char * getfilenamefrompath(char * path)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#define EMSG ""
|
||||
#define BADCH (int)'~'
|
||||
@ -669,7 +654,7 @@ do_local_cmd(arglist *a)
|
||||
fprintf(stderr, " %s", a->list[i]);
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
#ifdef WIN32_FIXME
|
||||
#ifdef WINDOWS
|
||||
// flatten the cmd into a long space separated string and execute using system(cmd) api
|
||||
char cmdstr[2048] ;
|
||||
cmdstr[0] = '\0' ;
|
||||
@ -680,7 +665,7 @@ do_local_cmd(arglist *a)
|
||||
if (system(cmdstr))
|
||||
return (-1); // failure executing
|
||||
return (0); // success
|
||||
#else
|
||||
#else
|
||||
if ((pid = fork()) == -1)
|
||||
fatal("do_local_cmd: fork: %s", strerror(errno));
|
||||
|
||||
@ -705,7 +690,7 @@ do_local_cmd(arglist *a)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static int pipe_counter = 1;
|
||||
@ -770,179 +755,168 @@ error:
|
||||
int
|
||||
do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
|
||||
{
|
||||
#ifdef WIN32_FIXME
|
||||
size_t i, j;
|
||||
#ifdef WINDOWS
|
||||
size_t i, j;
|
||||
|
||||
HANDLE hSaveStdout, hSaveStdin ;
|
||||
HANDLE hstdout[2], hstdin[2] ;
|
||||
PROCESS_INFORMATION pi;
|
||||
SECURITY_ATTRIBUTES sa ; /* simple */
|
||||
int rc;
|
||||
HANDLE rfdfromssh, wfdtossh ;
|
||||
char *args[256];
|
||||
HANDLE hSaveStdout, hSaveStdin ;
|
||||
HANDLE hstdout[2], hstdin[2] ;
|
||||
PROCESS_INFORMATION pi;
|
||||
SECURITY_ATTRIBUTES sa ; /* simple */
|
||||
int rc;
|
||||
HANDLE rfdfromssh, wfdtossh ;
|
||||
char *args[256];
|
||||
|
||||
if (verbose_mode)
|
||||
fprintf(stderr, "Executing: host %s, user %s, command %s\n",
|
||||
host, remuser ? remuser : "(unspecified)", cmd);
|
||||
if (verbose_mode)
|
||||
fprintf(stderr, "Executing: host %s, user %s, command %s\n",
|
||||
host, remuser ? remuser : "(unspecified)", cmd);
|
||||
|
||||
// Child code in Windows OS will be a new created process of ssh.exe.
|
||||
// Child to execute the command on the remote host using ssh.
|
||||
|
||||
if (1) { // No fork in Windows OS, so we code it such that we use CreateProcess()
|
||||
i = 0;
|
||||
args[i++] = ssh_program;
|
||||
size_t len;
|
||||
for(j = 0; j < ssh_options_cnt; j++) {
|
||||
args[i++] = "-o";
|
||||
|
||||
i = 0;
|
||||
args[i++] = ssh_program;
|
||||
size_t len;
|
||||
for(j = 0; j < ssh_options_cnt; j++) {
|
||||
args[i++] = "-o";
|
||||
//args[i++] = ssh_options[j];
|
||||
len = strlen(ssh_options[j])+3;
|
||||
|
||||
//args[i++] = ssh_options[j];
|
||||
len = strlen(ssh_options[j])+3;
|
||||
args[i] = (char *) malloc(len); // add quotes
|
||||
strcpy_s(args[i],len, "\"");
|
||||
strcat_s(args[i],len, ssh_options[j]);
|
||||
strcat_s(args[i],len, "\"");
|
||||
i++ ;
|
||||
|
||||
args[i] = (char *) malloc(len); // add quotes
|
||||
strcpy_s(args[i],len, "\"");
|
||||
strcat_s(args[i],len, ssh_options[j]);
|
||||
strcat_s(args[i],len, "\"");
|
||||
i++ ;
|
||||
if (i > 250)
|
||||
fatal("Too many -o options (total number of arguments is more than 256)");
|
||||
}
|
||||
args[i++] = "-x";
|
||||
args[i++] = "-a";
|
||||
args[i++] = "\"-oFallBackToRsh no\""; // extra double quote needed for
|
||||
// Windows platforms
|
||||
//7/2/2001 args[i++] = "\"-oClearAllForwardings yes\"";
|
||||
if (verbose_mode)
|
||||
args[i++] = "-v";
|
||||
if (compress)
|
||||
args[i++] = "-C";
|
||||
if (!use_privileged_port)
|
||||
args[i++] = "-P";
|
||||
if (batchmode)
|
||||
args[i++] = "\"-oBatchMode yes\"";
|
||||
if (password != NULL) {
|
||||
args[i++] = "-A";
|
||||
args[i++] = password;
|
||||
}
|
||||
if (cipher != NULL) {
|
||||
args[i++] = "-c";
|
||||
args[i++] = cipher;
|
||||
}
|
||||
if (identity != NULL) {
|
||||
args[i++] = "-i";
|
||||
args[i++] = identity;
|
||||
}
|
||||
if (port != NULL) {
|
||||
args[i++] = "-p";
|
||||
args[i++] = port;
|
||||
}
|
||||
if (remuser != NULL) {
|
||||
args[i++] = "-l";
|
||||
args[i++] = remuser;
|
||||
}
|
||||
|
||||
if (i > 250)
|
||||
fatal("Too many -o options (total number of arguments is more than 256)");
|
||||
}
|
||||
args[i++] = "-x";
|
||||
args[i++] = "-a";
|
||||
args[i++] = "\"-oFallBackToRsh no\""; // extra double quote needed for
|
||||
// Windows platforms
|
||||
//7/2/2001 args[i++] = "\"-oClearAllForwardings yes\"";
|
||||
if (verbose_mode)
|
||||
args[i++] = "-v";
|
||||
if (compress)
|
||||
args[i++] = "-C";
|
||||
if (!use_privileged_port)
|
||||
args[i++] = "-P";
|
||||
if (batchmode)
|
||||
args[i++] = "\"-oBatchMode yes\"";
|
||||
if (password != NULL)
|
||||
{
|
||||
args[i++] = "-A";
|
||||
args[i++] = password;
|
||||
}
|
||||
if (cipher != NULL)
|
||||
{
|
||||
args[i++] = "-c";
|
||||
args[i++] = cipher;
|
||||
}
|
||||
if (identity != NULL)
|
||||
{
|
||||
args[i++] = "-i";
|
||||
args[i++] = identity;
|
||||
}
|
||||
if (port != NULL)
|
||||
{
|
||||
args[i++] = "-p";
|
||||
args[i++] = port;
|
||||
}
|
||||
if (remuser != NULL)
|
||||
{
|
||||
args[i++] = "-l";
|
||||
args[i++] = remuser;
|
||||
}
|
||||
if (ipv_restrict == ONLY_IPV4)
|
||||
args[i++] = "-4";
|
||||
if (ipv_restrict == ONLY_IPV6)
|
||||
args[i++] = "-6";
|
||||
|
||||
if (ipv_restrict == ONLY_IPV4)
|
||||
args[i++] = "-4";
|
||||
if (ipv_restrict == ONLY_IPV6)
|
||||
args[i++] = "-6";
|
||||
args[i++] = host;
|
||||
args[i++] = cmd;
|
||||
args[i++] = NULL;
|
||||
|
||||
args[i++] = host;
|
||||
args[i++] = cmd;
|
||||
args[i++] = NULL;
|
||||
// Create a pair of pipes for communicating with ssh
|
||||
// which we will spawn
|
||||
// Do the plunmbing so that child ssh process to be spawned has its
|
||||
// standard input from the pout[0] and its standard output going to
|
||||
// pin[1]
|
||||
|
||||
// Create a pair of pipes for communicating with ssh
|
||||
// which we will spawn
|
||||
// Do the plunmbing so that child ssh process to be spawned has its
|
||||
// standard input from the pout[0] and its standard output going to
|
||||
// pin[1]
|
||||
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
|
||||
sa.bInheritHandle = TRUE ; /* pipe handles to be inherited */
|
||||
sa.lpSecurityDescriptor = NULL;
|
||||
/* command processor output redirected to a nameless pipe */
|
||||
|
||||
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
|
||||
sa.bInheritHandle = TRUE ; /* pipe handles to be inherited */
|
||||
sa.lpSecurityDescriptor = NULL;
|
||||
/* command processor output redirected to a nameless pipe */
|
||||
rc = CreateOverlappedPipe( &hstdout[0], &hstdout[1], &sa, 0 ) ;
|
||||
/* read from this fd to get data from ssh.exe*/
|
||||
|
||||
rc = CreateOverlappedPipe( &hstdout[0], &hstdout[1], &sa, 0 ) ;
|
||||
/* read from this fd to get data from ssh.exe*/
|
||||
// make scp's pipe read handle not inheritable by ssh
|
||||
rc = DuplicateHandle(GetCurrentProcess(), hstdout[0],
|
||||
GetCurrentProcess(), (PHANDLE) &rfdfromssh,
|
||||
0, // this parm ignored if DUPLICATE_SAME_ACCESS below
|
||||
FALSE, // not inherited
|
||||
DUPLICATE_SAME_ACCESS);
|
||||
CloseHandle(hstdout[0]); // this CloseHandle() is a crucial must do
|
||||
hstdout[0] = rfdfromssh ;
|
||||
|
||||
// make scp's pipe read handle not inheritable by ssh
|
||||
rc = DuplicateHandle(GetCurrentProcess(), hstdout[0],
|
||||
GetCurrentProcess(), (PHANDLE) &rfdfromssh,
|
||||
0, // this parm ignored if DUPLICATE_SAME_ACCESS below
|
||||
FALSE, // not inherited
|
||||
DUPLICATE_SAME_ACCESS);
|
||||
CloseHandle(hstdout[0]); // this CloseHandle() is a crucial must do
|
||||
hstdout[0] = rfdfromssh ;
|
||||
*fdin = _open_osfhandle((intptr_t)hstdout[0],0);
|
||||
_setmode (*fdin, O_BINARY); // set this file handle for binary I/O
|
||||
|
||||
rc = CreateOverlappedPipe( &hstdin[0], &hstdin[1], &sa, 0 ) ;
|
||||
/* write to this fd to get data into ssh.exe*/
|
||||
|
||||
*fdin = _open_osfhandle((intptr_t)hstdout[0],0);
|
||||
_setmode (*fdin, O_BINARY); // set this file handle for binary I/O
|
||||
// make scp's pipe write handle not inheritable by ssh
|
||||
rc = DuplicateHandle(GetCurrentProcess(), hstdin[1],
|
||||
GetCurrentProcess(), (PHANDLE) &wfdtossh,
|
||||
0, // this parm ignored if DUPLICATE_SAME_ACCESS below
|
||||
FALSE, // not inherited
|
||||
DUPLICATE_SAME_ACCESS);
|
||||
CloseHandle(hstdin[1]); // this CloseHandle() is a crucial must do
|
||||
hstdin[1] = (HANDLE) wfdtossh ;
|
||||
|
||||
rc = CreateOverlappedPipe( &hstdin[0], &hstdin[1], &sa, 0 ) ;
|
||||
/* write to this fd to get data into ssh.exe*/
|
||||
*fdout = _open_osfhandle((intptr_t)hstdin[1],0);
|
||||
_setmode (*fdout, O_BINARY); // set this file handle for binary I/O
|
||||
|
||||
// make scp's pipe write handle not inheritable by ssh
|
||||
rc = DuplicateHandle(GetCurrentProcess(), hstdin[1],
|
||||
GetCurrentProcess(), (PHANDLE) &wfdtossh,
|
||||
0, // this parm ignored if DUPLICATE_SAME_ACCESS below
|
||||
FALSE, // not inherited
|
||||
DUPLICATE_SAME_ACCESS);
|
||||
CloseHandle(hstdin[1]); // this CloseHandle() is a crucial must do
|
||||
hstdin[1] = (HANDLE) wfdtossh ;
|
||||
hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
//hSaveStderr = GetStdHandle(STD_ERROR_HANDLE);
|
||||
hSaveStdin = GetStdHandle(STD_INPUT_HANDLE);
|
||||
|
||||
// Set a write handle to the pipe to be STDOUT.
|
||||
SetStdHandle(STD_OUTPUT_HANDLE, hstdout[1]);
|
||||
// Set a write handle to the pipe to be STDERR.
|
||||
//SetStdHandle(STD_ERROR_HANDLE, hstdout[1]);
|
||||
// Set a input handle to the pipe to be STDIN.
|
||||
SetStdHandle(STD_INPUT_HANDLE, hstdin[0]);
|
||||
|
||||
*fdout = _open_osfhandle((intptr_t)hstdin[1],0);
|
||||
_setmode (*fdout, O_BINARY); // set this file handle for binary I/O
|
||||
// start the child process(ssh)
|
||||
rc = start_process_io(
|
||||
NULL, /* executable name with .ext found in argv[0] */
|
||||
&args[0], /* argv */
|
||||
NULL ,
|
||||
hstdin[0], /* std input for cmd.exe */
|
||||
hstdout[1], /* std output for cmd.exe */
|
||||
GetStdHandle(STD_ERROR_HANDLE), //hstdout[1], /* std error for cmd.exe */
|
||||
0, // dwStartupFlags,
|
||||
&pi,
|
||||
NULL, /* current directory is default directory we set before */
|
||||
NULL
|
||||
);
|
||||
|
||||
hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
//hSaveStderr = GetStdHandle(STD_ERROR_HANDLE);
|
||||
hSaveStdin = GetStdHandle(STD_INPUT_HANDLE);
|
||||
if (!rc) {
|
||||
printf("%s could not be started\n", ssh_program);
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
hprocess = pi.hProcess ;
|
||||
}
|
||||
|
||||
// Set a write handle to the pipe to be STDOUT.
|
||||
SetStdHandle(STD_OUTPUT_HANDLE, hstdout[1]);
|
||||
// Set a write handle to the pipe to be STDERR.
|
||||
//SetStdHandle(STD_ERROR_HANDLE, hstdout[1]);
|
||||
// Set a input handle to the pipe to be STDIN.
|
||||
SetStdHandle(STD_INPUT_HANDLE, hstdin[0]);
|
||||
// After process creation, restore the saved STDOUT and STDERR.
|
||||
SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout);
|
||||
//SetStdHandle(STD_ERROR_HANDLE, hSaveStderr);
|
||||
SetStdHandle(STD_INPUT_HANDLE, hSaveStdin);
|
||||
|
||||
|
||||
// start the child process(ssh)
|
||||
rc = start_process_io(
|
||||
NULL, /* executable name with .ext found in argv[0] */
|
||||
&args[0], /* argv */
|
||||
NULL ,
|
||||
hstdin[0], /* std input for cmd.exe */
|
||||
hstdout[1], /* std output for cmd.exe */
|
||||
GetStdHandle(STD_ERROR_HANDLE), //hstdout[1], /* std error for cmd.exe */
|
||||
0, // dwStartupFlags,
|
||||
&pi,
|
||||
NULL, /* current directory is default directory we set before */
|
||||
NULL
|
||||
);
|
||||
|
||||
if (!rc) {
|
||||
printf("%s could not be started\n", ssh_program);
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
hprocess = pi.hProcess ;
|
||||
}
|
||||
|
||||
// After process creation, restore the saved STDOUT and STDERR.
|
||||
SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout);
|
||||
//SetStdHandle(STD_ERROR_HANDLE, hSaveStderr);
|
||||
SetStdHandle(STD_INPUT_HANDLE, hSaveStdin);
|
||||
|
||||
/* now close the pipe's side that the ssh.exe will use as write handle */
|
||||
CloseHandle(hstdout[1]) ;
|
||||
/* now close the pipe's side that the ssh.exe will use as read handle */
|
||||
CloseHandle(hstdin[0]) ;
|
||||
}
|
||||
/* now close the pipe's side that the ssh.exe will use as write handle */
|
||||
CloseHandle(hstdout[1]) ;
|
||||
/* now close the pipe's side that the ssh.exe will use as read handle */
|
||||
CloseHandle(hstdin[0]) ;
|
||||
|
||||
// update passed variables with where other funstions should read and write
|
||||
// from to get I/O from above child process over pipe.
|
||||
@ -950,8 +924,8 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
|
||||
//*fdout = remout;
|
||||
//*fdin = remin;
|
||||
|
||||
return 0;
|
||||
#else
|
||||
return 0;
|
||||
#else
|
||||
int pin[2], pout[2], reserved[2];
|
||||
|
||||
if (verbose_mode)
|
||||
@ -1016,7 +990,7 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
|
||||
signal(SIGINT, killchild);
|
||||
signal(SIGHUP, killchild);
|
||||
return 0;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1027,8 +1001,7 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
|
||||
int
|
||||
do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout)
|
||||
{
|
||||
#ifndef WIN32_FIXME
|
||||
|
||||
#ifndef WIN32_FIXME
|
||||
pid_t pid;
|
||||
int status;
|
||||
|
||||
@ -1062,7 +1035,7 @@ do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout)
|
||||
while (waitpid(pid, &status, 0) == -1)
|
||||
if (errno != EINTR)
|
||||
fatal("do_cmd2: waitpid: %s", strerror(errno));
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1104,9 +1077,7 @@ main(int argc, char **argv)
|
||||
extern int optind;
|
||||
|
||||
/* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
|
||||
#ifndef WIN32_FIXME
|
||||
sanitise_stdfd();
|
||||
#endif
|
||||
|
||||
/* Copy argv, because we modify it */
|
||||
newargv = xcalloc(MAX(argc + 1, 1), sizeof(*newargv));
|
||||
@ -1208,22 +1179,18 @@ main(int argc, char **argv)
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
#ifndef WIN32_FIXME
|
||||
#ifndef WINDOWS
|
||||
if ((pwd = getpwuid(userid = getuid())) == NULL)
|
||||
fatal("unknown user %u", (u_int) userid);
|
||||
#else
|
||||
#else
|
||||
InitForMicrosoftWindows(); // picks the username, user home dir
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (!isatty(STDOUT_FILENO))
|
||||
showprogress = 0;
|
||||
|
||||
remin = STDIN_FILENO;
|
||||
remout = STDOUT_FILENO;
|
||||
#ifdef WIN32_FIXME
|
||||
_setmode(remin,O_BINARY); // needed for Windows OS to avoid CrLf translations of text mode
|
||||
_setmode(remout,O_BINARY);
|
||||
#endif
|
||||
|
||||
if (fflag) {
|
||||
/* Follow "protocol", send data. */
|
||||
@ -1249,7 +1216,7 @@ main(int argc, char **argv)
|
||||
iamrecursive ? " -r" : "", pflag ? " -p" : "",
|
||||
targetshouldbedirectory ? " -d" : "");
|
||||
|
||||
#ifndef WIN32_FIXME
|
||||
#ifndef WINDOWS
|
||||
(void) signal(SIGPIPE, lostconn);
|
||||
#endif
|
||||
|
||||
@ -1264,7 +1231,7 @@ main(int argc, char **argv)
|
||||
* Finally check the exit status of the ssh process, if one was forked
|
||||
* and no error has occurred yet
|
||||
*/
|
||||
#ifndef WIN32_FIXME
|
||||
#ifndef WINDOWS
|
||||
if (do_cmd_pid != -1 && errs == 0) {
|
||||
if (remin != -1)
|
||||
(void) close(remin);
|
||||
@ -1277,7 +1244,7 @@ main(int argc, char **argv)
|
||||
errs = 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
exit(errs != 0);
|
||||
}
|
||||
|
||||
@ -1443,7 +1410,6 @@ tolocal(int argc, char **argv)
|
||||
|
||||
for (i = 0; i < argc - 1; i++) {
|
||||
if (!(src = colon(argv[i]))) { /* Local to local. */
|
||||
#ifndef WIN32_FIXME
|
||||
freeargs(&alist);
|
||||
addargs(&alist, "%s", _PATH_CP);
|
||||
if (iamrecursive)
|
||||
@ -1455,7 +1421,6 @@ tolocal(int argc, char **argv)
|
||||
addargs(&alist, "%s", argv[argc-1]);
|
||||
if (do_local_cmd(&alist))
|
||||
++errs;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
*src++ = 0;
|
||||
@ -2823,36 +2788,6 @@ lostconn(int signo)
|
||||
exit(1);
|
||||
}
|
||||
#else
|
||||
char *win32colon(char *cp)
|
||||
{
|
||||
int len=0;
|
||||
bool bSkip = false;
|
||||
|
||||
if (*cp == ':') /* Leading colon is part of file name. */
|
||||
return (0);
|
||||
|
||||
for (; *cp; ++cp) {
|
||||
len++;
|
||||
|
||||
if (*cp == '[')
|
||||
bSkip = true;
|
||||
|
||||
if (bSkip && *cp!= ']')
|
||||
continue;
|
||||
|
||||
if (*cp == ']')
|
||||
bSkip = false;
|
||||
|
||||
if (*cp == ':') {
|
||||
if ( len != 2 ) { // avoid x: format for drive letter in Windows
|
||||
return (cp);
|
||||
}
|
||||
}
|
||||
// if ( (*cp == '/') || (*cp == '\\') )
|
||||
// return (0);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
void verifydir(char *cp)
|
||||
{
|
||||
@ -2910,8 +2845,6 @@ void lostconn(int signo)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
#ifdef WITH_SCP_STATS
|
||||
void stats_fixlen(int bwritten)
|
||||
{
|
||||
@ -2927,17 +2860,11 @@ void stats_fixlen(int bwritten)
|
||||
fflush(SOME_STATS_FILE);
|
||||
}
|
||||
|
||||
|
||||
char *stat_eta_new(int msecs)
|
||||
{
|
||||
static char stat_result[32];
|
||||
int hours = 0, mins = 0, secs = 0;
|
||||
|
||||
// hours = msecs / 3600000;
|
||||
// msecs %= 3600000;
|
||||
// mins = msecs / 60000;
|
||||
// msecs %= 60000;
|
||||
|
||||
hours = msecs / 3600000;
|
||||
msecs %= 3600000;
|
||||
mins = msecs / 60000;
|
||||
@ -2954,7 +2881,7 @@ char *stat_eta_new(int msecs)
|
||||
return(stat_result);
|
||||
}
|
||||
|
||||
char *stat_eta_old(int secs)
|
||||
char *stat_eta(int secs)
|
||||
{
|
||||
static char stat_result[20];
|
||||
int hours, mins;
|
||||
@ -2964,19 +2891,19 @@ char *stat_eta_old(int secs)
|
||||
mins = secs / 60;
|
||||
secs %= 60;
|
||||
|
||||
sprintf_s(stat_result, sizeof(stat_result), "%02d:%02d:%02d", hours, mins, secs);
|
||||
sprintf(stat_result, "%02d:%02d:%02d", hours, mins, secs);
|
||||
return(stat_result);
|
||||
}
|
||||
#endif /* WITH_SCP_STATS */
|
||||
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
char *TranslatePath(char *path, bool *bDirSpec)
|
||||
{
|
||||
char temp[MAX_PATH*2];
|
||||
char temp[MAX_PATH * 2];
|
||||
char resolved[MAX_PATH];
|
||||
char * rootpath;
|
||||
char* rootpath;
|
||||
|
||||
if ( iamremote == 0)
|
||||
if (iamremote == 0)
|
||||
return path; // if we are scp client, nothing special to do, return path we got.
|
||||
|
||||
char *s = NULL;
|
||||
@ -3007,7 +2934,6 @@ char *TranslatePath(char *path, bool *bDirSpec)
|
||||
fixslashes(temp);
|
||||
PathCanonicalizeA(resolved,temp);
|
||||
|
||||
|
||||
*bDirSpec = (resolved[strlen(temp)-1] == '\\');
|
||||
// Remove trailing slash unless it's a root spec (c:\ etc)
|
||||
if (strcmp(&(resolved[1]),":\\") && resolved[strlen(temp)-1] == '\\')
|
||||
@ -3033,7 +2959,6 @@ char *TranslatePath(char *path, bool *bDirSpec)
|
||||
if (path[0] != '/' && path[0] != '\\')
|
||||
return path;
|
||||
|
||||
|
||||
s = (char *)LocalAlloc(LPTR,strlen(resolved)+1);
|
||||
strcpy_s(s,strlen(resolved)+1,resolved);
|
||||
isRootedPath = 1;
|
||||
|
@ -109,30 +109,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
/** TODO - Move this to POSIX wrapper**/
|
||||
/* ??? What if fd is nonblocking ???*/
|
||||
int writev(int fd, struct iovec *iov, int iovcnt)
|
||||
{
|
||||
int written = 0;
|
||||
|
||||
int i = 0;
|
||||
|
||||
for (i = 0; i < iovcnt; i++)
|
||||
{
|
||||
int ret = write(fd, iov[i].iov_base, iov[i].iov_len);
|
||||
|
||||
if (ret > 0)
|
||||
{
|
||||
written += ret;
|
||||
}
|
||||
}
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
extern volatile sig_atomic_t interrupted;
|
||||
extern int showprogress;
|
||||
|
||||
@ -1502,15 +1480,19 @@ do_download(struct sftp_conn *conn, const char *remote_path,
|
||||
error("Can't set times on \"%s\": %s",
|
||||
local_path, strerror(errno));
|
||||
}
|
||||
#ifndef WIN32_FIXME
|
||||
// PRAGMA:TODO
|
||||
|
||||
if (fsync_flag) {
|
||||
debug("syncing \"%s\"", local_path);
|
||||
#ifdef WINDOWS
|
||||
if(FlushFileBuffers(local_fd))
|
||||
error("Couldn't sync file \"%s\": %s",
|
||||
local_path, strerror(GetLastError()));
|
||||
#else
|
||||
if (fsync(local_fd) == -1)
|
||||
error("Couldn't sync file \"%s\": %s",
|
||||
local_path, strerror(errno));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
close(local_fd);
|
||||
sshbuf_free(msg);
|
||||
@ -1657,15 +1639,7 @@ do_upload(struct sftp_conn *conn, const char *local_path,
|
||||
|
||||
TAILQ_INIT(&acks);
|
||||
|
||||
#if(0)//def WIN32_FIXME
|
||||
|
||||
if ((local_fd = _open(local_path, O_RDONLY | O_BINARY, 0)) == -1) {
|
||||
|
||||
#else
|
||||
|
||||
if ((local_fd = open(local_path, O_RDONLY, 0)) == -1) {
|
||||
|
||||
#endif
|
||||
error("Couldn't open local file \"%s\" for reading: %s",
|
||||
local_path, strerror(errno));
|
||||
return(-1);
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
#ifdef WINDOWS
|
||||
void strmode(mode_t mode, char *p);
|
||||
void strmode_from_attrib(unsigned attrib, char *p);
|
||||
#endif
|
||||
@ -225,36 +225,28 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units)
|
||||
char sbuf[FMT_SCALED_STRSIZE];
|
||||
time_t now;
|
||||
|
||||
#ifndef WIN32_FIXME
|
||||
strmode(st->st_mode, mode);
|
||||
#else
|
||||
strmode(st->st_mode, mode);
|
||||
strmode(st->st_mode, mode);
|
||||
#ifdef WINDOWS
|
||||
strmode_from_attrib(remote, mode);
|
||||
#endif
|
||||
if (!remote) {
|
||||
user = user_from_uid(st->st_uid, 0);
|
||||
#ifdef WIN32_FIXME
|
||||
snprintf(gbuf, sizeof gbuf, "%u", (u_int)st->st_gid);
|
||||
group = gbuf;
|
||||
#endif
|
||||
} else {
|
||||
snprintf(ubuf, sizeof ubuf, "%u", (u_int)st->st_uid);
|
||||
user = ubuf;
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
snprintf(gbuf, sizeof gbuf, "%u", (u_int) st -> st_gid);
|
||||
|
||||
group = gbuf;
|
||||
|
||||
#ifdef WINDOWS
|
||||
snprintf(gbuf, sizeof gbuf, "%u", (u_int) st -> st_gid);
|
||||
group = gbuf;
|
||||
#else
|
||||
if (!remote) {
|
||||
group = group_from_gid(st->st_gid, 0);
|
||||
} else {
|
||||
snprintf(gbuf, sizeof gbuf, "%u", (u_int)st->st_gid);
|
||||
group = gbuf;
|
||||
}
|
||||
if (!remote) {
|
||||
group = group_from_gid(st->st_gid, 0);
|
||||
} else {
|
||||
snprintf(gbuf, sizeof gbuf, "%u", (u_int)st->st_gid);
|
||||
group = gbuf;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
if (ltime != NULL) {
|
||||
now = time(NULL);
|
||||
@ -281,7 +273,7 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units)
|
||||
return xstrdup(buf);
|
||||
}
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
#ifdef WINDOWS
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <windows.h>
|
||||
@ -297,7 +289,6 @@ strmode_from_attrib(unsigned attrib, char *p)
|
||||
*p = '-';
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
strmode(mode_t mode, char *p)
|
||||
{
|
||||
|
@ -22,7 +22,7 @@
|
||||
# include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32_VS
|
||||
#ifdef WINDOWS
|
||||
#include "win32_dirent.h"
|
||||
#else
|
||||
#include <dirent.h>
|
||||
@ -37,7 +37,7 @@
|
||||
#include "sftp-common.h"
|
||||
#include "sftp-client.h"
|
||||
|
||||
#ifdef WIN32_VS
|
||||
#ifdef WINDOWS
|
||||
#include "win32_dirent.c"
|
||||
#endif
|
||||
|
||||
|
83
sftp.c
83
sftp.c
@ -73,10 +73,6 @@ typedef void EditLine;
|
||||
#define DEFAULT_COPY_BUFLEN 32768 /* Size of buffer for up/download */
|
||||
#define DEFAULT_NUM_REQUESTS 64 /* # concurrent outstanding requests */
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
#define FAIL(X) if (X) goto fail
|
||||
#endif
|
||||
|
||||
#ifdef WIN32_VS
|
||||
#include "win32_dirent.h"
|
||||
#endif
|
||||
@ -290,17 +286,12 @@ help(void)
|
||||
static void
|
||||
local_do_shell(const char *args)
|
||||
{
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
#ifdef WINDOWS
|
||||
if (!*args) {
|
||||
args = (char *) getenv("ComSpec"); // get name of Windows cmd shell
|
||||
}
|
||||
system(args); // execute the shell or cmd given
|
||||
#else
|
||||
|
||||
/*
|
||||
* Original OpenSSH code.
|
||||
*/
|
||||
int status;
|
||||
char *shell;
|
||||
pid_t pid;
|
||||
@ -823,13 +814,12 @@ do_ls_dir(struct sftp_conn *conn, char *path, char *strip_path, int lflag)
|
||||
tmp = path_strip(path, strip_path);
|
||||
m += strlen(tmp);
|
||||
free(tmp);
|
||||
#ifndef WIN32_FIXME
|
||||
#ifdef WINDOWS
|
||||
width = ConSetScreenX();
|
||||
#else
|
||||
if (ioctl(fileno(stdin), TIOCGWINSZ, &ws) != -1)
|
||||
width = ws.ws_col;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
columns = width / (m + 2);
|
||||
columns = MAX(columns, 1);
|
||||
colspace = width / columns;
|
||||
@ -926,14 +916,13 @@ do_globbed_ls(struct sftp_conn *conn, char *path, char *strip_path,
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
#ifndef WIN32_FIXME
|
||||
#ifdef WINDOWS
|
||||
width = ConSetScreenX();
|
||||
#else
|
||||
if (ioctl(fileno(stdin), TIOCGWINSZ, &ws) != -1)
|
||||
width = ws.ws_col;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
if (!(lflag & LS_SHORT_VIEW)) {
|
||||
/* Count entries for sort and find longest filename */
|
||||
for (i = 0; g.gl_pathv[i]; i++)
|
||||
@ -2187,9 +2176,6 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
|
||||
static void
|
||||
connect_to_server(char *path, char **args, int *in, int *out)
|
||||
{
|
||||
/*
|
||||
* Original OpenSSH code.
|
||||
*/
|
||||
int c_in, c_out;
|
||||
|
||||
#ifdef USE_PIPES
|
||||
@ -2210,9 +2196,9 @@ connect_to_server(char *path, char **args, int *in, int *out)
|
||||
c_in = c_out = inout[1];
|
||||
#endif /* USE_PIPES */
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
#ifdef WINDOWS
|
||||
{
|
||||
int i;
|
||||
int i = 0;
|
||||
char fullCmd[MAX_PATH] = { 0 };
|
||||
char ioArg[1024] = { 0 };
|
||||
PROCESS_INFORMATION pi = { 0 };
|
||||
@ -2220,8 +2206,7 @@ connect_to_server(char *path, char **args, int *in, int *out)
|
||||
|
||||
debug3("Generating ssh-client command...");
|
||||
strncat(fullCmd, path, MAX_PATH);
|
||||
for (i = 1; args[i]; i++)
|
||||
{
|
||||
for (i = 1; args[i]; i++) {
|
||||
strncat(fullCmd, " ", MAX_PATH);
|
||||
strncat(fullCmd, args[i], MAX_PATH);
|
||||
}
|
||||
@ -2332,40 +2317,29 @@ main(int argc, char **argv)
|
||||
size_t num_requests = DEFAULT_NUM_REQUESTS;
|
||||
long long limit_kbps = 0;
|
||||
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
#ifdef WINDOWS
|
||||
/*
|
||||
* Initialize I/O wrappers.
|
||||
*/
|
||||
|
||||
w32posix_initialize();
|
||||
|
||||
w32posix_initialize();
|
||||
setvbuf(stdout, NULL, _IONBF, 0);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
/* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
|
||||
sanitise_stdfd();
|
||||
#ifndef WIN32_FIXME
|
||||
setlocale(LC_CTYPE, "");
|
||||
#endif
|
||||
|
||||
__progname = ssh_get_progname(argv[0]);
|
||||
memset(&args, '\0', sizeof(args));
|
||||
args.list = NULL;
|
||||
addargs(&args, "%s", ssh_program);
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
addargs(&args, "-oForwardX11=no");
|
||||
addargs(&args, "-oForwardAgent=no");
|
||||
addargs(&args, "-oPermitLocalCommand=no");
|
||||
addargs(&args, "-oClearAllForwardings=yes");
|
||||
|
||||
#else
|
||||
addargs(&args, "-oForwardX11 no");
|
||||
addargs(&args, "-oForwardAgent no");
|
||||
addargs(&args, "-oPermitLocalCommand no");
|
||||
addargs(&args, "-oClearAllForwardings yes");
|
||||
#endif
|
||||
|
||||
ll = SYSLOG_LEVEL_INFO;
|
||||
infile = stdin;
|
||||
|
||||
@ -2393,16 +2367,7 @@ main(int argc, char **argv)
|
||||
addargs(&args, "-%c", ch);
|
||||
break;
|
||||
case 'P':
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
addargs(&args, "-oPort=%s", optarg);
|
||||
|
||||
#else
|
||||
|
||||
addargs(&args, "-oPort %s", optarg);
|
||||
|
||||
#endif
|
||||
|
||||
addargs(&args, "-oPort %s", optarg);
|
||||
break;
|
||||
case 'v':
|
||||
if (debug_level < 3) {
|
||||
@ -2437,16 +2402,7 @@ main(int argc, char **argv)
|
||||
fatal("%s (%s).", strerror(errno), optarg);
|
||||
showprogress = 0;
|
||||
quiet = batchmode = 1;
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
addargs(&args, "-obatchmode=yes");
|
||||
|
||||
#else
|
||||
|
||||
addargs(&args, "-obatchmode yes");
|
||||
|
||||
#endif
|
||||
|
||||
break;
|
||||
case 'f':
|
||||
global_fflag = 1;
|
||||
@ -2520,17 +2476,8 @@ main(int argc, char **argv)
|
||||
fprintf(stderr, "Missing hostname\n");
|
||||
usage();
|
||||
}
|
||||
#ifdef WIN32_FIXME
|
||||
|
||||
addargs(&args, "-oProtocol=%d", sshver);
|
||||
|
||||
#else
|
||||
|
||||
addargs(&args, "-oProtocol %d", sshver);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* no subsystem if the server-spec contains a '/' */
|
||||
if (sftp_server == NULL || strchr(sftp_server, '/') == NULL)
|
||||
addargs(&args, "-s");
|
||||
|
Loading…
x
Reference in New Issue
Block a user