Skip to content

Commit 607b6bc

Browse files
committed
SFTP List
1. Update wolfSSH_SFTP_RecvRealPath() to use wolfSSH_RealPath(). 2. Whitespace.
1 parent 3aaa0d4 commit 607b6bc

File tree

1 file changed

+17
-42
lines changed

1 file changed

+17
-42
lines changed

src/wolfsftp.c

Lines changed: 17 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,9 +1151,9 @@ static int wolfSSH_SFTP_RecvRealPath(WOLFSSH* ssh, int reqId, byte* data,
11511151
{
11521152
WS_SFTP_FILEATRB atr;
11531153
char r[WOLFSSH_MAX_FILENAME];
1154-
word32 rSz;
1154+
char s[WOLFSSH_MAX_FILENAME];
1155+
word32 rSz, sSz;
11551156
word32 lidx = 0;
1156-
word32 i;
11571157
int ret;
11581158
byte* out;
11591159
word32 outSz = 0;
@@ -1177,16 +1177,14 @@ static int wolfSSH_SFTP_RecvRealPath(WOLFSSH* ssh, int reqId, byte* data,
11771177
lidx += UINT32_SZ;
11781178
WMEMCPY(r, data + lidx, rSz);
11791179
r[rSz] = '\0';
1180+
WLOG(WS_LOG_SFTP, "Real Path Request = %s", r);
11801181

1181-
/* get working directory in the case of receiving non absolute path */
1182-
if (r[0] != '/' && r[1] != ':') {
1182+
if (ssh->sftpDefaultPath != NULL) {
1183+
ret = wolfSSH_RealPath(ssh->sftpDefaultPath, r, s, sizeof s);
1184+
}
1185+
else {
11831186
char wd[WOLFSSH_MAX_FILENAME];
1184-
11851187
WMEMSET(wd, 0, WOLFSSH_MAX_FILENAME);
1186-
if (ssh->sftpDefaultPath) {
1187-
XSTRNCPY(wd, ssh->sftpDefaultPath, WOLFSSH_MAX_FILENAME - 1);
1188-
}
1189-
else {
11901188
#ifndef USE_WINDOWS_API
11911189
if (WGETCWD(ssh->fs, wd, WOLFSSH_MAX_FILENAME) == NULL) {
11921190
WLOG(WS_LOG_SFTP, "Unable to get current working directory");
@@ -1210,40 +1208,18 @@ static int wolfSSH_SFTP_RecvRealPath(WOLFSSH* ssh, int reqId, byte* data,
12101208
return WS_BAD_FILE_E;
12111209
}
12121210
#endif
1213-
}
1214-
WSTRNCAT(wd, "/", WOLFSSH_MAX_FILENAME);
1215-
WSTRNCAT(wd, r, WOLFSSH_MAX_FILENAME);
1216-
WMEMCPY(r, wd, WOLFSSH_MAX_FILENAME);
1211+
ret = wolfSSH_RealPath(wd, r, s, sizeof s);
12171212
}
1213+
sSz = (word32)WSTRLEN(s);
12181214

1219-
if ((ret = wolfSSH_CleanPath(ssh, r)) < 0) {
1220-
return WS_FATAL_ERROR;
1221-
}
1222-
rSz = (word32)ret;
1223-
1224-
/* For real path remove ending case of /.
1225-
* Lots of peers send a '.' wanting a return of the current absolute path
1226-
* not the absolute path + .
1227-
*/
1228-
if (rSz > 2 && r[rSz - 2] == WS_DELIM && r[rSz - 1] == '.') {
1229-
r[rSz - 1] = '\0';
1230-
rSz -= 1;
1231-
}
1232-
1233-
/* special case of /. */
1234-
if (rSz == 2 && r[0] == WS_DELIM && r[1] == '.') {
1235-
r[1] = '\0';
1236-
rSz -= 1;
1215+
if (ret != WS_SUCCESS) {
1216+
return WS_ERROR;
12371217
}
12381218

1239-
/* for real path always send '/' chars */
1240-
for (i = 0; i < rSz; i++) {
1241-
if (r[i] == WS_DELIM) r[i] = '/';
1242-
}
1243-
WLOG(WS_LOG_SFTP, "Real Path Directory = %s", r);
1219+
WLOG(WS_LOG_SFTP, "Real Path Directory = %s", s);
12441220

12451221
/* send response */
1246-
outSz = WOLFSSH_SFTP_HEADER + (UINT32_SZ * 3) + (rSz * 2);
1222+
outSz = WOLFSSH_SFTP_HEADER + (UINT32_SZ * 3) + (sSz * 2);
12471223
WMEMSET(&atr, 0, sizeof(WS_SFTP_FILEATRB));
12481224
outSz += SFTP_AtributesSz(ssh, &atr);
12491225
lidx = 0;
@@ -1264,12 +1240,12 @@ static int wolfSSH_SFTP_RecvRealPath(WOLFSSH* ssh, int reqId, byte* data,
12641240
c32toa(1, out + lidx); lidx += UINT32_SZ; /* only sending one file name */
12651241

12661242
/* set file name size and string */
1267-
c32toa(rSz, out + lidx); lidx += UINT32_SZ;
1268-
WMEMCPY(out + lidx, r, rSz); lidx += rSz;
1243+
c32toa(sSz, out + lidx); lidx += UINT32_SZ;
1244+
WMEMCPY(out + lidx, s, sSz); lidx += sSz;
12691245

12701246
/* set long name size and string */
1271-
c32toa(rSz, out + lidx); lidx += UINT32_SZ;
1272-
WMEMCPY(out + lidx, r, rSz); lidx += rSz;
1247+
c32toa(sSz, out + lidx); lidx += UINT32_SZ;
1248+
WMEMCPY(out + lidx, s, sSz); lidx += sSz;
12731249

12741250
/* set attributes */
12751251
SFTP_SetAttributes(ssh, out + lidx, outSz - lidx, &atr);
@@ -4550,7 +4526,6 @@ static int SFTP_GetAttributes_Handle(WOLFSSH* ssh, byte* handle, int handleSz,
45504526

45514527
#elif defined(WOLFSSH_USER_FILESYSTEM)
45524528
/* User-defined I/O support */
4553-
45544529
#else
45554530

45564531
/* @TODO can be overriden by user for portability

0 commit comments

Comments
 (0)