]> granicus.if.org Git - apache/commitdiff
Unify syntax of config directives taking an expression as optional contition argument
authorStefan Fritsch <sf@apache.org>
Fri, 4 Nov 2011 07:27:07 +0000 (07:27 +0000)
committerStefan Fritsch <sf@apache.org>
Fri, 4 Nov 2011 07:27:07 +0000 (07:27 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1197413 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/mod_headers.xml
docs/manual/mod/mod_log_config.xml
docs/manual/mod/mod_log_debug.xml
modules/loggers/mod_log_debug.c
modules/metadata/mod_headers.c

diff --git a/CHANGES b/CHANGES
index 009b56d2fcc1a9811905f84313035ff32b995b01..8e02fb298b05d32c6628d98567069a34ea04ae51 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,12 @@ Changes with Apache 2.3.15
      PR 51714. [Stefan Fritsch, Jim Jagielski, Ruediger Pluem, Eric Covener,
      <lowprio20 gmail.com>]
 
+  *) mod_log_debug: Rename optional argument from if= to expr=, to be more
+     in line with other config directives. [Stefan Fritsch]
+
+  *) mod_headers: Require an expression to be specified with expr=, to be more
+     in line with other config directives. [Stefan Fritsch]
+
   *) mod_substitute: To prevent overboarding memory usage, limit line length
      to 1MB. [Stefan Fritsch]
 
index 837573939bb3b57aa85c2452866d141c2e1ead17..9c80f74921347d89880e16868221e538354dc9a6 100644 (file)
@@ -184,7 +184,7 @@ headers</description>
       <li>
         Set a test cookie if and only if the client didn't send us a cookie
         <example>
-          Header set Set-Cookie testcookie !$req{Cookie}
+          Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"
         </example>
       </li>
     </ol>
@@ -273,15 +273,15 @@ headers</description>
     <dl>
     <dt><code>early</code></dt>
     <dd>Specifies <a href="#early">early processing</a>.</dd>
-    <dt><code>env=[!]varname</code></dt>
+    <dt><code>env=[!]<var>varname</var></code></dt>
     <dd>The directive is applied if and only if the <a href="../env.html"
         >environment variable</a> <code>varname</code> exists.
         A <code>!</code> in front of <code>varname</code> reverses the test,
         so the directive applies only if <code>varname</code> is unset.</dd>
-    <dt><code>expr</code></dt>
-    <dd>An string that matches neither of the above is parsed as an
-        expression.  Details of expression syntax and evaluation are
-        currently best documented on the <module>mod_filter</module> page.</dd>
+    <dt><code>expr=<var>expression</var></code></dt>
+    <dd>The directive is applied if and only if <var>expression</var>
+        evaluates to true. Details of expression syntax and evaluation are
+        documented in the <a href="../expr.html">ap_expr</a> documentation.</dd>
     </dl>
 
     <p>Except in <a href="#early">early</a> mode, the
@@ -447,15 +447,15 @@ headers</description>
     <dl>
     <dt><code>early</code></dt>
     <dd>Specifies <a href="#early">early processing</a>.</dd>
-    <dt><code>env=[!]varname</code></dt>
+    <dt><code>env=[!]<var>varname</var></code></dt>
     <dd>The directive is applied if and only if the <a href="../env.html"
         >environment variable</a> <code>varname</code> exists.
         A <code>!</code> in front of <code>varname</code> reverses the test,
         so the directive applies only if <code>varname</code> is unset.</dd>
-    <dt><code>expr</code></dt>
-    <dd>An string that matches neither of the above is parsed as an
-        expression.  Details of expression syntax and evaluation are
-        currently best documented on the <module>mod_filter</module> page.</dd>
+    <dt><code>expr=<var>expression</var></code></dt>
+    <dd>The directive is applied if and only if <var>expression</var>
+        evaluates to true. Details of expression syntax and evaluation are
+        documented in the <a href="../expr.html">ap_expr</a> documentation.</dd>
     </dl>
 
     <p>Except in <a href="#early">early</a> mode, the
index c7d260588b83f89e371bbf4c5a716d6f1bc298b5..1943d5c2660d41fd4bd0b5bf0d874a5680b22975 100644 (file)
 <description>Sets filename and format of log file</description>
 <syntax>CustomLog  <var>file</var>|<var>pipe</var>
 <var>format</var>|<var>nickname</var>
-[env=[!]<var>environment-variable</var>]</syntax>
+[env=[!]<var>environment-variable</var>|
+expr=<var>expression</var>]</syntax>
 <contextlist><context>server config</context><context>virtual host</context>
 </contextlist>
 
     </example>
 
     <p>The third argument is optional and controls whether or
-    not to log a particular request based on the
-    presence or absence of a particular variable in the server
-    environment. If the specified <a href="../env.html">environment
-    variable</a> is set for the request (or is not set, in the case
-    of a '<code>env=!<var>name</var></code>' clause), then the
-    request will be logged.</p>
+    not to log a particular request. The condition can be the
+    presence or absence (in the case of a '<code>env=!<var>name</var></code>'
+    clause) of a particular variable in the server
+    <a href="../env.html">environment</a>. Alternatively, the condition
+    can be expressed as arbitrary boolean <a href="../expr.html"
+    >expression</a>. If the condition is not satisfied, the request
+    will not be logged.</p>
 
     <p>Environment variables can be set on a per-request
     basis using the <module>mod_setenvif</module>
index 3231a03f387e3cbaa839c72ae31dcd64443fdff7..316346d90f571636f2e98f922e9d3bcbb2b4fabf 100644 (file)
@@ -46,7 +46,7 @@
         Log message if request to /foo/* is processed in a sub-request:
         <example>
             &lt;Location /foo/&gt;<br/>
-            &nbsp;&nbsp;LogMessage "subrequest to /foo/" hook=type_checker if=%{IS_SUBREQ}<br/>
+            &nbsp;&nbsp;LogMessage "subrequest to /foo/" hook=type_checker expr=%{IS_SUBREQ}<br/>
             &lt;/Location&gt;<br/>
         </example>
 
@@ -59,9 +59,9 @@
         Log message if an IPv6 client causes a request timeout:
         <example>
             LogMessage "IPv6 timeout from %{REMOTE_ADDR}"
-              "if=-T %{IPV6} &amp;&amp; %{REQUEST_STATUS} = 408"
+              "expr=-T %{IPV6} &amp;&amp; %{REQUEST_STATUS} = 408"
         </example>
-        Note the placing of the double quotes for the <code>if=</code> argument.
+        Note the placing of the double quotes for the <code>expr=</code> argument.
       </li>
 
       <li>
@@ -85,7 +85,7 @@
 <description>Log userdefined message to error log
 </description>
 <syntax>LogMessage <var>message</var>
-[hook=<var>hook</var>] [if=<var>expression</var>]
+[hook=<var>hook</var>] [expr=<var>expression</var>]
 </syntax>
 <default>Unset</default>
 <contextlist><context>directory</context>
index 2c6b6f2909fbcd08921584797a3c60bce996c8ba..4ccf9c916f8505200c4a4d000eae73fda8ec4c5d 100644 (file)
@@ -221,8 +221,8 @@ static const char *cmd_log_message(cmd_parms *cmd, void *dconf_, const char *arg
                     return apr_psprintf(cmd->pool, "Invalid hook name: %s", name);
             }
         }
-        else if (strncasecmp(args[i], "if=", 3) == 0) {
-            const char *expr = args[i] + 3;
+        else if (strncasecmp(args[i], "expr=", 5) == 0) {
+            const char *expr = args[i] + 5;
             entry->condition = ap_expr_parse_cmd(cmd, expr,
                                                  AP_EXPR_FLAG_DONT_VARY,
                                                  &err, NULL);
index 52102f2296fd84301cad2e12d567015a0d77031c..5debe8662e1e026a8960c87b6ae2e3718860a96e 100644 (file)
@@ -490,15 +490,19 @@ static APR_INLINE const char *header_inout_cmd(cmd_parms *cmd,
             }
             condition_var = envclause + 4;
         }
-        else {
+        else if (strncasecmp(envclause, "expr=", 5) == 0) {
             const char *err = NULL;
-            expr = ap_expr_parse_cmd(cmd, envclause, 0, &err, NULL);
+            expr = ap_expr_parse_cmd(cmd, envclause + 5, 0, &err, NULL);
             if (err) {
                 return apr_pstrcat(cmd->pool,
                                    "Can't parse envclause/expression: ", err,
                                    NULL);
             }
         }
+        else {
+            return apr_pstrcat(cmd->pool, "Unknown parameter: ", envclause,
+                               NULL);
+        }
     }
 
     if ((colon = ap_strchr_c(hdr, ':'))) {