Changes with Apache 2.3.0
[ When backported to 2.2.x, remove entry from this file ]
+ *) 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_proxy: add "nocanon" keyword to ProxyPass, to suppress
URI-canonicalisation in a reverse proxy.
PR 41798 [Nick Kew]
</usage>
</directivesynopsis>
+<directivesynopsis>
+
+<name>SeeRequestTail</name>
+<description>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.</description>
+<syntax>SeeRequestTail On|Off</syntax>
+<default>SeeRequestTail Off</default>
+<contextlist><context>server config</context></contextlist>
+<compatibility>SeeRequestTail is only available in Apache 2.3.x and
+later.</compatibility>
+
+<usage>
+ <p>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.</p>
+</usage>
+
+</directivesynopsis>
+
</modulesynopsis>
* 20071023.0 (2.3.0-dev) add ap_get_scoreboard(sbh) split from the less
* conventional ap_get_scoreboard(proc, thread)
* 20071023.1 (2.3.0-dev) Add flags field to struct proxy_alias
+ * 20071023.2 (2.3.0-dev) Add ap_mod_status_reqtail
*/
#define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20071023
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 2 /* 0...n */
/**
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
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}
};
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
(*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,
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));
}