]> granicus.if.org Git - apache/commitdiff
add "Header note" which was the solution for two users this week on IRC.
authorEric Covener <covener@apache.org>
Sun, 8 Sep 2013 20:04:06 +0000 (20:04 +0000)
committerEric Covener <covener@apache.org>
Sun, 8 Sep 2013 20:04:06 +0000 (20:04 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1520908 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/mod_headers.xml
modules/metadata/mod_headers.c

diff --git a/CHANGES b/CHANGES
index 6f3d2f98ac16e9d7258f44ebf138d65fa899bfdf..86f55881d9f1d8053aed0293c8ddaa945e0460f0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_headers: Add 'Header note header-name note-name' for copying a response
+     headers value into a note. [Eric Covener]
+
   *) WinNT MPM: Don't crash during child process initialization if the
      Listen protocol is unrecognized.  [Jeff Trawick]
 
@@ -80,10 +83,6 @@ Changes with Apache 2.5.0
   *) AIX: Install DSO's with "cp" instead of "install" in instdso.sh
      [Eric Covener]
 
-  *) mod_ldap: Retry transient LDAP connection errors when they occur 
-     during the authorization stage. 
-     [Eric Covener]
-
   *) mod_ldap: Don't keep retrying if a new LDAP connection times out.
      [Eric Covener]
 
index 774cadc4f62c1ad1057d3889a0877d5c0c2e89e7..68ba926adda8bd71d458154901d932572298ea0c 100644 (file)
@@ -300,7 +300,7 @@ Header merge Cache-Control no-store env=NO_STORE
 <directivesynopsis>
 <name>Header</name>
 <description>Configure HTTP response headers</description>
-<syntax>Header [<var>condition</var>] add|append|echo|edit|edit*|merge|set|unset
+<syntax>Header [<var>condition</var>] add|append|echo|edit|edit*|merge|set|unset|note
 <var>header</var> [<var>value</var>] [<var>replacement</var>]
 [early|env=[!]<var>variable</var>]|expr=<var>expression</var>]
 </syntax>
@@ -400,6 +400,13 @@ Header merge Cache-Control no-store env=NO_STORE
     <dd>The response header of this name is removed, if it exists.
     If there are multiple headers of the same name, all will be
     removed. <var>value</var> must be omitted.</dd>
+
+    <dt><code>note</code></dt>
+    <dd>The value of the named response <var>header</var> is copied into an
+    internal note whose name is given by <var>value</var>.  This is useful
+    if a header sent by a CGI or proxied resource is configured to be unset
+    but should also be logged.</dd>
+
     </dl>
 
     <p>This argument is followed by a <var>header</var> name, which
index 6c03e71839da9d9d413bb8d9f9b115da9a7afb9e..55cfb50a9bfac8b025b27a75ce2bf0bbeb13a566 100644 (file)
@@ -96,8 +96,9 @@ typedef enum {
     hdr_unset = 'u',            /* unset header */
     hdr_echo = 'e',             /* echo headers from request to response */
     hdr_edit = 'r',             /* change value by regexp, match once */
-    hdr_edit_r = 'R',            /* change value by regexp, everymatch */
-    hdr_setifempty = 'i'        /* set value if header not already present*/
+    hdr_edit_r = 'R',           /* change value by regexp, everymatch */
+    hdr_setifempty = 'i',       /* set value if header not already present*/
+    hdr_note = 'n'              /* set value of header in a note */
 } hdr_actions;
 
 /*
@@ -448,9 +449,11 @@ static APR_INLINE const char *header_inout_cmd(cmd_parms *cmd,
         new->action = hdr_edit;
     else if (!strcasecmp(action, "edit*"))
         new->action = hdr_edit_r;
+    else if (!strcasecmp(action, "note"))
+        new->action = hdr_note;
     else
         return "first argument must be 'add', 'set', 'setifempty', 'append', 'merge', "
-               "'unset', 'echo', 'edit', or 'edit*'.";
+               "'unset', 'echo', 'note', 'edit', or 'edit*'.";
 
     if (new->action == hdr_edit || new->action == hdr_edit_r) {
         if (subs == NULL) {
@@ -796,6 +799,10 @@ static int do_headers_fixup(request_rec *r, apr_table_t *headers,
                 apr_table_do(add_them_all, (void *) headers, ed.t, NULL);
             }
             break;
+        case hdr_note:
+            apr_table_setn(r->notes, process_tags(hdr, r), apr_table_get(headers, hdr->header));
+            break;
         }
     }
     return 1;