Skip to content

Commit

Permalink
mod_rewrite, mod_proxy: mod_proxy to cononicalize rewritten [P] URLs.…
Browse files Browse the repository at this point in the history
… PR 69235.

When mod_rewrite sets a "proxy:" URL with [P], it should be canonicalized by
mod_proxy still, notably to handle any "unix:" local socket part.

To avoid double encoding in perdir context, a follow up commit should remove the
ap_escape_uri() done in mod_rewrite since it's now on mod_proxy to canonicalize,
per PR 69260.



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1920570 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
ylavic committed Sep 11, 2024
1 parent a8be4c5 commit c9dc4bb
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 14 deletions.
2 changes: 2 additions & 0 deletions changes-entries/pr69235.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*) mod_rewrite, mod_proxy: mod_proxy to cononicalize rewritten [P] URLs,
including "unix:" ones. PR 69235. [Yann Ylavic]
13 changes: 6 additions & 7 deletions modules/mappers/mod_rewrite.c
Original file line number Diff line number Diff line change
Expand Up @@ -5697,10 +5697,7 @@ static void ap_register_rewrite_mapfunc(char *name, rewrite_mapfunc_t *func)

static void register_hooks(apr_pool_t *p)
{
/* fixup after mod_proxy, so that the proxied url will not
* escaped accidentally by mod_proxy's fixup.
*/
static const char * const aszPre[]={ "mod_proxy.c", NULL };
static const char * const aszModProxy[] = { "mod_proxy.c", NULL };

/* make the hashtable before registering the function, so that
* other modules are prevented from accessing uninitialized memory.
Expand All @@ -5712,10 +5709,12 @@ static void register_hooks(apr_pool_t *p)
ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_child_init(init_child, NULL, NULL, APR_HOOK_MIDDLE);

ap_hook_fixups(hook_fixup, aszPre, NULL, APR_HOOK_FIRST);

/* allow to change the uri before mod_proxy takes over it */
ap_hook_translate_name(hook_uri2file, NULL, aszModProxy, APR_HOOK_FIRST);
/* fixup before mod_proxy so that a [P] URL gets fixed up there */
ap_hook_fixups(hook_fixup, NULL, aszModProxy, APR_HOOK_FIRST);
ap_hook_fixups(hook_mimetype, NULL, NULL, APR_HOOK_LAST);
ap_hook_translate_name(hook_uri2file, NULL, NULL, APR_HOOK_FIRST);
}

/* the main config structure */
Expand Down
12 changes: 5 additions & 7 deletions modules/proxy/mod_proxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -3402,28 +3402,26 @@ static int proxy_pre_config(apr_pool_t *pconf, apr_pool_t *plog,
}
static void register_hooks(apr_pool_t *p)
{
/* fixup before mod_rewrite, so that the proxied url will not
* escaped accidentally by our fixup.
*/
static const char * const aszSucc[] = { "mod_rewrite.c", NULL};
/* Only the mpm_winnt has child init hook handler.
* make sure that we are called after the mpm
* initializes.
*/
static const char *const aszPred[] = { "mpm_winnt.c", "mod_proxy_balancer.c",
"mod_proxy_hcheck.c", NULL};
static const char * const aszModRewrite[] = { "mod_rewrite.c", NULL };

/* handler */
ap_hook_handler(proxy_handler, NULL, NULL, APR_HOOK_FIRST);
/* filename-to-URI translation */
ap_hook_pre_translate_name(proxy_pre_translate_name, NULL, NULL,
APR_HOOK_MIDDLE);
ap_hook_translate_name(proxy_translate_name, aszSucc, NULL,
/* mod_rewrite has a say on the uri before proxy translation */
ap_hook_translate_name(proxy_translate_name, aszModRewrite, NULL,
APR_HOOK_FIRST);
/* walk <Proxy > entries and suppress default TRACE behavior */
ap_hook_map_to_storage(proxy_map_location, NULL,NULL, APR_HOOK_FIRST);
/* fixups */
ap_hook_fixups(proxy_fixup, NULL, aszSucc, APR_HOOK_FIRST);
/* fixup after mod_rewrite so that a [P] URL from there gets fixed up */
ap_hook_fixups(proxy_fixup, aszModRewrite, NULL, APR_HOOK_FIRST);
/* post read_request handling */
ap_hook_post_read_request(proxy_detect, NULL, NULL, APR_HOOK_FIRST);
/* pre config handling */
Expand Down

0 comments on commit c9dc4bb

Please sign in to comment.