Make HTTP_PROXY work for FTP.
Reported by: Ben Smithurst <ben@scientia.demon.co.uk> Reviewed by: des
This commit is contained in:
parent
78cb0ab485
commit
c97925ad4e
@ -69,13 +69,19 @@ static struct fetcherr _url_errlist[] = {
|
||||
FILE *
|
||||
fetchGet(struct url *URL, char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = (flags && strchr(flags, 'd'));
|
||||
if (strcasecmp(URL->scheme, "file") == 0)
|
||||
return fetchGetFile(URL, flags);
|
||||
else if (strcasecmp(URL->scheme, "http") == 0)
|
||||
return fetchGetHTTP(URL, flags);
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0)
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0) {
|
||||
if (!direct &&
|
||||
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
|
||||
return fetchGetHTTP(URL, flags);
|
||||
return fetchGetFTP(URL, flags);
|
||||
else {
|
||||
} else {
|
||||
_url_seterr(URL_BAD_SCHEME);
|
||||
return NULL;
|
||||
}
|
||||
@ -88,13 +94,19 @@ fetchGet(struct url *URL, char *flags)
|
||||
FILE *
|
||||
fetchPut(struct url *URL, char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = (flags && strchr(flags, 'd'));
|
||||
if (strcasecmp(URL->scheme, "file") == 0)
|
||||
return fetchPutFile(URL, flags);
|
||||
else if (strcasecmp(URL->scheme, "http") == 0)
|
||||
return fetchPutHTTP(URL, flags);
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0)
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0) {
|
||||
if (!direct &&
|
||||
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
|
||||
return fetchPutHTTP(URL, flags);
|
||||
return fetchPutFTP(URL, flags);
|
||||
else {
|
||||
} else {
|
||||
_url_seterr(URL_BAD_SCHEME);
|
||||
return NULL;
|
||||
}
|
||||
@ -107,13 +119,19 @@ fetchPut(struct url *URL, char *flags)
|
||||
int
|
||||
fetchStat(struct url *URL, struct url_stat *us, char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = (flags && strchr(flags, 'd'));
|
||||
if (strcasecmp(URL->scheme, "file") == 0)
|
||||
return fetchStatFile(URL, us, flags);
|
||||
else if (strcasecmp(URL->scheme, "http") == 0)
|
||||
return fetchStatHTTP(URL, us, flags);
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0)
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0) {
|
||||
if (!direct &&
|
||||
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
|
||||
return fetchStatHTTP(URL, us, flags);
|
||||
return fetchStatFTP(URL, us, flags);
|
||||
else {
|
||||
} else {
|
||||
_url_seterr(URL_BAD_SCHEME);
|
||||
return -1;
|
||||
}
|
||||
@ -126,13 +144,19 @@ fetchStat(struct url *URL, struct url_stat *us, char *flags)
|
||||
struct url_ent *
|
||||
fetchList(struct url *URL, char *flags)
|
||||
{
|
||||
int direct;
|
||||
|
||||
direct = (flags && strchr(flags, 'd'));
|
||||
if (strcasecmp(URL->scheme, "file") == 0)
|
||||
return fetchListFile(URL, flags);
|
||||
else if (strcasecmp(URL->scheme, "http") == 0)
|
||||
return fetchListHTTP(URL, flags);
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0)
|
||||
else if (strcasecmp(URL->scheme, "ftp") == 0) {
|
||||
if (!direct &&
|
||||
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
|
||||
return fetchListHTTP(URL, flags);
|
||||
return fetchListFTP(URL, flags);
|
||||
else {
|
||||
} else {
|
||||
_url_seterr(URL_BAD_SCHEME);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -311,10 +311,16 @@ _http_connect(struct url *URL, char *flags)
|
||||
if (!URL->port) {
|
||||
struct servent *se;
|
||||
|
||||
if ((se = getservbyname("http", "tcp")) != NULL)
|
||||
URL->port = ntohs(se->s_port);
|
||||
if (strcasecmp(URL->scheme, "ftp") == 0)
|
||||
if ((se = getservbyname("ftp", "tcp")) != NULL)
|
||||
URL->port = ntohs(se->s_port);
|
||||
else
|
||||
URL->port = 21;
|
||||
else
|
||||
URL->port = 80;
|
||||
if ((se = getservbyname("http", "tcp")) != NULL)
|
||||
URL->port = ntohs(se->s_port);
|
||||
else
|
||||
URL->port = 80;
|
||||
}
|
||||
|
||||
/* attempt to connect to proxy server */
|
||||
@ -363,6 +369,8 @@ _http_connect(struct url *URL, char *flags)
|
||||
|
||||
/* if no proxy is configured or could be contacted, try direct */
|
||||
if (sd == -1) {
|
||||
if (strcasecmp(URL->scheme, "ftp") == 0)
|
||||
goto ouch;
|
||||
if ((sd = _fetch_connect(URL->host, URL->port, verbose)) == -1)
|
||||
goto ouch;
|
||||
}
|
||||
@ -394,8 +402,8 @@ _http_request(FILE *f, char *op, struct url *URL, char *flags)
|
||||
|
||||
/* send request (proxies require absolute form, so use that) */
|
||||
if (verbose)
|
||||
_fetch_info("requesting http://%s:%d%s",
|
||||
URL->host, URL->port, URL->doc);
|
||||
_fetch_info("requesting %s://%s:%d%s",
|
||||
URL->scheme, URL->host, URL->port, URL->doc);
|
||||
_http_cmd(f, "%s %s://%s:%d%s HTTP/1.1" ENDL,
|
||||
op, URL->scheme, URL->host, URL->port, URL->doc);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user