aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES16
-rw-r--r--RELEASE-NOTES4
-rw-r--r--lib/ftp.c5
-rw-r--r--lib/urldata.h2
4 files changed, 22 insertions, 5 deletions
diff --git a/CHANGES b/CHANGES
index 33e4230d4..7c59d067a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -8,10 +8,20 @@
+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
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 31c79fc12..d25be6851 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -15,6 +15,8 @@ This release includes the following changes:
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
@@ -31,6 +33,6 @@ This release would not have looked like this without help, code, reports and
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)
diff --git a/lib/ftp.c b/lib/ftp.c
index 6c35ce215..6bf96cde9 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2529,6 +2529,8 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
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;
}
}
@@ -2815,7 +2817,7 @@ CURLcode Curl_ftp_done(struct connectdata *conn, CURLcode status)
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 */
@@ -3664,6 +3666,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
/* 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:
diff --git a/lib/urldata.h b/lib/urldata.h
index 3842952fe..0293dd5ad 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -343,6 +343,8 @@ struct FTP {
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 */