private JarFile getCachedJarFile(URL url) { JarFile result = (JarFile) fileCache.get(url); /* if the JAR file is cached, the permission will always be there */ if (result != null) { Permission perm = getPermission(result); if (perm != null) { SecurityManager sm = System.getSecurityManager(); if (sm != null) { try { sm.checkPermission(perm); } catch (SecurityException se) { // fallback to checkRead/checkConnect for pre 1.2 // security managers if ((perm instanceof java.io.FilePermission) && perm.getActions().indexOf("read") != -1) { sm.checkRead(perm.getName()); } else if ((perm instanceof java.net.SocketPermission) && perm.getActions().indexOf("connect") != -1) { sm.checkConnect(url.getHost(), url.getPort()); } else { throw se; } } } } } return result; }
// security check to see whether the caller can perform attach private void checkProcessAttach(int pid) { SecurityManager sm = System.getSecurityManager(); if (sm != null) { String os = System.getProperty("os.name"); try { // Whether the caller can perform link against SA native library? checkNativeLink(sm, os); if (os.equals("SunOS") || os.equals("Linux")) { // Whether the caller can read /proc/<pid> file? sm.checkRead("/proc/" + pid); } } catch (SecurityException se) { throw new SecurityException("permission denied to attach to " + pid); } } }