-1 veto

This change is not compliant with RFC 9110.

If Tomcat sends METHOD_NOT_ALLOWED it MUST also send an Allow header.

That is why the default servlet has a dedicated method for sending METHOD_NOT_ALLOWED.

Further comments in-line.

Mark

On 02/10/2024 10:07, micha...@apache.org wrote:
This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
      new 142c45a427 BZ 69360: Inconsistent DELETE behavior between 
DefaultServlet and WebdavServlet
142c45a427 is described below

commit 142c45a4271e1fd8d400196a883fb560ebded110
Author: Michael Osipov <micha...@apache.org>
AuthorDate: Wed Oct 2 11:04:44 2024 +0200

     BZ 69360: Inconsistent DELETE behavior between DefaultServlet and 
WebdavServlet
---
  java/org/apache/catalina/servlets/WebdavServlet.java | 6 +++---
  webapps/docs/changelog.xml                           | 5 +++++
  2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java 
b/java/org/apache/catalina/servlets/WebdavServlet.java
index d32868a9b3..c2cf8f3d78 100644
--- a/java/org/apache/catalina/servlets/WebdavServlet.java
+++ b/java/org/apache/catalina/servlets/WebdavServlet.java
@@ -1696,7 +1696,7 @@ public class WebdavServlet extends DefaultServlet 
implements PeriodicEventListen
if (!resource.isDirectory()) {
              if (!resource.delete()) {
-                resp.sendError(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
+                resp.sendError(WebdavStatus.SC_METHOD_NOT_ALLOWED);

May be able to utilise sendNotAllowed() for this one. Thinking about it probably not as WebDAV has additional methods that need to be taken account of. It will need a dedicated method for WebDAV.

                  return false;
              }
          } else {
@@ -1705,7 +1705,7 @@ public class WebdavServlet extends DefaultServlet 
implements PeriodicEventListen
deleteCollection(req, path, errorList);
              if (!resource.delete()) {
-                errorList.put(path, 
Integer.valueOf(WebdavStatus.SC_INTERNAL_SERVER_ERROR));
+                errorList.put(path, 
Integer.valueOf(WebdavStatus.SC_METHOD_NOT_ALLOWED));

This is going to be part of a multi-status response. The allow header doesn't make sense for a multi-status response. There I think this is OK.

              }
if (!errorList.isEmpty()) {
@@ -1772,7 +1772,7 @@ public class WebdavServlet extends DefaultServlet 
implements PeriodicEventListen
                      if (!childResource.isDirectory()) {
                          // If it's not a collection, then it's an unknown
                          // error
-                        errorList.put(childName, 
Integer.valueOf(WebdavStatus.SC_INTERNAL_SERVER_ERROR));
+                        errorList.put(childName, 
Integer.valueOf(WebdavStatus.SC_METHOD_NOT_ALLOWED));

As above.


                      }
                  }
              }

Generally, SC_METHOD_NOT_ALLOWED is probably the right status code as the most likely failure mode is a lack of permissions. I just wonder if there are circumstances where we would want to return SC_INTERNAL_SERVER_ERROR and how we would determine if that were the case.

Mark


diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index ca652cd604..f4eb84d1b4 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -128,6 +128,11 @@
          <code>getRelativePath()</code> method from super class with
          incorrect Javadoc. (michaelo)
        </fix>
+      <fix>
+        <bug>69360</bug>: Inconsistent <code>DELETE</code> behavior between
+        <code>WebdavServlet</code> and <code>DefaultServlet</code>.
+        (michaelo)
+      </fix>
      </changelog>
    </subsection>
    <subsection name="Coyote">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to