mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
Fix PR54848 in a 2.4.x backportable format. Ideally deprecating the use
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
This commit is contained in:
4
CHANGES
4
CHANGES
@@ -551,7 +551,9 @@ Changes with Apache 2.5.0-alpha
|
|||||||
|
|
||||||
*) mod_status, mod_echo: Fix the display of client addresses.
|
*) mod_status, mod_echo: Fix the display of client addresses.
|
||||||
They were truncated to 31 characters which is not enough for IPv6 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
|
*) core: merge AllowEncodedSlashes from the base configuration into
|
||||||
virtual hosts. [Eric Covener]
|
virtual hosts. [Eric Covener]
|
||||||
|
@@ -112,10 +112,11 @@ struct worker_score {
|
|||||||
#ifdef HAVE_TIMES
|
#ifdef HAVE_TIMES
|
||||||
struct tms times;
|
struct tms times;
|
||||||
#endif
|
#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 request[64]; /* We just want an idea... */
|
||||||
char vhost[32]; /* What virtual host is being accessed? */
|
char vhost[32]; /* What virtual host is being accessed? */
|
||||||
char protocol[16]; /* What protocol is used on the connection? */
|
char protocol[16]; /* What protocol is used on the connection? */
|
||||||
|
char client64[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@@ -108,10 +108,10 @@ static int update_echo_child_status(ap_sb_handle_t *sbh,
|
|||||||
|
|
||||||
/* initial pass only, please - in the name of efficiency */
|
/* initial pass only, please - in the name of efficiency */
|
||||||
if (c) {
|
if (c) {
|
||||||
apr_cpystrn(ws->client,
|
apr_cpystrn(ws->client64,
|
||||||
ap_get_remote_host(c, c->base_server->lookup_defaults,
|
ap_get_remote_host(c, c->base_server->lookup_defaults,
|
||||||
REMOTE_NOLOOKUP, NULL),
|
REMOTE_NOLOOKUP, NULL),
|
||||||
sizeof(ws->client));
|
sizeof(ws->client64));
|
||||||
apr_cpystrn(ws->vhost, c->base_server->server_hostname,
|
apr_cpystrn(ws->vhost, c->base_server->server_hostname,
|
||||||
sizeof(ws->vhost));
|
sizeof(ws->vhost));
|
||||||
/* Deliberate trailing space - filling in string on WRITE passes */
|
/* Deliberate trailing space - filling in string on WRITE passes */
|
||||||
|
@@ -122,13 +122,13 @@ static int noloris_monitor(apr_pool_t *pool, server_rec *s)
|
|||||||
for (j = 0; j < thread_limit; ++j) {
|
for (j = 0; j < thread_limit; ++j) {
|
||||||
ws = ap_get_scoreboard_worker_from_indexes(i, j);
|
ws = ap_get_scoreboard_worker_from_indexes(i, j);
|
||||||
if (ws->status == SERVER_BUSY_READ) {
|
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) {
|
if (n == NULL) {
|
||||||
n = totals + index++;
|
n = totals + index++;
|
||||||
*n = 0;
|
*n = 0;
|
||||||
}
|
}
|
||||||
++*n;
|
++*n;
|
||||||
apr_hash_set(connections, ws->client, APR_HASH_KEY_STRING, n);
|
apr_hash_set(connections, ws->client64, APR_HASH_KEY_STRING, n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -801,7 +801,7 @@ static int status_handler(request_rec *r)
|
|||||||
ap_rprintf(r,
|
ap_rprintf(r,
|
||||||
" <i>%s {%s}</i> <i>(%s)</i> <b>[%s]</b><br />\n\n",
|
" <i>%s {%s}</i> <i>(%s)</i> <b>[%s]</b><br />\n\n",
|
||||||
ap_escape_html(r->pool,
|
ap_escape_html(r->pool,
|
||||||
ws_record->client),
|
ws_record->client64),
|
||||||
ap_escape_html(r->pool,
|
ap_escape_html(r->pool,
|
||||||
ap_escape_logitem(r->pool,
|
ap_escape_logitem(r->pool,
|
||||||
ws_record->request)),
|
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>"
|
ap_rprintf(r, "</td><td>%s</td><td>%s</td><td nowrap>%s</td>"
|
||||||
"<td nowrap>%s</td></tr>\n\n",
|
"<td nowrap>%s</td></tr>\n\n",
|
||||||
ap_escape_html(r->pool,
|
ap_escape_html(r->pool,
|
||||||
ws_record->client),
|
ws_record->client64),
|
||||||
ap_escape_html(r->pool,
|
ap_escape_html(r->pool,
|
||||||
ws_record->protocol),
|
ws_record->protocol),
|
||||||
ap_escape_html(r->pool,
|
ap_escape_html(r->pool,
|
||||||
|
@@ -1275,6 +1275,10 @@ static int lua_ap_scoreboard_worker(lua_State *L)
|
|||||||
lua_pushstring(L, ws_record->client);
|
lua_pushstring(L, ws_record->client);
|
||||||
lua_settable(L, -3);
|
lua_settable(L, -3);
|
||||||
|
|
||||||
|
lua_pushstring(L, "client64");
|
||||||
|
lua_pushstring(L, ws_record->client64);
|
||||||
|
lua_settable(L, -3);
|
||||||
|
|
||||||
lua_pushstring(L, "conn_bytes");
|
lua_pushstring(L, "conn_bytes");
|
||||||
lua_pushnumber(L, (lua_Number) ws_record->conn_bytes);
|
lua_pushnumber(L, (lua_Number) ws_record->conn_bytes);
|
||||||
lua_settable(L, -3);
|
lua_settable(L, -3);
|
||||||
|
@@ -523,17 +523,25 @@ static int update_child_status_internal(int child_num,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (r && r->useragent_ip) {
|
if (r && r->useragent_ip) {
|
||||||
if (!(val = ap_get_useragent_host(r, REMOTE_NOLOOKUP, NULL)))
|
if (!(val = ap_get_useragent_host(r, REMOTE_NOLOOKUP, NULL))) {
|
||||||
apr_cpystrn(ws->client, r->useragent_ip, sizeof(ws->client));
|
apr_cpystrn(ws->client, r->useragent_ip, sizeof(ws->client)); /* DEPRECATE */
|
||||||
else
|
apr_cpystrn(ws->client64, r->useragent_ip, sizeof(ws->client64));
|
||||||
apr_cpystrn(ws->client, val, sizeof(ws->client));
|
}
|
||||||
|
else {
|
||||||
|
apr_cpystrn(ws->client, val, sizeof(ws->client)); /* DEPRECATE */
|
||||||
|
apr_cpystrn(ws->client64, val, sizeof(ws->client64));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (c) {
|
else if (c) {
|
||||||
if (!(val = ap_get_remote_host(c, c->base_server->lookup_defaults,
|
if (!(val = ap_get_remote_host(c, c->base_server->lookup_defaults,
|
||||||
REMOTE_NOLOOKUP, NULL)))
|
REMOTE_NOLOOKUP, NULL))) {
|
||||||
apr_cpystrn(ws->client, c->client_ip, sizeof(ws->client));
|
apr_cpystrn(ws->client, c->client_ip, sizeof(ws->client)); /* DEPRECATE */
|
||||||
else
|
apr_cpystrn(ws->client64, c->client_ip, sizeof(ws->client64));
|
||||||
apr_cpystrn(ws->client, val, sizeof(ws->client));
|
}
|
||||||
|
else {
|
||||||
|
apr_cpystrn(ws->client, val, sizeof(ws->client)); /* DEPRECATE */
|
||||||
|
apr_cpystrn(ws->client64, val, sizeof(ws->client64));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s) {
|
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
|
/* For extra safety, NUL-terminate the strings returned, though it
|
||||||
* should be true those last bytes are always zero anyway. */
|
* should be true those last bytes are always zero anyway. */
|
||||||
dest->client[sizeof(dest->client) - 1] = '\0';
|
dest->client[sizeof(dest->client) - 1] = '\0';
|
||||||
|
dest->client64[sizeof(dest->client64) - 1] = '\0';
|
||||||
dest->request[sizeof(dest->request) - 1] = '\0';
|
dest->request[sizeof(dest->request) - 1] = '\0';
|
||||||
dest->vhost[sizeof(dest->vhost) - 1] = '\0';
|
dest->vhost[sizeof(dest->vhost) - 1] = '\0';
|
||||||
dest->protocol[sizeof(dest->protocol) - 1] = '\0';
|
dest->protocol[sizeof(dest->protocol) - 1] = '\0';
|
||||||
|
Reference in New Issue
Block a user