Index: docs/manual/mod/mod_status.xml =================================================================== --- docs/manual/mod/mod_status.xml (revision 596683) +++ docs/manual/mod/mod_status.xml (working copy) @@ -140,5 +140,29 @@ + + +SeeRequestTail +Determine if mod_status displays the first 63 characters +of a request or the last 63, assuming the request itself is greater than +63 chars. +SeeRequestTail On|Off +SeeRequestTail Off +server config +SeeRequestTail is only available in Apache 2.2.7 and +later. + + +

mod_status with ExtendedStatus On displays the actual request being + handled. For historical purposes, only 63 characters of the request + are actually stored for display purposes. This directive + controls whether the 1st 63 characters are stored (the previous + behavior and the default) or if the last 63 characters are. This + is only applicable, of course, if the length of the request is + 64 characters or greater.

+
+ +
+ Index: server/scoreboard.c =================================================================== --- server/scoreboard.c (revision 596683) +++ server/scoreboard.c (working copy) @@ -40,6 +40,7 @@ AP_DECLARE_DATA scoreboard *ap_scoreboard_image = NULL; AP_DECLARE_DATA const char *ap_scoreboard_fname = NULL; AP_DECLARE_DATA int ap_extended_status = 0; +AP_DECLARE_DATA int ap_mod_status_reqtail = 0; #if APR_HAS_SHARED_MEMORY @@ -380,6 +381,42 @@ (*new_sbh)->thread_num = thread_num; } +static void copy_request(char *rbuf, apr_size_t rbuflen, request_rec *r) +{ + char *p; + + if (r->the_request == NULL) { + apr_cpystrn(rbuf, "NULL", rbuflen); + return; /* short circuit below */ + } + + if (r->parsed_uri.password == NULL) { + p = r->the_request; + } + else { + /* Don't reveal the password in the server-status view */ + p = apr_pstrcat(r->pool, r->method, " ", + apr_uri_unparse(r->pool, &r->parsed_uri, + APR_URI_UNP_OMITPASSWORD), + r->assbackwards ? NULL : " ", r->protocol, NULL); + } + + /* now figure out if we copy over the 1st rbuflen chars or the last */ + if (!ap_mod_status_reqtail) { + apr_cpystrn(rbuf, p, rbuflen); + } + else { + apr_size_t slen = strlen(p); + if (slen < rbuflen) { + /* it all fits anyway */ + apr_cpystrn(rbuf, p, rbuflen); + } + else { + apr_cpystrn(rbuf, p+(slen-rbuflen+1), rbuflen); + } + } +} + AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num, int thread_num, int status, @@ -422,18 +459,7 @@ conn_rec *c = r->connection; apr_cpystrn(ws->client, ap_get_remote_host(c, r->per_dir_config, REMOTE_NOLOOKUP, NULL), sizeof(ws->client)); - if (r->the_request == NULL) { - apr_cpystrn(ws->request, "NULL", sizeof(ws->request)); - } else if (r->parsed_uri.password == NULL) { - apr_cpystrn(ws->request, r->the_request, sizeof(ws->request)); - } else { - /* Don't reveal the password in the server-status view */ - apr_cpystrn(ws->request, apr_pstrcat(r->pool, r->method, " ", - apr_uri_unparse(r->pool, &r->parsed_uri, - APR_URI_UNP_OMITPASSWORD), - r->assbackwards ? NULL : " ", r->protocol, NULL), - sizeof(ws->request)); - } + copy_request(ws->request, sizeof(ws->request), r); apr_cpystrn(ws->vhost, r->server->server_hostname, sizeof(ws->vhost)); } Index: CHANGES =================================================================== --- CHANGES (revision 596683) +++ CHANGES (working copy) @@ -1,6 +1,12 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.7 + *) mod_status: Add SeeRequestTail directive, which determines if + ExtendedStatus displays the 1st 63 characters of the request + or the last 63. Useful for those requests with large string + lengths and which only vary with the last several characters. + [Jim Jagielski] + *) mod_ssl: Prevent memory corruption of version string. PR 43865 43334 [William Rowe, Joe Orton] Index: modules/generators/mod_status.c =================================================================== --- modules/generators/mod_status.c (revision 596683) +++ modules/generators/mod_status.c (working copy) @@ -128,10 +128,24 @@ return NULL; } +static const char *set_reqtail(cmd_parms *cmd, void *dummy, int arg) +{ + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if (err != NULL) { + return err; + } + ap_mod_status_reqtail = arg; + return NULL; +} + + static const command_rec status_module_cmds[] = { AP_INIT_FLAG("ExtendedStatus", set_extended_status, NULL, RSRC_CONF, "\"On\" to enable extended status information, \"Off\" to disable"), + AP_INIT_FLAG("SeeRequestTail", set_reqtail, NULL, RSRC_CONF, + "For verbose requests, \"On\" to see the last 63 chars of the request, " + "\"Off\" (default) to see the first 63 in extended status display"), {NULL} }; Index: include/ap_mmn.h =================================================================== --- include/ap_mmn.h (revision 596683) +++ include/ap_mmn.h (working copy) @@ -116,6 +116,7 @@ * 20051115.5 (2.2.5) Added ap_mpm_safe_kill() (minor) * 20051115.6 (2.2.7) Added retry_set to proxy_worker (minor) * 20051115.7 (2.2.7) Added conn_rec::clogging_input_filters (minor) + * 20051115.8 (2.2.7) Added ap_mod_status_reqtail (minor) * */ @@ -124,7 +125,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20051115 #endif -#define MODULE_MAGIC_NUMBER_MINOR 7 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 8 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a Index: include/scoreboard.h =================================================================== --- include/scoreboard.h (revision 596683) +++ include/scoreboard.h (working copy) @@ -197,6 +197,7 @@ AP_DECLARE_DATA extern scoreboard *ap_scoreboard_image; AP_DECLARE_DATA extern const char *ap_scoreboard_fname; AP_DECLARE_DATA extern int ap_extended_status; +AP_DECLARE_DATA extern int ap_mod_status_reqtail; AP_DECLARE_DATA extern ap_generation_t volatile ap_my_generation;