You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Cliff Woolley <jw...@wlu.edu> on 2000/01/04 21:49:43 UTC
[PATCH] vhost hostname in scoreboard not useful when using
mod_vhost_alias
Hey all...
I noticed a little problem today with the way the scoreboard in
1.3.9 stores the vhost information for display in mod_status when using
mod_vhost_alias. The vhost's hostname is the only one stored, not the
request hostname, which is what we really want to see out of mod_status.
Attached is a five-line patch across three files that fixes this
problem. The line numbers might be a little off because I haven't
applied some of the (unrelated) patches since 1.3.9 in the CVS tree,
though it's a very straightforward patch so it should be easy to merge
in. The theory is simple: store the r->hostname in the short_score
struct (just like the r->client is stored) in addition to the pointer to
the vhost server_rec.
Thoughts?
--Cliff
Cliff Woolley
Central Systems Software Administrator
Washington and Lee University
http://www.wlu.edu/~jwoolley/
Work: (540) 463-8089
Pager: (540) 462-2303
Re: [PATCH] vhost hostname in scoreboard not useful when using
mod_vhost_alias
Posted by Tony Finch <do...@dotat.at>.
Tony Finch <do...@dotat.at> wrote:
>"Cliff Woolley" <jw...@wlu.edu> wrote:
>>
>> I noticed a little problem today with the way the scoreboard in
>>1.3.9 stores the vhost information for display in mod_status when using
>>mod_vhost_alias. The vhost's hostname is the only one stored, not the
>>request hostname, which is what we really want to see out of mod_status.
>
>Sometimes :-) (see the UseCanonicalName DNS option)
>
>The real fix here would be to have mod_status use ap_get_server_name
>so that it reflects how the server has been configured. This requires
>adding a reference to the request_req to the scoreboard (perhaps
>instead of the server_req).
And if you would like a patch, this compiles but I haven't tested it.
This avoids the string-copying that the previous patch did.
Tony.
--
I'm the dot in dot at
--- src/include/ap_mmn.h.old Sat Aug 14 09:53:48 1999
+++ src/include/ap_mmn.h.2000-01-05 Wed Jan 5 13:10:07 2000
@@ -226,14 +226,16 @@
* ap_base64encode_len(), ap_base64decode(),
* ap_base64decode_binary(), ap_base64decode_len(),
* ap_pbase64decode(), ap_pbase64encode()
+ * (1.3.10-dev)
+ * 20000105 - replace vhostrec in the scoreboard with req
*/
#define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */
#ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 19990320
+#define MODULE_MAGIC_NUMBER_MAJOR 20000105
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 6 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */
#define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR /* backward compat */
/* Useful for testing for features. */
--- src/include/scoreboard.h.old Thu Oct 21 21:44:23 1999
+++ src/include/scoreboard.h.2000-01-05 Wed Jan 5 13:29:47 2000
@@ -111,20 +111,20 @@
* new generation of children to be spawned. Children within the same
* generation share the same configuration information -- pointers to stuff
* created at config time in the parent are valid across children. For
- * example, the vhostrec pointer in the scoreboard below is valid in all
+ * example, the req pointer in the scoreboard below is valid in all
* children of the same generation.
*
- * The safe way to access the vhost pointer is like this:
+ * The safe way to access the req pointer is like this:
*
* short_score *ss = pointer to whichver slot is interesting;
* parent_score *ps = pointer to whichver slot is interesting;
- * server_rec *vh = ss->vhostrec;
+ * request_rec *vh = ss->req;
*
* if (ps->generation != ap_my_generation) {
- * vh = NULL;
+ * req = NULL;
* }
*
- * then if vh is not NULL it's valid in this child.
+ * then if req is not NULL it's valid in this child.
*
* This avoids various race conditions around restarts.
*/
@@ -158,7 +158,7 @@
#endif
char client[32]; /* Keep 'em small... */
char request[64]; /* We just want an idea... */
- server_rec *vhostrec; /* What virtual host is being accessed? */
+ request_rec *req; /* to find which vhost is being accessed */
/* SEE ABOVE FOR SAFE USAGE! */
} short_score;
--- src/main/http_main.c.old Wed Jan 5 13:03:46 2000
+++ src/main/http_main.c.2000-01-05 Wed Jan 5 13:10:35 2000
@@ -2255,14 +2255,14 @@
r->assbackwards ? NULL : " ", r->protocol, NULL),
sizeof(ss->request));
}
- ss->vhostrec = r->server;
+ ss->req = r;
}
}
if (status == SERVER_STARTING && r == NULL) {
- /* clean up the slot's vhostrec pointer (maybe re-used)
+ /* clean up the slot's req pointer (maybe re-used)
* and mark the slot as belonging to a new generation.
*/
- ss->vhostrec = NULL;
+ ss->req = NULL;
ap_scoreboard_image->parent[child_num].generation = ap_my_generation;
#ifdef SCOREBOARD_FILE
lseek(scoreboard_fd, XtOffsetOf(scoreboard, parent[child_num]), 0);
--- src/modules/standard/mod_status.c.old Wed Jan 5 13:34:47 2000
+++ src/modules/standard/mod_status.c.2000-01-05 Wed Jan 5 13:39:26 2000
@@ -254,7 +254,7 @@
char stat_buffer[HARD_SERVER_LIMIT];
int pid_buffer[HARD_SERVER_LIMIT];
clock_t tu, ts, tcu, tcs;
- server_rec *vhost;
+ request_rec *req;
tu = ts = tcu = tcs = 0;
@@ -491,9 +491,9 @@
for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
score_record = ap_scoreboard_image->servers[i];
ps_record = ap_scoreboard_image->parent[i];
- vhost = score_record.vhostrec;
+ req = score_record.req;
if (ps_record.generation != ap_my_generation) {
- vhost = NULL;
+ req = NULL;
}
#if defined(NO_GETTIMEOFDAY)
@@ -599,7 +599,7 @@
ap_rprintf(r, " <i>%s {%s}</i> <b>[%s]</b><br>\n\n",
score_record.client,
ap_escape_html(r->pool, score_record.request),
- vhost ? vhost->server_hostname : "(unavailable)");
+ req ? ap_get_server_name(req) : "(unavailable)");
}
else { /* !no_table_report */
if (score_record.status == SERVER_DEAD)
@@ -672,7 +672,7 @@
ap_rprintf(r,
"<td>%s<td nowrap>%s<td nowrap>%s</tr>\n\n",
score_record.client,
- vhost ? vhost->server_hostname : "(unavailable)",
+ req ? ap_get_server_name(req) : "(unavailable)",
ap_escape_html(r->pool, score_record.request));
} /* no_table_report */
} /* !short_report */
Re: [PATCH] vhost hostname in scoreboard not useful when using
mod_vhost_alias
Posted by Tony Finch <do...@dotat.at>.
Dean Gaudet <dg...@arctic.org> wrote:
>
>hmm? scoreboard is in shared memory... request_req is specific to each
>process...
Drat. I thought there had to be some obvious reason why I was wrong
:-(
Tony.
--
how to dot at
Re: [PATCH] vhost hostname in scoreboard not useful when using
mod_vhost_alias
Posted by Dean Gaudet <dg...@arctic.org>.
On Wed, 5 Jan 2000, Tony Finch wrote:
> "Cliff Woolley" <jw...@wlu.edu> wrote:
> >
> > I noticed a little problem today with the way the scoreboard in
> >1.3.9 stores the vhost information for display in mod_status when using
> >mod_vhost_alias. The vhost's hostname is the only one stored, not the
> >request hostname, which is what we really want to see out of mod_status.
>
> Sometimes :-) (see the UseCanonicalName DNS option)
>
> The real fix here would be to have mod_status use ap_get_server_name
> so that it reflects how the server has been configured. This requires
> adding a reference to the request_req to the scoreboard (perhaps
> instead of the server_req).
hmm? scoreboard is in shared memory... request_req is specific to each
process...
Dean
Re: [PATCH] vhost hostname in scoreboard not useful when using
mod_vhost_alias
Posted by Tony Finch <do...@dotat.at>.
"Cliff Woolley" <jw...@wlu.edu> wrote:
>
> I noticed a little problem today with the way the scoreboard in
>1.3.9 stores the vhost information for display in mod_status when using
>mod_vhost_alias. The vhost's hostname is the only one stored, not the
>request hostname, which is what we really want to see out of mod_status.
Sometimes :-) (see the UseCanonicalName DNS option)
The real fix here would be to have mod_status use ap_get_server_name
so that it reflects how the server has been configured. This requires
adding a reference to the request_req to the scoreboard (perhaps
instead of the server_req).
Tony.
--
let it be dot at