home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / net / URLClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.9 KB  |  262 lines

  1. package java.net;
  2.  
  3. import java.io.File;
  4. import java.io.FilePermission;
  5. import java.io.IOException;
  6. import java.security.AccessControlContext;
  7. import java.security.AccessController;
  8. import java.security.CodeSource;
  9. import java.security.Permission;
  10. import java.security.PermissionCollection;
  11. import java.security.PrivilegedActionException;
  12. import java.security.SecureClassLoader;
  13. import java.security.cert.Certificate;
  14. import java.util.Enumeration;
  15. import java.util.jar.Attributes;
  16. import java.util.jar.Manifest;
  17. import java.util.jar.Attributes.Name;
  18. import sun.misc.Resource;
  19. import sun.misc.URLClassPath;
  20.  
  21. public class URLClassLoader extends SecureClassLoader {
  22.    private URLClassPath ucp;
  23.    private AccessControlContext acc;
  24.  
  25.    public URLClassLoader(URL[] var1, ClassLoader var2) {
  26.       super(var2);
  27.       SecurityManager var3 = System.getSecurityManager();
  28.       if (var3 != null) {
  29.          var3.checkCreateClassLoader();
  30.       }
  31.  
  32.       this.ucp = new URLClassPath(var1);
  33.       this.acc = AccessController.getContext();
  34.    }
  35.  
  36.    public URLClassLoader(URL[] var1) {
  37.       SecurityManager var2 = System.getSecurityManager();
  38.       if (var2 != null) {
  39.          var2.checkCreateClassLoader();
  40.       }
  41.  
  42.       this.ucp = new URLClassPath(var1);
  43.       this.acc = AccessController.getContext();
  44.    }
  45.  
  46.    public URLClassLoader(URL[] var1, ClassLoader var2, URLStreamHandlerFactory var3) {
  47.       super(var2);
  48.       SecurityManager var4 = System.getSecurityManager();
  49.       if (var4 != null) {
  50.          var4.checkCreateClassLoader();
  51.       }
  52.  
  53.       this.ucp = new URLClassPath(var1, var3);
  54.       this.acc = AccessController.getContext();
  55.    }
  56.  
  57.    protected void addURL(URL var1) {
  58.       this.ucp.addURL(var1);
  59.    }
  60.  
  61.    public URL[] getURLs() {
  62.       return this.ucp.getURLs();
  63.    }
  64.  
  65.    protected Class findClass(String var1) throws ClassNotFoundException {
  66.       try {
  67.          return (Class)AccessController.doPrivileged(new 1(this, var1), this.acc);
  68.       } catch (PrivilegedActionException var3) {
  69.          throw (ClassNotFoundException)var3.getException();
  70.       }
  71.    }
  72.  
  73.    private Class defineClass(String var1, Resource var2) throws IOException {
  74.       int var3 = var1.lastIndexOf(46);
  75.       URL var4 = var2.getCodeSourceURL();
  76.       if (var3 != -1) {
  77.          String var5 = var1.substring(0, var3);
  78.          Package var6 = ((ClassLoader)this).getPackage(var5);
  79.          Manifest var7 = var2.getManifest();
  80.          if (var6 != null) {
  81.             boolean var8;
  82.             if (var6.isSealed()) {
  83.                var8 = var6.isSealed(var4);
  84.             } else {
  85.                var8 = var7 == null || !this.isSealed(var5, var7);
  86.             }
  87.  
  88.             if (!var8) {
  89.                throw new SecurityException("sealing violation");
  90.             }
  91.          } else if (var7 != null) {
  92.             this.definePackage(var5, var7, var4);
  93.          } else {
  94.             ((ClassLoader)this).definePackage(var5, (String)null, (String)null, (String)null, (String)null, (String)null, (String)null, (URL)null);
  95.          }
  96.       }
  97.  
  98.       byte[] var9 = var2.getBytes();
  99.       Certificate[] var10 = var2.getCertificates();
  100.       CodeSource var11 = new CodeSource(var4, var10);
  101.       return ((SecureClassLoader)this).defineClass(var1, var9, 0, var9.length, var11);
  102.    }
  103.  
  104.    protected Package definePackage(String var1, Manifest var2, URL var3) throws IllegalArgumentException {
  105.       String var4 = var1.replace('.', '/').concat("/");
  106.       String var5 = null;
  107.       String var6 = null;
  108.       String var7 = null;
  109.       String var8 = null;
  110.       String var9 = null;
  111.       String var10 = null;
  112.       String var11 = null;
  113.       URL var12 = null;
  114.       Attributes var13 = var2.getAttributes(var4);
  115.       if (var13 != null) {
  116.          var5 = var13.getValue(Name.SPECIFICATION_TITLE);
  117.          var6 = var13.getValue(Name.SPECIFICATION_VERSION);
  118.          var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
  119.          var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
  120.          var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
  121.          var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
  122.          var11 = var13.getValue(Name.SEALED);
  123.       }
  124.  
  125.       var13 = var2.getMainAttributes();
  126.       if (var13 != null) {
  127.          if (var5 == null) {
  128.             var5 = var13.getValue(Name.SPECIFICATION_TITLE);
  129.          }
  130.  
  131.          if (var6 == null) {
  132.             var6 = var13.getValue(Name.SPECIFICATION_VERSION);
  133.          }
  134.  
  135.          if (var7 == null) {
  136.             var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
  137.          }
  138.  
  139.          if (var8 == null) {
  140.             var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
  141.          }
  142.  
  143.          if (var9 == null) {
  144.             var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
  145.          }
  146.  
  147.          if (var10 == null) {
  148.             var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
  149.          }
  150.  
  151.          if (var11 == null) {
  152.             var11 = var13.getValue(Name.SEALED);
  153.          }
  154.       }
  155.  
  156.       if ("true".equalsIgnoreCase(var11)) {
  157.          var12 = var3;
  158.       }
  159.  
  160.       return ((ClassLoader)this).definePackage(var1, var5, var6, var7, var8, var9, var10, var12);
  161.    }
  162.  
  163.    private boolean isSealed(String var1, Manifest var2) {
  164.       String var3 = var1.replace('.', '/').concat("/");
  165.       Attributes var4 = var2.getAttributes(var3);
  166.       String var5 = null;
  167.       if (var4 != null) {
  168.          var5 = var4.getValue(Name.SEALED);
  169.       }
  170.  
  171.       if (var5 == null && (var4 = var2.getMainAttributes()) != null) {
  172.          var5 = var4.getValue(Name.SEALED);
  173.       }
  174.  
  175.       return "true".equalsIgnoreCase(var5);
  176.    }
  177.  
  178.    public URL findResource(String var1) {
  179.       Resource var2 = (Resource)AccessController.doPrivileged(new 2(this, var1), this.acc);
  180.       return var2 != null ? this.ucp.checkURL(var2.getURL()) : null;
  181.    }
  182.  
  183.    public Enumeration findResources(String var1) throws IOException {
  184.       Enumeration var2 = this.ucp.getResources(var1, true);
  185.       return new 3(this, var2);
  186.    }
  187.  
  188.    protected PermissionCollection getPermissions(CodeSource var1) {
  189.       PermissionCollection var2 = super.getPermissions(var1);
  190.       URL var3 = var1.getLocation();
  191.  
  192.       Object var4;
  193.       try {
  194.          var4 = var3.openConnection().getPermission();
  195.       } catch (IOException var7) {
  196.          var4 = null;
  197.       }
  198.  
  199.       if (var4 instanceof FilePermission) {
  200.          String var5 = ((Permission)var4).getName();
  201.          if (var5.endsWith(File.separator)) {
  202.             var5 = var5 + "-";
  203.             var4 = new FilePermission(var5, "read");
  204.          }
  205.       } else if (var4 == null && var3.getProtocol().equals("file")) {
  206.          String var10 = var3.getFile().replace('/', File.separatorChar);
  207.          if (var10.endsWith(File.separator)) {
  208.             var10 = var10 + "-";
  209.          }
  210.  
  211.          var4 = new FilePermission(var10, "read");
  212.       } else {
  213.          String var9 = var3.getHost();
  214.          if (var9 == null) {
  215.             var9 = "localhost";
  216.          }
  217.  
  218.          var4 = new SocketPermission(var9, "connect, accept");
  219.       }
  220.  
  221.       if (var4 != null) {
  222.          SecurityManager var11 = System.getSecurityManager();
  223.          if (var11 != null) {
  224.             AccessController.doPrivileged(new 5(this, var11, (Permission)var4), this.acc);
  225.          }
  226.  
  227.          var2.add((Permission)var4);
  228.       }
  229.  
  230.       return var2;
  231.    }
  232.  
  233.    public static URLClassLoader newInstance(URL[] var0, ClassLoader var1) {
  234.       AccessControlContext var2 = AccessController.getContext();
  235.       URLClassLoader var3 = (URLClassLoader)AccessController.doPrivileged(new 6(var0, var1));
  236.       var3.acc = var2;
  237.       return var3;
  238.    }
  239.  
  240.    public static URLClassLoader newInstance(URL[] var0) {
  241.       AccessControlContext var1 = AccessController.getContext();
  242.       URLClassLoader var2 = (URLClassLoader)AccessController.doPrivileged(new 7(var0));
  243.       var2.acc = var1;
  244.       return var2;
  245.    }
  246.  
  247.    // $FF: synthetic method
  248.    static URLClassPath access$000(URLClassLoader var0) {
  249.       return var0.ucp;
  250.    }
  251.  
  252.    // $FF: synthetic method
  253.    static Class access$100(URLClassLoader var0, String var1, Resource var2) throws IOException {
  254.       return var0.defineClass(var1, var2);
  255.    }
  256.  
  257.    // $FF: synthetic method
  258.    static AccessControlContext access$300(URLClassLoader var0) {
  259.       return var0.acc;
  260.    }
  261. }
  262.