home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- import java.io.File;
- import java.io.FilePermission;
- import java.io.IOException;
- import java.security.AccessControlContext;
- import java.security.AccessController;
- import java.security.CodeSource;
- import java.security.Permission;
- import java.security.PermissionCollection;
- import java.security.PrivilegedActionException;
- import java.security.SecureClassLoader;
- import java.security.cert.Certificate;
- import java.util.Enumeration;
- import java.util.jar.Attributes;
- import java.util.jar.Manifest;
- import java.util.jar.Attributes.Name;
- import sun.misc.Resource;
- import sun.misc.URLClassPath;
-
- public class URLClassLoader extends SecureClassLoader {
- private URLClassPath ucp;
- private AccessControlContext acc;
-
- public URLClassLoader(URL[] var1, ClassLoader var2) {
- super(var2);
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- var3.checkCreateClassLoader();
- }
-
- this.ucp = new URLClassPath(var1);
- this.acc = AccessController.getContext();
- }
-
- public URLClassLoader(URL[] var1) {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkCreateClassLoader();
- }
-
- this.ucp = new URLClassPath(var1);
- this.acc = AccessController.getContext();
- }
-
- public URLClassLoader(URL[] var1, ClassLoader var2, URLStreamHandlerFactory var3) {
- super(var2);
- SecurityManager var4 = System.getSecurityManager();
- if (var4 != null) {
- var4.checkCreateClassLoader();
- }
-
- this.ucp = new URLClassPath(var1, var3);
- this.acc = AccessController.getContext();
- }
-
- protected void addURL(URL var1) {
- this.ucp.addURL(var1);
- }
-
- public URL[] getURLs() {
- return this.ucp.getURLs();
- }
-
- protected Class findClass(String var1) throws ClassNotFoundException {
- try {
- return (Class)AccessController.doPrivileged(new 1(this, var1), this.acc);
- } catch (PrivilegedActionException var3) {
- throw (ClassNotFoundException)var3.getException();
- }
- }
-
- private Class defineClass(String var1, Resource var2) throws IOException {
- int var3 = var1.lastIndexOf(46);
- URL var4 = var2.getCodeSourceURL();
- if (var3 != -1) {
- String var5 = var1.substring(0, var3);
- Package var6 = ((ClassLoader)this).getPackage(var5);
- Manifest var7 = var2.getManifest();
- if (var6 != null) {
- boolean var8;
- if (var6.isSealed()) {
- var8 = var6.isSealed(var4);
- } else {
- var8 = var7 == null || !this.isSealed(var5, var7);
- }
-
- if (!var8) {
- throw new SecurityException("sealing violation");
- }
- } else if (var7 != null) {
- this.definePackage(var5, var7, var4);
- } else {
- ((ClassLoader)this).definePackage(var5, (String)null, (String)null, (String)null, (String)null, (String)null, (String)null, (URL)null);
- }
- }
-
- byte[] var9 = var2.getBytes();
- Certificate[] var10 = var2.getCertificates();
- CodeSource var11 = new CodeSource(var4, var10);
- return ((SecureClassLoader)this).defineClass(var1, var9, 0, var9.length, var11);
- }
-
- protected Package definePackage(String var1, Manifest var2, URL var3) throws IllegalArgumentException {
- String var4 = var1.replace('.', '/').concat("/");
- String var5 = null;
- String var6 = null;
- String var7 = null;
- String var8 = null;
- String var9 = null;
- String var10 = null;
- String var11 = null;
- URL var12 = null;
- Attributes var13 = var2.getAttributes(var4);
- if (var13 != null) {
- var5 = var13.getValue(Name.SPECIFICATION_TITLE);
- var6 = var13.getValue(Name.SPECIFICATION_VERSION);
- var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
- var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
- var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
- var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
- var11 = var13.getValue(Name.SEALED);
- }
-
- var13 = var2.getMainAttributes();
- if (var13 != null) {
- if (var5 == null) {
- var5 = var13.getValue(Name.SPECIFICATION_TITLE);
- }
-
- if (var6 == null) {
- var6 = var13.getValue(Name.SPECIFICATION_VERSION);
- }
-
- if (var7 == null) {
- var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
- }
-
- if (var8 == null) {
- var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
- }
-
- if (var9 == null) {
- var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
- }
-
- if (var10 == null) {
- var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
- }
-
- if (var11 == null) {
- var11 = var13.getValue(Name.SEALED);
- }
- }
-
- if ("true".equalsIgnoreCase(var11)) {
- var12 = var3;
- }
-
- return ((ClassLoader)this).definePackage(var1, var5, var6, var7, var8, var9, var10, var12);
- }
-
- private boolean isSealed(String var1, Manifest var2) {
- String var3 = var1.replace('.', '/').concat("/");
- Attributes var4 = var2.getAttributes(var3);
- String var5 = null;
- if (var4 != null) {
- var5 = var4.getValue(Name.SEALED);
- }
-
- if (var5 == null && (var4 = var2.getMainAttributes()) != null) {
- var5 = var4.getValue(Name.SEALED);
- }
-
- return "true".equalsIgnoreCase(var5);
- }
-
- public URL findResource(String var1) {
- Resource var2 = (Resource)AccessController.doPrivileged(new 2(this, var1), this.acc);
- return var2 != null ? this.ucp.checkURL(var2.getURL()) : null;
- }
-
- public Enumeration findResources(String var1) throws IOException {
- Enumeration var2 = this.ucp.getResources(var1, true);
- return new 3(this, var2);
- }
-
- protected PermissionCollection getPermissions(CodeSource var1) {
- PermissionCollection var2 = super.getPermissions(var1);
- URL var3 = var1.getLocation();
-
- Object var4;
- try {
- var4 = var3.openConnection().getPermission();
- } catch (IOException var7) {
- var4 = null;
- }
-
- if (var4 instanceof FilePermission) {
- String var5 = ((Permission)var4).getName();
- if (var5.endsWith(File.separator)) {
- var5 = var5 + "-";
- var4 = new FilePermission(var5, "read");
- }
- } else if (var4 == null && var3.getProtocol().equals("file")) {
- String var10 = var3.getFile().replace('/', File.separatorChar);
- if (var10.endsWith(File.separator)) {
- var10 = var10 + "-";
- }
-
- var4 = new FilePermission(var10, "read");
- } else {
- String var9 = var3.getHost();
- if (var9 == null) {
- var9 = "localhost";
- }
-
- var4 = new SocketPermission(var9, "connect, accept");
- }
-
- if (var4 != null) {
- SecurityManager var11 = System.getSecurityManager();
- if (var11 != null) {
- AccessController.doPrivileged(new 5(this, var11, (Permission)var4), this.acc);
- }
-
- var2.add((Permission)var4);
- }
-
- return var2;
- }
-
- public static URLClassLoader newInstance(URL[] var0, ClassLoader var1) {
- AccessControlContext var2 = AccessController.getContext();
- URLClassLoader var3 = (URLClassLoader)AccessController.doPrivileged(new 6(var0, var1));
- var3.acc = var2;
- return var3;
- }
-
- public static URLClassLoader newInstance(URL[] var0) {
- AccessControlContext var1 = AccessController.getContext();
- URLClassLoader var2 = (URLClassLoader)AccessController.doPrivileged(new 7(var0));
- var2.acc = var1;
- return var2;
- }
-
- // $FF: synthetic method
- static URLClassPath access$000(URLClassLoader var0) {
- return var0.ucp;
- }
-
- // $FF: synthetic method
- static Class access$100(URLClassLoader var0, String var1, Resource var2) throws IOException {
- return var0.defineClass(var1, var2);
- }
-
- // $FF: synthetic method
- static AccessControlContext access$300(URLClassLoader var0) {
- return var0.acc;
- }
- }
-