[ 
https://issues.apache.org/jira/browse/LUCENE-5650?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14017051#comment-14017051
 ] 

Dawid Weiss commented on LUCENE-5650:
-------------------------------------

This looks like a screwup in Hadoop because it attempts to create all parent 
folders, including those it has no access to (and which MUST already exist at 
that time):
{code}
Caused by: java.security.AccessControlException: access denied 
("java.io.FilePermission" 
"/Users/sarowe/svn/lucene/dev/trunk4/solr/build/solr-core/test/J0" "write")
   [junit4]   2>        at 
java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
   [junit4]   2>        at 
java.security.AccessController.checkPermission(AccessController.java:559)
   [junit4]   2>        at 
java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
   [junit4]   2>        at 
java.lang.SecurityManager.checkWrite(SecurityManager.java:979)
   [junit4]   2>        at java.io.File.mkdir(File.java:1305)
   [junit4]   2>        at 
org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:427)
...
{code}

Here is what this routine looks like:
{code}
  /**
   * Creates the specified directory hierarchy. Does not
   * treat existence as an error.
   */
  @Override
  public boolean mkdirs(Path f) throws IOException {
    if(f == null) {
      throw new IllegalArgumentException("mkdirs path arg is null");
    }
    Path parent = f.getParent();
    File p2f = pathToFile(f);
    if(parent != null) {
      File parent2f = pathToFile(parent);
      if(parent2f != null && parent2f.exists() && !parent2f.isDirectory()) {
        throw new FileAlreadyExistsException("Parent path is not a directory: " 
            + parent);
      }
    }
    return (parent == null || mkdirs(parent)) &&
      (p2f.mkdir() || p2f.isDirectory());
  }
{code}

I think this is an error in Hadoop -- they always mkdirs() on parent folders, 
even if they exist.

> Enforce read-only access to any path outside the temporary folder via 
> security manager
> --------------------------------------------------------------------------------------
>
>                 Key: LUCENE-5650
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5650
>             Project: Lucene - Core
>          Issue Type: Improvement
>          Components: general/test
>            Reporter: Ryan Ernst
>            Assignee: Dawid Weiss
>            Priority: Minor
>             Fix For: 4.9, 5.0
>
>         Attachments: LUCENE-5650.patch, LUCENE-5650.patch, LUCENE-5650.patch, 
> LUCENE-5650.patch, dih.patch
>
>
> The recent refactoring to all the create temp file/dir functions (which is 
> great!) has a minor regression from what existed before.  With the old 
> {{LuceneTestCase.TEMP_DIR}}, the directory was created if it did not exist.  
> So, if you set {{java.io.tmpdir}} to {{"./temp"}}, then it would create that 
> dir within the per jvm working dir.  However, {{getBaseTempDirForClass()}} 
> now does asserts that check the dir exists, is a dir, and is writeable.
> Lucene uses {{"."}} as {{java.io.tmpdir}}.  Then in the test security 
> manager, the per jvm cwd has read/write/execute permissions.  However, this 
> allows tests to write to their cwd, which I'm trying to protect against (by 
> setting cwd to read/execute in my test security manager).



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to