harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paulex Yang <paulex.y...@gmail.com>
Subject Re: [classlib][logging] A non bug difference from RI?
Date Tue, 26 Sep 2006 07:11:03 GMT
Now I think I understand why RI locks ".lck" file instead of the log 
file itself - if the log file is locked, user cannot use another 
process(say, tail -f ***.log) to display the log file:(. So I'm going to 
update the FileHandler to follow RI if no one objects.

Andrew Zhang wrote:
> Hi folks,
>
> When SecurityManager is enabled and all file permissions are disabled, RI
> fails to new a FileHandler while Harmony allows.
> Following test code shows the differences:
>
>    public void test_FileHandler() throws Exception {
>        FileHandler handler = new FileHandler();
>        SecurityManager originalSecurityManager = 
> System.getSecurityManager
> ();
>        try {
>            System.setSecurityManager(new MockFileSecurityManager());
>            handler.publish(new LogRecord(Level.SEVERE, "msg"));
>
> // SecurityException is thrown here
>            handler.close();
>        } finally {
>            System.setSecurityManager(originalSecurityManager);
>        }
>    }
>
>    public static class MockFileSecurityManager extends SecurityManager {
>        public void checkPermission(Permission perm) {
>            if (perm instanceof FilePermission) {
>                System.out.println("check " + perm.getName());
>                throw new SecurityException();
>            }
>        }
>    }
> FileHandler.close() spec says "Throws: SecurityException - if a security
> manager exists and if the caller does not have
> LoggingPermission("control").", In the code above, control permission is
> allowed. The failure stack trace against RI looks like:
>
> java.lang.SecurityException
> at com.andrew.LoggingTest$MockFileSecurityManager.checkPermission(
> LoggingTest.java:131)
> at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
> at java.io.File.exists(File.java:700)
> at java.io.Win32FileSystem.canonicalize(Win32FileSystem.java:401)
> at java.io.File.getCanonicalPath(File.java:531)
> at java.io.FilePermission$1.run(FilePermission.java:218)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.io.FilePermission.init(FilePermission.java:212)
> at java.io.FilePermission.<init>(FilePermission.java:264)
> at java.lang.SecurityManager.checkDelete(SecurityManager.java:990)
> at java.io.File.delete(File.java:869)
> at java.util.logging.FileHandler.close(FileHandler.java:594)
> at com.andrew.LoggingTest.test_FileHandler(LoggingTest.java:121)
> ...
>
> The output is "check C:\Documents and Settings\myaccount\java0.log.lck"
>
> It seems RI tries to delete <log file>.lck file, but has no permission.
> ".lck" file is never mentioned in spec, and should be implementation 
> detail.
>
> Current Harmony code never tries to lock a temp empty .lck file, so 
> the test
> passes against Harmony.
>
> If we revise the MockSecurityManager a little, to allow .lck file
> permission,
>
>    public void checkPermission(Permission perm) {
>            if (perm instanceof FilePermission) {
>                if (perm.getName().indexOf(".lck") == -1) {
>                    System.out.println("check " + perm.getName());
>                    throw new SecurityException();
>                }
>            }
>        }
>
> The test will pass both against RI and Harmony.
>
> So I'd suggest to leave it as "non-bug difference from RI".
>
> Any comments? Thank you!
>
>
>


-- 
Paulex Yang
China Software Development Lab
IBM



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message