*** apache_1.3.4/src/modules/standard/mod_headers.c	Fri Jan  1 19:05:09 1999
--- apache_1.3.4/src/modules/standard/mod_headers.c	Tue Apr 20 13:17:50 1999
***************
*** 115,120 ****
--- 115,121 ----
      hdr_actions action;
      char *header;
      char *value;
+     int on_req;
  } header_entry;
  
  /*
***************
*** 168,173 ****
--- 169,181 ----
          new = (header_entry *) ap_push_array(serverconf->headers);
      }
  
+     if (!strcasecmp(cmd->cmd->name,"HeaderRequest")) {
+         new->on_req=1;
+     }
+     else {
+         new->on_req=0;
+     }
+ 
      if (!strcasecmp(action, "set"))
          new->action = hdr_set;
      else if (!strcasecmp(action, "add"))
***************
*** 199,225 ****
  {
      {"Header", header_cmd, NULL, OR_FILEINFO, TAKE23,
       "an action, header and value"},
      {NULL}
  };
  
  static void do_headers_fixup(request_rec *r, array_header *headers)
  {
      int i;
  
      for (i = 0; i < headers->nelts; ++i) {
          header_entry *hdr = &((header_entry *) (headers->elts))[i];
          switch (hdr->action) {
          case hdr_add:
!             ap_table_addn(r->headers_out, hdr->header, hdr->value);
              break;
          case hdr_append:
!             ap_table_mergen(r->headers_out, hdr->header, hdr->value);
              break;
          case hdr_set:
!             ap_table_setn(r->headers_out, hdr->header, hdr->value);
              break;
          case hdr_unset:
!             ap_table_unset(r->headers_out, hdr->header);
              break;
          }
      }
--- 207,237 ----
  {
      {"Header", header_cmd, NULL, OR_FILEINFO, TAKE23,
       "an action, header and value"},
+     {"HeaderRequest", header_cmd, NULL, OR_FILEINFO, TAKE23,
+      "an action, header and value"},
      {NULL}
  };
  
  static void do_headers_fixup(request_rec *r, array_header *headers)
  {
      int i;
+     table *h_table;
  
      for (i = 0; i < headers->nelts; ++i) {
          header_entry *hdr = &((header_entry *) (headers->elts))[i];
+ 	h_table = hdr->on_req ? r->headers_in : r->headers_out;
          switch (hdr->action) {
          case hdr_add:
!             ap_table_addn(h_table, hdr->header, hdr->value);
              break;
          case hdr_append:
!             ap_table_mergen(h_table, hdr->header, hdr->value);
              break;
          case hdr_set:
!             ap_table_setn(h_table, hdr->header, hdr->value);
              break;
          case hdr_unset:
!             ap_table_unset(h_table, hdr->header);
              break;
          }
      }
