This is an automated email from the ASF dual-hosted git repository. markt 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 4176706761 Add support for shallow copies when using WebDAV 4176706761 is described below commit 4176706761242851b14be303daf2a00ef385ee49 Author: Mark Thomas <ma...@apache.org> AuthorDate: Tue May 21 12:54:40 2024 +0100 Add support for shallow copies when using WebDAV --- .../apache/catalina/servlets/WebdavServlet.java | 31 +++++++++++++++++----- webapps/docs/changelog.xml | 7 +++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java b/java/org/apache/catalina/servlets/WebdavServlet.java index a489eb0e51..b1b67030af 100644 --- a/java/org/apache/catalina/servlets/WebdavServlet.java +++ b/java/org/apache/catalina/servlets/WebdavServlet.java @@ -1519,7 +1519,20 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen Map<String,Integer> errorList = new HashMap<>(); - boolean result = copyResource(errorList, path, destinationPath); + boolean infiniteCopy = true; + String depthHeader = req.getHeader("Depth"); + if (depthHeader != null) { + if (depthHeader.equals("infinity")) { + // NO-OP - this is the default + } else if (depthHeader.equals("0")) { + infiniteCopy = false; + } else { + resp.sendError(WebdavStatus.SC_BAD_REQUEST); + return false; + } + } + + boolean result = copyResource(errorList, path, destinationPath, infiniteCopy); if ((!result) || (!errorList.isEmpty())) { if (errorList.size() == 1) { @@ -1548,16 +1561,18 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen /** * Copy a collection. * - * @param errorList Map containing the list of errors which occurred during the copy operation - * @param source Path of the resource to be copied - * @param dest Destination path + * @param errorList Map containing the list of errors which occurred during the copy operation + * @param source Path of the resource to be copied + * @param dest Destination path + * @param infiniteCopy {@code true} if this copy is to be an infinite copy, otherwise {@code false} for a shallow + * copy * * @return <code>true</code> if the copy was successful */ - private boolean copyResource(Map<String,Integer> errorList, String source, String dest) { + private boolean copyResource(Map<String,Integer> errorList, String source, String dest, boolean infiniteCopy) { if (debug > 1) { - log("Copy: " + source + " To: " + dest); + log("Copy: " + source + " To: " + dest + " Infinite: " + infiniteCopy); } WebResource sourceResource = resources.getResource(source); @@ -1583,7 +1598,9 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen childSrc += "/"; } childSrc += entry; - copyResource(errorList, childSrc, childDest); + if (infiniteCopy) { + copyResource(errorList, childSrc, childDest, true); + } } } else if (sourceResource.isFile()) { WebResource destResource = resources.getResource(dest); diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 777667c181..aa3966382c 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -105,6 +105,13 @@ issues do not "pop up" wrt. others). --> <section name="Tomcat 11.0.0-M21 (markt)" rtext="in development"> + <subsection name="Catalina"> + <changelog> + <add> + Add support for shallow copies when using WebDAV. (markt) + </add> + </changelog> + </subsection> <subsection name="Coyote"> <changelog> <fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org