libbluray | branch: master | hpi1 <[email protected]> | Fri Feb 27 12:26:20 2015 +0200| [c284665af48f6a52214ebc1059f80ac9a921c80c] | committer: hpi1
Mounting requires cache write permission > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=c284665af48f6a52214ebc1059f80ac9a921c80c --- .../bdj/java/org/videolan/MountManager.java | 36 ++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/libbluray/bdj/java/org/videolan/MountManager.java b/src/libbluray/bdj/java/org/videolan/MountManager.java index a3feff7..a49b39d 100644 --- a/src/libbluray/bdj/java/org/videolan/MountManager.java +++ b/src/libbluray/bdj/java/org/videolan/MountManager.java @@ -25,6 +25,10 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -39,10 +43,24 @@ import java.util.jar.JarFile; */ public class MountManager { + /* called from org/dvb/dsmcc/ServiceDomain */ public static String mount(int jarId) throws MountException { - return mount(jarId, true); + final int id = jarId; + Object obj = null; + try { + obj = AccessController.doPrivileged( + new PrivilegedExceptionAction() { + public Object run() throws MountException { + return mount(id, true); + } + }); + } catch (PrivilegedActionException e) { + throw (MountException) e.getException(); + } + return (String)obj; } + /* package private, called from BDJXletContext */ protected static String mount(int jarId, boolean classFiles) throws MountException { String jarStr = jarIdToString(jarId); @@ -163,8 +181,8 @@ public class MountManager { public static void unmount(int jarId) { logger.info("Unmounting JAR: " + jarId); - Integer id = new Integer(jarId); - MountPoint mountPoint; + final Integer id = new Integer(jarId); + final MountPoint mountPoint; synchronized (mountPoints) { mountPoint = (MountPoint)mountPoints.get(id); @@ -173,9 +191,15 @@ public class MountManager { return; } - if (mountPoint.decRefCount() < 1) { - mountPoints.remove(id); - } + AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + if (mountPoint.decRefCount() < 1) { + mountPoints.remove(id); + } + return null; + } + }); } } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
