sthttpd
sthttpd copied to clipboard
Use real IP if available
The header X-Forwarded-For may contain an ipv4 address for an ipv6 connection, and vice versa
more details https://blog.steve.fi/ipv6_and_thttpd.html
--- src/libhttpd.c
+++ src/libhttpd.c.new
@@ -2207,7 +2204,10 @@
{ // Use real IP if available
cp = &buf[16];
cp += strspn( cp, " \t" );
- inet_aton( cp, &(hc->client_addr.sa_in.sin_addr) );
+ if (inet_pton(AF_INET, cp, &(hc->client_addr.sa_in.sin_addr)))
+ hc->client_addr.sa.sa_family = AF_INET;
+ else if (inet_pton(AF_INET6, cp, &(hc->client_addr.sa_in6.sin6_addr)))
+ hc->client_addr.sa.sa_family = AF_INET6;
}