@@ -110,7 +110,7 @@ typedef struct WOLFSSHD_CONNECTION {
110110 WOLFSSHD_AUTH * auth ;
111111 int fd ;
112112 int listenFd ;
113- char ip [INET_ADDRSTRLEN ];
113+ char ip [INET6_ADDRSTRLEN ];
114114 byte isThreaded ;
115115} WOLFSSHD_CONNECTION ;
116116
@@ -151,6 +151,7 @@ static void SyslogCb(enum wolfSSH_LogLevel level, const char *const msgStr)
151151
152152#ifdef _WIN32
153153static void ServiceDebugCb (enum wolfSSH_LogLevel level , const char * const msgStr )
154+ #ifdef UNICODE
154155{
155156 WCHAR * wc ;
156157 size_t szWord = WSTRLEN (msgStr ) + 3 ; /* + 3 for null terminator and new
@@ -170,7 +171,13 @@ static void ServiceDebugCb(enum wolfSSH_LogLevel level, const char* const msgStr
170171 }
171172 WOLFSSH_UNUSED (level );
172173}
174+ #else
175+ {
176+ OutputDebugString (msgStr );
177+ WOLFSSH_UNUSED (level );
178+ }
173179#endif
180+ #endif /* _WIN32 */
174181
175182static void ShowUsage (void )
176183{
@@ -674,7 +681,6 @@ static int SFTP_Subsystem(WOLFSSHD_CONNECTION* conn, WOLFSSH* ssh,
674681 }
675682
676683 if (ret == WS_SUCCESS ) {
677- r [rSz ] = '\0' ;
678684 wolfSSH_Log (WS_LOG_INFO ,
679685 "[SSHD] Using directory %s for SFTP connection" , r );
680686 if (wolfSSH_SFTP_SetDefaultPath (ssh , r ) != WS_SUCCESS ) {
@@ -832,7 +838,6 @@ static int SHELL_Subsystem(WOLFSSHD_CONNECTION* conn, WOLFSSH* ssh,
832838
833839 /* @TODO check for conpty support LoadLibrary()and GetProcAddress(). */
834840
835-
836841 if (forcedCmd != NULL && WSTRCMP (forcedCmd , "internal-sftp" ) == 0 ) {
837842 wolfSSH_Log (WS_LOG_ERROR ,
838843 "[SSHD] Only SFTP connections allowed for user "
@@ -912,6 +917,7 @@ static int SHELL_Subsystem(WOLFSSHD_CONNECTION* conn, WOLFSSH* ssh,
912917 if (ret == WS_SUCCESS ) {
913918 SECURITY_ATTRIBUTES saAttr ;
914919
920+ ZeroMemory (& saAttr , sizeof (saAttr ));
915921 saAttr .nLength = sizeof (SECURITY_ATTRIBUTES );
916922 saAttr .bInheritHandle = TRUE;
917923 saAttr .lpSecurityDescriptor = NULL ;
@@ -926,28 +932,30 @@ static int SHELL_Subsystem(WOLFSSHD_CONNECTION* conn, WOLFSSH* ssh,
926932 }
927933
928934 if (ret == WS_SUCCESS ) {
929- STARTUPINFO si ;
935+ STARTUPINFOW si ;
930936 PCWSTR conCmd = L"wolfsshd.exe -r " ;
931937 PWSTR conCmdPtr ;
932- int conCmdSz ;
938+ size_t conCmdSz ;
933939
934940 SetHandleInformation (ptyIn , HANDLE_FLAG_INHERIT , 0 );
935941 SetHandleInformation (ptyOut , HANDLE_FLAG_INHERIT , 0 );
936942
937943 wolfSSH_SetTerminalResizeCtx (ssh , (void * )& ptyIn );
938944
939- conCmdSz = (int )(wcslen (conCmd ) + cmdSz + 2 ); /* +1 for terminator */
940- conCmdPtr = (PWSTR )WMALLOC (sizeof (wchar_t ) * conCmdSz , NULL , DYNTYPE_SSHD );
945+ conCmdSz = wcslen (conCmd ) + cmdSz + 3 ;
946+ /* +1 for terminator, +2 for quotes */
947+ conCmdPtr = (PWSTR )WMALLOC (sizeof (wchar_t ) * conCmdSz ,
948+ NULL , DYNTYPE_SSHD );
941949 if (conCmdPtr == NULL ) {
942950 ret = WS_MEMORY_E ;
943951 }
944952 else {
945- memset (conCmdPtr , 0 , conCmdSz * sizeof ( wchar_t ));
946- _snwprintf ( conCmdPtr , conCmdSz * sizeof ( wchar_t ), L"wolfsshd.exe -r \"%s\"" , cmd );
953+ _snwprintf_s (conCmdPtr , conCmdSz , conCmdSz ,
954+ L"wolfsshd.exe -r \"%s\"" , cmd );
947955 }
948956
949- ZeroMemory (& si , sizeof (STARTUPINFO ));
950- si .cb = sizeof (STARTUPINFO );
957+ ZeroMemory (& si , sizeof (si ));
958+ si .cb = sizeof (si );
951959
952960 si .hStdInput = cnslIn ;
953961 si .hStdOutput = cnslOut ;
@@ -967,7 +975,6 @@ static int SHELL_Subsystem(WOLFSSHD_CONNECTION* conn, WOLFSSH* ssh,
967975 CloseHandle (cnslOut );
968976
969977 WFREE (conCmdPtr , NULL , DYNTYPE_SSHD );
970- CloseHandle (processInfo .hThread );
971978 }
972979
973980 if (ret == WS_SUCCESS ) {
@@ -2374,21 +2381,21 @@ static int StartSSHD(int argc, char** argv)
23742381 wolfSSH_Log (WS_LOG_ERROR , "[SSHD] Issue updating service status" );
23752382 }
23762383 }
2377-
2378- /* Create a stop event to watch on */
2379- serviceStop = CreateEvent (NULL , TRUE, FALSE, NULL );
2380- if (serviceStop == NULL ) {
2381- serviceStatus .dwControlsAccepted = 0 ;
2382- serviceStatus .dwCurrentState = SERVICE_STOPPED ;
2383- serviceStatus .dwWin32ExitCode = GetLastError ();
2384- serviceStatus .dwCheckPoint = 1 ;
2385-
2386- if (SetServiceStatus (serviceStatusHandle , & serviceStatus ) == FALSE) {
2387- wolfSSH_Log (WS_LOG_ERROR , "[SSHD] Issue updating service status" );
2384+ if (ret == WS_SUCCESS ) {
2385+ /* Create a stop event to watch on */
2386+ serviceStop = CreateEvent (NULL , TRUE, FALSE, NULL );
2387+ if (serviceStop == NULL ) {
2388+ serviceStatus .dwControlsAccepted = 0 ;
2389+ serviceStatus .dwCurrentState = SERVICE_STOPPED ;
2390+ serviceStatus .dwWin32ExitCode = GetLastError ();
2391+ serviceStatus .dwCheckPoint = 1 ;
2392+
2393+ if (SetServiceStatus (serviceStatusHandle , & serviceStatus ) == FALSE) {
2394+ wolfSSH_Log (WS_LOG_ERROR , "[SSHD] Issue updating service status" );
2395+ }
2396+ return ;
23882397 }
2389- return ;
23902398 }
2391-
23922399 if (cmdArgs != NULL ) {
23932400 LocalFree (cmdArgs );
23942401 }
@@ -2550,8 +2557,8 @@ static int SetupConsole(char* inCmd)
25502557 HANDLE sOut ;
25512558 HANDLE sIn ;
25522559 HPCON pCon = 0 ;
2553- COORD cord ;
2554- STARTUPINFOEX ext ;
2560+ COORD cord = { 80 , 24 }; /* Default to 80x24. Updated later. */
2561+ STARTUPINFOEXW ext ;
25552562 int ret = WS_SUCCESS ;
25562563 PWSTR cmd = NULL ;
25572564 size_t cmdSz = 0 ;
@@ -2564,10 +2571,6 @@ static int SetupConsole(char* inCmd)
25642571 return -1 ;
25652572 }
25662573
2567- /* defautl 80x24 with setup, screen size will get set by VT command after started */
2568- cord .X = 80 ;
2569- cord .Y = 24 ;
2570-
25712574 sIn = GetStdHandle (STD_INPUT_HANDLE );
25722575
25732576 if (WSTRCMP (shellCmd , inCmd ) != 0 ) {
0 commit comments