From 625e7b202bee50d4d2689e23e326aef1f94f08b4 Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Mon, 23 Sep 2002 00:49:12 +0000 Subject: [PATCH] Use generic getnameinfo for address-to-name translation, if available. This adds support for IPv6 addresses. --- sapi/thttpd/thttpd.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 #include +#ifdef HAVE_GETNAMEINFO +#include +#include +#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"); } -- 2.40.0