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 / security / CodeSource.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  4.3 KB  |  282 lines

  1. package java.security;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.IOException;
  5. import java.io.ObjectInputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.Serializable;
  8. import java.net.SocketPermission;
  9. import java.net.URL;
  10. import java.security.cert.Certificate;
  11. import java.security.cert.CertificateEncodingException;
  12. import java.security.cert.CertificateException;
  13. import java.security.cert.CertificateFactory;
  14. import java.util.Hashtable;
  15.  
  16. public class CodeSource implements Serializable {
  17.    private URL location;
  18.    private transient Certificate[] certs;
  19.    // $FF: renamed from: sp java.net.SocketPermission
  20.    private transient SocketPermission field_0;
  21.  
  22.    public CodeSource(URL var1, Certificate[] var2) {
  23.       this.location = var1;
  24.       if (var2 != null) {
  25.          this.certs = (Certificate[])var2.clone();
  26.       }
  27.  
  28.    }
  29.  
  30.    public int hashCode() {
  31.       return this.location != null ? this.location.hashCode() : 0;
  32.    }
  33.  
  34.    public boolean equals(Object var1) {
  35.       if (var1 == this) {
  36.          return true;
  37.       } else if (!(var1 instanceof CodeSource)) {
  38.          return false;
  39.       } else {
  40.          CodeSource var2 = (CodeSource)var1;
  41.          if (this.location == null) {
  42.             if (var2.location != null) {
  43.                return false;
  44.             }
  45.          } else if (!this.location.equals(var2.location)) {
  46.             return false;
  47.          }
  48.  
  49.          if (this.certs == null) {
  50.             if (var2.certs != null) {
  51.                return false;
  52.             }
  53.          } else {
  54.             if (var2.certs == null) {
  55.                return false;
  56.             }
  57.  
  58.             for(int var4 = 0; var4 < this.certs.length; ++var4) {
  59.                boolean var3 = false;
  60.  
  61.                for(int var5 = 0; var5 < var2.certs.length; ++var5) {
  62.                   if (this.certs[var4].equals(var2.certs[var5])) {
  63.                      var3 = true;
  64.                      break;
  65.                   }
  66.                }
  67.  
  68.                if (!var3) {
  69.                   return false;
  70.                }
  71.             }
  72.  
  73.             for(int var8 = 0; var8 < var2.certs.length; ++var8) {
  74.                boolean var7 = false;
  75.  
  76.                for(int var6 = 0; var6 < this.certs.length; ++var6) {
  77.                   if (var2.certs[var8].equals(this.certs[var6])) {
  78.                      var7 = true;
  79.                      break;
  80.                   }
  81.                }
  82.  
  83.                if (!var7) {
  84.                   return false;
  85.                }
  86.             }
  87.          }
  88.  
  89.          return true;
  90.       }
  91.    }
  92.  
  93.    public final URL getLocation() {
  94.       return this.location;
  95.    }
  96.  
  97.    public final Certificate[] getCertificates() {
  98.       return this.certs != null ? (Certificate[])this.certs.clone() : null;
  99.    }
  100.  
  101.    public boolean implies(CodeSource var1) {
  102.       if (var1 == null) {
  103.          return false;
  104.       } else {
  105.          return this.matchCerts(var1) && this.matchLocation(var1);
  106.       }
  107.    }
  108.  
  109.    private boolean matchCerts(CodeSource var1) {
  110.       if (this.certs == null) {
  111.          return true;
  112.       } else if (var1.certs == null) {
  113.          return false;
  114.       } else {
  115.          for(int var3 = 0; var3 < this.certs.length; ++var3) {
  116.             boolean var2 = false;
  117.  
  118.             for(int var4 = 0; var4 < var1.certs.length; ++var4) {
  119.                if (this.certs[var3].equals(var1.certs[var4])) {
  120.                   var2 = true;
  121.                   break;
  122.                }
  123.             }
  124.  
  125.             if (!var2) {
  126.                return false;
  127.             }
  128.          }
  129.  
  130.          return true;
  131.       }
  132.    }
  133.  
  134.    private boolean matchLocation(CodeSource var1) {
  135.       if (this.location == null) {
  136.          return true;
  137.       } else if (var1 != null && var1.location != null) {
  138.          if (this.location.equals(var1.location)) {
  139.             return true;
  140.          } else if (!this.location.getProtocol().equals(var1.location.getProtocol())) {
  141.             return false;
  142.          } else {
  143.             if (this.location.getHost() != null && (!this.location.getHost().equals("") && !this.location.getHost().equals("localhost") || !var1.location.getHost().equals("") && !var1.location.getHost().equals("localhost")) && !this.location.getHost().equals(var1.location.getHost())) {
  144.                if (this.field_0 == null) {
  145.                   this.field_0 = new SocketPermission(this.location.getHost(), "resolve");
  146.                }
  147.  
  148.                if (var1.field_0 == null) {
  149.                   if (var1.location.getHost() == null || var1.location.getHost().equals("")) {
  150.                      return false;
  151.                   }
  152.  
  153.                   var1.field_0 = new SocketPermission(var1.location.getHost(), "resolve");
  154.                }
  155.  
  156.                boolean var2 = this.field_0.implies(var1.field_0);
  157.                if (!var2) {
  158.                   return false;
  159.                }
  160.             }
  161.  
  162.             if (this.location.getPort() != -1 && this.location.getPort() != var1.location.getPort()) {
  163.                return false;
  164.             } else {
  165.                if (this.location.getFile().endsWith("/-")) {
  166.                   String var5 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
  167.                   if (!var1.location.getFile().startsWith(var5)) {
  168.                      return false;
  169.                   }
  170.                } else if (this.location.getFile().endsWith("/*")) {
  171.                   int var6 = var1.location.getFile().lastIndexOf(47);
  172.                   if (var6 == -1) {
  173.                      return false;
  174.                   }
  175.  
  176.                   String var3 = this.location.getFile().substring(0, this.location.getFile().length() - 1);
  177.                   String var4 = var1.location.getFile().substring(0, var6 + 1);
  178.                   if (!var4.equals(var3)) {
  179.                      return false;
  180.                   }
  181.                } else if (!var1.location.getFile().equals(this.location.getFile()) && !var1.location.getFile().equals(this.location.getFile() + "/")) {
  182.                   return false;
  183.                }
  184.  
  185.                if (this.location.getRef() == null) {
  186.                   return true;
  187.                } else {
  188.                   return this.location.getRef().equals(var1.location.getRef());
  189.                }
  190.             }
  191.          }
  192.       } else {
  193.          return false;
  194.       }
  195.    }
  196.  
  197.    public String toString() {
  198.       StringBuffer var1 = new StringBuffer();
  199.       var1.append("(");
  200.       var1.append(this.location);
  201.       if (this.certs != null && this.certs.length > 0) {
  202.          for(int var2 = 0; var2 < this.certs.length; ++var2) {
  203.             var1.append(" " + this.certs[var2]);
  204.          }
  205.       } else {
  206.          var1.append(" <no certificates>");
  207.       }
  208.  
  209.       var1.append(")");
  210.       return var1.toString();
  211.    }
  212.  
  213.    private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
  214.       var1.defaultWriteObject();
  215.       if (this.certs != null && this.certs.length != 0) {
  216.          var1.writeInt(this.certs.length);
  217.  
  218.          for(int var2 = 0; var2 < this.certs.length; ++var2) {
  219.             Certificate var3 = this.certs[var2];
  220.  
  221.             try {
  222.                var1.writeUTF(var3.getType());
  223.                byte[] var4 = var3.getEncoded();
  224.                var1.writeInt(var4.length);
  225.                var1.write(var4);
  226.             } catch (CertificateEncodingException var5) {
  227.                throw new IOException(((Throwable)var5).getMessage());
  228.             }
  229.          }
  230.       } else {
  231.          var1.writeInt(0);
  232.       }
  233.  
  234.    }
  235.  
  236.    private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  237.       Hashtable var3 = null;
  238.       var1.defaultReadObject();
  239.       int var4 = var1.readInt();
  240.       if (var4 > 0) {
  241.          var3 = new Hashtable(3);
  242.          this.certs = new Certificate[var4];
  243.       }
  244.  
  245.       for(int var5 = 0; var5 < var4; ++var5) {
  246.          String var6 = var1.readUTF();
  247.          CertificateFactory var2;
  248.          if (var3.containsKey(var6)) {
  249.             var2 = (CertificateFactory)var3.get(var6);
  250.          } else {
  251.             try {
  252.                var2 = CertificateFactory.getInstance(var6);
  253.             } catch (CertificateException var12) {
  254.                throw new ClassNotFoundException("Certificate factory for " + var6 + " not found");
  255.             }
  256.  
  257.             var3.put(var6, var2);
  258.          }
  259.  
  260.          Object var7 = null;
  261.  
  262.          try {
  263.             var13 = new byte[var1.readInt()];
  264.          } catch (OutOfMemoryError var11) {
  265.             throw new IOException("Certificate too big");
  266.          }
  267.  
  268.          var1.readFully(var13);
  269.          ByteArrayInputStream var8 = new ByteArrayInputStream(var13);
  270.  
  271.          try {
  272.             this.certs[var5] = var2.generateCertificate(var8);
  273.          } catch (CertificateException var10) {
  274.             throw new IOException(((Throwable)var10).getMessage());
  275.          }
  276.  
  277.          var8.close();
  278.       }
  279.  
  280.    }
  281. }
  282.