author | Petr Sumbera <petr.sumbera@oracle.com> |
Wed, 21 Dec 2016 07:38:10 -0800 | |
changeset 7586 | 3db1c2ef2aa9 |
permissions | -rw-r--r-- |
7586
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
1 |
https://bz.apache.org/bugzilla/show_bug.cgi?id=60577 |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
2 |
|
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
3 |
Index: modules/cache/cache_util.c |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
4 |
=================================================================== |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
5 |
--- modules/cache/cache_util.c (revision 1778044) |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
6 |
+++ modules/cache/cache_util.c (working copy) |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
7 |
@@ -31,10 +31,8 @@ extern module AP_MODULE_DECLARE_DATA cache_module; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
8 |
* in "filter". All but the path comparisons are case-insensitive. |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
9 |
*/ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
10 |
static int uri_meets_conditions(const apr_uri_t *filter, const int pathlen, |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
11 |
- request_rec *r) |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
12 |
+ const apr_uri_t *url) |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
13 |
{ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
14 |
- const apr_uri_t *url = &r->parsed_uri; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
15 |
- |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
16 |
/* Scheme, hostname port and local part. The filter URI and the |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
17 |
* URI we test may have the following shapes: |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
18 |
* /<path> |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
19 |
@@ -114,7 +112,7 @@ static int uri_meets_conditions(const apr_uri_t *f |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
20 |
/* For HTTP caching purposes, an empty (NULL) path is equivalent to |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
21 |
* a single "/" path. RFCs 3986/2396 |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
22 |
*/ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
23 |
- if (!r->uri) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
24 |
+ if (!url->path) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
25 |
if (*filter->path == '/' && pathlen == 1) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
26 |
return 1; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
27 |
} |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
28 |
@@ -126,7 +124,7 @@ static int uri_meets_conditions(const apr_uri_t *f |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
29 |
/* Url has met all of the filter conditions so far, determine |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
30 |
* if the paths match. |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
31 |
*/ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
32 |
- return !strncmp(filter->path, r->uri, pathlen); |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
33 |
+ return !strncmp(filter->path, url->path, pathlen); |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
34 |
} |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
35 |
|
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
36 |
static cache_provider_list *get_provider(request_rec *r, struct cache_enable *ent, |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
37 |
@@ -172,6 +170,7 @@ cache_provider_list *cache_get_providers(request_r |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
38 |
{ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
39 |
cache_dir_conf *dconf = ap_get_module_config(r->per_dir_config, &cache_module); |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
40 |
cache_provider_list *providers = NULL; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
41 |
+ const apr_uri_t *url; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
42 |
int i; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
43 |
|
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
44 |
/* per directory cache disable */ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
45 |
@@ -179,11 +178,25 @@ cache_provider_list *cache_get_providers(request_r |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
46 |
return NULL; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
47 |
} |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
48 |
|
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
49 |
+ url = &r->parsed_uri; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
50 |
+ if (url->path != r->uri || (r->uri && strcmp(url->path, r->uri))) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
51 |
+ apr_uri_t *uri = apr_pcalloc(r->pool, sizeof *uri); |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
52 |
+ if (r->uri && apr_uri_parse(r->pool, r->uri, uri)) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
53 |
+ return NULL; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
54 |
+ } |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
55 |
+ if (!uri->scheme) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
56 |
+ char *path = uri->path; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
57 |
+ memcpy(uri, url, sizeof *uri); |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
58 |
+ uri->path = path; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
59 |
+ } |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
60 |
+ url = uri; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
61 |
+ } |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
62 |
+ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
63 |
/* global cache disable */ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
64 |
for (i = 0; i < conf->cachedisable->nelts; i++) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
65 |
struct cache_disable *ent = |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
66 |
(struct cache_disable *)conf->cachedisable->elts; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
67 |
- if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, r)) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
68 |
+ if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, url)) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
69 |
/* Stop searching now. */ |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
70 |
return NULL; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
71 |
} |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
72 |
@@ -200,7 +213,7 @@ cache_provider_list *cache_get_providers(request_r |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
73 |
for (i = 0; i < conf->cacheenable->nelts; i++) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
74 |
struct cache_enable *ent = |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
75 |
(struct cache_enable *)conf->cacheenable->elts; |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
76 |
- if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, r)) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
77 |
+ if (uri_meets_conditions(&ent[i].url, ent[i].pathlen, url)) { |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
78 |
providers = get_provider(r, &ent[i], providers); |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
79 |
} |
3db1c2ef2aa9
25305111 Upgrade Apache Web Server to version 2.4.25
Petr Sumbera <petr.sumbera@oracle.com>
parents:
diff
changeset
|
80 |
} |