]> granicus.if.org Git - apache/commitdiff
Fix PR54848 in a 2.4.x backportable format. Ideally deprecating the use
authorJim Jagielski <jim@apache.org>
Wed, 1 Aug 2018 11:27:28 +0000 (11:27 +0000)
committerJim Jagielski <jim@apache.org>
Wed, 1 Aug 2018 11:27:28 +0000 (11:27 +0000)
of ->client in whatever version of 2.4 this is added into would be
more logical.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1837225 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
include/scoreboard.h
modules/echo/mod_echo.c
modules/experimental/mod_noloris.c
modules/generators/mod_status.c
modules/lua/lua_request.c
server/scoreboard.c

diff --git a/CHANGES b/CHANGES
index c7867bf9e8c07ea6e1456daa0c8281a13ed625de..c1fb11d58c1e7580eec073e031d303c3a4e14f7f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -551,7 +551,9 @@ Changes with Apache 2.5.0-alpha
 
   *) mod_status, mod_echo: Fix the display of client addresses.
      They were truncated to 31 characters which is not enough for IPv6 addresses.
-     PR 54848 [Bernhard Schmidt <berni birkenwald de>]
+     This is done by deprecating the use of the 'client' field and using
+     the new 'client64' field in worker_score.
+     PR 54848 [Bernhard Schmidt <berni birkenwald de>, Jim Jagielski]
 
   *) core: merge AllowEncodedSlashes from the base configuration into
      virtual hosts. [Eric Covener]
index 015aec97b8ec7b2afa5086aa32bebe23e4f4e4bd..42b04d1ee74ba7bfcc696d6801c3fcd5b03f5fcb 100644 (file)
@@ -112,10 +112,11 @@ struct worker_score {
 #ifdef HAVE_TIMES
     struct tms times;
 #endif
-    char client[40];            /* Keep 'em small... but large enough to hold an IPv6 address */
+    char client[32];            /* DEPRECATED: Keep 'em small... */
     char request[64];           /* We just want an idea... */
     char vhost[32];             /* What virtual host is being accessed? */
     char protocol[16];          /* What protocol is used on the connection? */
+    char client64[64];
 };
 
 typedef struct {
index 336f90f3fa534285109c9fd8dca489e75020a7bc..c7f2a19d92be8eb96554eda5f021feb0fed34196 100644 (file)
@@ -108,10 +108,10 @@ static int update_echo_child_status(ap_sb_handle_t *sbh,
 
     /* initial pass only, please - in the name of efficiency */
     if (c) {
-        apr_cpystrn(ws->client,
+        apr_cpystrn(ws->client64,
                     ap_get_remote_host(c, c->base_server->lookup_defaults,
                                        REMOTE_NOLOOKUP, NULL),
-                    sizeof(ws->client));
+                    sizeof(ws->client64));
         apr_cpystrn(ws->vhost, c->base_server->server_hostname,
                     sizeof(ws->vhost));
         /* Deliberate trailing space - filling in string on WRITE passes */
index 4f923dbe4b291cab513dd548d76b810b5f081e3b..5170a48c7b8243de977ce5311371dfe2d641736a 100644 (file)
@@ -122,13 +122,13 @@ static int noloris_monitor(apr_pool_t *pool, server_rec *s)
         for (j = 0; j < thread_limit; ++j) {
             ws = ap_get_scoreboard_worker_from_indexes(i, j);
             if (ws->status == SERVER_BUSY_READ) {
-                n = apr_hash_get(connections, ws->client, APR_HASH_KEY_STRING);
+                n = apr_hash_get(connections, ws->client64, APR_HASH_KEY_STRING);
                 if (n == NULL) {
                     n = totals + index++;
                     *n = 0;
                 }
                 ++*n;
-                apr_hash_set(connections, ws->client, APR_HASH_KEY_STRING, n);
+                apr_hash_set(connections, ws->client64, APR_HASH_KEY_STRING, n);
             }
         }
     }
index 12801f94ceccb79cbe3dd0b9524e8f86a3f11715..3b89350321ab9528c4575c80ef4f9f23b90e1658 100644 (file)
@@ -801,7 +801,7 @@ static int status_handler(request_rec *r)
                     ap_rprintf(r,
                                " <i>%s {%s}</i> <i>(%s)</i> <b>[%s]</b><br />\n\n",
                                ap_escape_html(r->pool,
-                                              ws_record->client),
+                                              ws_record->client64),
                                ap_escape_html(r->pool,
                                               ap_escape_logitem(r->pool,
                                                                 ws_record->request)),
@@ -888,7 +888,7 @@ static int status_handler(request_rec *r)
                     ap_rprintf(r, "</td><td>%s</td><td>%s</td><td nowrap>%s</td>"
                                   "<td nowrap>%s</td></tr>\n\n",
                                ap_escape_html(r->pool,
-                                              ws_record->client),
+                                              ws_record->client64),
                                ap_escape_html(r->pool,
                                               ws_record->protocol),
                                ap_escape_html(r->pool,
index 6349dba2d0248c1032ddb42e53aadef26dbd8352..7a901fd7ff75334f3603b882ba351f12fb9d5214 100644 (file)
@@ -1275,6 +1275,10 @@ static int lua_ap_scoreboard_worker(lua_State *L)
         lua_pushstring(L, ws_record->client);
         lua_settable(L, -3);
 
+        lua_pushstring(L, "client64");
+        lua_pushstring(L, ws_record->client64);
+        lua_settable(L, -3);
+
         lua_pushstring(L, "conn_bytes");
         lua_pushnumber(L, (lua_Number) ws_record->conn_bytes);
         lua_settable(L, -3);
index 4eb1b0589012f4f9ce3ae8eab5437448a294780b..3e200a1a9694df1f06c3facefd3c796441bc206d 100644 (file)
@@ -523,17 +523,25 @@ static int update_child_status_internal(int child_num,
         }
 
         if (r && r->useragent_ip) {
-            if (!(val = ap_get_useragent_host(r, REMOTE_NOLOOKUP, NULL)))
-                apr_cpystrn(ws->client, r->useragent_ip, sizeof(ws->client));
-            else
-                apr_cpystrn(ws->client, val, sizeof(ws->client));
+            if (!(val = ap_get_useragent_host(r, REMOTE_NOLOOKUP, NULL))) {
+                apr_cpystrn(ws->client, r->useragent_ip, sizeof(ws->client)); /* DEPRECATE */
+                apr_cpystrn(ws->client64, r->useragent_ip, sizeof(ws->client64));
+            }
+            else {
+                apr_cpystrn(ws->client, val, sizeof(ws->client)); /* DEPRECATE */
+                apr_cpystrn(ws->client64, val, sizeof(ws->client64));
+            }
         }
         else if (c) {
             if (!(val = ap_get_remote_host(c, c->base_server->lookup_defaults,
-                                           REMOTE_NOLOOKUP, NULL)))
-                apr_cpystrn(ws->client, c->client_ip, sizeof(ws->client));
-            else
-                apr_cpystrn(ws->client, val, sizeof(ws->client));
+                                           REMOTE_NOLOOKUP, NULL))) {
+                apr_cpystrn(ws->client, c->client_ip, sizeof(ws->client)); /* DEPRECATE */
+                apr_cpystrn(ws->client64, c->client_ip, sizeof(ws->client64));
+            }
+            else {
+                apr_cpystrn(ws->client, val, sizeof(ws->client)); /* DEPRECATE */
+                apr_cpystrn(ws->client64, val, sizeof(ws->client64));
+            }
         }
 
         if (s) {
@@ -665,6 +673,7 @@ AP_DECLARE(void) ap_copy_scoreboard_worker(worker_score *dest,
     /* For extra safety, NUL-terminate the strings returned, though it
      * should be true those last bytes are always zero anyway. */
     dest->client[sizeof(dest->client) - 1] = '\0';
+    dest->client64[sizeof(dest->client64) - 1] = '\0';
     dest->request[sizeof(dest->request) - 1] = '\0';
     dest->vhost[sizeof(dest->vhost) - 1] = '\0';
     dest->protocol[sizeof(dest->protocol) - 1] = '\0';