diff options
| author | Sascha Schumann <sas@php.net> | 2002-09-23 00:49:12 +0000 |
|---|---|---|
| committer | Sascha Schumann <sas@php.net> | 2002-09-23 00:49:12 +0000 |
| commit | 625e7b202bee50d4d2689e23e326aef1f94f08b4 (patch) | |
| tree | 8d0d1202c6ba391063c0b5e88b46ae6cacc86a13 | |
| parent | 1664a7c18fdbbfc79042b9f15e92ae1455a82729 (diff) | |
| download | php-git-625e7b202bee50d4d2689e23e326aef1f94f08b4.tar.gz | |
Use generic getnameinfo for address-to-name translation, if available.
This adds support for IPv6 addresses.
| -rw-r--r-- | sapi/thttpd/thttpd.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/sapi/thttpd/thttpd.c b/sapi/thttpd/thttpd.c index 896b4d7161..0b66836e19 100644 --- a/sapi/thttpd/thttpd.c +++ b/sapi/thttpd/thttpd.c @@ -34,6 +34,11 @@ #include <stdlib.h> #include <unistd.h> +#ifdef HAVE_GETNAMEINFO +#include <sys/socket.h> +#include <netdb.h> +#endif + typedef struct { httpd_conn *hc; int read_post_data; @@ -277,6 +282,7 @@ static void sapi_thttpd_register_variables(zval *track_vars_array TSRMLS_DC) { char buf[BUF_SIZE + 1]; char *p; + int sa_len; php_register_variable("PHP_SELF", SG(request_info).request_uri, track_vars_array TSRMLS_CC); php_register_variable("SERVER_SOFTWARE", SERVER_SOFTWARE, track_vars_array TSRMLS_CC); @@ -290,11 +296,22 @@ static void sapi_thttpd_register_variables(zval *track_vars_array TSRMLS_DC) } else { php_register_variable("SERVER_PROTOCOL", "HTTP/1.0", track_vars_array TSRMLS_CC); } - + +#ifdef HAVE_GETNAMEINFO + switch (TG(hc)->client_addr.sa.sa_family) { + case AF_INET: sa_len = sizeof(struct sockaddr_in); break; + case AF_INET6: sa_len = sizeof(struct sockaddr_in6); break; + default: sa_len = 0; + } + + if (getnameinfo(&TG(hc)->client_addr.sa, sa_len, buf, sizeof(buf), 0, 0, NI_NUMERICHOST) == 0) { +#else p = inet_ntoa(TG(hc)->client_addr.sa_in.sin_addr); + /* string representation of IPs are never larger than 512 bytes */ if (p) { memcpy(buf, p, strlen(p) + 1); +#endif ADD_STRING("REMOTE_ADDR"); ADD_STRING("REMOTE_HOST"); } |
