Put file should fail if the local file doesn't exist before trying to

open the remote file. Rearrange the Put state machine. Add an error code
for SFTP_FILE_DNE.
pull/134/head
John Safranek 2019-01-07 14:12:12 -08:00
parent 09bfe48615
commit 9bba844e35
3 changed files with 19 additions and 15 deletions

View File

@ -257,6 +257,9 @@ const char* GetErrorString(int err)
case WS_SFTP_STATUS_NOT_OK:
return "sftp status not OK";
case WS_SFTP_FILE_DNE:
return "sftp file does not exist";
default:
return "Unknown error code";
}

View File

@ -6102,6 +6102,20 @@ int wolfSSH_SFTP_Put(WOLFSSH* ssh, char* from, char* to, byte resume,
state->pOfst = (long)wolfSSH_SFTP_GetOfst(ssh, from, to);
}
state->handleSz = WOLFSSH_MAX_HANDLE;
state->state = STATE_PUT_OPEN_LOCAL;
FALL_THROUGH;
case STATE_PUT_OPEN_LOCAL:
WLOG(WS_LOG_SFTP, "SFTP PUT STATE: OPEN LOCAL");
ret = WFOPEN(&state->fl, from, "rb");
if (ret != 0) {
WLOG(WS_LOG_SFTP, "Unable to open input file");
ssh->error = WS_SFTP_FILE_DNE;
ret = WS_FATAL_ERROR;
state->state = STATE_PUT_CLEANUP;
continue;
}
state->rSz = 0;
state->state = STATE_PUT_OPEN_REMOTE;
FALL_THROUGH;
@ -6120,20 +6134,6 @@ int wolfSSH_SFTP_Put(WOLFSSH* ssh, char* from, char* to, byte resume,
state->state = STATE_PUT_CLEANUP;
continue;
}
state->state = STATE_PUT_OPEN_LOCAL;
FALL_THROUGH;
case STATE_PUT_OPEN_LOCAL:
WLOG(WS_LOG_SFTP, "SFTP PUT STATE: OPEN LOCAL");
ret = WFOPEN(&state->fl, from, "rb");
if (ret != 0) {
WLOG(WS_LOG_SFTP, "Unable to open input file");
ssh->error = WS_BAD_FILE_E;
ret = WS_FATAL_ERROR;
state->state = STATE_PUT_CLEANUP;
continue;
}
state->rSz = 0;
state->state = STATE_PUT_WRITE;
FALL_THROUGH;

View File

@ -100,8 +100,9 @@ enum WS_ErrorCodes {
WS_SFTP_BAD_REQ_ID = -60, /* SFTP Bad request ID */
WS_SFTP_BAD_REQ_TYPE = -61, /* SFTP Bad request ID */
WS_SFTP_STATUS_NOT_OK = -62, /* SFTP Status not OK */
WS_SFTP_FILE_DNE = -63, /* SFTP File Does Not Exist */
WS_LAST_E = -62 /* Update this to indicate last error */
WS_LAST_E = -63 /* Update this to indicate last error */
};