]> granicus.if.org Git - php/commitdiff
Fix bug #68421 access.format='%R' doesn't log ipv6 address
authorRemi Collet <remi@php.net>
Fri, 14 Nov 2014 18:09:50 +0000 (19:09 +0100)
committerRemi Collet <remi@php.net>
Fri, 14 Nov 2014 18:09:50 +0000 (19:09 +0100)
sapi/fpm/fpm/fastcgi.c
sapi/fpm/fpm/fastcgi.h
sapi/fpm/fpm/fpm_log.c

index d77b6f8ca709dfa14c0e96a475e51b439c3e5f0d..86fca17c5f7a319770e9e6043a4eda185378b1e6 100644 (file)
@@ -137,6 +137,7 @@ typedef union _sa_t {
        struct sockaddr     sa;
        struct sockaddr_un  sa_unix;
        struct sockaddr_in  sa_inet;
+       struct sockaddr_in6 sa_inet6;
 } sa_t;
 
 static HashTable fcgi_mgmt_vars;
@@ -1094,12 +1095,17 @@ void fcgi_free_mgmt_var_cb(void * ptr)
        pefree(*var, 1);
 }
 
-char *fcgi_get_last_client_ip() /* {{{ */
+const char *fcgi_get_last_client_ip() /* {{{ */
 {
+       static char str[INET6_ADDRSTRLEN];
+
        if (client_sa.sa.sa_family == AF_UNIX) {
                return NULL;
        }
-       return inet_ntoa(client_sa.sa_inet.sin_addr);
+       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);
 }
 /* }}} */
 /*
index 34f9eef9da9eaf841e65213b2be82f088cb9ae9a..f5cfe9f66a9f864b1b195bae91c3970c7075cf59 100644 (file)
@@ -133,7 +133,7 @@ int fcgi_flush(fcgi_request *req, int close);
 void fcgi_set_mgmt_var(const char * name, size_t name_len, const char * value, size_t value_len);
 void fcgi_free_mgmt_var_cb(void * ptr);
 
-char *fcgi_get_last_client_ip();
+const char *fcgi_get_last_client_ip();
 
 /*
  * Local variables:
index 4e1a057db19835f281837f690bd542faabeab259..c71281b0b975978188a04a127a053214ec58a5e4 100644 (file)
@@ -367,7 +367,7 @@ int fpm_log_write(char *log_format TSRMLS_DC) /* {{{ */
 
                                case 'R': /* remote IP address */
                                        if (!test) {
-                                               char *tmp = fcgi_get_last_client_ip();
+                                               const char *tmp = fcgi_get_last_client_ip();
                                                len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", tmp ? tmp : "-");
                                        }
                                        break;