diff --git a/examples/sftpclient/sftpclient.c b/examples/sftpclient/sftpclient.c index 378b0367..bd7e2e5d 100644 --- a/examples/sftpclient/sftpclient.c +++ b/examples/sftpclient/sftpclient.c @@ -1523,17 +1523,24 @@ static int doAutopilot(int cmd, char* local, char* remote) int err; int ret = WS_SUCCESS; char fullpath[128] = "."; - WS_SFTPNAME* name; + WS_SFTPNAME* name = NULL; - do { - name = wolfSSH_SFTP_RealPath(ssh, fullpath); - err = wolfSSH_get_error(ssh); - } while ((err == WS_WANT_READ || err == WS_WANT_WRITE) && + if (remote != NULL && remote[0] == '/') { + /* use remote absolute path if provided */ + WMEMSET(fullpath, 0, sizeof(fullpath)); + WSTRNCPY(fullpath, remote, sizeof(fullpath) - 1); + } + else { + do { + name = wolfSSH_SFTP_RealPath(ssh, fullpath); + err = wolfSSH_get_error(ssh); + } while ((err == WS_WANT_READ || err == WS_WANT_WRITE) && ret != WS_SUCCESS); - snprintf(fullpath, sizeof(fullpath), "%s/%s", + snprintf(fullpath, sizeof(fullpath), "%s/%s", name == NULL ? "." : name->fName, remote); + } do { if (cmd == AUTOPILOT_PUT) { diff --git a/scripts/get-put.test b/scripts/get-put.test index b9f2a8eb..a48691c8 100755 --- a/scripts/get-put.test +++ b/scripts/get-put.test @@ -119,4 +119,22 @@ then exit 1 fi +# using full path test. +rm -rf sample2-copy.txt +PWD=`pwd` +if ! ./examples/sftpclient/wolfsftp -u jill -P upthehill -p "$PORT" \ + -g -l sample2.txt -r $PWD/sample2-copy.txt +then + echo "Unable to put file using full path." + do_cleanup + exit 1 +fi + +if ! diff sample2.txt sample2-copy.txt >/dev/null +then + echo "Put test files do not match after using full path." + do_cleanup + exit 1 +fi + do_cleanup