From 8534a6e2b9b25e32834dae9ab25136eeaf687c84 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Wed, 22 Feb 2012 17:36:30 +0000 Subject: [PATCH] ALF-12866: WebDAV in-memory locking. Exclusive lock should be unlocked only by owner. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@34174 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/repo/webdav/UnlockMethod.java | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/source/java/org/alfresco/repo/webdav/UnlockMethod.java b/source/java/org/alfresco/repo/webdav/UnlockMethod.java index f406bf4c84..3ee277bab1 100644 --- a/source/java/org/alfresco/repo/webdav/UnlockMethod.java +++ b/source/java/org/alfresco/repo/webdav/UnlockMethod.java @@ -151,19 +151,30 @@ public class UnlockMethod extends WebDAVMethod m_response.setStatus(HttpServletResponse.SC_NO_CONTENT); removeNoContentAspect(nodeRef); } - else if (lockInfo.isExclusive() /* && user is lock-owner */) + else if (lockInfo.isExclusive()) { - getLockStore().remove(nodeRef); - - // Indicate that the unlock was successful - m_response.setStatus(HttpServletResponse.SC_NO_CONTENT); - - removeNoContentAspect(nodeRef); - - // DEBUG - if (logger.isDebugEnabled()) + String currentUser = getAuthenticationService().getCurrentUserName(); + if (currentUser.equals(lockInfo.getOwner())) { - logger.debug("Unlock token=" + getLockToken() + " Successful"); + getLockStore().remove(nodeRef); + + // Indicate that the unlock was successful + m_response.setStatus(HttpServletResponse.SC_NO_CONTENT); + removeNoContentAspect(nodeRef); + + if (logger.isDebugEnabled()) + { + logger.debug("Unlock token=" + getLockToken() + " Successful"); + } + } + else + { + if (logger.isDebugEnabled()) + { + logger.debug("Unlock token=" + getLockToken() + " Not lock owner"); + } + // Node is not locked + throw new WebDAVServerException(HttpServletResponse.SC_PRECONDITION_FAILED); } } else if (lockInfo.isShared())