On 2012-06-26 13:55, oh...@cox.net wrote:



And for webgate, I see:

Registering hooks for apache2entry_web_gate.cpp
     Hooked post_config
     Hooked handler
     Hooked check_user_id
     Hooked auth_checker



The original mod_headers code has a hook for fixups.  If I added an "after" 
string in the code that registers my fixup function, with the name of the webgate, would 
that cause my modified mod_headers to run before the webgate?

As you see in the debug messages obtained with SHOW_HOOKS=1, the webgate does not place any callback on the fixups hook.

The relative order of the callbacks in question is:

1) post_read_request
2) other callbacks (e.g. translate_name, header_parser)
3) access_checker
4) check_user_id
5) auth_checker
6) fixups
7) insert_filter
8) handler

mod_ssl hooks (1), (3-6), and (8) but it initialises the environment only in the fixups hook (6).

webgate hooks (4), (5), and (8). So putting your code in (6) is already too late if it is webgate's (4) or (5) that you want to precede.

There's no way in which your fixups callback can run earlier than webgate's check_user_id or auth_checker simply because the latter are run by apache earlier than fixups.

Also can you clarify/expand on what you mean by " you'll have to get those variables 
yourself"?  I think that I'm currently getting them using env->setproc or something 
like that.

What I mean is:

*) apparently you need the variables before webgate's check_user_id or auth_checker. *) but mod_ssl initialises them in fixups, i.e. _after_ check_user_id and auth_checker

You cannot wait until mod_ssl runs its fixups, you have to hook one of the hooks that execute earlier than webgate's check_user_id or auth_checker. (You have to hook one of the hooks (1)-(4).) There, in your hook, you have to get yourself the values of the server certificates, client certificate, etc, everything that mod_ssl would have given you, but too late.


Please note that what I say holds under the condition that it is webgate's check_user_id and auth_checker that you want to precede. If it is webgate's handler, then your code already runs before webgate's handler.


Sorin

P.S. For the order of hooks, check
modules/http/http_core.c, ap_process_http_connection
server/protocol.c, ap_read_request
server/request.c, ap_process_request_internal

Reply via email to