]> granicus.if.org Git - apache/commitdiff
Block Define/Undefine from per-directory context, because they will
authorEric Covener <covener@apache.org>
Fri, 30 Jan 2015 17:17:12 +0000 (17:17 +0000)
committerEric Covener <covener@apache.org>
Fri, 30 Jan 2015 17:17:12 +0000 (17:17 +0000)
fire while the block is read not when it evaluates for a given
request.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1656063 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/core.xml
server/core.c

diff --git a/CHANGES b/CHANGES
index 04bf2b5a7688b7f242a71a4fed2e06eea863da64..c1f0270e959d1d346e424eaad0757e67ea57299d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,11 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) core: Define and UnDefine are no longer permitted in
+     directory context. Previously they would always be evaulated
+     as the configuration was read without regard for the directory
+     context. [Eric Covener]
+
   *) config: For directives that do not expect any arguments, enforce
      that none are specified in the configuration file. 
      [Joachim Zobel <jzobel heute-morgen.de>, Eric Covener]
index 324d1c5f79afdf6ca348d97939d03ef69115e72a..2f1c51970e94434d99db637ed8e8de24ce7483f2 100644 (file)
@@ -717,7 +717,7 @@ which no other media type configuration could be found.
 <description>Define a variable</description>
 <syntax>Define <var>parameter-name</var> [<var>parameter-value</var>]</syntax>
 <contextlist><context>server config</context><context>virtual host</context>
-<context>directory</context></contextlist>
+</contextlist>
 
 <usage>
     <p>In its one parameter form, <directive>Define</directive> is equivalent
@@ -746,6 +746,10 @@ DocumentRoot /var/www/${servername}/htdocs
 
     <p>Variable names may not contain colon ":" characters, to avoid clashes
     with <directive module="mod_rewrite">RewriteMap</directive>'s syntax.</p>
+
+    <p>While this directive is supported in virtual host context,
+       the changes it makes are visible to any later configuration
+       directives, beyond any enclosing virtual host</p>
 </usage>
 </directivesynopsis>
 
@@ -4291,7 +4295,8 @@ certain events before failing a request</description>
 <name>UnDefine</name>
 <description>Undefine the existence of a variable</description>
 <syntax>UnDefine <var>parameter-name</var></syntax>
-<contextlist><context>server config</context></contextlist>
+<contextlist><context>server config</context>
+<context>virtual host</context></contextlist>
 
 <usage>
     <p>Undoes the effect of a <directive module="core">Define</directive> or
@@ -4299,6 +4304,9 @@ certain events before failing a request</description>
     <p>This directive can be used to toggle the use of <directive module="core"
     type="section">IfDefine</directive> sections without needing to alter
     <code>-D</code> arguments in any startup scripts.</p>
+    <p>While this directive is supported in virtual host context,
+       the changes it makes are visible to any later configuration
+       directives, beyond any enclosing virtual host</p>
 </usage>
 </directivesynopsis>
 
index 2cad01bbc62eb54d7641c433cf8159fbc672f8ea..6092e1e7ce569f29048feee64832445533acc390 100644 (file)
@@ -1332,9 +1332,10 @@ static void init_config_defines(apr_pool_t *pconf)
 static const char *set_define(cmd_parms *cmd, void *dummy,
                               const char *name, const char *value)
 {
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_HTACCESS);
-    if (err)
-        return err;
+    if (cmd->parent && strcasecmp(cmd->parent->directive, "<VirtualHost")) { 
+        return apr_pstrcat(cmd->pool, "Define is not valid in ", cmd->parent->directive, " context", NULL);
+    }
+
     if (ap_strchr_c(name, ':') != NULL)
         return "Variable name must not contain ':'";
 
@@ -1358,9 +1359,10 @@ static const char *unset_define(cmd_parms *cmd, void *dummy,
 {
     int i;
     char **defines;
-    const char *err = ap_check_cmd_context(cmd, NOT_IN_HTACCESS);
-    if (err)
-        return err;
+    if (cmd->parent && strcasecmp(cmd->parent->directive, "<VirtualHost")) { 
+        return apr_pstrcat(cmd->pool, "Define is not valid in ", cmd->parent->directive, " context", NULL);
+    }
+
     if (ap_strchr_c(name, ':') != NULL)
         return "Variable name must not contain ':'";
 
@@ -4181,9 +4183,9 @@ AP_INIT_TAKE1("AddDefaultCharset", set_add_default_charset, NULL, OR_FILEINFO,
   "The name of the default charset to add to any Content-Type without one or 'Off' to disable"),
 AP_INIT_TAKE1("AcceptPathInfo", set_accept_path_info, NULL, OR_FILEINFO,
   "Set to on or off for PATH_INFO to be accepted by handlers, or default for the per-handler preference"),
-AP_INIT_TAKE12("Define", set_define, NULL, EXEC_ON_READ|ACCESS_CONF|RSRC_CONF,
+AP_INIT_TAKE12("Define", set_define, NULL, EXEC_ON_READ|RSRC_CONF,
               "Define a variable, optionally to a value.  Same as passing -D to the command line."),
-AP_INIT_TAKE1("UnDefine", unset_define, NULL, EXEC_ON_READ|ACCESS_CONF|RSRC_CONF,
+AP_INIT_TAKE1("UnDefine", unset_define, NULL, EXEC_ON_READ|RSRC_CONF,
               "Undefine the existence of a variable. Undo a Define."),
 AP_INIT_RAW_ARGS("Error", generate_message, (void*) APLOG_ERR, OR_ALL,
                  "Generate error message from within configuration."),