вт, 21 мая 2024 г. в 14:55, <ma...@apache.org>:
>
> 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);
> +                }
>              }

I think that the "if (infiniteCopy)" block here is too narrow.

The whole loop over children (starting with "String[] entries =
resources.list(source)") here is useless when the infiniteCopy option
is false.

>          } else if (sourceResource.isFile()) {
>              WebResource destResource = resources.getResource(dest);
> diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml

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

Reply via email to