Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-12 Thread Jeff Trawick
On Mon, Oct 12, 2009 at 5:51 AM, Barry Scott  wrote:
> Jeff Trawick wrote:
>>
>> On Fri, Oct 9, 2009 at 3:30 PM, Jeff Trawick  wrote:
>>
>
> ...
>>
>> Silly me.  Chris's patch at
>>
>> http://people.apache.org/~chrisd/patches/mod_fcgid_auth/mod_fcgid-1auth-trunk.patch
>> handles this, and it does send a trailing FCGI_STDIN record to an
>> authorizer.
>>
>> Chris, AYT
>
> I wonder if other fastcgi implementation made the same bad assumption about
> FCGI_STDIN
> always being sent as ours did.
>
> FYI: The other change I made to our fastcgi was to parse out multiple values
> from FCGI_PARAMS
> records. mod_fastcgi sends one name-value pair in a FCGI_PARAMS record and
> sends as
> many FCGI_PARAMS records as it needs to to send the environment. Where as
> mod_fcgid sends
> multiple name-value pairs in asingle FCGI_PARAMS record.

Thanks for all the info.

I'm inclined to commit what we think is proper for FCGI_STDIN on
FCGI_AUTHORIZER and then see if it absolutely has to be adjusted later
once other issues with FCGI_AUTHORIZER are cleared up and we see a
variety of implementations being tested with it.

(I'll go with patch 3, which adds the eos bucket to the brigade.)


Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-12 Thread Barry Scott

Jeff Trawick wrote:

On Fri, Oct 9, 2009 at 1:26 PM, Barry Scott  wrote:
  


One test that needs doing is to have a Responder and an Authorizer running
for the same request. I'll see if I can do that test for you next week with
the pieces
I have.



Chris Darroch has a patch for that, which is a small part of

http://people.apache.org/~chrisd/patches/mod_fcgid_auth/mod_fcgid-1auth-trunk.patch

which applies to the old mod_fcgid 2.2 but which he has submitted here
for inclusion.  If you get stuck, look in there at some of the checks
for role == responder, one or more of which are for the
responder+authorizer-on-same-request issue.

  


I'll hold off on testing this until Chris' patches are available in trunk.
(I don't need this to work today, but I will need it later in the year
expect)

Barry



Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-12 Thread Barry Scott

Jeff Trawick wrote:

On Fri, Oct 9, 2009 at 3:30 PM, Jeff Trawick  wrote:
  

...


Silly me.  Chris's patch at
http://people.apache.org/~chrisd/patches/mod_fcgid_auth/mod_fcgid-1auth-trunk.patch
handles this, and it does send a trailing FCGI_STDIN record to an
authorizer.

Chris, AYT
I wonder if other fastcgi implementation made the same bad assumption 
about FCGI_STDIN

always being sent as ours did.

FYI: The other change I made to our fastcgi was to parse out multiple 
values from FCGI_PARAMS
records. mod_fastcgi sends one name-value pair in a FCGI_PARAMS record 
and sends as
many FCGI_PARAMS records as it needs to to send the environment. Where 
as mod_fcgid sends

multiple name-value pairs in asingle FCGI_PARAMS record.

Barry



Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-12 Thread Barry Scott

Jeff Trawick wrote:

Variation number three:

As with your patch, it remembers to add the eos bucket to the brigade
of data sent to the app.  As with my earlier patch, it doesn't send
the trailing FCGI_STDIN record.

In the spec (http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S6.3),
there's no mention of FCGI_STDIN for an FCGI_AUTHORIZER.  I
double-checked that mod_fcgid.c strips any CONTENT_LENGTH when calling
the authorizer, which the spec does call for.
  
I won't be shocked if it still fails for you; in that case I think we

need to try to understand exactly why the trailing FCGI_STDIN record
is needed.
  

Our fastcgi code was expecting FCGI_STDIN.
As you point out the spec does not need or allow FCGI_STDIN for an 
authorizer.


I have fixed this bug in our fastcgi code. Now your original patch works 
for me now.


Barry



Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-09 Thread Chris Darroch

Jeff Trawick wrote:


Chris Darroch has a patch for that, which is a small part of

http://people.apache.org/~chrisd/patches/mod_fcgid_auth/mod_fcgid-1auth-trunk.patch

which applies to the old mod_fcgid 2.2 but which he has submitted here
for inclusion.  If you get stuck, look in there at some of the checks
for role == responder, one or more of which are for the
responder+authorizer-on-same-request issue.


  Yes -- and I'm really, really going to prioritize breaking this
patchset up (I know I'm a moron for having run everything together)
next week and trying to commit portions one at a time to mod_fcgid trunk.

  I know, because we do it in production, that I have a single script
running as both authorizer and responder, and it does work OK ... I just
have to go back in line by line and figure out what each change was for.

  Please do hassle me next week if I don't show some signs of progress
on this front.

Chris.

--
GPG Key ID: 366A375B
GPG Key Fingerprint: 485E 5041 17E1 E2BB C263  E4DE C8E3 FA36 366A 375B



Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-09 Thread Jeff Trawick
On Fri, Oct 9, 2009 at 3:30 PM, Jeff Trawick  wrote:
> On Fri, Oct 9, 2009 at 1:26 PM, Barry Scott  wrote:
>> Jeff Trawick wrote:
>>>
>>> On Fri, Oct 9, 2009 at 12:04 PM, Barry Scott 
>>> wrote:
>>>

 This has been filed as issue
 https://issues.apache.org/bugzilla/show_bug.cgi?id=47973

>>> See patch attached to the PR.  Thanks!
>>>
>>>
>>
>> No joy I get internal server error.
>>
>> But the patch below works for my case.
> ...
>
>> Index: modules/fcgid/fcgid_bridge.c
>> ===
>> --- modules/fcgid/fcgid_bridge.c    (revision 823573)
>> +++ modules/fcgid/fcgid_bridge.c    (working copy)
>> @@ -470,6 +470,8 @@
>>        return HTTP_INTERNAL_SERVER_ERROR;
>>    }
>>
>> +    if (role == FCGI_RESPONDER) {
>> +
>>    /* Stdin header and body */
>>    /* XXX HACK: I have to read all the request into memory before sending it
>>       to fastcgi application server, this prevents slow clients from
>> @@ -624,6 +626,7 @@
>>        apr_brigade_destroy(input_brigade);
>>    }
>>    while (!seen_eos);
>> +    } /* end handling request body for responders */
>>
>>    /* Append an empty body stdin header */
>>    stdin_request_header = apr_bucket_alloc(sizeof(FCGI_Header),
>>
>>
>
> Variation number three:
>
> As with your patch, it remembers to add the eos bucket to the brigade
> of data sent to the app.  As with my earlier patch, it doesn't send
> the trailing FCGI_STDIN record.
>
> In the spec (http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S6.3),
> there's no mention of FCGI_STDIN for an FCGI_AUTHORIZER.  I
> double-checked that mod_fcgid.c strips any CONTENT_LENGTH when calling
> the authorizer, which the spec does call for.
>
> I won't be shocked if it still fails for you; in that case I think we
> need to try to understand exactly why the trailing FCGI_STDIN record
> is needed.
>
> (FWIW, my authorizer is Perl using the FCGI module.  The protocol
> implementation on the app side could explain the difference in our
> observations.)

Silly me.  Chris's patch at
http://people.apache.org/~chrisd/patches/mod_fcgid_auth/mod_fcgid-1auth-trunk.patch
handles this, and it does send a trailing FCGI_STDIN record to an
authorizer.

Chris, AYT?


Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-09 Thread Jeff Trawick
On Fri, Oct 9, 2009 at 1:26 PM, Barry Scott  wrote:
> Jeff Trawick wrote:
>>
>> On Fri, Oct 9, 2009 at 12:04 PM, Barry Scott 
>> wrote:
>>
>>>
>>> This has been filed as issue
>>> https://issues.apache.org/bugzilla/show_bug.cgi?id=47973
>>>
>> See patch attached to the PR.  Thanks!
>>
>>
>
> No joy I get internal server error.
>
> But the patch below works for my case.
...

> Index: modules/fcgid/fcgid_bridge.c
> ===
> --- modules/fcgid/fcgid_bridge.c    (revision 823573)
> +++ modules/fcgid/fcgid_bridge.c    (working copy)
> @@ -470,6 +470,8 @@
>        return HTTP_INTERNAL_SERVER_ERROR;
>    }
>
> +    if (role == FCGI_RESPONDER) {
> +
>    /* Stdin header and body */
>    /* XXX HACK: I have to read all the request into memory before sending it
>       to fastcgi application server, this prevents slow clients from
> @@ -624,6 +626,7 @@
>        apr_brigade_destroy(input_brigade);
>    }
>    while (!seen_eos);
> +    } /* end handling request body for responders */
>
>    /* Append an empty body stdin header */
>    stdin_request_header = apr_bucket_alloc(sizeof(FCGI_Header),
>
>

Variation number three:

As with your patch, it remembers to add the eos bucket to the brigade
of data sent to the app.  As with my earlier patch, it doesn't send
the trailing FCGI_STDIN record.

In the spec (http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S6.3),
there's no mention of FCGI_STDIN for an FCGI_AUTHORIZER.  I
double-checked that mod_fcgid.c strips any CONTENT_LENGTH when calling
the authorizer, which the spec does call for.

I won't be shocked if it still fails for you; in that case I think we
need to try to understand exactly why the trailing FCGI_STDIN record
is needed.

(FWIW, my authorizer is Perl using the FCGI module.  The protocol
implementation on the app side could explain the difference in our
observations.)

--- modules/fcgid/fcgid_bridge.c.orig   2009-10-09 12:09:12.032405619 -0400
+++ modules/fcgid/fcgid_bridge.c2009-10-09 15:12:25.838920760 -0400
@@ -470,6 +470,8 @@
 return HTTP_INTERNAL_SERVER_ERROR;
 }

+if (role == FCGI_RESPONDER) {
+
 /* Stdin header and body */
 /* XXX HACK: I have to read all the request into memory before sending it
to fastcgi application server, this prevents slow clients from
@@ -640,6 +642,8 @@
 }
 APR_BRIGADE_INSERT_TAIL(output_brigade, bucket_header);

+} /* end handling request body for responders */
+
 /* The eos bucket now */
 bucket_eos = apr_bucket_eos_create(r->connection->bucket_alloc);
 APR_BRIGADE_INSERT_TAIL(output_brigade, bucket_eos);


-- 
Born in Roswell... married an alien...


Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-09 Thread Jeff Trawick
On Fri, Oct 9, 2009 at 1:26 PM, Barry Scott  wrote:
> Jeff Trawick wrote:
>>
>> On Fri, Oct 9, 2009 at 12:04 PM, Barry Scott 
>> wrote:
>>
>>>
>>> This has been filed as issue
>>> https://issues.apache.org/bugzilla/show_bug.cgi?id=47973
>>>
>>> Further testing of our application has shown up a problem using
>>> mod_fcgid 2.3.4.
>>>
>>> With the following configuration we are seeing the request body
>>> of POST messages get stripped out if FcgidAuthorizer is used for
>>> Location /player.  If we comment out the "Require onelan magic" the
>>> POSTs work.
>>>
>>> Looking at bridge_request we see the code is reading the input buckets
>>> and feeding then to the Authorizer.
>>>
>>> It seems to us that:
>>>
>>> Either this must not happen if the fcgid is an authorizer
>>>
>>
>> right
>>
>>
>>>
>>> or the buckets must be put back for whatever handles
>>> the POST to process.
>>>
>>> Barry
>>>
>>
>> See patch attached to the PR.  Thanks!
>>
>>
>
> No joy I get internal server error.
>
> But the patch below works for my case.
>
> Note: I don't understand the details of HTTPD to know if this patch is
> going to cause problems in other use cases, or indeed is only working
> by luck.

I'll have a look; thanks!

>
> One test that needs doing is to have a Responder and an Authorizer running
> for the same request. I'll see if I can do that test for you next week with
> the pieces
> I have.

Chris Darroch has a patch for that, which is a small part of

http://people.apache.org/~chrisd/patches/mod_fcgid_auth/mod_fcgid-1auth-trunk.patch

which applies to the old mod_fcgid 2.2 but which he has submitted here
for inclusion.  If you get stuck, look in there at some of the checks
for role == responder, one or more of which are for the
responder+authorizer-on-same-request issue.


Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-09 Thread Barry Scott

Jeff Trawick wrote:

On Fri, Oct 9, 2009 at 12:04 PM, Barry Scott  wrote:
  

This has been filed as issue
https://issues.apache.org/bugzilla/show_bug.cgi?id=47973

Further testing of our application has shown up a problem using
mod_fcgid 2.3.4.

With the following configuration we are seeing the request body
of POST messages get stripped out if FcgidAuthorizer is used for
Location /player.  If we comment out the "Require onelan magic" the
POSTs work.

Looking at bridge_request we see the code is reading the input buckets
and feeding then to the Authorizer.

It seems to us that:

Either this must not happen if the fcgid is an authorizer



right

  

or the buckets must be put back for whatever handles
the POST to process.

Barry



See patch attached to the PR.  Thanks!

  


No joy I get internal server error.

But the patch below works for my case.

Note: I don't understand the details of HTTPD to know if this patch is
going to cause problems in other use cases, or indeed is only working
by luck.

One test that needs doing is to have a Responder and an Authorizer running
for the same request. I'll see if I can do that test for you next week 
with the pieces

I have.

Index: modules/fcgid/fcgid_bridge.c
===
--- modules/fcgid/fcgid_bridge.c(revision 823573)
+++ modules/fcgid/fcgid_bridge.c(working copy)
@@ -470,6 +470,8 @@
return HTTP_INTERNAL_SERVER_ERROR;
}

+if (role == FCGI_RESPONDER) {
+
/* Stdin header and body */
/* XXX HACK: I have to read all the request into memory before 
sending it

   to fastcgi application server, this prevents slow clients from
@@ -624,6 +626,7 @@
apr_brigade_destroy(input_brigade);
}
while (!seen_eos);
+} /* end handling request body for responders */

/* Append an empty body stdin header */
stdin_request_header = apr_bucket_alloc(sizeof(FCGI_Header),



Re: mod_fcgid POST broken if FcgiAuthorizer is run

2009-10-09 Thread Jeff Trawick
On Fri, Oct 9, 2009 at 12:04 PM, Barry Scott  wrote:
> This has been filed as issue
> https://issues.apache.org/bugzilla/show_bug.cgi?id=47973
>
> Further testing of our application has shown up a problem using
> mod_fcgid 2.3.4.
>
> With the following configuration we are seeing the request body
> of POST messages get stripped out if FcgidAuthorizer is used for
> Location /player.  If we comment out the "Require onelan magic" the
> POSTs work.
>
> Looking at bridge_request we see the code is reading the input buckets
> and feeding then to the Authorizer.
>
> It seems to us that:
>
> Either this must not happen if the fcgid is an authorizer

right

> or the buckets must be put back for whatever handles
> the POST to process.
>
> Barry

See patch attached to the PR.  Thanks!