From dad8713bc864f644f79393ff3377c4be619fd5c5 Mon Sep 17 00:00:00 2001 From: Gary Spencer Date: Mon, 9 Jan 2006 15:00:12 +0000 Subject: [PATCH] Check for the NodeLockedException when deleting a file and convert to an access denied error. When marking a file for delete check if the file node has a lock, return an access denied error if locked. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2087 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../smb/server/repo/ContentDiskDriver.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/source/java/org/alfresco/filesys/smb/server/repo/ContentDiskDriver.java b/source/java/org/alfresco/filesys/smb/server/repo/ContentDiskDriver.java index f50cf79450..ef9c1ac4a2 100644 --- a/source/java/org/alfresco/filesys/smb/server/repo/ContentDiskDriver.java +++ b/source/java/org/alfresco/filesys/smb/server/repo/ContentDiskDriver.java @@ -1171,6 +1171,17 @@ public class ContentDiskDriver implements DiskInterface, IOCtlInterface " file: " + name); } } + catch (NodeLockedException ex) + { + // Debug + + if ( logger.isDebugEnabled()) + logger.debug("Delete file - access denied (locked)"); + + // Convert to a filesystem access denied status + + throw new AccessDeniedException("Delete " + name); + } catch (org.alfresco.repo.security.permissions.AccessDeniedException ex) { // Debug @@ -1378,6 +1389,23 @@ public class ContentDiskDriver implements DiskInterface, IOCtlInterface if ( permissionService.hasPermission(nodeRef, PermissionService.WRITE) == AccessStatus.DENIED) throw new AccessDeniedException("No write access to " + name); + + // Check if the file is being marked for deletion, if so then check if the file is locked + + if ( info.hasSetFlag(FileInfo.SetDeleteOnClose) && info.hasDeleteOnClose()) + { + // Check if the node is locked + + if ( nodeService.hasAspect( nodeRef, ContentModel.ASPECT_LOCKABLE)) + { + // Get the lock type, if any + + String lockTypeStr = (String) nodeService.getProperty( nodeRef, ContentModel.PROP_LOCK_TYPE); + + if ( lockTypeStr != null) + throw new AccessDeniedException("Node locked, cannot mark for delete"); + } + } } catch (org.alfresco.repo.security.permissions.AccessDeniedException ex) {