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

Knut Anders Hatlen commented on DERBY-6503:
-------------------------------------------

In the network directory where I see this failure, I'm not allowed to change 
the permissions of derby.log (or any other file for that matter) as the same 
user using the normal Windows mechanism either (right-click file in Windows 
Explorer, choose Properties, then Security, and Edit). So it sounds correct 
that Java raises an exception when the network server tries to do that 
operation.

The code comments seem to acknowledge that an IOException is a possibility, but 
it sounds like it was not believed to be something that could happen in 
practice. See this code in FileUtil.limitAccessToOwnerViaACLs():

{code}
        } catch (InvocationTargetException e) {
            // java.security.AccessControlException: access denied
            // ("java.lang.RuntimePermission" "accessUserInformation") can
            // happen, so throw.
            //
            // Should we get an IOException from getOwner, the cast below
            // would throw which is fine, since it should not happen.
            throw (RuntimeException)e.getCause();
        }
{code}

At the very least this code needs to be improved so that it doesn't report the 
IOException as a ClassCastException.

I'm not quite sure how errors are supposed to be handled in this code, though. 
Some exceptions are handled by falling back to using the less capable 
File.setReadable(), setWritable(), setExecutable() methods. Others are ignored 
(unless you're running a debug build). Only RuntimeExceptions will be reported 
currently.

> Starting network server on a network drive fails with JDK 7 on Windows
> ----------------------------------------------------------------------
>
>                 Key: DERBY-6503
>                 URL: https://issues.apache.org/jira/browse/DERBY-6503
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Server, Services
>    Affects Versions: 10.10.1.1
>            Reporter: Knut Anders Hatlen
>
> Starting a network server on a network drive with JDK 7 on Windows fails. The 
> reported exception is a ClassCastException, but the underlying exception is 
> the following:
> java.nio.file.AccessDeniedException: \\host\path\derby.log
>       at 
> sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
>       at 
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
>       at 
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
>       at 
> sun.nio.fs.WindowsAclFileAttributeView.setAcl(WindowsAclFileAttributeView.java:221)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:601)
>       at 
> org.apache.derby.iapi.services.io.FileUtil.limitAccessToOwnerViaACLs(FileUtil.java:897)
>       at 
> org.apache.derby.iapi.services.io.FileUtil.limitAccessToOwner(FileUtil.java:747)
>       at 
> org.apache.derby.impl.services.stream.SingleStream.PBmakeFileHPW(SingleStream.java:205)
>       at 
> org.apache.derby.impl.services.stream.SingleStream.run(SingleStream.java:401)
>       at 
> org.apache.derby.impl.services.stream.SingleStream.run(SingleStream.java:72)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at 
> org.apache.derby.impl.services.stream.SingleStream.makeFileHPW(SingleStream.java:394)
>       at 
> org.apache.derby.impl.services.stream.SingleStream.createDefaultStream(SingleStream.java:356)
>       at 
> org.apache.derby.impl.services.stream.SingleStream.makeStream(SingleStream.java:132)
>       at 
> org.apache.derby.impl.services.stream.SingleStream.boot(SingleStream.java:92)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1991)
>       at 
> org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:541)
>       at 
> org.apache.derby.impl.services.monitor.FileMonitor.startModule(FileMonitor.java:44)
>       at 
> org.apache.derby.iapi.services.monitor.Monitor.startSystemModule(Monitor.java:362)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.runWithState(BaseMonitor.java:343)
>       at 
> org.apache.derby.impl.services.monitor.FileMonitor.<init>(FileMonitor.java:58)
>       at 
> org.apache.derby.iapi.services.monitor.Monitor.startMonitor(Monitor.java:285)
>       at org.apache.derby.iapi.jdbc.JDBCBoot.boot(JDBCBoot.java:67)
>       at org.apache.derby.jdbc.EmbeddedDriver.boot(EmbeddedDriver.java:199)
>       at org.apache.derby.jdbc.EmbeddedDriver.<clinit>(EmbeddedDriver.java:95)
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:188)
>       at 
> org.apache.derby.impl.drda.NetworkServerControlImpl.startNetworkServer(NetworkServerControlImpl.java:1032)
>       at 
> org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(NetworkServerControlImpl.java:732)
>       at 
> org.apache.derby.impl.drda.NetworkServerControlImpl.executeWork(NetworkServerControlImpl.java:2277)
>       at 
> org.apache.derby.drda.NetworkServerControl.main(NetworkServerControl.java:353)



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

Reply via email to