Author: tolusha
Date: 2010-06-14 09:49:38 -0400 (Mon, 14 Jun 2010)
New Revision: 2579
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/PrivilegedFileHelper.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SpoolFile.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SwapFile.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportDocView.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCConnectionTestBase.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/value/fs/CASableFileIOChannelTestBase.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/load/storage/fs/TestFSReadWrite.java
Log:
EXOJCR-756: replace file operations on privileged file operations
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -160,7 +160,7 @@
this.data = null;
this.spoolFile = sf;
- this.spoolChannel = new RandomAccessFile(sf, "rw").getChannel();
+ this.spoolChannel = PrivilegedFileHelper.randomAccessFile(sf,
"rw").getChannel();
this.spooled = true;
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -57,18 +57,20 @@
@Override
public boolean delete()
{
- PrivilegedAction<Object> action = new PrivilegedAction<Object>()
+
+ PrivilegedAction<Boolean> action = new PrivilegedAction<Boolean>()
{
- public Object run()
+ public Boolean run()
{
- boolean res = deleteFromSuper();
- if (res)
- deleteParent(new File(getParent()));
-
- return res;
+ return TreeFile.super.delete();
}
};
- return (Boolean)AccessController.doPrivileged(action);
+ boolean res = AccessController.doPrivileged(action);
+
+ if (res)
+ deleteParent(new File(getParent()));
+
+ return res;
}
protected boolean deleteParent(File fp)
@@ -98,8 +100,4 @@
return res;
}
- private boolean deleteFromSuper()
- {
- return super.delete();
- }
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -189,7 +189,7 @@
if (lockFileStream != null)
lockFileStream.close();
- if (!lockFile.delete())
+ if (!PrivilegedFileHelper.delete(lockFile))
{ // TODO don't use FileCleaner, delete should be enough
LOG.warn("Cannot delete lock file " +
PrivilegedFileHelper.getAbsolutePath(lockFile)
+ ". Add to the FileCleaner");
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/FileCleaner.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -126,7 +126,7 @@
{
if (PrivilegedFileHelper.exists(file))
{
- if (!file.delete())
+ if (!PrivilegedFileHelper.delete(file))
{
notRemovedFiles.add(file);
@@ -162,7 +162,7 @@
File file = null;
while ((file = files.poll()) != null)
{
- file.delete();
+ PrivilegedFileHelper.delete(file);
}
}
});
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/PrivilegedFileHelper.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/PrivilegedFileHelper.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/PrivilegedFileHelper.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -24,6 +24,7 @@
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
+import java.io.RandomAccessFile;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
@@ -265,6 +266,42 @@
}
}
+ public static RandomAccessFile randomAccessFile(final File file, final String mode)
throws IllegalArgumentException,
+ IOException
+ {
+ PrivilegedExceptionAction<RandomAccessFile> action = new
PrivilegedExceptionAction<RandomAccessFile>()
+ {
+ public RandomAccessFile run() throws Exception
+ {
+ return new RandomAccessFile(file, mode);
+ }
+ };
+ try
+ {
+ return AccessController.doPrivileged(action);
+ }
+ catch (PrivilegedActionException pae)
+ {
+ Throwable cause = pae.getCause();
+ if (cause instanceof IllegalArgumentException)
+ {
+ throw (IllegalArgumentException)cause;
+ }
+ else if (cause instanceof FileNotFoundException)
+ {
+ throw (FileNotFoundException)cause;
+ }
+ else if (cause instanceof RuntimeException)
+ {
+ throw (RuntimeException)cause;
+ }
+ else
+ {
+ throw new RuntimeException(cause);
+ }
+ }
+ }
+
public static long length(final File file)
{
PrivilegedAction<Long> action = new PrivilegedAction<Long>()
@@ -373,4 +410,17 @@
};
return AccessController.doPrivileged(action);
}
+
+ public static File[] listFiles(final File file)
+ {
+ PrivilegedAction<File[]> action = new PrivilegedAction<File[]>()
+ {
+ public File[] run()
+ {
+ return file.listFiles();
+ }
+ };
+ return AccessController.doPrivileged(action);
+ }
+
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SpoolFile.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SpoolFile.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SpoolFile.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -24,6 +24,8 @@
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.Map;
import java.util.WeakHashMap;
@@ -106,7 +108,15 @@
// make unusable
users.clear();
users = null;
- return super.delete();
+
+ PrivilegedAction<Boolean> action = new PrivilegedAction<Boolean>()
+ {
+ public Boolean run()
+ {
+ return SpoolFile.super.delete();
+ }
+ };
+ return AccessController.doPrivileged(action);
}
return false;
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SwapFile.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SwapFile.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/io/SwapFile.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -20,6 +20,8 @@
import java.io.File;
import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
@@ -155,8 +157,18 @@
{
synchronized (inShare)
{
- if (super.delete())
+
+ PrivilegedAction<Boolean> action = new PrivilegedAction<Boolean>()
{
+ public Boolean run()
+ {
+ return SwapFile.super.delete();
+ }
+ };
+ boolean res = AccessController.doPrivileged(action);
+
+ if (res)
+ {
// remove from shared files list
inShare.remove(getAbsolutePath());
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportDocView.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportDocView.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportDocView.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -30,7 +30,6 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Calendar;
@@ -354,9 +353,9 @@
{
Session newSession = repository.login(this.credentials /*
-
* session.getCredentials
-
* ()
-
*/);
+
* session.getCredentials
+
* ()
+
*/);
newSession.setNamespacePrefix("newjcr",
"http://www.jcp.org/jcr/1.0");
@@ -383,9 +382,9 @@
{
Session newSession = repository.login(this.credentials /*
-
* session.getCredentials
-
* ()
-
*/);
+
* session.getCredentials
+
* ()
+
*/);
newSession.setNamespacePrefix("newjcr",
"http://www.jcp.org/jcr/1.0");
Node testNode =
newSession.getRootNode().addNode("jcr:testExportNamespaceRemaping");
@@ -402,7 +401,7 @@
// session.exportDocumentView(testNode.getPath(), bos, false, false);
SAXTransformerFactory saxFact =
(SAXTransformerFactory)SAXTransformerFactory.newInstance();
- TransformerHandler handler = saxFact.newTransformerHandler();
+ final TransformerHandler handler = saxFact.newTransformerHandler();
handler.setResult(new StreamResult(bos));
newSession.exportDocumentView(testNode.getPath(), handler, false, false);
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCConnectionTestBase.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCConnectionTestBase.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCConnectionTestBase.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -21,11 +21,14 @@
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
-import org.exoplatform.services.jcr.impl.storage.jdbc.init.StorageDBInitializer;
import java.io.ByteArrayInputStream;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.sql.Connection;
import java.sql.ResultSet;
+import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.sql.DataSource;
@@ -47,6 +50,7 @@
private Connection connect = null;
+ @Override
protected void tearDown() throws Exception
{
@@ -57,8 +61,40 @@
public Connection getJNDIConnection() throws Exception
{
- DataSource ds = (DataSource)new InitialContext().lookup("jdbcjcrtest");
- connect = ds.getConnection();
+ final DataSource ds = (DataSource)new
InitialContext().lookup("jdbcjcrtest");
+
+ PrivilegedExceptionAction<Connection> action = new
PrivilegedExceptionAction<Connection>()
+ {
+ public Connection run() throws Exception
+ {
+ return ds.getConnection();
+ }
+ };
+ try
+ {
+ connect = AccessController.doPrivileged(action);
+ }
+ catch (PrivilegedActionException pae)
+ {
+ Throwable cause = pae.getCause();
+ if (cause instanceof IllegalArgumentException)
+ {
+ throw (IllegalArgumentException)cause;
+ }
+ else if (cause instanceof SQLException)
+ {
+ throw (SQLException)cause;
+ }
+ else if (cause instanceof RuntimeException)
+ {
+ throw (RuntimeException)cause;
+ }
+ else
+ {
+ throw new RuntimeException(cause);
+ }
+ }
+
return connect;
}
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/value/fs/CASableFileIOChannelTestBase.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/value/fs/CASableFileIOChannelTestBase.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/storage/value/fs/CASableFileIOChannelTestBase.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -624,7 +624,7 @@
private long deleteRecursive(File dir)
{
long count = 0;
- for (File sf : dir.listFiles())
+ for (File sf : PrivilegedFileHelper.listFiles(dir))
{
if (sf.isDirectory() && PrivilegedFileHelper.list(sf).length > 0)
count += deleteRecursive(sf);
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/load/storage/fs/TestFSReadWrite.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/load/storage/fs/TestFSReadWrite.java 2010-06-14
12:20:45 UTC (rev 2578)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/load/storage/fs/TestFSReadWrite.java 2010-06-14
13:49:38 UTC (rev 2579)
@@ -125,7 +125,7 @@
{
deleteDir(testRoot);
// deleteFiles(files);
- testRoot.delete();
+ PrivilegedFileHelper.delete(testRoot);
log.info("Tear down of " + getName() + ",\t" +
(System.currentTimeMillis() - time));
}
@@ -136,7 +136,7 @@
{
for (File f : filesList)
{
- f.delete();
+ PrivilegedFileHelper.delete(f);
deleteFileParent(new File(f.getParent()));
}
}
@@ -150,7 +150,7 @@
if (ls.length <= 0)
{
// log.info("del " + fp.getAbsolutePath());
- fp.delete();
+ PrivilegedFileHelper.delete(fp);
deleteFileParent(new File(fp.getParent()));
}
}
@@ -172,7 +172,7 @@
if (f.isDirectory())
{
deleteDir(f);
- f.delete();
+ PrivilegedFileHelper.delete(f);
}
else
f.delete();