diff options
author | Remi Collet <remi@php.net> | 2014-11-17 06:53:38 +0100 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2014-11-17 06:53:38 +0100 |
commit | 4657289e87e18bb8967d5a8b0163c772d410e2b8 (patch) | |
tree | 792a22bbc5b07920639a97e292e2d381784dfbe3 /sapi | |
parent | 23fd22f9ede39c5885a332cf6e6f5785c5f3fcba (diff) | |
download | php-git-4657289e87e18bb8967d5a8b0163c772d410e2b8.tar.gz |
Improve fix bug #68421 access.format='%R' doesn't log ipv6 address
Log IPv4-Mapped-Ipv6 address as IPv4 (not as IPv6)
Diffstat (limited to 'sapi')
-rw-r--r-- | sapi/fpm/fpm/fastcgi.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/sapi/fpm/fpm/fastcgi.c b/sapi/fpm/fpm/fastcgi.c index 86fca17c5f..d1db0ec293 100644 --- a/sapi/fpm/fpm/fastcgi.c +++ b/sapi/fpm/fpm/fastcgi.c @@ -1099,13 +1099,23 @@ const char *fcgi_get_last_client_ip() /* {{{ */ { static char str[INET6_ADDRSTRLEN]; - if (client_sa.sa.sa_family == AF_UNIX) { - return NULL; - } + /* Ipv4 */ if (client_sa.sa.sa_family == AF_INET) { return inet_ntop(client_sa.sa.sa_family, &client_sa.sa_inet.sin_addr, str, INET6_ADDRSTRLEN); } - return inet_ntop(client_sa.sa.sa_family, &client_sa.sa_inet6.sin6_addr, str, INET6_ADDRSTRLEN); +#ifdef IN6_IS_ADDR_V4MAPPED + /* Ipv4-Mapped-Ipv6 */ + if (client_sa.sa.sa_family == AF_INET6 + && IN6_IS_ADDR_V4MAPPED(&client_sa.sa_inet6.sin6_addr)) { + return inet_ntop(AF_INET, ((char *)&client_sa.sa_inet6.sin6_addr)+12, str, INET6_ADDRSTRLEN); + } +#endif + /* Ipv6 */ + if (client_sa.sa.sa_family == AF_INET6) { + return inet_ntop(client_sa.sa.sa_family, &client_sa.sa_inet6.sin6_addr, str, INET6_ADDRSTRLEN); + } + /* Unix socket */ + return NULL; } /* }}} */ /* |