mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
Declare pre_translate hook in lua/info/log_debug/example modules, and docs.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1879077 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -237,6 +237,7 @@ can create. Some other ways of hooking are:
|
|||||||
<li><code>ap_hook_child_init</code>: Place a hook that executes when a child process is spawned (commonly used for initializing modules after the server has forked)</li>
|
<li><code>ap_hook_child_init</code>: Place a hook that executes when a child process is spawned (commonly used for initializing modules after the server has forked)</li>
|
||||||
<li><code>ap_hook_pre_config</code>: Place a hook that executes before any configuration data has been read (very early hook)</li>
|
<li><code>ap_hook_pre_config</code>: Place a hook that executes before any configuration data has been read (very early hook)</li>
|
||||||
<li><code>ap_hook_post_config</code>: Place a hook that executes after configuration has been parsed, but before the server has forked</li>
|
<li><code>ap_hook_post_config</code>: Place a hook that executes after configuration has been parsed, but before the server has forked</li>
|
||||||
|
<li><code>ap_hook_pre_translate_name</code>: Place a hook that executes when a URI needs to be translated into a filename on the server, before decoding</li>
|
||||||
<li><code>ap_hook_translate_name</code>: Place a hook that executes when a URI needs to be translated into a filename on the server (think <code>mod_rewrite</code>)</li>
|
<li><code>ap_hook_translate_name</code>: Place a hook that executes when a URI needs to be translated into a filename on the server (think <code>mod_rewrite</code>)</li>
|
||||||
<li><code>ap_hook_quick_handler</code>: Similar to <code>ap_hook_handler</code>, except it is run before any other request hooks (translation, auth, fixups etc)</li>
|
<li><code>ap_hook_quick_handler</code>: Similar to <code>ap_hook_handler</code>, except it is run before any other request hooks (translation, auth, fixups etc)</li>
|
||||||
<li><code>ap_hook_log_transaction</code>: Place a hook that executes when the server is about to add a log entry of the current request</li>
|
<li><code>ap_hook_log_transaction</code>: Place a hook that executes when the server is about to add a log entry of the current request</li>
|
||||||
|
@@ -103,6 +103,7 @@
|
|||||||
<table border="1" style="zebra">
|
<table border="1" style="zebra">
|
||||||
<columnspec><column width="1"/></columnspec>
|
<columnspec><column width="1"/></columnspec>
|
||||||
<tr><th>Name</th></tr>
|
<tr><th>Name</th></tr>
|
||||||
|
<tr><td><code>pre_translate_name</code></td></tr>
|
||||||
<tr><td><code>translate_name</code></td></tr>
|
<tr><td><code>translate_name</code></td></tr>
|
||||||
<tr><td><code>type_checker</code></td></tr>
|
<tr><td><code>type_checker</code></td></tr>
|
||||||
<tr><td><code>quick_handler</code></td></tr>
|
<tr><td><code>quick_handler</code></td></tr>
|
||||||
|
@@ -215,6 +215,13 @@ performing access control, or setting mime types:</p>
|
|||||||
<td>This is the first hook that will be called after a request has
|
<td>This is the first hook that will be called after a request has
|
||||||
been mapped to a host or virtual host</td>
|
been mapped to a host or virtual host</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Pre-Translate name</td>
|
||||||
|
<td><directive module="mod_lua">LuaHookPreTranslateName</directive></td>
|
||||||
|
<td>This phase translates the requested URI into a filename on the
|
||||||
|
system, before decoding occurs. Modules such as <module>mod_proxy</module>
|
||||||
|
can operate in this phase.</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Translate name</td>
|
<td>Translate name</td>
|
||||||
<td><directive module="mod_lua">LuaHookTranslateName</directive></td>
|
<td><directive module="mod_lua">LuaHookTranslateName</directive></td>
|
||||||
@@ -439,7 +446,7 @@ end
|
|||||||
<td>string</td>
|
<td>string</td>
|
||||||
<td>yes</td>
|
<td>yes</td>
|
||||||
<td>The file name that the request maps to, f.x. /www/example.com/foo.txt. This can be
|
<td>The file name that the request maps to, f.x. /www/example.com/foo.txt. This can be
|
||||||
changed in the translate-name or map-to-storage phases of a request to allow the
|
changed in the pre-translate-name, translate-name or map-to-storage phases of a request to allow the
|
||||||
default handler (or script handlers) to serve a different file than what was requested.</td>
|
default handler (or script handlers) to serve a different file than what was requested.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -538,7 +545,7 @@ end
|
|||||||
<td>string</td>
|
<td>string</td>
|
||||||
<td>yes</td>
|
<td>yes</td>
|
||||||
<td>Denotes whether this is a proxy request or not. This value is generally set in
|
<td>Denotes whether this is a proxy request or not. This value is generally set in
|
||||||
the post_read_request/translate_name phase of a request.</td>
|
the post_read_request/pre_translate_name/translate_name phase of a request.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>range</code></td>
|
<td><code>range</code></td>
|
||||||
@@ -1516,6 +1523,23 @@ end
|
|||||||
</usage>
|
</usage>
|
||||||
</directivesynopsis>
|
</directivesynopsis>
|
||||||
|
|
||||||
|
<directivesynopsis>
|
||||||
|
<name>LuaHookPreTranslate</name>
|
||||||
|
<description>Provide a hook for the pre_translate phase of a request
|
||||||
|
processing</description>
|
||||||
|
<syntax>LuaHookPreTranslate /path/to/lua/script.lua hook_function_name</syntax>
|
||||||
|
<contextlist><context>server config</context><context>virtual host</context>
|
||||||
|
<context>directory</context><context>.htaccess</context>
|
||||||
|
</contextlist>
|
||||||
|
<override>All</override>
|
||||||
|
<usage>
|
||||||
|
<p>
|
||||||
|
Just like LuaHookTranslateName, but executed at the pre_translate phase,
|
||||||
|
where the URI-path is not percent decoded.
|
||||||
|
</p>
|
||||||
|
</usage>
|
||||||
|
</directivesynopsis>
|
||||||
|
|
||||||
<directivesynopsis>
|
<directivesynopsis>
|
||||||
<name>LuaHookFixups</name>
|
<name>LuaHookFixups</name>
|
||||||
<description>Provide a hook for the fixups phase of a request
|
<description>Provide a hook for the fixups phase of a request
|
||||||
|
@@ -1174,6 +1174,22 @@ static int x_post_read_request(request_rec *r)
|
|||||||
return DECLINED;
|
return DECLINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This routine gives our module an opportunity to translate the URI into an
|
||||||
|
* actual filename, before URL decoding happens.
|
||||||
|
*
|
||||||
|
* This is a RUN_FIRST hook.
|
||||||
|
*/
|
||||||
|
static int x_pre_translate_name(request_rec *r)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We don't actually *do* anything here, except note the fact that we were
|
||||||
|
* called.
|
||||||
|
*/
|
||||||
|
trace_request(r, "x_pre_translate_name()");
|
||||||
|
return DECLINED;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This routine gives our module an opportunity to translate the URI into an
|
* This routine gives our module an opportunity to translate the URI into an
|
||||||
* actual filename. If we don't do anything special, the server's default
|
* actual filename. If we don't do anything special, the server's default
|
||||||
@@ -1467,6 +1483,7 @@ static void x_register_hooks(apr_pool_t *p)
|
|||||||
ap_hook_log_transaction(x_log_transaction, NULL, NULL, APR_HOOK_MIDDLE);
|
ap_hook_log_transaction(x_log_transaction, NULL, NULL, APR_HOOK_MIDDLE);
|
||||||
ap_hook_http_scheme(x_http_scheme, NULL, NULL, APR_HOOK_MIDDLE);
|
ap_hook_http_scheme(x_http_scheme, NULL, NULL, APR_HOOK_MIDDLE);
|
||||||
ap_hook_default_port(x_default_port, NULL, NULL, APR_HOOK_MIDDLE);
|
ap_hook_default_port(x_default_port, NULL, NULL, APR_HOOK_MIDDLE);
|
||||||
|
ap_hook_pre_translate_name(x_pre_translate_name, NULL, NULL, APR_HOOK_MIDDLE);
|
||||||
ap_hook_translate_name(x_translate_name, NULL, NULL, APR_HOOK_MIDDLE);
|
ap_hook_translate_name(x_translate_name, NULL, NULL, APR_HOOK_MIDDLE);
|
||||||
ap_hook_map_to_storage(x_map_to_storage, NULL,NULL, APR_HOOK_MIDDLE);
|
ap_hook_map_to_storage(x_map_to_storage, NULL,NULL, APR_HOOK_MIDDLE);
|
||||||
ap_hook_header_parser(x_header_parser, NULL, NULL, APR_HOOK_MIDDLE);
|
ap_hook_header_parser(x_header_parser, NULL, NULL, APR_HOOK_MIDDLE);
|
||||||
|
@@ -322,6 +322,7 @@ static const hook_lookup_t request_hooks[] = {
|
|||||||
{"HTTP Scheme", ap_hook_get_http_scheme},
|
{"HTTP Scheme", ap_hook_get_http_scheme},
|
||||||
{"Default Port", ap_hook_get_default_port},
|
{"Default Port", ap_hook_get_default_port},
|
||||||
{"Quick Handler", ap_hook_get_quick_handler},
|
{"Quick Handler", ap_hook_get_quick_handler},
|
||||||
|
{"Pre-Translate Name", ap_hook_get_pre_translate_name},
|
||||||
{"Translate Name", ap_hook_get_translate_name},
|
{"Translate Name", ap_hook_get_translate_name},
|
||||||
{"Map to Storage", ap_hook_get_map_to_storage},
|
{"Map to Storage", ap_hook_get_map_to_storage},
|
||||||
{"Check Access", ap_hook_get_access_checker_ex},
|
{"Check Access", ap_hook_get_access_checker_ex},
|
||||||
|
@@ -49,6 +49,7 @@ static const char * const hooks[] = {
|
|||||||
"check_authn", /* 9 */
|
"check_authn", /* 9 */
|
||||||
"check_authz", /* 10 */
|
"check_authz", /* 10 */
|
||||||
"insert_filter", /* 11 */
|
"insert_filter", /* 11 */
|
||||||
|
"pre_translate_name", /* 12 */
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -109,6 +110,12 @@ static int log_debug_handler(request_rec *r)
|
|||||||
return DECLINED;
|
return DECLINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int log_debug_pre_translate_name(request_rec *r)
|
||||||
|
{
|
||||||
|
do_debug_log(r, hooks[12]);
|
||||||
|
return DECLINED;
|
||||||
|
}
|
||||||
|
|
||||||
static int log_debug_translate_name(request_rec *r)
|
static int log_debug_translate_name(request_rec *r)
|
||||||
{
|
{
|
||||||
do_debug_log(r, hooks[3]);
|
do_debug_log(r, hooks[3]);
|
||||||
@@ -263,6 +270,7 @@ static void register_hooks(apr_pool_t *p)
|
|||||||
ap_hook_log_transaction(log_debug_log_transaction, NULL, NULL, APR_HOOK_FIRST);
|
ap_hook_log_transaction(log_debug_log_transaction, NULL, NULL, APR_HOOK_FIRST);
|
||||||
ap_hook_quick_handler(log_debug_quick_handler, NULL, NULL, APR_HOOK_FIRST);
|
ap_hook_quick_handler(log_debug_quick_handler, NULL, NULL, APR_HOOK_FIRST);
|
||||||
ap_hook_handler(log_debug_handler, NULL, NULL, APR_HOOK_FIRST);
|
ap_hook_handler(log_debug_handler, NULL, NULL, APR_HOOK_FIRST);
|
||||||
|
ap_hook_pre_translate_name(log_debug_pre_translate_name, NULL, NULL, APR_HOOK_FIRST);
|
||||||
ap_hook_translate_name(log_debug_translate_name, NULL, NULL, APR_HOOK_FIRST);
|
ap_hook_translate_name(log_debug_translate_name, NULL, NULL, APR_HOOK_FIRST);
|
||||||
ap_hook_map_to_storage(log_debug_map_to_storage, NULL, NULL, APR_HOOK_FIRST);
|
ap_hook_map_to_storage(log_debug_map_to_storage, NULL, NULL, APR_HOOK_FIRST);
|
||||||
ap_hook_fixups(log_debug_fixups, NULL, NULL, APR_HOOK_FIRST);
|
ap_hook_fixups(log_debug_fixups, NULL, NULL, APR_HOOK_FIRST);
|
||||||
|
@@ -1205,6 +1205,11 @@ static int lua_check_user_id_harness_last(request_rec *r)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static int lua_pre_trans_name_harness(request_rec *r)
|
||||||
|
{
|
||||||
|
return lua_request_rec_hook_harness(r, "pre_translate_name", APR_HOOK_MIDDLE);
|
||||||
|
}
|
||||||
|
|
||||||
static int lua_translate_name_harness_first(request_rec *r)
|
static int lua_translate_name_harness_first(request_rec *r)
|
||||||
{
|
{
|
||||||
return lua_request_rec_hook_harness(r, "translate_name", AP_LUA_HOOK_FIRST);
|
return lua_request_rec_hook_harness(r, "translate_name", AP_LUA_HOOK_FIRST);
|
||||||
@@ -1277,6 +1282,21 @@ static int lua_quick_harness(request_rec *r, int lookup)
|
|||||||
return lua_request_rec_hook_harness(r, "quick", APR_HOOK_MIDDLE);
|
return lua_request_rec_hook_harness(r, "quick", APR_HOOK_MIDDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *register_pre_trans_name_hook(cmd_parms *cmd, void *_cfg,
|
||||||
|
const char *file,
|
||||||
|
const char *function)
|
||||||
|
{
|
||||||
|
return register_named_file_function_hook("pre_translate_name", cmd, _cfg, file,
|
||||||
|
function, APR_HOOK_MIDDLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *register_pre_trans_name_block(cmd_parms *cmd, void *_cfg,
|
||||||
|
const char *line)
|
||||||
|
{
|
||||||
|
return register_named_block_function_hook("pre_translate_name", cmd, _cfg,
|
||||||
|
line);
|
||||||
|
}
|
||||||
|
|
||||||
static const char *register_translate_name_hook(cmd_parms *cmd, void *_cfg,
|
static const char *register_translate_name_hook(cmd_parms *cmd, void *_cfg,
|
||||||
const char *file,
|
const char *file,
|
||||||
const char *function,
|
const char *function,
|
||||||
@@ -1848,6 +1868,14 @@ command_rec lua_commands[] = {
|
|||||||
AP_INIT_TAKE3("LuaAuthzProvider", register_authz_provider, NULL, RSRC_CONF|EXEC_ON_READ,
|
AP_INIT_TAKE3("LuaAuthzProvider", register_authz_provider, NULL, RSRC_CONF|EXEC_ON_READ,
|
||||||
"Provide an authorization provider"),
|
"Provide an authorization provider"),
|
||||||
|
|
||||||
|
AP_INIT_TAKE2("LuaHookPreTranslateName", register_pre_trans_name_hook, NULL,
|
||||||
|
OR_ALL,
|
||||||
|
"Provide a hook for the pre_translate name phase of request processing"),
|
||||||
|
|
||||||
|
AP_INIT_RAW_ARGS("<LuaHookPreTranslateName", register_pre_trans_name_block, NULL,
|
||||||
|
EXEC_ON_READ | OR_ALL,
|
||||||
|
"Provide a hook for the pre_translate name phase of request processing"),
|
||||||
|
|
||||||
AP_INIT_TAKE23("LuaHookTranslateName", register_translate_name_hook, NULL,
|
AP_INIT_TAKE23("LuaHookTranslateName", register_translate_name_hook, NULL,
|
||||||
OR_ALL,
|
OR_ALL,
|
||||||
"Provide a hook for the translate name phase of request processing"),
|
"Provide a hook for the translate name phase of request processing"),
|
||||||
@@ -2101,6 +2129,9 @@ static void lua_register_hooks(apr_pool_t *p)
|
|||||||
APR_HOOK_MIDDLE);
|
APR_HOOK_MIDDLE);
|
||||||
|
|
||||||
/* http_request.h hooks */
|
/* http_request.h hooks */
|
||||||
|
ap_hook_pre_translate_name(lua_pre_trans_name_harness, NULL, NULL,
|
||||||
|
APR_HOOK_MIDDLE);
|
||||||
|
|
||||||
ap_hook_translate_name(lua_translate_name_harness_first, NULL, NULL,
|
ap_hook_translate_name(lua_translate_name_harness_first, NULL, NULL,
|
||||||
AP_LUA_HOOK_FIRST);
|
AP_LUA_HOOK_FIRST);
|
||||||
ap_hook_translate_name(lua_translate_name_harness, NULL, NULL,
|
ap_hook_translate_name(lua_translate_name_harness, NULL, NULL,
|
||||||
|
Reference in New Issue
Block a user