This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push: new d647caa6d8 Harmonize d647caa6d8 is described below commit d647caa6d8759bc4125fede02e55049a1685fd2b 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 2ddbd66ed8..3dee2ef4c3 100644 --- a/java/org/apache/catalina/servlets/WebdavServlet.java +++ b/java/org/apache/catalina/servlets/WebdavServlet.java @@ -683,7 +683,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { + if (isLocked(null, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } @@ -719,7 +719,7 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - if (isLocked(req)) { + if (isLocked(path, req)) { resp.sendError(WebdavStatus.SC_LOCKED); return; } @@ -758,24 +758,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); @@ -804,7 +802,9 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen return; } - copyResource(req, resp); + String path = getRelativePath(req); + + copyResource(path, req, resp); } @@ -823,14 +823,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); } } @@ -852,7 +852,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; } @@ -1041,8 +1043,6 @@ public class WebdavServlet extends DefaultServlet implements PeriodicEventListen } } - String path = getRelativePath(req); - lock.path = path; WebResource resource = resources.getResource(path); @@ -1256,13 +1256,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 = ""; @@ -1321,14 +1321,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) { @@ -1403,6 +1406,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 * @@ -1410,10 +1414,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); @@ -1652,6 +1655,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 * @@ -1659,8 +1663,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); } @@ -1680,17 +1683,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; } @@ -1765,11 +1758,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); @@ -1780,7 +1773,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