]> granicus.if.org Git - apache/commitdiff
* mod_dav.c (dav_handle_err): look through the error stack for some
authorGreg Stein <gstein@apache.org>
Fri, 8 Mar 2002 01:22:20 +0000 (01:22 +0000)
committerGreg Stein <gstein@apache.org>
Fri, 8 Mar 2002 01:22:20 +0000 (01:22 +0000)
    kind of errortag.  any buried errortag is better than a generic
    response.

Submitted by: Ben Collins-Sussman <sussman@collab.net>

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

modules/dav/main/mod_dav.c

index 4e3894ce5553c0b0bbce2f9d2b1b77ece0ccf920..020f87181954d4097d78339cbf4b4fc13ffdb5bf 100644 (file)
@@ -593,14 +593,19 @@ static int dav_handle_err(request_rec *r, dav_error *err,
     dav_log_err(r, err, APLOG_ERR);
 
     if (response == NULL) {
+        dav_error *stackerr = err;
+
         /* our error messages are safe; tell Apache this */
         apr_table_setn(r->notes, "verbose-error-to", "*");
 
-        /* didn't get a multistatus response passed in, but we still
-           might be able to generate a standard <D:error> response. */
-        if (err->tagname) {
-            return dav_error_response_tag(r, err);
-        }
+        /* Didn't get a multistatus response passed in, but we still
+           might be able to generate a standard <D:error> response.
+           Search the error stack for an errortag. */
+        while (stackerr != NULL && stackerr->tagname == NULL)
+            stackerr = stackerr->prev;
+
+        if (stackerr != NULL && stackerr->tagname != NULL)
+            return dav_error_response_tag(r, stackerr);
 
         return err->status;
     }