Merge pull request #243 from ejohnstown/vxworks

VxWorks Customizations
pull/244/head
JacobBarthelmeh 2020-02-18 17:08:00 -07:00 committed by GitHub
commit 552b763e4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 248 additions and 142 deletions

View File

@ -161,6 +161,7 @@ static int wsUserAuth(byte authType,
}
else {
printf("Password: ");
fflush(stdout);
SetEcho(0);
if (fgets((char*)userPassword, sizeof(userPassword), stdin) == NULL) {
printf("Getting password failed.\n");

View File

@ -478,6 +478,7 @@ static int wsUserAuth(byte authType,
}
else {
printf("Password: ");
fflush(stdout);
SetEcho(0);
if (WFGETS((char*)userPassword, sizeof(userPassword),
stdin) == NULL) {
@ -593,6 +594,7 @@ static int doCmds(func_args* args)
err_msg("fputs error");
return -1;
}
fflush(stdout);
WMEMSET(msg, 0, sizeof(msg));
if (SFTP_FGETS(args, msg, sizeof(msg) - 1) == NULL) {

View File

@ -1640,7 +1640,9 @@ static int GetString(char* s, word32* sSz,
if (result == WS_SUCCESS) {
result = WS_BUFFER_E;
if (*idx < len && strSz <= len - *idx) {
/* This allows 0 length string to be decoded */
if (*idx <= len && strSz <= len - *idx) {
*sSz = (strSz >= *sSz) ? *sSz - 1 : strSz; /* -1 for null char */
WMEMCPY(s, buf + *idx, *sSz);
*idx += strSz;
@ -3285,7 +3287,7 @@ static int DoUserAuthRequestPassword(WOLFSSH* ssh, WS_UserAuthData* authData,
pw->newPassword = NULL;
pw->newPasswordSz = 0;
}
if (ssh->ctx->userAuthCb != NULL) {
WLOG(WS_LOG_DEBUG, "DUARPW: Calling the userauth callback");
ret = ssh->ctx->userAuthCb(WOLFSSH_USERAUTH_PASSWORD,
@ -3803,6 +3805,11 @@ static int DoUserAuthRequest(WOLFSSH* ssh,
ret = SendUserAuthFailure(ssh, 0);
}
if (ret == WS_SUCCESS) {
ret = wolfSSH_SetUsernameRaw(ssh,
authData.username, authData.usernameSz);
}
*idx = begin;
}
@ -8372,20 +8379,23 @@ int SendChannelRequest(WOLFSSH* ssh, byte* name, word32 nameSz)
#ifdef WOLFSSH_TERM
/* sets terminal mode in buffer and advances idx */
static void TTYSet(word32 isSet, int type, byte* out, word32* idx)
{
if (isSet) isSet = 1;
out[*idx] = type; *idx += 1;
c32toa(isSet, out + *idx); *idx += UINT32_SZ;
}
#if !defined(USE_WINDOWS_API) && !defined(MICROCHIP_PIC32) && \
!defined(NO_TERMIOS)
/* sets terminal mode in buffer and advances idx */
static void TTYSet(word32 isSet, int type, byte* out, word32* idx)
{
if (isSet) isSet = 1;
out[*idx] = type; *idx += 1;
c32toa(isSet, out + *idx); *idx += UINT32_SZ;
}
static void TTYCharSet(char flag, int type, byte* out, word32* idx)
{
out[*idx] = type; *idx += 1;
c32toa(flag, out + *idx); *idx += UINT32_SZ;
}
static void TTYCharSet(char flag, int type, byte* out, word32* idx)
{
out[*idx] = type; *idx += 1;
c32toa(flag, out + *idx); *idx += UINT32_SZ;
}
#endif /* !USE_WINDOWS_API && !MICROCHIP_PIC32 && !NO_TERMIOS*/
/* create terminal mode string for pseudo-terminal request
@ -8393,110 +8403,107 @@ static void TTYCharSet(char flag, int type, byte* out, word32* idx)
static int CreateMode(WOLFSSH* ssh, byte* mode)
{
word32 idx = 0;
#ifndef NO_TERMIOS
WOLFSSH_TERMIOS term;
#endif
int baud = 38400; /* default speed */
int buad = 38400; /* default speed */
#if !defined(USE_WINDOWS_API) && !defined(MICROCHIP_PIC32) && \
!defined(NO_TERMIOS)
{
WOLFSSH_TERMIOS term;
#if !defined(USE_WINDOWS_API) && !defined(MICROCHIP_PIC32) && \
!defined(NO_TERMIOS)
if (tcgetattr(STDIN_FILENO, &term) != 0) {
printf("Couldn't get the original terminal settings.\n");
return -1;
if (tcgetattr(STDIN_FILENO, &term) != 0) {
printf("Couldn't get the original terminal settings.\n");
return -1;
}
/* set baud rate */
baud = (int)cfgetospeed(&term);
/* char type */
TTYCharSet(term.c_cc[VINTR], WOLFSSH_VINTR, mode, &idx);
TTYCharSet(term.c_cc[VQUIT], WOLFSSH_VQUIT, mode, &idx);
TTYCharSet(term.c_cc[VERASE], WOLFSSH_VERASE, mode, &idx);
TTYCharSet(term.c_cc[VKILL], WOLFSSH_VKILL, mode, &idx);
TTYCharSet(term.c_cc[VEOF], WOLFSSH_VEOF, mode, &idx);
TTYCharSet(term.c_cc[VEOL], WOLFSSH_VEOL, mode, &idx);
TTYCharSet(term.c_cc[VEOL2], WOLFSSH_VEOL2, mode, &idx);
TTYCharSet(term.c_cc[VSTART], WOLFSSH_VSTART, mode, &idx);
TTYCharSet(term.c_cc[VSTOP], WOLFSSH_VSTOP, mode, &idx);
TTYCharSet(term.c_cc[VSUSP], WOLFSSH_VSUSP, mode, &idx);
#ifdef VDSUSP
TTYCharSet(term.c_cc[VDSUSP], WOLFSSH_VDSUSP, mode, &idx);
#endif
TTYCharSet(term.c_cc[VREPRINT], WOLFSSH_VREPRINT, mode, &idx);
TTYCharSet(term.c_cc[VWERASE], WOLFSSH_VWERASE, mode, &idx);
TTYCharSet(term.c_cc[VLNEXT], WOLFSSH_VLNEXT, mode, &idx);
#ifdef VFLUSH
TTYCharSet(term.c_cc[VFLUSH], WOLFSSH_VFLUSH, mode, &idx);
#endif
#ifdef VSWTCH
TTYCharSet(term.c_cc[VSWTCH], WOLFSSH_VSWTCH, mode, &idx);
#endif
#ifdef VSTATUS
TTYCharSet(term.c_cc[VSTATUS], WOLFSSH_VSTATUS, mode, &idx);
#endif
TTYCharSet(term.c_cc[VDISCARD], WOLFSSH_VDISCARD, mode, &idx);
/* c_iflag for input modes */
TTYSet((term.c_iflag & IGNPAR), WOLFSSH_IGNPAR, mode, &idx);
TTYSet((term.c_iflag & PARMRK), WOLFSSH_PARMRK, mode, &idx);
TTYSet((term.c_iflag & INPCK), WOLFSSH_INPCK, mode, &idx);
TTYSet((term.c_iflag & ISTRIP), WOLFSSH_ISTRIP, mode, &idx);
TTYSet((term.c_iflag & INLCR), WOLFSSH_INLCR, mode, &idx);
TTYSet((term.c_iflag & IGNCR), WOLFSSH_IGNCR, mode, &idx);
TTYSet((term.c_iflag & ICRNL), WOLFSSH_ICRNL, mode, &idx);
#ifdef IUCLC
TTYSet((term.c_iflag & IUCLC), WOLFSSH_IUCLC, mode, &idx);
#endif
TTYSet((term.c_iflag & IXON), WOLFSSH_IXON, mode, &idx);
TTYSet((term.c_iflag & IXANY), WOLFSSH_IXANY, mode, &idx);
TTYSet((term.c_iflag & IXOFF), WOLFSSH_IXOFF, mode, &idx);
TTYSet((term.c_iflag & IMAXBEL), WOLFSSH_IMAXBEL, mode, &idx);
/* c_lflag */
TTYSet((term.c_lflag & ISIG), WOLFSSH_ISIG, mode, &idx);
TTYSet((term.c_lflag & ICANON), WOLFSSH_ICANON, mode, &idx);
#ifdef XCASE
TTYSet((term.c_lflag & XCASE), WOLFSSH_XCASE, mode, &idx);
#endif
TTYSet((term.c_lflag & ECHO), WOLFSSH_ECHO, mode, &idx);
TTYSet((term.c_lflag & ECHOE), WOLFSSH_ECHOE, mode, &idx);
TTYSet((term.c_lflag & ECHOK), WOLFSSH_ECHOK, mode, &idx);
TTYSet((term.c_lflag & ECHONL), WOLFSSH_ECHONL, mode, &idx);
TTYSet((term.c_lflag & NOFLSH), WOLFSSH_NOFLSH, mode, &idx);
TTYSet((term.c_lflag & TOSTOP), WOLFSSH_TOSTOP, mode, &idx);
TTYSet((term.c_lflag & IEXTEN), WOLFSSH_IEXTEN, mode, &idx);
TTYSet((term.c_lflag & ECHOCTL), WOLFSSH_ECHOCTL, mode, &idx);
TTYSet((term.c_lflag & ECHOKE), WOLFSSH_ECHOKE, mode, &idx);
#ifdef PENDIN
TTYSet((term.c_lflag & PENDIN), WOLFSSH_PENDIN, mode, &idx);
#endif
/* c_oflag */
TTYSet((term.c_oflag & OPOST), WOLFSSH_OPOST, mode, &idx);
#ifdef OLCUC
TTYSet((term.c_oflag & OLCUC), WOLFSSH_OLCUC, mode, &idx);
#endif
TTYSet((term.c_oflag & ONLCR), WOLFSSH_ONLCR, mode, &idx);
TTYSet((term.c_oflag & OCRNL), WOLFSSH_OCRNL, mode, &idx);
TTYSet((term.c_oflag & ONOCR), WOLFSSH_ONOCR, mode, &idx);
TTYSet((term.c_oflag & ONLRET), WOLFSSH_ONLRET, mode, &idx);
/* c_cflag */
TTYSet((term.c_cflag & CS7), WOLFSSH_CS7, mode, &idx);
TTYSet((term.c_cflag & CS8), WOLFSSH_CS8, mode, &idx);
TTYSet((term.c_cflag & PARENB), WOLFSSH_PARENB, mode, &idx);
TTYSet((term.c_cflag & PARODD), WOLFSSH_PARODD, mode, &idx);
}
/* set baud rate */
buad = (int)cfgetospeed(&term);
/* char type */
TTYCharSet(term.c_cc[VINTR], WOLFSSH_VINTR, mode, &idx);
TTYCharSet(term.c_cc[VQUIT], WOLFSSH_VQUIT, mode, &idx);
TTYCharSet(term.c_cc[VERASE], WOLFSSH_VERASE, mode, &idx);
TTYCharSet(term.c_cc[VKILL], WOLFSSH_VKILL, mode, &idx);
TTYCharSet(term.c_cc[VEOF], WOLFSSH_VEOF, mode, &idx);
TTYCharSet(term.c_cc[VEOL], WOLFSSH_VEOL, mode, &idx);
TTYCharSet(term.c_cc[VEOL2], WOLFSSH_VEOL2, mode, &idx);
TTYCharSet(term.c_cc[VSTART], WOLFSSH_VSTART, mode, &idx);
TTYCharSet(term.c_cc[VSTOP], WOLFSSH_VSTOP, mode, &idx);
TTYCharSet(term.c_cc[VSUSP], WOLFSSH_VSUSP, mode, &idx);
#ifdef VDSUSP
TTYCharSet(term.c_cc[VDSUSP], WOLFSSH_VDSUSP, mode, &idx);
#endif
TTYCharSet(term.c_cc[VREPRINT], WOLFSSH_VREPRINT, mode, &idx);
TTYCharSet(term.c_cc[VWERASE], WOLFSSH_VWERASE, mode, &idx);
TTYCharSet(term.c_cc[VLNEXT], WOLFSSH_VLNEXT, mode, &idx);
#ifdef VFLUSH
TTYCharSet(term.c_cc[VFLUSH], WOLFSSH_VFLUSH, mode, &idx);
#endif
#ifdef VSWTCH
TTYCharSet(term.c_cc[VSWTCH], WOLFSSH_VSWTCH, mode, &idx);
#endif
#ifdef VSTATUS
TTYCharSet(term.c_cc[VSTATUS], WOLFSSH_VSTATUS, mode, &idx);
#endif
TTYCharSet(term.c_cc[VDISCARD], WOLFSSH_VDISCARD, mode, &idx);
/* c_iflag for input modes */
TTYSet((term.c_iflag & IGNPAR), WOLFSSH_IGNPAR, mode, &idx);
TTYSet((term.c_iflag & PARMRK), WOLFSSH_PARMRK, mode, &idx);
TTYSet((term.c_iflag & INPCK), WOLFSSH_INPCK, mode, &idx);
TTYSet((term.c_iflag & ISTRIP), WOLFSSH_ISTRIP, mode, &idx);
TTYSet((term.c_iflag & INLCR), WOLFSSH_INLCR, mode, &idx);
TTYSet((term.c_iflag & IGNCR), WOLFSSH_IGNCR, mode, &idx);
TTYSet((term.c_iflag & ICRNL), WOLFSSH_ICRNL, mode, &idx);
#ifdef IUCLC
TTYSet((term.c_iflag & IUCLC), WOLFSSH_IUCLC, mode, &idx);
#endif
TTYSet((term.c_iflag & IXON), WOLFSSH_IXON, mode, &idx);
TTYSet((term.c_iflag & IXANY), WOLFSSH_IXANY, mode, &idx);
TTYSet((term.c_iflag & IXOFF), WOLFSSH_IXOFF, mode, &idx);
TTYSet((term.c_iflag & IMAXBEL), WOLFSSH_IMAXBEL, mode, &idx);
/* c_lflag */
TTYSet((term.c_lflag & ISIG), WOLFSSH_ISIG, mode, &idx);
TTYSet((term.c_lflag & ICANON), WOLFSSH_ICANON, mode, &idx);
#ifdef XCASE
TTYSet((term.c_lflag & XCASE), WOLFSSH_XCASE, mode, &idx);
#endif
TTYSet((term.c_lflag & ECHO), WOLFSSH_ECHO, mode, &idx);
TTYSet((term.c_lflag & ECHOE), WOLFSSH_ECHOE, mode, &idx);
TTYSet((term.c_lflag & ECHOK), WOLFSSH_ECHOK, mode, &idx);
TTYSet((term.c_lflag & ECHONL), WOLFSSH_ECHONL, mode, &idx);
TTYSet((term.c_lflag & NOFLSH), WOLFSSH_NOFLSH, mode, &idx);
TTYSet((term.c_lflag & TOSTOP), WOLFSSH_TOSTOP, mode, &idx);
TTYSet((term.c_lflag & IEXTEN), WOLFSSH_IEXTEN, mode, &idx);
TTYSet((term.c_lflag & ECHOCTL), WOLFSSH_ECHOCTL, mode, &idx);
TTYSet((term.c_lflag & ECHOKE), WOLFSSH_ECHOKE, mode, &idx);
#ifdef PENDIN
TTYSet((term.c_lflag & PENDIN), WOLFSSH_PENDIN, mode, &idx);
#endif
/* c_oflag */
TTYSet((term.c_oflag & OPOST), WOLFSSH_OPOST, mode, &idx);
#ifdef OLCUC
TTYSet((term.c_oflag & OLCUC), WOLFSSH_OLCUC, mode, &idx);
#endif
TTYSet((term.c_oflag & ONLCR), WOLFSSH_ONLCR, mode, &idx);
TTYSet((term.c_oflag & OCRNL), WOLFSSH_OCRNL, mode, &idx);
TTYSet((term.c_oflag & ONOCR), WOLFSSH_ONOCR, mode, &idx);
TTYSet((term.c_oflag & ONLRET), WOLFSSH_ONLRET, mode, &idx);
/* c_cflag */
TTYSet((term.c_cflag & CS7), WOLFSSH_CS7, mode, &idx);
TTYSet((term.c_cflag & CS8), WOLFSSH_CS8, mode, &idx);
TTYSet((term.c_cflag & PARENB), WOLFSSH_PARENB, mode, &idx);
TTYSet((term.c_cflag & PARODD), WOLFSSH_PARODD, mode, &idx);
#endif /* !USE_WINDOWS_API && !MICROCHIP_PIC32 */
#endif /* !USE_WINDOWS_API && !MICROCHIP_PIC32 && !NO_TERMIOS */
mode[idx++] = WOLFSSH_TTY_OP_OSPEED;
c32toa(buad, mode + idx); idx += UINT32_SZ;
c32toa(baud, mode + idx); idx += UINT32_SZ;
mode[idx++] = WOLFSSH_TTY_OP_ISPEED;
c32toa(buad, mode + idx); idx += UINT32_SZ;
c32toa(baud, mode + idx); idx += UINT32_SZ;
(void)term;
(void)ssh;
mode[idx++] = WOLFSSH_TTY_OP_END;
return idx;

View File

@ -1186,41 +1186,64 @@ int wolfSSH_SetChannelType(WOLFSSH* ssh, byte type, byte* name, word32 nameSz)
return WS_SUCCESS;
}
int wolfSSH_SetUsername(WOLFSSH* ssh, const char* username)
int wolfSSH_SetUsernameRaw(WOLFSSH* ssh,
const byte* username, word32 usernameSz)
{
char* value = NULL;
word32 valueSz = 0;
char* newUsername = NULL;
int ret = WS_SUCCESS;
if (ssh == NULL || ssh->handshake == NULL ||
ssh->ctx->side == WOLFSSH_ENDPOINT_SERVER ||
username == NULL) {
if (ssh == NULL)
ret = WS_BAD_ARGUMENT;
if (username == NULL || usernameSz == 0)
ret = WS_BAD_ARGUMENT;
}
if (ret == WS_SUCCESS) {
valueSz = (word32)WSTRLEN(username);
if (valueSz > 0)
value = (char*)WMALLOC(valueSz + 1, ssh->ctx->heap, DYNTYPE_STRING);
if (value == NULL)
newUsername = (char*)WMALLOC(usernameSz + 1,
ssh->ctx->heap, DYNTYPE_STRING);
if (newUsername == NULL)
ret = WS_MEMORY_E;
}
if (ret == WS_SUCCESS) {
WSTRNCPY(value, username, valueSz + 1);
if (ssh->userName != NULL) {
WFREE(ssh->userName, ssh->ctx->heap, DYNTYPE_STRING);
ssh->userName = NULL;
else {
WMEMCPY(newUsername, username, usernameSz);
newUsername[usernameSz] = 0;
if (ssh->userName != NULL)
WFREE(ssh->userName, ssh->ctx->heap, DYNTYPE_STRING);
ssh->userName = newUsername;
ssh->userNameSz = usernameSz;
}
ssh->userName = value;
ssh->userNameSz = valueSz;
}
return ret;
}
int wolfSSH_SetUsername(WOLFSSH* ssh, const char* username)
{
int ret = WS_SUCCESS;
if (ssh == NULL || username == NULL)
ret = WS_BAD_ARGUMENT;
if (ret == WS_SUCCESS) {
ret = wolfSSH_SetUsernameRaw(ssh,
(const byte*)username, (word32)WSTRLEN(username));
}
return ret;
}
char* wolfSSH_GetUsername(WOLFSSH* ssh)
{
char* name = NULL;
if (ssh != NULL)
name = ssh->userName;
return name;
}
int wolfSSH_CTX_SetBanner(WOLFSSH_CTX* ctx,
const char* newBanner)
{

View File

@ -419,13 +419,14 @@ static void test_wolfSSH_SetUsername(void)
WOLFSSH* ssh;
const char username[] = "johnny";
const char empty[] = "";
const char* name = NULL;
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsername(NULL, NULL));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsernameRaw(NULL, NULL, 0));
AssertNotNull(ctx = wolfSSH_CTX_new(WOLFSSH_ENDPOINT_SERVER, NULL));
AssertNotNull(ssh = wolfSSH_new(ctx));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsername(ssh, username));
AssertIntEQ(WS_SUCCESS, wolfSSH_SetUsername(ssh, username));
wolfSSH_free(ssh);
wolfSSH_CTX_free(ctx);
@ -433,9 +434,19 @@ static void test_wolfSSH_SetUsername(void)
AssertNotNull(ssh = wolfSSH_new(ctx));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsername(ssh, NULL));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsername(ssh, empty));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsernameRaw(ssh, NULL, 0));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsernameRaw(ssh, NULL, 23));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsernameRaw(ssh,
(const byte*)empty, 0));
AssertIntNE(WS_SUCCESS, wolfSSH_SetUsernameRaw(ssh,
(const byte*)username, 0));
wolfSSH_free(ssh);
AssertNotNull(ssh = wolfSSH_new(ctx));
AssertIntEQ(WS_SUCCESS, wolfSSH_SetUsername(ssh, username));
AssertIntEQ(WS_SUCCESS, wolfSSH_SetUsernameRaw(ssh,
(const byte*)username, (word32)strlen(username)));
AssertNotNull((name = wolfSSH_GetUsername(ssh)));
AssertIntEQ(0, strcmp(username, name));
wolfSSH_free(ssh);
wolfSSH_CTX_free(ctx);
#endif /* WOLFSSH_NO_CLIENT */

View File

@ -21,7 +21,7 @@
#ifndef WOLFSSL_CERTS_TEST_H
#define WOLFSSL_CERTS_TEST_H
#ifdef NO_FILESYSTEM
#if defined(NO_FILESYSTEM)
/* ./keys/server-key-rsa.der, 2048-bit */
static const unsigned char rsa_key_der_2048[] =

View File

@ -222,7 +222,11 @@ extern "C" {
#define WFTELL(s) ftell((s))
#define WREWIND(s) rewind((s))
#define WSEEK_END SEEK_END
#define WUTIMES(f,t) utimes((f),(t))
#ifdef WOLFSSL_VXWORKS
#define WUTIMES(f,t) (WS_SUCCESS)
#else
#define WUTIMES(f,t) utimes((f),(t))
#endif
#ifndef USE_WINDOWS_API
#define WCHMOD(fs,f,m) chmod((f),(m))
@ -262,8 +266,12 @@ extern "C" {
#else
#include <unistd.h>
#include <sys/stat.h>
#define WCHDIR(p) chdir((p))
#define WMKDIR(fs,p,m) mkdir((p),(m))
#define WCHDIR(p) chdir((p))
#ifdef WOLFSSL_VXWORKS
#define WMKDIR(fs,p,m) mkdir((p))
#else
#define WMKDIR(fs,p,m) mkdir((p),(m))
#endif
#endif
#endif
#endif
@ -271,7 +279,11 @@ extern "C" {
/* setup string handling */
#ifndef WSTRING_USER
#include <string.h>
#ifdef WOLFSSL_VXWORKS
#include <strings.h>
#else
#include <string.h>
#endif
WOLFSSH_API char* wstrnstr(const char*, const char*, unsigned int);
WOLFSSH_API char* wstrncat(char*, const char*, size_t);
@ -306,7 +318,7 @@ extern "C" {
#define WSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n))
#define WSNPRINTF(s,n,f,...) snprintf((s),(n),(f),__VA_ARGS__)
#define WVSNPRINTF(s,n,f,...) vsnprintf((s),(n),(f),__VA_ARGS__)
#else
#else
#ifndef FREESCALE_MQX
#include <stdio.h>
#endif
@ -1104,6 +1116,10 @@ extern "C" {
#elif defined(USE_WINDOWS_API)
#define WFIONREAD FIONREAD
#define WIOCTL ioctlsocket
#elif defined(WOLFSSL_VXWORKS)
#include "ioLib.h"
#include <sys/ioctl.h>
#define WIOCTL ioctl
#else
#if defined(__CYGWIN__) && !defined(FIONREAD)
/* Cygwin defines FIONREAD in socket.h instead of ioctl.h */

View File

@ -175,7 +175,9 @@ WOLFSSH_API void wolfSSH_CTX_SetPublicKeyCheck(WOLFSSH_CTX*,
WOLFSSH_API void wolfSSH_SetPublicKeyCheckCtx(WOLFSSH*, void*);
WOLFSSH_API void* wolfSSH_GetPublicKeyCheckCtx(WOLFSSH*);
WOLFSSH_API int wolfSSH_SetUsernameRaw(WOLFSSH*, const byte*, word32);
WOLFSSH_API int wolfSSH_SetUsername(WOLFSSH*, const char*);
WOLFSSH_API char* wolfSSH_GetUsername(WOLFSSH*);
WOLFSSH_API int wolfSSH_CTX_SetBanner(WOLFSSH_CTX*, const char*);
WOLFSSH_API int wolfSSH_CTX_UsePrivateKey_buffer(WOLFSSH_CTX*,

View File

@ -40,6 +40,33 @@
#endif
#define SOCKET_T SOCKET
#define NUM_SOCKETS 5
#elif defined(WOLFSSL_VXWORKS)
#include <unistd.h>
#include <hostLib.h>
#include <sockLib.h>
#include <arpa/inet.h>
#include <string.h>
#include <selectLib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <sys/time.h>
#include <netdb.h>
#include <pthread.h>
#define SOCKET_T int
/*#define SINGLE_THREADED*/
#ifndef STDIN_FILENO
#define STDIN_FILENO 0
#endif
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#endif
#define NUM_SOCKETS 2
#elif defined(MICROCHIP_MPLAB_HARMONY) || defined(MICROCHIP_TCPIP)
#include "tcpip/tcpip.h"
#include <signal.h>
@ -173,6 +200,7 @@
#else /* TEST_IPV6 */
static const char* const wolfSshIp = "::1";
#endif /* TEST_IPV6 */
#ifdef WOLFSSL_NUCLEUS
/* port 8080 was open with QEMU */
static const word16 wolfSshPort = 8080;
@ -186,6 +214,13 @@
#define WS_NORETURN
#endif
#ifdef WOLFSSL_VXWORKS
static INLINE void err_sys(const char* msg)
{
printf("wolfSSH error: %s\n", msg);
return;
}
#else
static INLINE WS_NORETURN void err_sys(const char* msg)
{
printf("wolfSSH error: %s\n", msg);
@ -203,7 +238,7 @@ static INLINE WS_NORETURN void err_sys(const char* msg)
exit(EXIT_FAILURE);
}
}
#endif
#define MY_EX_USAGE 2
@ -772,7 +807,16 @@ static INLINE void ThreadStart(THREAD_FUNC fun, void* args, THREAD_TYPE* thread)
(void)args;
(void)thread;
#elif defined(_POSIX_THREADS) && !defined(__MINGW32__)
pthread_create(thread, 0, fun, args);
#ifdef WOLFSSL_VXWORKS
{
pthread_attr_t myattr;
pthread_attr_init(&myattr);
pthread_attr_setstacksize(&myattr, 0x10000);
pthread_create(thread, &myattr, fun, args);
}
#else
pthread_create(thread, 0, fun, args);
#endif
return;
#elif defined(WOLFSSL_TIRTOS)
/* Initialize the defaults and set the parameters. */