http: make the haproxy support work with unix domain sockets

... it should then pass on "PROXY UNKNOWN" since it doesn't know the
involved IP addresses.

Reported-by: Valentín Gutiérrez
Fixes #7290
Closes #7291
This commit is contained in:
Daniel Stenberg 2021-06-23 16:02:12 +02:00
parent cfaa035a0c
commit a629506d42
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
1 changed files with 22 additions and 25 deletions

View File

@ -1537,38 +1537,35 @@ static int http_getsock_do(struct Curl_easy *data,
#ifndef CURL_DISABLE_PROXY
static CURLcode add_haproxy_protocol_header(struct Curl_easy *data)
{
char proxy_header[128];
struct dynbuf req;
CURLcode result;
char tcp_version[5];
const char *tcp_version;
DEBUGASSERT(data->conn);
/* Emit the correct prefix for IPv6 */
if(data->conn->bits.ipv6) {
strcpy(tcp_version, "TCP6");
}
else {
strcpy(tcp_version, "TCP4");
}
msnprintf(proxy_header,
sizeof(proxy_header),
"PROXY %s %s %s %i %i\r\n",
tcp_version,
data->info.conn_local_ip,
data->info.conn_primary_ip,
data->info.conn_local_port,
data->info.conn_primary_port);
Curl_dyn_init(&req, DYN_HAXPROXY);
result = Curl_dyn_add(&req, proxy_header);
if(result)
return result;
#ifdef USE_UNIX_SOCKETS
if(data->conn->unix_domain_socket)
/* the buffer is large enough to hold this! */
result = Curl_dyn_add(&req, "PROXY UNKNOWN\r\n");
else {
#endif
/* Emit the correct prefix for IPv6 */
tcp_version = data->conn->bits.ipv6 ? "TCP6" : "TCP4";
result = Curl_buffer_send(&req, data, &data->info.request_size,
0, FIRSTSOCKET);
result = Curl_dyn_addf(&req, "PROXY %s %s %s %i %i\r\n",
tcp_version,
data->info.conn_local_ip,
data->info.conn_primary_ip,
data->info.conn_local_port,
data->info.conn_primary_port);
#ifdef USE_UNIX_SOCKETS
}
#endif
if(!result)
result = Curl_buffer_send(&req, data, &data->info.request_size,
0, FIRSTSOCKET);
return result;
}
#endif