mirror of https://github.com/wolfSSL/wolfssh.git
VxWorks Customizations
Also includes some bug fixes. 1. Add a function that returns a pointer to a session's username string. 2. Add a function to set a "raw" username copied from an incoming packet. 3. Add tests for 1 and 2. 4. Server saves a copy of the username on successful authentication. 5. Fix bug with GetString() where it would choke on a 0 length string. 6. Clean up the termios macros and mode creation. 7. Add some options for when WOLFSSL_VXWORKS is set.pull/243/head
parent
50739b3abe
commit
7c8ae04b44
|
@ -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");
|
||||
|
|
|
@ -453,6 +453,7 @@ static int wsUserAuth(byte authType,
|
|||
}
|
||||
else {
|
||||
printf("Password: ");
|
||||
fflush(stdout);
|
||||
SetEcho(0);
|
||||
if (WFGETS((char*)userPassword, sizeof(userPassword),
|
||||
stdin) == NULL) {
|
||||
|
@ -568,6 +569,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) {
|
||||
|
|
229
src/internal.c
229
src/internal.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -8328,20 +8335,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
|
||||
|
@ -8349,110 +8359,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;
|
||||
|
|
65
src/ssh.c
65
src/ssh.c
|
@ -1191,41 +1191,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)
|
||||
{
|
||||
|
|
15
tests/api.c
15
tests/api.c
|
@ -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 */
|
||||
|
|
|
@ -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[] =
|
||||
|
|
|
@ -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
|
||||
|
@ -1093,6 +1105,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 */
|
||||
|
|
|
@ -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*,
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in New Issue