Skip to content

Commit 205fddc

Browse files
committed
Properly fill out SERVER_{ADDR,PORT} fields in mod-fastcgi
1 parent 2fbd55d commit 205fddc

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

src/lib/lwan-mod-fastcgi.c

+14-15
Original file line numberDiff line numberDiff line change
@@ -254,34 +254,33 @@ static bool fill_addr_and_port(const struct lwan_request *r,
254254
uint16_t local_port, remote_port;
255255
socklen_t len = sizeof(sockaddr);
256256
const char *local_addr, *remote_addr;
257+
int listen_fd;
257258

258259
if (r->conn->flags & CONN_TLS) {
259-
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sockaddr;
260+
listen_fd = t->tls_listen_fd;
261+
add_param(strbuf, "HTTPS", "on");
262+
} else {
263+
listen_fd = t->listen_fd;
264+
add_param(strbuf, "HTTPS", "");
265+
}
260266

261-
if (getsockname(t->tls_listen_fd, (struct sockaddr *)&sockaddr, &len) <
262-
0)
263-
return false;
267+
if (getsockname(listen_fd, (struct sockaddr *)&sockaddr, &len) < 0)
268+
return false;
264269

265-
assert(len == sizeof(*sin6));
270+
if (sockaddr.ss_family == AF_INET6) {
271+
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sockaddr;
266272

267273
local_addr = inet_ntop(AF_INET6, &sin6->sin6_addr, local_addr_buf,
268274
sizeof(local_addr_buf));
269275
local_port = ntohs(sin6->sin6_port);
270-
271-
add_param(strbuf, "HTTPS", "on");
272-
} else {
276+
} else if (sockaddr.ss_family == AF_INET) {
273277
struct sockaddr_in *sin = (struct sockaddr_in *)&sockaddr;
274278

275-
if (getsockname(t->listen_fd, (struct sockaddr *)&sockaddr, &len) < 0)
276-
return false;
277-
278-
assert(len == sizeof(*sin));
279-
280279
local_addr = inet_ntop(AF_INET, &sin->sin_addr, local_addr_buf,
281280
sizeof(local_addr_buf));
282281
local_port = ntohs(sin->sin_port);
283-
284-
add_param(strbuf, "HTTPS", "");
282+
} else {
283+
return false;
285284
}
286285

287286
remote_addr = lwan_request_get_remote_address_and_port(r, remote_addr_buf,

0 commit comments

Comments
 (0)