home *** CD-ROM | disk | FTP | other *** search
- package sun.rmi.server;
-
- import java.io.File;
- import java.io.FilePermission;
- import java.io.IOException;
- import java.lang.ref.Reference;
- import java.lang.ref.ReferenceQueue;
- import java.lang.ref.SoftReference;
- import java.net.MalformedURLException;
- import java.net.SocketPermission;
- import java.net.URL;
- import java.net.URLClassLoader;
- import java.rmi.server.LogStream;
- import java.security.AccessControlContext;
- import java.security.AccessController;
- import java.security.CodeSource;
- import java.security.Permission;
- import java.security.PermissionCollection;
- import java.security.ProtectionDomain;
- import java.security.cert.Certificate;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.PropertyPermission;
- import java.util.StringTokenizer;
- import java.util.WeakHashMap;
- import sun.security.action.GetPropertyAction;
-
- public final class LoaderHandler {
- static final int logLevel = LogStream.parseLevel((String)AccessController.doPrivileged(new GetPropertyAction("sun.rmi.loader.logLevel")));
- private static String codebase = null;
- private static URL[] codebaseURLs;
- private static Map codebaseLoaders;
- private static HashMap loaderTable;
- private static ReferenceQueue refQueue;
- private static Map pathToURLsCache;
- // $FF: synthetic field
- static Class class$sun$rmi$server$LoaderHandler;
-
- private LoaderHandler() {
- }
-
- public static Class loadClass(String var0) throws MalformedURLException, ClassNotFoundException {
- return loadClass(getDefaultCodebaseURLs(), var0);
- }
-
- private static synchronized URL[] getDefaultCodebaseURLs() throws MalformedURLException {
- if (codebaseURLs == null) {
- if (codebase != null) {
- codebaseURLs = pathToURLs(codebase);
- } else {
- codebaseURLs = new URL[0];
- }
- }
-
- return codebaseURLs;
- }
-
- public static Class loadClass(URL var0, String var1) throws MalformedURLException, ClassNotFoundException {
- return var0 != null ? loadClass(new URL[]{var0}, var1) : loadClass(var1);
- }
-
- public static Class loadClass(String var0, String var1) throws MalformedURLException, ClassNotFoundException {
- return var0 != null ? loadClass(pathToURLs(var0), var1) : loadClass(var1);
- }
-
- public static String getClassAnnotation(Class var0) {
- String var1 = var0.getName();
- int var2 = var1.length();
- if (var2 > 0 && var1.charAt(0) == '[') {
- int var3;
- for(var3 = 1; var2 > var3 && var1.charAt(var3) == '['; ++var3) {
- }
-
- if (var2 > var3 && var1.charAt(var3) != 'L') {
- return null;
- }
- }
-
- ClassLoader var11 = var0.getClassLoader();
- if (var11 != null && !codebaseLoaders.containsKey(var11)) {
- String var4 = null;
- if (var11 instanceof Loader) {
- var4 = ((Loader)var11).getClassAnnotation();
- } else if (var11 instanceof URLClassLoader) {
- try {
- URL[] var5 = ((URLClassLoader)var11).getURLs();
- if (var5 != null) {
- SecurityManager var6 = System.getSecurityManager();
- if (var6 != null) {
- for(int var7 = 0; var7 < var5.length; ++var7) {
- Permission var8 = var5[var7].openConnection().getPermission();
- if (var8 != null) {
- var6.checkPermission(var8);
- }
- }
- }
-
- var4 = urlsToPath(var5);
- }
- } catch (SecurityException var9) {
- } catch (IOException var10) {
- }
- }
-
- return var4 != null ? var4 : codebase;
- } else {
- return codebase;
- }
- }
-
- public static ClassLoader getClassLoader(String var0) throws MalformedURLException, SecurityException {
- ClassLoader var1 = getRMIContextClassLoader();
- SecurityManager var2 = System.getSecurityManager();
- if (var2 == null) {
- return var1;
- } else {
- URL[] var3;
- if (var0 != null) {
- var3 = pathToURLs(var0);
- } else {
- var3 = getDefaultCodebaseURLs();
- }
-
- Loader var4 = lookupLoader(var3, var1);
- if (var4 != null) {
- sun.rmi.server.LoaderHandler.Loader.access$000(var4);
- }
-
- return var4;
- }
- }
-
- public static Object getSecurityContext(ClassLoader var0) {
- if (var0 instanceof Loader) {
- URL[] var1 = ((Loader)var0).getURLs();
- if (var1.length > 0) {
- return var1[0];
- }
- }
-
- return null;
- }
-
- public static void registerCodebaseLoader(ClassLoader var0) {
- codebaseLoaders.put(var0, (Object)null);
- }
-
- private static Class loadClass(URL[] var0, String var1) throws ClassNotFoundException {
- ClassLoader var2 = getRMIContextClassLoader();
- SecurityManager var3 = System.getSecurityManager();
- if (var3 == null) {
- try {
- return Class.forName(var1, false, var2);
- } catch (ClassNotFoundException var6) {
- throw new ClassNotFoundException(((Throwable)var6).getMessage() + " (no security manager: RMI class loader disabled)", var6.getException());
- }
- } else {
- Loader var4 = lookupLoader(var0, var2);
- if (logLevel >= 20) {
- LogStream.log("loader").println("LoaderHandler.loadClass: loading class \"" + var1 + "\"" + " from " + Arrays.asList(var0));
- }
-
- try {
- if (var4 != null) {
- sun.rmi.server.LoaderHandler.Loader.access$000(var4);
- }
- } catch (SecurityException var7) {
- throw new ClassNotFoundException("access denied to class loader", var7);
- }
-
- return Class.forName(var1, false, var4);
- }
- }
-
- private static URL[] pathToURLs(String var0) throws MalformedURLException {
- Map var1 = pathToURLsCache;
- synchronized(var1) {
- Object[] var2 = pathToURLsCache.get(var0);
- if (var2 != null) {
- URL[] var10 = (URL[])var2[0];
- return var10;
- }
- }
-
- StringTokenizer var9 = new StringTokenizer(var0);
- URL[] var3 = new URL[var9.countTokens()];
-
- for(int var4 = 0; var9.hasMoreTokens(); ++var4) {
- var3[var4] = new URL(var9.nextToken());
- }
-
- Map var5 = pathToURLsCache;
- synchronized(var5) {
- pathToURLsCache.put(var0, new Object[]{var3, new SoftReference(var0)});
- return var3;
- }
- }
-
- private static String urlsToPath(URL[] var0) {
- if (var0.length == 0) {
- return null;
- } else if (var0.length == 1) {
- return var0[0].toExternalForm();
- } else {
- StringBuffer var1 = new StringBuffer(var0[0].toExternalForm());
-
- for(int var2 = 1; var2 < var0.length; ++var2) {
- var1.append(' ');
- var1.append(var0[var2].toExternalForm());
- }
-
- return var1.toString();
- }
- }
-
- private static ClassLoader getRMIContextClassLoader() {
- return Thread.currentThread().getContextClassLoader();
- }
-
- private static Loader lookupLoader(URL[] var0, ClassLoader var1) {
- Class var4 = class$sun$rmi$server$LoaderHandler == null ? (class$sun$rmi$server$LoaderHandler = class$("sun.rmi.server.LoaderHandler")) : class$sun$rmi$server$LoaderHandler;
- synchronized(var4) {
- LoaderEntry var2;
- while((var2 = (LoaderEntry)refQueue.poll()) != null) {
- if (!var2.removed) {
- loaderTable.remove(var2.key);
- }
- }
-
- LoaderKey var5 = new LoaderKey(var0, var1);
- var2 = (LoaderEntry)loaderTable.get(var5);
- Loader var3;
- if (var2 == null || (var3 = (Loader)((Reference)var2).get()) == null) {
- if (var2 != null) {
- loaderTable.remove(var5);
- var2.removed = true;
- }
-
- AccessControlContext var6 = getLoaderAccessControlContext(var0);
- var3 = (Loader)AccessController.doPrivileged(new 1(var0, var1), var6);
- var2 = new LoaderEntry(var5, var3);
- loaderTable.put(var5, var2);
- }
-
- return var3;
- }
- }
-
- private static AccessControlContext getLoaderAccessControlContext(URL[] var0) {
- PermissionCollection var1 = (PermissionCollection)AccessController.doPrivileged(new 2());
- var1.add(new RuntimePermission("createClassLoader"));
- var1.add(new PropertyPermission("java.*", "read"));
- addPermissionsForURLs(var0, var1, true);
- ProtectionDomain var2 = new ProtectionDomain(new CodeSource(var0.length > 0 ? var0[0] : null, (Certificate[])null), var1);
- return new AccessControlContext(new ProtectionDomain[]{var2});
- }
-
- private static void addPermissionsForURLs(URL[] var0, PermissionCollection var1, boolean var2) {
- for(int var3 = 0; var3 < var0.length; ++var3) {
- URL var4 = var0[var3];
-
- try {
- Permission var5 = var4.openConnection().getPermission();
- if (var5 != null) {
- if (var5 instanceof FilePermission) {
- String var6 = var5.getName();
- int var7 = var6.lastIndexOf(File.separatorChar);
- if (var7 != -1) {
- var6 = var6.substring(0, var7 + 1);
- if (var6.endsWith(File.separator)) {
- var6 = var6 + "-";
- }
-
- var1.add(new FilePermission(var6, "read"));
- } else {
- var1.add(var5);
- }
- } else {
- var1.add(var5);
- if (var2) {
- String var10 = var4.getHost();
- if (var10 != null) {
- var1.add(new SocketPermission(var10, "connect, accept"));
- }
- }
- }
- }
- } catch (IOException var8) {
- }
- }
-
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- // $FF: synthetic method
- static ReferenceQueue access$200() {
- return refQueue;
- }
-
- // $FF: synthetic method
- static void access$300(URL[] var0, PermissionCollection var1, boolean var2) {
- addPermissionsForURLs(var0, var1, var2);
- }
-
- // $FF: synthetic method
- static String access$400(URL[] var0) {
- return urlsToPath(var0);
- }
-
- static {
- String var0 = (String)AccessController.doPrivileged(new GetPropertyAction("java.rmi.server.codebase"));
- if (var0 != null && var0.trim().length() > 0) {
- codebase = var0;
- }
-
- codebaseURLs = null;
- codebaseLoaders = Collections.synchronizedMap(new WeakHashMap(5));
-
- for(ClassLoader var1 = ClassLoader.getSystemClassLoader(); var1 != null; var1 = var1.getParent()) {
- codebaseLoaders.put(var1, (Object)null);
- }
-
- loaderTable = new HashMap(5);
- refQueue = new ReferenceQueue();
- pathToURLsCache = new WeakHashMap(5);
- }
- }
-