On 10/30/2007 08:12 PM, Jim Jagielski wrote:
> 
> On Oct 22, 2007, at 9:39 AM, Jim Jagielski wrote:
> 
>>
>> The other option, of course, would be to keep the small
>> buffer but have some some sort of config directive that
>> indicates whether you want the 1st or last 64 bytes :)
>> That seems a nice stop-gap for 2.2
>>
> 
> FWIW, last night I hacked up a quick little way to do
> this... If conceptually OK, I'll add doccos. This is
> for trunk but really designed to be the 2.2 stopgap :)

Looks good to me. IMHO copy_request could get some optimization ala:


if (r->the_request == NULL) {
    p = "NULL";
 else if (r->parsed_uri.password == NULL) {
      p = r->the_request;
}
else {
      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);
}

if (!ap_mod_status_reqtail) {
            apr_cpystrn(rbuf, p, rbuflen);
        }
else {
       slen = strlen(p);
       if (slen < rbuflen) {
           /* it all fits anyway */
           apr_cpystrn(rbuf, p, rbuflen);
       }
       else {
             apr_cpystrn(rbuf, p+(slen-rbuflen+1), rbuflen);
       }

}


> 
> Index: server/scoreboard.c
> ===================================================================
> --- server/scoreboard.c (revision 590167)
> +++ 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
> @@ -388,6 +389,54 @@
>      (*new_sbh)->thread_num = thread_num;
> }
> +static void copy_request(char *rbuf, apr_size_t rbuflen, request_rec *r)
> +{
> +    apr_size_t slen;
> +
> +    if (r->the_request == NULL) {
> +        apr_cpystrn(rbuf, "NULL", rbuflen);
> +    }
> +    else if (r->parsed_uri.password == NULL) {
> +        if (!ap_mod_status_reqtail) {
> +            apr_cpystrn(rbuf, r->the_request, rbuflen);
> +        }
> +        else {
> +            slen = strlen(r->the_request);
> +            if (slen < rbuflen) {
> +                /* it all fits anyway */
> +                apr_cpystrn(rbuf, r->the_request, rbuflen);
> +            }
> +            else {
> +                apr_cpystrn(rbuf, r->the_request+(slen-rbuflen+1),
> +                            rbuflen);
> +            }
> +        }
> +    }
> +    else {
> +        char *p;
> +        /* 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);
> +        if (!ap_mod_status_reqtail) {
> +            apr_cpystrn(rbuf, p, rbuflen);
> +        }
> +        else {
> +            slen = strlen(p);
> +            if (slen < rbuflen) {
> +                /* it all fits anyway */
> +                apr_cpystrn(rbuf, p, rbuflen);
> +            }
> +            else {
> +                apr_cpystrn(rbuf, p+(slen-rbuflen+1), rbuflen);
> +            }
> +
> +        }
> +    }
> +
> +}
> +


Regards

RĂ¼diger

Reply via email to