mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 07:38:49 -05:00
ftp: fix CWD when doing multicwd then nocwd on same connection
Fixes #1782 Closes #1787 Reported-by: Peter Lamare
This commit is contained in:
parent
582f2a1308
commit
c95eff4a11
@ -3197,6 +3197,7 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
|
|||||||
size_t flen = ftpc->file?strlen(ftpc->file):0; /* file is "raw" already */
|
size_t flen = ftpc->file?strlen(ftpc->file):0; /* file is "raw" already */
|
||||||
size_t dlen = strlen(path)-flen;
|
size_t dlen = strlen(path)-flen;
|
||||||
if(!ftpc->cwdfail) {
|
if(!ftpc->cwdfail) {
|
||||||
|
ftpc->prevmethod = data->set.ftp_filemethod;
|
||||||
if(dlen && (data->set.ftp_filemethod != FTPFILE_NOCWD)) {
|
if(dlen && (data->set.ftp_filemethod != FTPFILE_NOCWD)) {
|
||||||
ftpc->prevpath = path;
|
ftpc->prevpath = path;
|
||||||
if(flen)
|
if(flen)
|
||||||
@ -4305,7 +4306,8 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
|
|||||||
|
|
||||||
dlen -= ftpc->file?strlen(ftpc->file):0;
|
dlen -= ftpc->file?strlen(ftpc->file):0;
|
||||||
if((dlen == strlen(ftpc->prevpath)) &&
|
if((dlen == strlen(ftpc->prevpath)) &&
|
||||||
!strncmp(path, ftpc->prevpath, dlen)) {
|
!strncmp(path, ftpc->prevpath, dlen) &&
|
||||||
|
(ftpc->prevmethod == data->set.ftp_filemethod)) {
|
||||||
infof(data, "Request has same path as previous transfer\n");
|
infof(data, "Request has same path as previous transfer\n");
|
||||||
ftpc->cwddone = TRUE;
|
ftpc->cwddone = TRUE;
|
||||||
}
|
}
|
||||||
|
@ -135,6 +135,7 @@ struct ftp_conn {
|
|||||||
caching the current directory */
|
caching the current directory */
|
||||||
bool wait_data_conn; /* this is set TRUE if data connection is waited */
|
bool wait_data_conn; /* this is set TRUE if data connection is waited */
|
||||||
char *prevpath; /* conn->path from the previous transfer */
|
char *prevpath; /* conn->path from the previous transfer */
|
||||||
|
curl_ftpfile prevmethod; /* ftp method in previous transfer */
|
||||||
char transfertype; /* set by ftp_transfertype for use by Curl_client_write()a
|
char transfertype; /* set by ftp_transfertype for use by Curl_client_write()a
|
||||||
and others (A/I or zero) */
|
and others (A/I or zero) */
|
||||||
int count1; /* general purpose counter for the state machine */
|
int count1; /* general purpose counter for the state machine */
|
||||||
|
@ -120,7 +120,7 @@ test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
|
|||||||
test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
|
test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
|
||||||
test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
|
test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
|
||||||
test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
|
test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
|
||||||
test1144 test1145 test1146 test1147 test1148 \
|
test1144 test1145 test1146 test1147 test1148 test1149 \
|
||||||
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
|
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
|
||||||
test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
|
test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
|
||||||
test1216 test1217 test1218 test1219 \
|
test1216 test1217 test1218 test1219 \
|
||||||
|
64
tests/data/test1149
Normal file
64
tests/data/test1149
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# based on test1010
|
||||||
|
<testcase>
|
||||||
|
<info>
|
||||||
|
<keywords>
|
||||||
|
FTP
|
||||||
|
PASV
|
||||||
|
LIST
|
||||||
|
</keywords>
|
||||||
|
</info>
|
||||||
|
#
|
||||||
|
# Server-side
|
||||||
|
<reply>
|
||||||
|
# When doing LIST, we get the default list output hard-coded in the test
|
||||||
|
# FTP server
|
||||||
|
<datacheck mode="text">
|
||||||
|
total 20
|
||||||
|
drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
|
||||||
|
drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
|
||||||
|
drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
|
||||||
|
-r--r--r-- 1 0 1 35 Jul 16 1996 README
|
||||||
|
lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
|
||||||
|
dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
|
||||||
|
drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
|
||||||
|
dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
|
||||||
|
drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
|
||||||
|
dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
|
||||||
|
</datacheck>
|
||||||
|
</reply>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Client-side
|
||||||
|
<client>
|
||||||
|
<server>
|
||||||
|
ftp
|
||||||
|
</server>
|
||||||
|
<name>
|
||||||
|
FTP dir list multicwd then again nocwd
|
||||||
|
</name>
|
||||||
|
<command>
|
||||||
|
ftp://%HOSTIP:%FTPPORT/list/this/path/1149/ --ftp-method multicwd --next ftp://%HOSTIP:%FTPPORT/list/this/path/1149/ --ftp-method nocwd
|
||||||
|
</command>
|
||||||
|
</client>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Verify data after the test has been "shot"
|
||||||
|
<verify>
|
||||||
|
<protocol>
|
||||||
|
USER anonymous
|
||||||
|
PASS ftp@example.com
|
||||||
|
PWD
|
||||||
|
CWD list
|
||||||
|
CWD this
|
||||||
|
CWD path
|
||||||
|
CWD 1149
|
||||||
|
EPSV
|
||||||
|
TYPE A
|
||||||
|
LIST
|
||||||
|
CWD /
|
||||||
|
EPSV
|
||||||
|
LIST list/this/path/1149/
|
||||||
|
QUIT
|
||||||
|
</protocol>
|
||||||
|
</verify>
|
||||||
|
</testcase>
|
Loading…
Reference in New Issue
Block a user