Loading lib/ftp.c +3 −1 Original line number Diff line number Diff line Loading @@ -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 dlen = strlen(path)-flen; if(!ftpc->cwdfail) { ftpc->prevmethod = data->set.ftp_filemethod; if(dlen && (data->set.ftp_filemethod != FTPFILE_NOCWD)) { ftpc->prevpath = path; if(flen) Loading Loading @@ -4305,7 +4306,8 @@ CURLcode ftp_parse_url_path(struct connectdata *conn) dlen -= ftpc->file?strlen(ftpc->file):0; 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"); ftpc->cwddone = TRUE; } Loading lib/ftp.h +1 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,7 @@ struct ftp_conn { caching the current directory */ bool wait_data_conn; /* this is set TRUE if data connection is waited */ 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 and others (A/I or zero) */ int count1; /* general purpose counter for the state machine */ Loading tests/data/Makefile.inc +1 −1 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \ test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \ test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \ 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 \ test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \ test1216 test1217 test1218 test1219 \ Loading tests/data/test1149 0 → 100644 +64 −0 Original line number Diff line number Diff line # 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
lib/ftp.c +3 −1 Original line number Diff line number Diff line Loading @@ -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 dlen = strlen(path)-flen; if(!ftpc->cwdfail) { ftpc->prevmethod = data->set.ftp_filemethod; if(dlen && (data->set.ftp_filemethod != FTPFILE_NOCWD)) { ftpc->prevpath = path; if(flen) Loading Loading @@ -4305,7 +4306,8 @@ CURLcode ftp_parse_url_path(struct connectdata *conn) dlen -= ftpc->file?strlen(ftpc->file):0; 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"); ftpc->cwddone = TRUE; } Loading
lib/ftp.h +1 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,7 @@ struct ftp_conn { caching the current directory */ bool wait_data_conn; /* this is set TRUE if data connection is waited */ 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 and others (A/I or zero) */ int count1; /* general purpose counter for the state machine */ Loading
tests/data/Makefile.inc +1 −1 Original line number Diff line number Diff line Loading @@ -120,7 +120,7 @@ test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \ test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \ test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \ 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 \ test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \ test1216 test1217 test1218 test1219 \ Loading
tests/data/test1149 0 → 100644 +64 −0 Original line number Diff line number Diff line # 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>