> One solution would be to set a note for your hook in an earlier stage,
> and then return DECLINED from your handler when you detect that note.

Ah, but from what I can work out, before the check_user() hook fires, the
403 is sent to the client because of the presence of the require. I can't
have the check_user() hook return DECLINED because its too late: the 403 has
been sent back automatically.

But additionally, I can't return DECLINED from the access() hook (which
fires before the check_user() hook) because if the resource requested is
publicly accessible, then the access() hook should return OK :)

So, to me, the only solution is:
In the access() hook, if the resource is NOT publicly accessible, return OK.
This will make apache recognise the require directive, return a 403, and
then fire the check_user() and auth() hooks.

If the resource IS publicly available, I need to somehow remove the require
directive from the request, and then return OK from the access() hook. This
means that the 403 won't be returns (as there is no require directive set
anymore) which means no authentication (check_user()) hook is fired and
subsequently no authorization (auth()) hook either.

>From what I can make out, this is how Apache would handle the process.

No to see if I can actually modify the request->requires array, and if so,
if that will affect the request processing after exiting the access() hook
so that the 403 and the check_user() and auth() hooks don't fire.

Fun fun fun!

Can someone with a deeper knowledge of Apache than me comment if this sounds
like crazy talk? Have I made a massive assumption regarding the returning of
the 403 header before check_user(), for example?

Cheers!

Ben


-----Original Message-----
From: Tom Evans [mailto:tevans...@googlemail.com] 
Sent: 22 July 2009 12:24
To: modules-dev@httpd.apache.org
Subject: RE: Dynamicly insert 'require' into request

On Wed, 2009-07-22 at 10:43 +0100, Ben Davies wrote:
> Okay, so upon further inspection, it appears that there may not be an
> equivalent function for mod_perls set_handlers().
> 
> This leads me to a problem: how do I "turn off" a hook, especially, as the
> check_user() hook expects the r->user property to contain the username,
> meaning that the sending of a 403 happens before the check_user() hook is
> called. Whatever it is I need to do, I need to do in the access() hook.
> 
> I was hoping it might be something as simple as removing my require entry
> from the require array. Has anyone had any experience with this? If so,
> could you comment on techniques?
> 
> Cheers,
> 
> Ben
> 

One solution would be to set a note for your hook in an earlier stage,
and then return DECLINED from your handler when you detect that note.

There may be a better way :)

Cheers

Tom

Reply via email to