This is an automated email from the ASF dual-hosted git repository. remm 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 2363c3fa64 Harmonize 2363c3fa64 is described below commit 2363c3fa649d9b6e569946679d575184d3b07b30 Author: remm <r...@apache.org> AuthorDate: Mon Oct 14 11:11:50 2024 +0200 Harmonize Avoid getting the relative path multiple times. Reuse the isLocked code more. Remove lock check from doDelete since deleteResource does it. --- .../apache/catalina/servlets/WebdavServlet.java | 71 ++++++++++------------ 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java b/java/org/apache/catalina/servlets/WebdavServlet.java index dcf7aee188..bead3cdc38 100644 --- a/java/org/apache/catalina/servlets/WebdavServlet.java +++ b/java/org/apache/catalina/servlets/WebdavServlet.java @@ -684,7 +684,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { + if (isLocked(null, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } @@ -720,7 +720,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { + if (isLocked(path, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } @@ -759,24 +759,22 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { - resp.sendError(WebdavStatus.SC_LOCKED); - return; - } + String path = getRelativePath(req); - deleteResource(req, resp); + deleteResource(path, req, resp); } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (isLocked(req)) { + String path = getRelativePath(req); + + if (isLocked(path, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } - String path = getRelativePath(req); WebResource resource = resources.getResource(path); if (resource.isDirectory()) { sendNotAllowed(req, resp); @@ -805,7 +803,9 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - copyResource(req, resp); + String path = getRelativePath(req); + + copyResource(path, req, resp); } @@ -824,14 +824,14 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { + String path = getRelativePath(req); + + if (isLocked(path, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } - String path = getRelativePath(req); - - if (copyResource(req, resp)) { + if (copyResource(path, req, resp)) { deleteResource(path, req, resp, false); } } @@ -853,7 +853,9 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { + String path = getRelativePath(req); + + if (isLocked(path, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } @@ -1042,8 +1044,6 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen } } - String path = getRelativePath(req); - lock.path = path; WebResource resource = resources.getResource(path); @@ -1257,13 +1257,13 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { + String path = getRelativePath(req); + + if (isLocked(path, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } - String path = getRelativePath(req); - String lockTokenHeader = req.getHeader("Lock-Token"); if (lockTokenHeader == null) { lockTokenHeader = ""; @@ -1322,14 +1322,17 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen * Check to see if a resource is currently write locked. The method will look at the "If" header to make sure the * client has give the appropriate lock tokens. * + * @param path The relative path * @param req Servlet request * * @return <code>true</code> if the resource is locked (and no appropriate lock token has been found for at least * one of the non-shared locks which are present on the resource). */ - private boolean isLocked(HttpServletRequest req) { + private boolean isLocked(String path, HttpServletRequest req) { - String path = getRelativePath(req); + if (path == null) { + path = getRelativePath(req); + } String ifHeader = req.getHeader("If"); if (ifHeader == null) { @@ -1404,6 +1407,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen /** * Copy a resource. * + * @param path Path of the resource to copy * @param req Servlet request * @param resp Servlet response * @@ -1411,10 +1415,9 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen * * @throws IOException If an IO error occurs */ - private boolean copyResource(HttpServletRequest req, HttpServletResponse resp) throws IOException { + private boolean copyResource(String path, HttpServletRequest req, HttpServletResponse resp) throws IOException { // Check the source exists - String path = getRelativePath(req); WebResource source = resources.getResource(path); if (!source.exists()) { resp.sendError(WebdavStatus.SC_NOT_FOUND); @@ -1653,6 +1656,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen /** * Delete a resource. * + * @param path Path of the resource which is to be deleted * @param req Servlet request * @param resp Servlet response * @@ -1660,8 +1664,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen * * @throws IOException If an IO error occurs */ - private boolean deleteResource(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String path = getRelativePath(req); + private boolean deleteResource(String path, HttpServletRequest req, HttpServletResponse resp) throws IOException { return deleteResource(path, req, resp, true); } @@ -1681,17 +1684,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen private boolean deleteResource(String path, HttpServletRequest req, HttpServletResponse resp, boolean setStatus) throws IOException { - String ifHeader = req.getHeader("If"); - if (ifHeader == null) { - ifHeader = ""; - } - - String lockTokenHeader = req.getHeader("Lock-Token"); - if (lockTokenHeader == null) { - lockTokenHeader = ""; - } - - if (isLocked(path, ifHeader + lockTokenHeader)) { + if (isLocked(path, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return false; } @@ -1766,11 +1759,11 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen if (ifHeader == null) { ifHeader = ""; } - String lockTokenHeader = req.getHeader("Lock-Token"); if (lockTokenHeader == null) { lockTokenHeader = ""; } + String lockHeader = ifHeader + lockTokenHeader; String[] entries = resources.list(path); @@ -1781,7 +1774,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen } childName += entry; - if (isLocked(childName, ifHeader + lockTokenHeader)) { + if (isLocked(childName, lockHeader)) { errorList.put(childName, Integer.valueOf(WebdavStatus.SC_LOCKED)); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org