ozeigermann 2003/11/24 08:45:14
Modified: src/webdav/server/org/apache/slide/webdav/method
AbstractWebdavMethod.java MoveMethod.java
Log:
Check if source resource is locked before trying to move it.
Because a move is composed of a copy followed by a delete and
this delete would fail if there was a lock on it, before this fix a move
could acutally result in a copy.
Thanks to Stefano Mazzocchi for this patch.
Submitted by: Stefano Mazzocchi
Revision Changes Path
1.18 +26 -3
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java
Index: AbstractWebdavMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractWebdavMethod.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- AbstractWebdavMethod.java 5 Nov 2003 14:24:35 -0000 1.17
+++ AbstractWebdavMethod.java 24 Nov 2003 16:45:14 -0000 1.18
@@ -90,6 +90,7 @@
import org.apache.slide.lock.Lock;
import org.apache.slide.lock.ObjectLockedException;
import org.apache.slide.lock.UnlockListener;
+import org.apache.slide.lock.NodeLock;
import org.apache.slide.macro.ConflictException;
import org.apache.slide.macro.ForbiddenException;
import org.apache.slide.macro.Macro;
@@ -952,6 +953,28 @@
destinationExists = false;
}
return destinationExists;
+ }
+
+ protected boolean isLocked( String uriStr ) throws ServiceAccessException {
+ // use a non-blocking slide token.
+ SlideToken stoken = readonlySlideToken();
+
+ boolean isLocked = false;
+ try {
+ Enumeration locks = lock.enumerateLocks (stoken, uriStr, false);
+ while (locks.hasMoreElements()) {
+ if (lock.isLocked(stoken,(NodeLock) locks.nextElement(),false)) {
+ isLocked = true;
+ }
+ }
+ }
+ catch (ServiceAccessException x) {
+ throw x;
+ }
+ catch (SlideException x) {
+ // ignore silently
+ }
+ return isLocked;
}
protected boolean isLockNull( String uriStr ) throws ServiceAccessException {
1.65 +7 -3
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/MoveMethod.java
Index: MoveMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/MoveMethod.java,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- MoveMethod.java 5 Nov 2003 14:24:34 -0000 1.64
+++ MoveMethod.java 24 Nov 2003 16:45:14 -0000 1.65
@@ -194,6 +194,10 @@
int statusCode = WebdavStatus.SC_NOT_FOUND;
sendError( statusCode, "lock-null resource", new
Object[]{sourceUri} );
throw new WebdavException( statusCode );
+ } else if (isLocked(sourceUri)) {
+ int statusCode = WebdavStatus.SC_LOCKED;
+ sendError( statusCode, getClass().getName()+".noLocked", new
Object[]{sourceUri} );
+ throw new WebdavException( statusCode );
}
}
catch (ServiceAccessException e) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]