+Daniel (10 January 2006)
+- When using a bad path over FTP, as in when libcurl couldn't CWD into all
+ given subdirs, libcurl would still "remember" the full path as if it is the
+ current directory libcurl is in so that the next curl_easy_perform() would
+ get really confused if it tried the same path again - as it would not issue
+ any CWD commands at all, assuming it is already in the "proper" dir.
+
+ Starting now, a failed CWD command sets a flag that prevents the path to be
+ "remembered" after returning.
+
Daniel (7 January 2006)
-- Mike Jean fixed so that the second CONNECT when doing FTP over a HTTP proxy
- actually used a new connection and not sent the second request on the first
- socket!
+- Michael Jahn fixed so that the second CONNECT when doing FTP over a HTTP
+ proxy actually used a new connection and not sent the second request on the
+ first socket!
Daniel (6 January 2006)
- Alexander Lazic made the buildconf run the buildconf in the ares dir if that
This release includes the following bugfixes:
+ o Doing a second request with FTP on the same bath path, would make libcurl
+ confuse what current working directory it had
o FTP over HTTP proxy now sends the second CONNECT properly
o numerous compiler warnings and build quirks for various compilers have
been addressed
advice from friends like these:
Dov Murik, Jean Jacques Drouin, Andres Garcia, Yang Tse, Gisle Vanem, Dan
- Fandrich, Alexander Lazic, Mike Jean
+ Fandrich, Alexander Lazic, Michael Jahn
Thanks! (and sorry if I forgot to mention someone)
else {
/* return failure */
failf(data, "Server denied you to change to the given directory");
+ ftp->cwdfail = TRUE; /* don't remember this path as we failed
+ to enter it */
return CURLE_FTP_ACCESS_DENIED;
}
}
flen = ftp->file?strlen(ftp->file):0; /* file is "raw" already */
dlen = strlen(path)-flen;
- if(dlen) {
+ if(dlen && !ftp->cwdfail) {
ftp->prevpath = path;
if(flen)
/* if 'path' is not the whole string */
/* the ftp struct is already inited in ftp_connect() */
ftp = conn->proto.ftp;
ftp->ctl_valid = FALSE;
+ ftp->cwdfail = FALSE;
switch(data->set.ftp_filemethod) {
case FTPFILE_NOCWD:
should be FALSE when it gets to Curl_ftp_quit() */
bool cwddone; /* if it has been determined that the proper CWD combo
already has been done */
+ bool cwdfail; /* set TRUE if a CWD command fails, as then we must prevent
+ caching the current directory */
char *prevpath; /* conn->path from the previous transfer */
size_t nread_resp; /* number of bytes currently read of a server response */