You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2007/05/10 00:01:34 UTC
svn commit: r536677 -
/db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java
Author: kmarsden
Date: Wed May 9 15:01:34 2007
New Revision: 536677
URL: http://svn.apache.org/viewvc?view=rev&rev=536677
Log:
DERBY-2556 Code paths for db restore do not use doPrivileged-calls, causing SecurityException
Add priv blocks for File.exists() calls in restore.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java?view=diff&rev=536677&r1=536676&r2=536677
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java Wed May 9 15:01:34 2007
@@ -574,11 +574,11 @@
{
//First make sure backup service directory exists in the specified path
File backupRoot = new File(restoreFrom);
- if(backupRoot.exists())
+ if(privExists(backupRoot))
{
//First make sure backup have service.properties
File bserviceProp = new File(restoreFrom, PersistentService.PROPERTIES_NAME);
- if(bserviceProp.exists())
+ if(privExists(bserviceProp))
{
//create service root if required
if(createRoot)
@@ -909,4 +909,31 @@
return null;
} // end of run
} // end of class DirectoryList
+
+ /**
+ * Wrap File.exists() in a priv block to avoid Security exceptions
+ * @param fileToCheck
+ * @return true if file exists, false if it does not
+ * @throws SecurityException
+ */
+ private boolean privExists(final File fileToCheck) throws SecurityException{
+ try {
+
+ Boolean exist = (Boolean) AccessController.doPrivileged(
+ new PrivilegedExceptionAction()
+ {
+ public Object run()
+ throws SecurityException
+ {
+ return new Boolean(fileToCheck.exists());
+ }
+ });
+ return exist.booleanValue();
+ }
+ catch( PrivilegedActionException pae)
+ {
+ throw (SecurityException) pae.getException();
+ }
+ }
+
}