"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:
		
							
								
								
									
										24
									
								
								lib/url.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								lib/url.c
									
									
									
									
									
								
							| @@ -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); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Daniel Stenberg
					Daniel Stenberg