Lines 80-85
Link Here
|
80 |
APR_HOOK_LINK(quick_handler) |
80 |
APR_HOOK_LINK(quick_handler) |
81 |
APR_HOOK_LINK(optional_fn_retrieve) |
81 |
APR_HOOK_LINK(optional_fn_retrieve) |
82 |
APR_HOOK_LINK(test_config) |
82 |
APR_HOOK_LINK(test_config) |
|
|
83 |
APR_HOOK_LINK(open_htaccess) |
83 |
) |
84 |
) |
84 |
|
85 |
|
85 |
AP_IMPLEMENT_HOOK_RUN_ALL(int, header_parser, |
86 |
AP_IMPLEMENT_HOOK_RUN_ALL(int, header_parser, |
Lines 171-176
Link Here
|
171 |
AP_IMPLEMENT_HOOK_RUN_FIRST(int, quick_handler, (request_rec *r, int lookup), |
172 |
AP_IMPLEMENT_HOOK_RUN_FIRST(int, quick_handler, (request_rec *r, int lookup), |
172 |
(r, lookup), DECLINED) |
173 |
(r, lookup), DECLINED) |
173 |
|
174 |
|
|
|
175 |
AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, open_htaccess, |
176 |
(request_rec *r, const char *dir_name, const char *access_name, |
177 |
ap_configfile_t **conffile, const char **full_name), |
178 |
(r, dir_name, access_name, conffile, full_name), |
179 |
AP_DECLINED) |
180 |
|
174 |
/* hooks with no args are implemented last, after disabling APR hook probes */ |
181 |
/* hooks with no args are implemented last, after disabling APR hook probes */ |
175 |
#if defined(APR_HOOK_PROBES_ENABLED) |
182 |
#if defined(APR_HOOK_PROBES_ENABLED) |
176 |
#undef APR_HOOK_PROBES_ENABLED |
183 |
#undef APR_HOOK_PROBES_ENABLED |
Lines 2073-2086
Link Here
|
2073 |
return OK; |
2080 |
return OK; |
2074 |
} |
2081 |
} |
2075 |
|
2082 |
|
|
|
2083 |
apr_status_t ap_open_htaccess(request_rec *r, const char *dir_name, |
2084 |
const char *access_name, |
2085 |
ap_configfile_t **conffile, |
2086 |
const char **full_name) |
2087 |
{ |
2088 |
*full_name = ap_make_full_path(r->pool, dir_name, access_name); |
2089 |
return ap_pcfg_openfile(conffile, r->pool, *full_name); |
2090 |
} |
2091 |
|
2076 |
AP_CORE_DECLARE(int) ap_parse_htaccess(ap_conf_vector_t **result, |
2092 |
AP_CORE_DECLARE(int) ap_parse_htaccess(ap_conf_vector_t **result, |
2077 |
request_rec *r, int override, |
2093 |
request_rec *r, int override, |
2078 |
int override_opts, apr_table_t *override_list, |
2094 |
int override_opts, apr_table_t *override_list, |
2079 |
const char *d, const char *access_name) |
2095 |
const char *d, const char *access_names) |
2080 |
{ |
2096 |
{ |
2081 |
ap_configfile_t *f = NULL; |
2097 |
ap_configfile_t *f = NULL; |
2082 |
cmd_parms parms; |
2098 |
cmd_parms parms; |
2083 |
char *filename = NULL; |
2099 |
const char *filename; |
2084 |
const struct htaccess_result *cache; |
2100 |
const struct htaccess_result *cache; |
2085 |
struct htaccess_result *new; |
2101 |
struct htaccess_result *new; |
2086 |
ap_conf_vector_t *dc = NULL; |
2102 |
ap_conf_vector_t *dc = NULL; |
Lines 2104-2118
Link Here
|
2104 |
parms.path = apr_pstrdup(r->pool, d); |
2120 |
parms.path = apr_pstrdup(r->pool, d); |
2105 |
|
2121 |
|
2106 |
/* loop through the access names and find the first one */ |
2122 |
/* loop through the access names and find the first one */ |
2107 |
while (access_name[0]) { |
2123 |
while (access_names[0]) { |
2108 |
/* AFAICT; there is no use of the actual 'filename' against |
2124 |
const char *access_name = ap_getword_conf(r->pool, &access_names); |
2109 |
* any canonicalization, so we will simply take the given |
2125 |
|
2110 |
* name, ignoring case sensitivity and aliases |
2126 |
filename = NULL; |
2111 |
*/ |
2127 |
status = ap_run_open_htaccess(r, d, access_name, &f, &filename); |
2112 |
filename = ap_make_full_path(r->pool, d, |
|
|
2113 |
ap_getword_conf(r->pool, &access_name)); |
2114 |
status = ap_pcfg_openfile(&f, r->pool, filename); |
2115 |
|
2116 |
if (status == APR_SUCCESS) { |
2128 |
if (status == APR_SUCCESS) { |
2117 |
const char *errmsg; |
2129 |
const char *errmsg; |
2118 |
ap_directive_t *temptree = NULL; |
2130 |
ap_directive_t *temptree = NULL; |