Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
curl
curl-7.19.0-proxy-ftp-passwd.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File curl-7.19.0-proxy-ftp-passwd.patch of Package curl
--- lib/http.c | 32 ++++++++++++++++++++++--------- lib/url.c | 1 lib/urldata.h | 1 tests/data/test299 | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 9 deletions(-) --- lib/http.c.orig +++ lib/http.c @@ -2023,6 +2023,7 @@ CURLcode Curl_http(struct connectdata *c CURLcode result=CURLE_OK; struct HTTP *http; char *ppath = data->state.path; + bool paste_ftp_userpwd = FALSE; char ftp_typecode[sizeof(";type=?")] = ""; char *host = conn->host.name; const char *te = ""; /* transfer-encoding */ @@ -2246,9 +2247,9 @@ CURLcode Curl_http(struct connectdata *c } } ppath = data->change.url; - if (data->set.proxy_transfer_mode) { - /* when doing ftp, append ;type=<a|i> if not present */ - if(checkprefix("ftp://", ppath) || checkprefix("ftps://", ppath)) { + if(checkprefix("ftp://", ppath) || checkprefix("ftps://", ppath)) { + if (data->set.proxy_transfer_mode) { + /* when doing ftp, append ;type=<a|i> if not present */ char *p = strstr(ppath, ";type="); if(p && p[6] && p[7] == 0) { switch (toupper((int)((unsigned char)p[6]))) { @@ -2264,6 +2265,8 @@ CURLcode Curl_http(struct connectdata *c snprintf(ftp_typecode, sizeof(ftp_typecode), ";type=%c", data->set.prefer_ascii ? 'a' : 'i'); } + if (conn->bits.user_passwd && !conn->bits.userpwd_in_url) + paste_ftp_userpwd = TRUE; } } if(HTTPREQ_POST_FORM == httpreq) { @@ -2420,10 +2423,23 @@ CURLcode Curl_http(struct connectdata *c return CURLE_OUT_OF_MEMORY; /* add the main request stuff */ - result = - add_bufferf(req_buffer, - "%s " /* GET/HEAD/POST/PUT */ - "%s%s HTTP/%s\r\n" /* path + HTTP version */ + /* GET/HEAD/POST/PUT */ + result = add_bufferf(req_buffer, "%s ", request); + if (result) + return result; + + /* url */ + if (paste_ftp_userpwd) + result = add_bufferf(req_buffer, "ftp://%s:%s@%s", + conn->user, conn->passwd, ppath + sizeof("ftp://") - 1); + else + result = add_buffer(req_buffer, ppath, strlen(ppath)); + if (result) + return result; + + result = add_bufferf(req_buffer, + "%s" /* ftp typecode (;type=x) */ + " HTTP/%s\r\n" /* HTTP version */ "%s" /* proxyuserpwd */ "%s" /* userpwd */ "%s" /* range */ @@ -2436,8 +2452,6 @@ CURLcode Curl_http(struct connectdata *c "%s" /* Proxy-Connection */ "%s",/* transfer-encoding */ - request, - ppath, ftp_typecode, httpstring, conn->allocptr.proxyuserpwd? --- lib/url.c.orig +++ lib/url.c @@ -3621,6 +3621,7 @@ static CURLcode parse_url_userpass(struc * set user/passwd, but doing that first adds more cases here :-( */ + conn->bits.userpwd_in_url = 1; if(data->set.use_netrc != CURL_NETRC_REQUIRED) { /* We could use the one in the URL */ --- lib/urldata.h.orig +++ lib/urldata.h @@ -610,6 +610,7 @@ struct ConnectBits { EPRT doesn't work we disable it for the forthcoming requests */ bool netrc; /* name+password provided by netrc */ + bool userpwd_in_url; /* name+password found in url */ bool done; /* set to FALSE when Curl_do() is called and set to TRUE when Curl_done() is called, to prevent Curl_done() to --- /dev/null +++ tests/data/test299 @@ -0,0 +1,54 @@ +<testcase> +<info> +<keywords> +FTP +HTTP +CURLOPT_USERPWD +HTTP proxy +</keywords> +</info> + +# Server-side +<reply> +<data> +HTTP/1.0 200 OK swsclose +Date: Thu, 09 Nov 2010 14:49:00 GMT +Server: test-server/fake + +blablabla + +</data> +</reply> + +# Client-side +<client> +<server> +http +</server> +<features> +ftp +</features> + <name> +FTP over HTTP proxy with user:pass not in url + </name> + <command> +-x http://%HOSTIP:%HTTPPORT -u michal:aybabtu ftp://host.com/we/want/299 +</command> +</client> + +# Verify data after the test has been "shot" +<verify> +<strip> +^User-Agent:.* +</strip> +<protocol> +GET ftp://michal:aybabtu@host.com/we/want/299 HTTP/1.1 +Authorization: Basic bWljaGFsOmF5YmFidHU= +Host: host.com:21 +Pragma: no-cache +Accept: */* +Proxy-Connection: Keep-Alive + +</protocol> +</verify> +</testcase>
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor