mirror of
https://github.com/apache/httpd.git
synced 2025-07-29 09:01:18 +03:00
Add a "MATCH_" prefix to variables set within
LocationMatch/DirectoryMatch/FilesMatch. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1555266 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -887,15 +887,15 @@ the contents of file-system directories matching a regular expression.</descript
|
|||||||
</note>
|
</note>
|
||||||
|
|
||||||
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
||||||
written to the environment with the corresponding name in upper case.
|
written to the environment with the corresponding name prefixed with
|
||||||
This allows elements of paths to be referenced from within
|
"MATCH_" and in upper case. This allows elements of paths to be referenced
|
||||||
<a href="expr.html">expressions</a> and modules like
|
from within <a href="expr.html">expressions</a> and modules like
|
||||||
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
||||||
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
||||||
|
|
||||||
<highlight language="config">
|
<highlight language="config">
|
||||||
<DirectoryMatch ^/var/www/combined/(?<SITENAME>[^/]+)>
|
<DirectoryMatch ^/var/www/combined/(?<sitename>[^/]+)>
|
||||||
require ldap-group cn=%{env:SITENAME},ou=combined,o=Example
|
require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
|
||||||
</DirectoryMatch>
|
</DirectoryMatch>
|
||||||
</highlight>
|
</highlight>
|
||||||
</usage>
|
</usage>
|
||||||
@ -1750,15 +1750,15 @@ filenames</description>
|
|||||||
<p>would match most common Internet graphics formats.</p>
|
<p>would match most common Internet graphics formats.</p>
|
||||||
|
|
||||||
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
||||||
written to the environment with the corresponding name in upper case.
|
written to the environment with the corresponding name prefixed with
|
||||||
This allows elements of files to be referenced from within
|
"MATCH_" and in upper case. This allows elements of files to be referenced
|
||||||
<a href="expr.html">expressions</a> and modules like
|
from within <a href="expr.html">expressions</a> and modules like
|
||||||
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
||||||
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
||||||
|
|
||||||
<highlight language="config">
|
<highlight language="config">
|
||||||
<FileMatch ^(?<SITENAME>[^/]+)>
|
<FileMatch ^(?<sitename>[^/]+)>
|
||||||
require ldap-group cn=%{env:SITENAME},ou=combined,o=Example
|
require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
|
||||||
</FileMatch>
|
</FileMatch>
|
||||||
</highlight>
|
</highlight>
|
||||||
</usage>
|
</usage>
|
||||||
@ -2716,15 +2716,15 @@ matching URLs</description>
|
|||||||
or <code>/special/data</code>.</p>
|
or <code>/special/data</code>.</p>
|
||||||
|
|
||||||
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
||||||
written to the environment with the corresponding name in upper case.
|
written to the environment with the corresponding name prefixed with
|
||||||
This allows elements of URLs to be referenced from within
|
"MATCH_" and in upper case. This allows elements of URLs to be referenced
|
||||||
<a href="expr.html">expressions</a> and modules like
|
from within <a href="expr.html">expressions</a> and modules like
|
||||||
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
||||||
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
||||||
|
|
||||||
<highlight language="config">
|
<highlight language="config">
|
||||||
<LocationMatch ^/combined/(?<SITENAME>[^/]+)>
|
<LocationMatch ^/combined/(?<sitename>[^/]+)>
|
||||||
require ldap-group cn=%{env:SITENAME},ou=combined,o=Example
|
require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
|
||||||
</LocationMatch>
|
</LocationMatch>
|
||||||
</highlight>
|
</highlight>
|
||||||
</usage>
|
</usage>
|
||||||
|
@ -530,15 +530,15 @@ proxied resources</description>
|
|||||||
using <glossary ref="regex">regular expressions</glossary>.</p>
|
using <glossary ref="regex">regular expressions</glossary>.</p>
|
||||||
|
|
||||||
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
<p>From 2.5.0 onwards, named groups and backreferences are captured and
|
||||||
written to the environment with the corresponding name in upper case.
|
written to the environment with the corresponding name prefixed with
|
||||||
This allows elements of URLs to be referenced from within
|
"MATCH_" and in upper case. This allows elements of URLs to be referenced
|
||||||
<a href="expr.html">expressions</a> and modules like
|
from within <a href="expr.html">expressions</a> and modules like
|
||||||
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
<module>mod_rewrite</module>. In order to prevent confusion, numbered
|
||||||
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
(unnamed) backreferences are ignored. Use named groups instead.</p>
|
||||||
|
|
||||||
<highlight language="config">
|
<highlight language="config">
|
||||||
<ProxyMatch ^http://(?<SITENAME>[^/]+)>
|
<ProxyMatch ^http://(?<sitename>[^/]+)>
|
||||||
require ldap-group cn=%{env:SITENAME},ou=combined,o=Example
|
require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
|
||||||
</ProxyMatch>
|
</ProxyMatch>
|
||||||
</highlight>
|
</highlight>
|
||||||
</usage>
|
</usage>
|
||||||
|
@ -77,6 +77,8 @@ extern "C" {
|
|||||||
#define AP_REG_NOMEM 0x20 /* nomem in our code */
|
#define AP_REG_NOMEM 0x20 /* nomem in our code */
|
||||||
#define AP_REG_DOTALL 0x40 /* perl's /s flag */
|
#define AP_REG_DOTALL 0x40 /* perl's /s flag */
|
||||||
|
|
||||||
|
#define AP_REG_MATCH "MATCH_" /** suggested prefix for ap_regname */
|
||||||
|
|
||||||
/* Error values: */
|
/* Error values: */
|
||||||
enum {
|
enum {
|
||||||
AP_REG_ASSERT = 1, /** internal error ? */
|
AP_REG_ASSERT = 1, /** internal error ? */
|
||||||
@ -156,7 +158,8 @@ AP_DECLARE(apr_size_t) ap_regerror(int errcode, const ap_regex_t *preg,
|
|||||||
* @param upper If non zero, uppercase the names
|
* @param upper If non zero, uppercase the names
|
||||||
*/
|
*/
|
||||||
AP_DECLARE(int) ap_regname(const ap_regex_t *preg,
|
AP_DECLARE(int) ap_regname(const ap_regex_t *preg,
|
||||||
apr_array_header_t *names, int upper);
|
apr_array_header_t *names, const char *prefix,
|
||||||
|
int upper);
|
||||||
|
|
||||||
/** Destroy a pre-compiled regex.
|
/** Destroy a pre-compiled regex.
|
||||||
* @param preg The pre-compiled regex to free.
|
* @param preg The pre-compiled regex to free.
|
||||||
|
@ -2275,7 +2275,7 @@ static const char *proxysection(cmd_parms *cmd, void *mconfig, const char *arg)
|
|||||||
|
|
||||||
if (r) {
|
if (r) {
|
||||||
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
||||||
ap_regname(r, conf->refs, 1);
|
ap_regname(r, conf->refs, AP_REG_MATCH, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ap_add_per_proxy_conf(cmd->server, new_dir_conf);
|
ap_add_per_proxy_conf(cmd->server, new_dir_conf);
|
||||||
|
@ -2223,7 +2223,7 @@ static const char *dirsection(cmd_parms *cmd, void *mconfig, const char *arg)
|
|||||||
|
|
||||||
if (r) {
|
if (r) {
|
||||||
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
||||||
ap_regname(r, conf->refs, 1);
|
ap_regname(r, conf->refs, AP_REG_MATCH, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make this explicit - the "/" root has 0 elements, that is, we
|
/* Make this explicit - the "/" root has 0 elements, that is, we
|
||||||
@ -2304,7 +2304,7 @@ static const char *urlsection(cmd_parms *cmd, void *mconfig, const char *arg)
|
|||||||
|
|
||||||
if (r) {
|
if (r) {
|
||||||
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
||||||
ap_regname(r, conf->refs, 1);
|
ap_regname(r, conf->refs, AP_REG_MATCH, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ap_add_per_url_conf(cmd->server, new_url_conf);
|
ap_add_per_url_conf(cmd->server, new_url_conf);
|
||||||
@ -2391,7 +2391,7 @@ static const char *filesection(cmd_parms *cmd, void *mconfig, const char *arg)
|
|||||||
|
|
||||||
if (r) {
|
if (r) {
|
||||||
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
conf->refs = apr_array_make(cmd->pool, 8, sizeof(char *));
|
||||||
ap_regname(r, conf->refs, 1);
|
ap_regname(r, conf->refs, AP_REG_MATCH, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ap_add_file_conf(cmd->pool, (core_dir_config *)mconfig, new_file_conf);
|
ap_add_file_conf(cmd->pool, (core_dir_config *)mconfig, new_file_conf);
|
||||||
|
@ -258,7 +258,8 @@ AP_DECLARE(int) ap_regexec_len(const ap_regex_t *preg, const char *buff,
|
|||||||
}
|
}
|
||||||
|
|
||||||
AP_DECLARE(int) ap_regname(const ap_regex_t *preg,
|
AP_DECLARE(int) ap_regname(const ap_regex_t *preg,
|
||||||
apr_array_header_t *names, int upper)
|
apr_array_header_t *names, const char *prefix,
|
||||||
|
int upper)
|
||||||
{
|
{
|
||||||
int namecount;
|
int namecount;
|
||||||
int nameentrysize;
|
int nameentrysize;
|
||||||
@ -278,10 +279,14 @@ AP_DECLARE(int) ap_regname(const ap_regex_t *preg,
|
|||||||
while (names->nelts <= capture) {
|
while (names->nelts <= capture) {
|
||||||
apr_array_push(names);
|
apr_array_push(names);
|
||||||
}
|
}
|
||||||
if (upper) {
|
if (upper || prefix) {
|
||||||
char *name = ((char **)names->elts)[capture] =
|
char *name = ((char **) names->elts)[capture] =
|
||||||
apr_pstrdup(names->pool, offset + 2);
|
prefix ? apr_pstrcat(names->pool, prefix, offset + 2,
|
||||||
ap_str_toupper(name);
|
NULL) :
|
||||||
|
apr_pstrdup(names->pool, offset + 2);
|
||||||
|
if (upper) {
|
||||||
|
ap_str_toupper(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
((const char **)names->elts)[capture] = offset + 2;
|
((const char **)names->elts)[capture] = offset + 2;
|
||||||
|
Reference in New Issue
Block a user