From e04151ed76a04613221d8a6ef6079645ee230844 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 15 Sep 2007 21:14:12 +0000 Subject: [PATCH] Michal Marek made libcurl automatically append ";type=" when using HTTP proxies for FTP urls. --- CHANGES | 7 +++++++ RELEASE-NOTES | 4 ++-- lib/http.c | 21 ++++++++++++++++++++- tests/data/test208 | 2 +- tests/data/test79 | 2 +- 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 4b07521c0..361e81662 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,13 @@ Changelog +Daniel S (15 September 2007) +- Michal Marek made libcurl automatically append ";type=" when using HTTP + proxies for FTP urls. + +- Günter Knauf fixed LDAP builds in the Windows makefiles and fixed LDAPv3 + support on Windows. + Dan F (13 September 2007) - Added LDAPS, SCP and SFTP to curl-config --protocols. Removed and fixed some AC_SUBST configure entries. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index be3e7aff6..1fbc6f12f 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -11,7 +11,7 @@ Curl and libcurl 7.17.1 This release includes the following changes: - o + o automatically append ";type=" when using HTTP proxies for FTP urls This release includes the following bugfixes: @@ -32,6 +32,6 @@ New curl mirrors: This release would not have looked like this without help, code, reports and advice from friends like these: - Dan Fandrich + Dan Fandrich, Michal Marek Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/http.c b/lib/http.c index 2938c37ca..090aad3d2 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1740,6 +1740,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) CURLcode result=CURLE_OK; struct HTTP *http; char *ppath = data->reqdata.path; + char ftp_typecode[sizeof(";type=?")] = ""; char *host = conn->host.name; const char *te = ""; /* transfer-encoding */ char *ptr; @@ -1950,6 +1951,23 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) } } ppath = data->change.url; + /* when doing ftp, append ;type= if not present */ + if (checkprefix("ftp://", ppath) || checkprefix("ftps://", ppath)) { + char *p = strstr(ppath, ";type="); + if (p && p[6] && p[7] == 0) { + switch (toupper(p[6])) { + case 'A': + case 'D': + case 'I': + break; + default: + p = NULL; + } + } + if (!p) + snprintf(ftp_typecode, sizeof(ftp_typecode), ";type=%c", + data->set.prefer_ascii ? 'a' : 'i'); + } } if(HTTPREQ_POST_FORM == httpreq) { /* we must build the whole darned post sequence first, so that we have @@ -2093,7 +2111,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) result = add_bufferf(req_buffer, "%s " /* GET/HEAD/POST/PUT */ - "%s HTTP/%s\r\n" /* path + HTTP version */ + "%s%s HTTP/%s\r\n" /* path + HTTP version */ "%s" /* proxyuserpwd */ "%s" /* userpwd */ "%s" /* range */ @@ -2108,6 +2126,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done) request, ppath, + ftp_typecode, httpstring, conn->allocptr.proxyuserpwd? conn->allocptr.proxyuserpwd:"", diff --git a/tests/data/test208 b/tests/data/test208 index eac3d5572..4fc485801 100644 --- a/tests/data/test208 +++ b/tests/data/test208 @@ -44,7 +44,7 @@ the ^User-Agent:.* -PUT ftp://daniel:mysecret@host.com/we/want/208 HTTP/1.1 +PUT ftp://daniel:mysecret@host.com/we/want/208;type=i HTTP/1.1 Authorization: Basic ZGFuaWVsOm15c2VjcmV0 Host: host.com:21 Pragma: no-cache diff --git a/tests/data/test79 b/tests/data/test79 index 49299379c..7c6ed1ee5 100644 --- a/tests/data/test79 +++ b/tests/data/test79 @@ -45,7 +45,7 @@ ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 -x %HOSTIP:%HTTPPORT ^User-Agent:.* -GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 HTTP/1.1 +GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79;type=i HTTP/1.1 Host: %HOSTIP:%HTTPPORT Pragma: no-cache Accept: */*