"H. Daphne Luong" <daphne@tellme.com> pointed out that curl cannot destroy

the proxy server data internally as it did, since when doing a location:
following it needs the proxy server string several times.
This commit is contained in:
Daniel Stenberg 2000-03-27 21:36:05 +00:00
parent 4a33436663
commit 2f668aba96
1 changed files with 19 additions and 5 deletions

View File

@ -1018,6 +1018,18 @@ static UrgError _urlget(struct UrlData *data)
char *prox_portno; char *prox_portno;
char *endofprot; char *endofprot;
/* We need to make a duplicate of the proxy so that we can modify the
string safely. */
char *proxydup=strdup(data->proxy);
/* We use 'proxyptr' to point to the proxy name from now on... */
char *proxyptr=proxydup;
if(NULL == proxydup) {
failf(data, "memory shortage");
return URG_OUT_OF_MEMORY;
}
/* we use proxy all right, but we wanna know the remote port for SSL /* we use proxy all right, but we wanna know the remote port for SSL
reasons */ reasons */
tmp = strchr(name, ':'); tmp = strchr(name, ':');
@ -1032,13 +1044,13 @@ static UrgError _urlget(struct UrlData *data)
ignored. */ ignored. */
/* 1. skip the protocol part if present */ /* 1. skip the protocol part if present */
endofprot=strstr(data->proxy, "://"); endofprot=strstr(proxyptr, "://");
if(endofprot) { if(endofprot) {
data->proxy = endofprot+3; proxyptr = endofprot+3;
} }
/* allow user to specify proxy.server.com:1080 if desired */ /* allow user to specify proxy.server.com:1080 if desired */
prox_portno = strchr (data->proxy, ':'); prox_portno = strchr (proxyptr, ':');
if (prox_portno) { if (prox_portno) {
*prox_portno = 0x0; /* cut off number from host name */ *prox_portno = 0x0; /* cut off number from host name */
prox_portno ++; prox_portno ++;
@ -1047,10 +1059,12 @@ static UrgError _urlget(struct UrlData *data)
} }
/* connect to proxy */ /* connect to proxy */
if(!(hp = GetHost(data, data->proxy))) { if(!(hp = GetHost(data, proxyptr))) {
failf(data, "Couldn't resolv proxy '%s'", data->proxy); failf(data, "Couldn't resolv proxy '%s'", proxyptr);
return URG_COULDNT_RESOLVE_PROXY; return URG_COULDNT_RESOLVE_PROXY;
} }
free(proxydup); /* free the duplicate pointer and not the modified */
} }
pgrsTime(data, TIMER_NAMELOOKUP); pgrsTime(data, TIMER_NAMELOOKUP);