clean up closing directory with SFTP

pull/134/head
Jacob Barthelmeh 2019-01-23 17:47:20 -07:00
parent 756d5898f6
commit 58186064de
2 changed files with 26 additions and 7 deletions

View File

@ -215,10 +215,12 @@ static int sftp_worker(thread_ctx_t* threadCtx) {
sockfd = (SOCKET_T)wolfSSH_get_fd(threadCtx->ssh);
do {
if (error == WS_WANT_READ)
printf("... sftp server would read block\n");
else if (error == WS_WANT_WRITE)
printf("... sftp server would write block\n");
if (threadCtx->nonBlock) {
if (error == WS_WANT_READ)
printf("... sftp server would read block\n");
else if (error == WS_WANT_WRITE)
printf("... sftp server would write block\n");
}
select_ret = tcp_select(sockfd, TEST_SFTP_TIMEOUT);
if (select_ret == WS_SELECT_RECV_READY ||

View File

@ -1513,6 +1513,7 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
res = oer;
if (wolfSSH_SFTP_CreateStatus(ssh, WOLFSSH_FTP_FAILURE, reqId, res,
"English", NULL, &outSz) != WS_SIZE_ONLY) {
WFREE(dir, ssh->ctx->heap, DYNTYPE_BUFFER);
return WS_FATAL_ERROR;
}
ret = WS_BAD_FILE_E;
@ -1525,12 +1526,14 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
res = ier;
if (wolfSSH_SFTP_CreateStatus(ssh, WOLFSSH_FTP_FAILURE, reqId, res,
"English", NULL, &outSz) != WS_SIZE_ONLY) {
WFREE(dir, ssh->ctx->heap, DYNTYPE_BUFFER);
return WS_FATAL_ERROR;
}
ret = WS_FATAL_ERROR;
}
}
#endif
WFREE(dir, ssh->ctx->heap, DYNTYPE_BUFFER);
/* create packet */
out = (byte*)WMALLOC(outSz, ssh->ctx->heap, DYNTYPE_BUFFER);
@ -2795,7 +2798,7 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
WFD fd;
word32 sz;
word32 idx = 0;
int ret;
int ret = WS_FATAL_ERROR;
byte* out = NULL;
word32 outSz = 0;
@ -2822,7 +2825,7 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
if (sz == sizeof(word64)) {
ret = wolfSSH_SFTP_RecvCloseDir(ssh, data + idx, sz);
}
else
if (ret != WS_SUCCESS) {
#endif /* NO_WOLFSSH_DIR */
if (sz == sizeof(WFD)) {
WMEMSET((byte*)&fd, 0, sizeof(WFD));
@ -2838,6 +2841,9 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
else {
ret = WS_FATAL_ERROR;
}
#ifndef NO_WOLFSSH_DIR
}
#endif
if (ret < 0) {
WLOG(WS_LOG_SFTP, "Error closing file");
@ -2871,7 +2877,7 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
HANDLE fd;
word32 sz;
word32 idx = 0;
int ret = WS_SUCCESS;
int ret = WS_FATAL_ERROR;
byte* out = NULL;
word32 outSz = 0;
@ -2893,10 +2899,18 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
return WS_BUFFER_E;
}
#ifndef NO_WOLFSSH_DIR
/* check if is a handle for a directory */
if (sz == sizeof(word64)) {
ret = wolfSSH_SFTP_RecvCloseDir(ssh, data + idx, sz);
}
if (ret != WS_SUCCESS) {
#endif /* NO_WOLFSSH_DIR */
if (sz == sizeof(HANDLE)) {
WMEMSET((byte*)&fd, 0, sizeof(HANDLE));
WMEMCPY((byte*)&fd, data + idx, sz);
CloseHandle(fd);
ret = WS_SUCCESS;
#ifdef WOLFSSH_STOREHANDLE
if (SFTP_RemoveHandleNode(ssh, data + idx, sz) != WS_SUCCESS) {
WLOG(WS_LOG_SFTP, "Unable to remove handle from list");
@ -2907,6 +2921,9 @@ int wolfSSH_SFTP_RecvClose(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
else {
ret = WS_FATAL_ERROR;
}
#ifndef NO_WOLFSSH_DIR
}
#endif
if (ret < 0) {
WLOG(WS_LOG_SFTP, "Error closing file");