This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 22a5e178b3 Add support for shallow copies when using WebDAV
22a5e178b3 is described below
commit 22a5e178b3d9daed870d2d4f82dab242bc5eb3d2
Author: Mark Thomas <[email protected]>
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 9b8066ddd3..3a4390d3cd 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 10.1.25 (schultz)" 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: [email protected]
For additional commands, e-mail: [email protected]