You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2012/12/25 11:57:31 UTC

svn commit: r1425737 - in /stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl: MainDataFileProvider.java tracking/DataFileTrackerImpl.java

Author: rwesten
Date: Tue Dec 25 10:57:31 2012
New Revision: 1425737

URL: http://svn.apache.org/viewvc?rev=1425737&view=rev
Log:
STANBOL-864: The MainDataFile provider now accesses the datafile folder using AccessController.doPrivileged

Modified:
    stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/MainDataFileProvider.java
    stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/tracking/DataFileTrackerImpl.java

Modified: stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/MainDataFileProvider.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/MainDataFileProvider.java?rev=1425737&r1=1425736&r2=1425737&view=diff
==============================================================================
--- stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/MainDataFileProvider.java (original)
+++ stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/MainDataFileProvider.java Tue Dec 25 10:57:31 2012
@@ -20,6 +20,10 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Dictionary;
@@ -153,7 +157,7 @@ public class MainDataFileProvider implem
             String filename, Map<String, String> comments) throws IOException {
         InputStream result = null;
         String fileUrl = null;
-        File dataFile = getDataFile(bundleSymbolicName, filename);
+        final File dataFile = getDataFile(bundleSymbolicName, filename);
         // Then, if not found, query other DataFileProviders,
         // ordered by service ranking
         if(dataFile == null) {
@@ -182,7 +186,21 @@ public class MainDataFileProvider implem
                 }
             }
         } else {
-            result =  new FileInputStream(dataFile);
+            try {
+                result =  AccessController.doPrivileged(new PrivilegedExceptionAction<InputStream>() {
+                    @Override
+                    public InputStream run() throws IOException {
+                        return new FileInputStream(dataFile);
+                    }
+                });
+            } catch (PrivilegedActionException pae) {
+                Exception e = pae.getException();
+                if(e instanceof IOException){
+                    throw (IOException)e;
+                } else {
+                    throw RuntimeException.class.cast(e);
+                }
+            }
             fileUrl = dataFile.toURI().toASCIIString();
         }
         
@@ -258,8 +276,7 @@ public class MainDataFileProvider implem
      * @param filename
      * @return
      */
-    private File getDataFile(String bundleSymbolicName, String filename) {
-        File dataFile = null;
+    private File getDataFile(String bundleSymbolicName, final String filename) {
         // First look for the file in our data folder,
         // with and without bundle symbolic name prefix
         final String [] candidateNames = bundleSymbolicName == null ? 
@@ -268,17 +285,23 @@ public class MainDataFileProvider implem
                         bundleSymbolicName + "-" + filename,
                         filename
                     };
-        for(String name : candidateNames) {
-            dataFile = new File(dataFilesFolder, name);
-            log.debug("Looking for file {}", dataFile.getAbsolutePath());
-            if(dataFile.exists() && dataFile.canRead()) {
-                log.debug("File found in data files folder: {}", filename);
-                break;
-            } else {
-                dataFile = null;
+        return AccessController.doPrivileged(new PrivilegedAction<File>() {
+            @Override
+            public File run() {
+                File dataFile = null;
+                for(String name : candidateNames) {
+                    dataFile = new File(dataFilesFolder, name);
+                    log.debug("Looking for file {}", dataFile.getAbsolutePath());
+                    if(dataFile.exists() && dataFile.canRead()) {
+                        log.debug("File found in data files folder: {}", filename);
+                        break;
+                    } else {
+                        dataFile = null;
+                    }
+                }
+                return dataFile;
             }
-        }
-        return dataFile;
+        });
     }
     
     File getDataFilesFolder() {

Modified: stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/tracking/DataFileTrackerImpl.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/tracking/DataFileTrackerImpl.java?rev=1425737&r1=1425736&r2=1425737&view=diff
==============================================================================
--- stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/tracking/DataFileTrackerImpl.java (original)
+++ stanbol/trunk/commons/stanboltools/datafileprovider/src/main/java/org/apache/stanbol/commons/stanboltools/datafileprovider/impl/tracking/DataFileTrackerImpl.java Tue Dec 25 10:57:31 2012
@@ -60,8 +60,7 @@ import org.slf4j.LoggerFactory;
  * @author Rupert Westenthaler.
  *
  */
-@Component(//specVersion="1.1-felix", //to use the update property for @Reference
-    immediate=true, metatype=true)
+@Component(immediate=true, metatype=true)
 @Service
 @Property(name=Constants.SERVICE_RANKING, intValue=Integer.MAX_VALUE)
 public final class DataFileTrackerImpl implements DataFileTracker {
@@ -95,9 +94,7 @@ public final class DataFileTrackerImpl i
         policy=ReferencePolicy.DYNAMIC,
         strategy=ReferenceStrategy.EVENT,
         bind="bindDataFileProvider",
-        unbind="unbindDataFileProvider"//,
-        //updated="bindDataFileProvider"
-        )
+        unbind="unbindDataFileProvider")
     protected DataFileProvider _dataFileProvider;
     
     /**