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 / SocketPermission.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.3 KB  |  442 lines

  1. package java.net;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.Serializable;
  7. import java.security.AccessController;
  8. import java.security.Permission;
  9. import java.security.PermissionCollection;
  10. import sun.security.action.GetBooleanAction;
  11.  
  12. public final class SocketPermission extends Permission implements Serializable {
  13.    private static final int CONNECT = 1;
  14.    private static final int LISTEN = 2;
  15.    private static final int ACCEPT = 4;
  16.    private static final int RESOLVE = 8;
  17.    private static final int NONE = 0;
  18.    private static final int ALL = 15;
  19.    private static final int PORT_MIN = 0;
  20.    private static final int PORT_MAX = 65535;
  21.    private static final int PRIV_PORT_MAX = 1023;
  22.    private transient int mask;
  23.    private String actions;
  24.    private transient String cname;
  25.    private transient InetAddress[] addresses;
  26.    private transient boolean wildcard;
  27.    private transient boolean init_with_ip;
  28.    private transient boolean invalid;
  29.    private transient int[] portrange;
  30.    private static boolean trustProxy;
  31.  
  32.    public SocketPermission(String var1, String var2) {
  33.       super(getHost(var1));
  34.       this.init(var1, getMask(var2));
  35.    }
  36.  
  37.    SocketPermission(String var1, int var2) {
  38.       super(getHost(var1));
  39.       this.init(var1, var2);
  40.    }
  41.  
  42.    private static String getHost(String var0) {
  43.       return var0.equals("") ? "localhost" : var0;
  44.    }
  45.  
  46.    private boolean isDottedIP(String var1) {
  47.       char[] var2 = var1.toCharArray();
  48.       int var3 = var2.length - 1;
  49.       int var4 = 0;
  50.       if (var3 > -1 && var2[0] == '.') {
  51.          return false;
  52.       } else {
  53.          while(var3 != -1) {
  54.             char var5 = var2[var3];
  55.             char var6;
  56.             char var7;
  57.             if (var3 < 2) {
  58.                var7 = '.';
  59.                if (var3 == 1) {
  60.                   var6 = var2[0];
  61.                } else {
  62.                   var6 = '.';
  63.                }
  64.  
  65.                var3 = -1;
  66.             } else {
  67.                var6 = var2[var3 - 1];
  68.                if (var6 == '.') {
  69.                   var7 = '.';
  70.                   var3 -= 2;
  71.                } else {
  72.                   var7 = var2[var3 - 2];
  73.                   if (var7 == '.') {
  74.                      var3 -= 3;
  75.                   } else if (var3 - 3 != -1) {
  76.                      if (var2[var3 - 3] != '.') {
  77.                         return false;
  78.                      }
  79.  
  80.                      var3 -= 4;
  81.                   } else {
  82.                      var3 -= 3;
  83.                   }
  84.                }
  85.             }
  86.  
  87.             if (var5 < '0' || var5 > '9' || var6 < '0' && var6 != '.' || var6 > '9' || var7 < '0' && var7 != '.' || var7 > '2' || var7 == '2' && (var6 > '5' || var6 == '5' && var5 > '5')) {
  88.                return false;
  89.             }
  90.  
  91.             ++var4;
  92.          }
  93.  
  94.          return var4 == 4;
  95.       }
  96.    }
  97.  
  98.    private int[] parsePort(String var1) throws Exception {
  99.       if (var1 != null && !var1.equals("") && !var1.equals("*")) {
  100.          int var2 = var1.indexOf(45);
  101.          if (var2 == -1) {
  102.             int var7 = Integer.parseInt(var1);
  103.             return new int[]{var7, var7};
  104.          } else {
  105.             String var3 = var1.substring(0, var2);
  106.             String var4 = var1.substring(var2 + 1);
  107.             int var5;
  108.             if (var3.equals("")) {
  109.                var5 = 0;
  110.             } else {
  111.                var5 = Integer.parseInt(var3);
  112.             }
  113.  
  114.             int var6;
  115.             if (var4.equals("")) {
  116.                var6 = 65535;
  117.             } else {
  118.                var6 = Integer.parseInt(var4);
  119.             }
  120.  
  121.             if (var6 < var5) {
  122.                throw new IllegalArgumentException("invalid port range");
  123.             } else {
  124.                return new int[]{var5, var6};
  125.             }
  126.          }
  127.       } else {
  128.          return new int[]{0, 65535};
  129.       }
  130.    }
  131.  
  132.    private void init(String var1, int var2) {
  133.       if (var1 == null) {
  134.          throw new NullPointerException("host can't be null");
  135.       } else {
  136.          var1 = getHost(var1);
  137.          if ((var2 & 15) != var2) {
  138.             throw new IllegalArgumentException("invalid actions mask");
  139.          } else {
  140.             this.mask = var2 | 8;
  141.             int var3 = var1.indexOf(58);
  142.             if (var3 != -1) {
  143.                String var4 = var1.substring(var3 + 1);
  144.                var1 = var1.substring(0, var3);
  145.  
  146.                try {
  147.                   this.portrange = this.parsePort(var4);
  148.                } catch (Exception var7) {
  149.                   throw new IllegalArgumentException("invalid port range: " + var4);
  150.                }
  151.             } else {
  152.                this.portrange = new int[]{0, 65535};
  153.             }
  154.  
  155.             if (var1.startsWith("*")) {
  156.                this.wildcard = true;
  157.                if (var1.equals("*")) {
  158.                   this.cname = "";
  159.                } else {
  160.                   if (!var1.startsWith("*.")) {
  161.                      throw new IllegalArgumentException("invalid host wildcard specification");
  162.                   }
  163.  
  164.                   this.cname = var1.substring(1).toLowerCase();
  165.                }
  166.  
  167.             } else {
  168.                if (this.isDottedIP(var1)) {
  169.                   try {
  170.                      this.addresses = new InetAddress[]{InetAddress.getByName(var1)};
  171.                      this.init_with_ip = true;
  172.                   } catch (UnknownHostException var6) {
  173.                      this.invalid = true;
  174.                   }
  175.                }
  176.  
  177.             }
  178.          }
  179.       }
  180.    }
  181.  
  182.    private static int getMask(String param0) {
  183.       // $FF: Couldn't be decompiled
  184.    }
  185.  
  186.    void getCanonName() throws UnknownHostException {
  187.       if (this.cname == null && !this.invalid) {
  188.          try {
  189.             if (this.addresses == null) {
  190.                this.getIP();
  191.             }
  192.  
  193.             if (this.init_with_ip) {
  194.                this.cname = this.addresses[0].getHostName(false).toLowerCase();
  195.             } else {
  196.                this.cname = InetAddress.getByName(this.addresses[0].getHostAddress()).getHostName(false).toLowerCase();
  197.             }
  198.  
  199.          } catch (UnknownHostException var2) {
  200.             this.invalid = true;
  201.             throw var2;
  202.          }
  203.       }
  204.    }
  205.  
  206.    void getIP() throws UnknownHostException {
  207.       if (this.addresses == null && !this.wildcard && !this.invalid) {
  208.          try {
  209.             int var2 = ((Permission)this).getName().indexOf(":");
  210.             String var1;
  211.             if (var2 == -1) {
  212.                var1 = ((Permission)this).getName();
  213.             } else {
  214.                var1 = ((Permission)this).getName().substring(0, var2);
  215.             }
  216.  
  217.             this.addresses = new InetAddress[]{InetAddress.getAllByName0(var1, false)[0]};
  218.          } catch (UnknownHostException var3) {
  219.             this.invalid = true;
  220.             throw var3;
  221.          }
  222.       }
  223.    }
  224.  
  225.    public boolean implies(Permission var1) {
  226.       if (!(var1 instanceof SocketPermission)) {
  227.          return false;
  228.       } else {
  229.          SocketPermission var4 = (SocketPermission)var1;
  230.          return (this.mask & var4.mask) == var4.mask && this.impliesIgnoreMask(var4);
  231.       }
  232.    }
  233.  
  234.    boolean impliesIgnoreMask(SocketPermission var1) {
  235.       if ((var1.mask & 8) == var1.mask || var1.portrange[0] >= this.portrange[0] && var1.portrange[1] <= this.portrange[1]) {
  236.          if (this.wildcard && ((Permission)this).getName().equals("*")) {
  237.             return true;
  238.          } else if (!this.invalid && !var1.invalid) {
  239.             try {
  240.                if (this.init_with_ip) {
  241.                   if (var1.wildcard) {
  242.                      return false;
  243.                   } else if (var1.init_with_ip) {
  244.                      return this.addresses[0].equals(var1.addresses[0]);
  245.                   } else {
  246.                      if (var1.addresses == null) {
  247.                         var1.getIP();
  248.                      }
  249.  
  250.                      for(int var6 = 0; var6 < var1.addresses.length; ++var6) {
  251.                         if (this.addresses[0].equals(var1.addresses[var6])) {
  252.                            return true;
  253.                         }
  254.                      }
  255.  
  256.                      return false;
  257.                   }
  258.                } else if (!this.wildcard && !var1.wildcard) {
  259.                   if (this.addresses == null) {
  260.                      this.getIP();
  261.                   }
  262.  
  263.                   if (var1.addresses == null) {
  264.                      var1.getIP();
  265.                   }
  266.  
  267.                   for(int var3 = 0; var3 < this.addresses.length; ++var3) {
  268.                      for(int var2 = 0; var2 < var1.addresses.length; ++var2) {
  269.                         if (this.addresses[var3].equals(var1.addresses[var2])) {
  270.                            return true;
  271.                         }
  272.                      }
  273.                   }
  274.  
  275.                   if (this.cname == null) {
  276.                      this.getCanonName();
  277.                   }
  278.  
  279.                   if (var1.cname == null) {
  280.                      var1.getCanonName();
  281.                   }
  282.  
  283.                   return this.cname.equalsIgnoreCase(var1.cname);
  284.                } else if (this.wildcard && var1.wildcard) {
  285.                   return var1.cname.endsWith(this.cname);
  286.                } else if (var1.wildcard) {
  287.                   return false;
  288.                } else {
  289.                   if (var1.cname == null) {
  290.                      var1.getCanonName();
  291.                   }
  292.  
  293.                   return var1.cname.endsWith(this.cname);
  294.                }
  295.             } catch (UnknownHostException var5) {
  296.                return trustProxy ? this.inProxyWeTrust(var1) : false;
  297.             }
  298.          } else {
  299.             return trustProxy ? this.inProxyWeTrust(var1) : false;
  300.          }
  301.       } else {
  302.          return false;
  303.       }
  304.    }
  305.  
  306.    private boolean inProxyWeTrust(SocketPermission var1) {
  307.       String var2 = ((Permission)this).getName();
  308.       String var3 = ((Permission)var1).getName();
  309.       int var4 = var2.indexOf(58);
  310.       if (var4 != -1) {
  311.          var2 = var2.substring(0, var4);
  312.       }
  313.  
  314.       var4 = var3.indexOf(58);
  315.       if (var4 != -1) {
  316.          var3 = var3.substring(0, var4);
  317.       }
  318.  
  319.       return var2 == null ? false : var2.equalsIgnoreCase(var3);
  320.    }
  321.  
  322.    public boolean equals(Object var1) {
  323.       if (var1 == this) {
  324.          return true;
  325.       } else if (!(var1 instanceof SocketPermission)) {
  326.          return false;
  327.       } else {
  328.          SocketPermission var2 = (SocketPermission)var1;
  329.          if (this.mask != var2.mask) {
  330.             return false;
  331.          } else if (this.portrange[0] == var2.portrange[0] && this.portrange[1] == var2.portrange[1]) {
  332.             if (((Permission)this).getName().equalsIgnoreCase(((Permission)var2).getName())) {
  333.                return true;
  334.             } else {
  335.                try {
  336.                   this.getCanonName();
  337.                   var2.getCanonName();
  338.                } catch (UnknownHostException var4) {
  339.                   return false;
  340.                }
  341.  
  342.                if (!this.invalid && !var2.invalid) {
  343.                   return this.cname != null ? this.cname.equalsIgnoreCase(var2.cname) : false;
  344.                } else {
  345.                   return false;
  346.                }
  347.             }
  348.          } else {
  349.             return false;
  350.          }
  351.       }
  352.    }
  353.  
  354.    public int hashCode() {
  355.       if (!this.init_with_ip && !this.wildcard) {
  356.          try {
  357.             this.getCanonName();
  358.          } catch (UnknownHostException var2) {
  359.          }
  360.  
  361.          return !this.invalid && this.cname != null ? this.cname.hashCode() : ((Permission)this).getName().hashCode();
  362.       } else {
  363.          return ((Permission)this).getName().hashCode();
  364.       }
  365.    }
  366.  
  367.    int getMask() {
  368.       return this.mask;
  369.    }
  370.  
  371.    private static String getActions(int var0) {
  372.       StringBuffer var1 = new StringBuffer();
  373.       boolean var2 = false;
  374.       if ((var0 & 1) == 1) {
  375.          var2 = true;
  376.          var1.append("connect");
  377.       }
  378.  
  379.       if ((var0 & 2) == 2) {
  380.          if (var2) {
  381.             var1.append(',');
  382.          } else {
  383.             var2 = true;
  384.          }
  385.  
  386.          var1.append("listen");
  387.       }
  388.  
  389.       if ((var0 & 4) == 4) {
  390.          if (var2) {
  391.             var1.append(',');
  392.          } else {
  393.             var2 = true;
  394.          }
  395.  
  396.          var1.append("accept");
  397.       }
  398.  
  399.       if ((var0 & 8) == 8) {
  400.          if (var2) {
  401.             var1.append(',');
  402.          } else {
  403.             var2 = true;
  404.          }
  405.  
  406.          var1.append("resolve");
  407.       }
  408.  
  409.       return var1.toString();
  410.    }
  411.  
  412.    public String getActions() {
  413.       if (this.actions == null) {
  414.          this.actions = getActions(this.mask);
  415.       }
  416.  
  417.       return this.actions;
  418.    }
  419.  
  420.    public PermissionCollection newPermissionCollection() {
  421.       return new SocketPermissionCollection();
  422.    }
  423.  
  424.    private synchronized void writeObject(ObjectOutputStream var1) throws IOException {
  425.       if (this.actions == null) {
  426.          this.getActions();
  427.       }
  428.  
  429.       var1.defaultWriteObject();
  430.    }
  431.  
  432.    private synchronized void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  433.       var1.defaultReadObject();
  434.       this.init(((Permission)this).getName(), getMask(this.actions));
  435.    }
  436.  
  437.    static {
  438.       Boolean var0 = (Boolean)AccessController.doPrivileged(new GetBooleanAction("trustProxy"));
  439.       trustProxy = var0;
  440.    }
  441. }
  442.