Don't decode r->uri when pre_trans returns DONE instead of OK, which allows to
preserve previous behaviour where decoding was avoided for "ProxyRequests on"
or post_read_request RewriteRule [P] only, but not ProxyPass'ed requests.
This also preserves decoded location walk in most/same cases.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@
1879137 13f79535-47bb-0310-9956-
ffa450edef68
* This hook allow modules an opportunity to translate the URI into an
* actual filename, before URL decoding happens.
* @param r The current request
- * @return OK, DECLINED, or HTTP_...
+ * @return DECLINED to let other modules handle the pre-translation,
+ * OK if it was handled and no other module should process it,
+ * DONE if no further transformation should happen on the URI,
+ * HTTP_... in case of error.
* @ingroup hooks
*/
AP_DECLARE_HOOK(int,pre_translate_name,(request_rec *r))
if (r->proxyreq) {
/* someone has already set up the proxy, it was possibly ourselves
- * in proxy_detect
+ * in proxy_detect (DONE will prevent further decoding of r->uri,
+ * only if proxyreq is set before pre_trans already).
*/
- return OK;
+ return pre_trans ? DONE : OK;
}
/* In early pre_trans hook, r->uri was not manipulated yet so we are
return access_status;
}
- /* Let pre_translate_name hooks work with non-decoded URIs,
- * and eventually apply their own transformations (return OK).
+ /* Let pre_translate_name hooks work with non-decoded URIs, and
+ * eventually prevent further URI transformations (return DONE).
*/
access_status = ap_run_pre_translate_name(r);
- if (access_status != OK && access_status != DECLINED) {
+ if (ap_is_HTTP_ERROR(access_status)) {
return access_status;
}
}
/* Ignore URL unescaping for translated URIs already */
- if (access_status == DECLINED && r->parsed_uri.path) {
+ if (access_status != DONE && r->parsed_uri.path) {
core_dir_config *d = ap_get_core_module_config(r->per_dir_config);
if (d->allow_encoded_slashes) {