Cliff Woolley wrote:
> On Mon, 5 Apr 2004, Geoffrey Young wrote:
> 
> 
>>  ErrorDocument 500 default
>>
>>in core httpd, allowing users to effectively restore the canned server
>>response for the scope of the current ErrorDocument.
>>
>>anyway, I'm just tossing the idea out there - if people like it I'll work up
>>a patch.  if not, no biggie.
> 
> 
> Seems reasonable to me; +1 on concept.

cool.

patch and self-contained test attached.

--Geoff
Index: server/core.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/core.c,v
retrieving revision 1.270
diff -u -r1.270 core.c
--- server/core.c	25 Mar 2004 14:27:27 -0000	1.270
+++ server/core.c	6 Apr 2004 04:07:23 -0000
@@ -271,9 +271,7 @@
                sizeof(*conf->response_code_strings) * RESPONSE_CODES);
 
         for (i = 0; i < RESPONSE_CODES; ++i) {
-            if (new->response_code_strings[i] != NULL) {
-                conf->response_code_strings[i] = new->response_code_strings[i];
-            }
+            conf->response_code_strings[i] = new->response_code_strings[i];
         }
     }
     /* Otherwise we simply use the base->response_code_strings array
@@ -1178,13 +1176,21 @@
                             RESPONSE_CODES);
         }
 
-        /* hack. Prefix a " if it is a msg; as that is what
-         * http_protocol.c relies on to distinguish between
-         * a msg and a (local) path.
-         */
-        conf->response_code_strings[index_number] = (what == MSG) ?
-                apr_pstrcat(cmd->pool, "\"",msg,NULL) :
-                apr_pstrdup(cmd->pool, msg);
+        if (strcmp(msg, "default") == 0) {
+            /* special case: ErrorDocument 404 default restores the
+             * canned server error response
+             */
+            conf->response_code_strings[index_number] = NULL;
+        }
+        else {
+            /* hack. Prefix a " if it is a msg; as that is what
+             * http_protocol.c relies on to distinguish between
+             * a msg and a (local) path.
+             */
+            conf->response_code_strings[index_number] = (what == MSG) ?
+                    apr_pstrcat(cmd->pool, "\"",msg,NULL) :
+                    apr_pstrdup(cmd->pool, msg);
+        }
     }
 
     return NULL;

Attachment: errordoc-restore.tar.gz
Description: GNU Zip compressed data

Reply via email to