home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 129 / dpcs1198.iso / Internet / Compu / Win95 / MSIE302.LIB / MSIE302.EXE / ieakjava.exe / CLASSR.EXE / com / ms / applet / AppletSecurity.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-02-24  |  6.7 KB  |  380 lines

  1. package com.ms.applet;
  2.  
  3. import java.io.File;
  4. import java.io.FileDescriptor;
  5. import java.net.InetAddress;
  6. import java.net.URL;
  7. import java.net.UnknownHostException;
  8. import java.util.StringTokenizer;
  9. import java.util.Vector;
  10.  
  11. public class AppletSecurity extends SecurityManager {
  12.    private static boolean debug;
  13.    boolean initACL;
  14.    String[] readACL;
  15.    String[] writeACL;
  16.    int networkMode;
  17.    static final int NETWORK_NONE = 1;
  18.    static final int NETWORK_HOST = 2;
  19.    static final int NETWORK_UNRESTRICTED = 3;
  20.  
  21.    public synchronized void checkPackageDefinition(String var1) {
  22.       for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  23.          String var3 = var1.substring(0, var2);
  24.          if (Boolean.getBoolean("package.restrict.definition." + var3)) {
  25.             throw new SecurityException();
  26.          }
  27.       }
  28.  
  29.       if (Boolean.getBoolean("package.restrict.definition." + var1)) {
  30.          throw new SecurityException();
  31.       }
  32.    }
  33.  
  34.    public synchronized void checkAccess(Thread var1) {
  35.       if (((SecurityManager)this).classLoaderDepth() == 3) {
  36.          if (!(var1.getThreadGroup() instanceof AppletThreadGroup)) {
  37.             throw new AppletSecurityException("thread");
  38.          }
  39.  
  40.          if (var1.getName().equals("AWT-Callback-Win32")) {
  41.             throw new AppletSecurityException("thread");
  42.          }
  43.       }
  44.  
  45.    }
  46.  
  47.    public Object getSecurityContext() {
  48.       AppletBaseClassLoader var1 = (AppletBaseClassLoader)((SecurityManager)this).currentClassLoader();
  49.       return var1 == null ? null : var1.base;
  50.    }
  51.  
  52.    public synchronized void checkAccess(ThreadGroup var1) {
  53.       switch (((SecurityManager)this).classLoaderDepth()) {
  54.          case 3:
  55.          case 4:
  56.             if (!(var1 instanceof AppletThreadGroup)) {
  57.                throw new AppletSecurityException("threadgroup", var1.toString());
  58.             }
  59.          default:
  60.       }
  61.    }
  62.  
  63.    public AppletSecurity() {
  64.       this.reset();
  65.    }
  66.  
  67.    public synchronized void checkListen(int var1) {
  68.       if (this.inApplet()) {
  69.          if (var1 <= 1024 || !"true".equalsIgnoreCase(System.getProperty("com.ms.applet.enable.serversockets"))) {
  70.             throw new AppletSecurityException("socket.listen", String.valueOf(var1));
  71.          }
  72.       }
  73.    }
  74.  
  75.    public synchronized void checkLink(String var1) {
  76.       switch (((SecurityManager)this).classLoaderDepth()) {
  77.          case 2:
  78.          case 3:
  79.             throw new AppletSecurityException("link", var1);
  80.          default:
  81.       }
  82.    }
  83.  
  84.    public synchronized void checkRegistry() {
  85.       if (this.inApplet()) {
  86.          throw new AppletSecurityException("registry");
  87.       }
  88.    }
  89.  
  90.    public synchronized void checkConnect(String var1, int var2) {
  91.       AppletBaseClassLoader var3 = (AppletBaseClassLoader)((SecurityManager)this).currentClassLoader();
  92.       if (var3 != null) {
  93.          int var4 = ((SecurityManager)this).classDepth("sun.net.www.http.HttpClient");
  94.          if (var4 <= 1) {
  95.             this.checkConnect(var3.base.getHost(), var1);
  96.          }
  97.       }
  98.    }
  99.  
  100.    public void checkConnect(String var1, int var2, Object var3) {
  101.       this.checkConnect(var1, var2);
  102.       if (var3 != null) {
  103.          this.checkConnect(((URL)var3).getHost(), var1);
  104.       }
  105.  
  106.    }
  107.  
  108.    public synchronized void checkConnect(String var1, String var2, boolean var3) {
  109.       if (var1 != null) {
  110.          switch (this.networkMode) {
  111.             case 1:
  112.                throw new AppletSecurityException("socket.connect", var1 + "->" + var2);
  113.             case 2:
  114.                if (var1.length() == 0) {
  115.                   throw new AppletSecurityException("Couldn't connect to " + var2 + " with origin from file");
  116.                } else {
  117.                   try {
  118.                      super.inCheck = true;
  119.                      if (var1.equals(var2)) {
  120.                         try {
  121.                            if (var2 != null && var2.length() != 0) {
  122.                               InetAddress var14 = InetAddress.getByName(var2);
  123.                            }
  124.  
  125.                            return;
  126.                         } catch (UnknownHostException var12) {
  127.                            if (!var3) {
  128.                               throw new AppletSecurityException("Could not resolve IP for host " + var2 + ". See the trustProxy property.");
  129.                            }
  130.  
  131.                            return;
  132.                         }
  133.                      }
  134.  
  135.                      try {
  136.                         InetAddress var4 = InetAddress.getByName(var2);
  137.                         InetAddress var5 = InetAddress.getByName(var1);
  138.                         if (!var5.equals(var4)) {
  139.                            throw new AppletSecurityException("Couldn't connect to " + var2 + " with origin from " + var1);
  140.                         }
  141.                      } catch (UnknownHostException var11) {
  142.                         throw new AppletSecurityException("Couldn't resolve IP for host " + var2 + " or for " + var1 + ".");
  143.                      }
  144.                   } finally {
  145.                      super.inCheck = false;
  146.                   }
  147.  
  148.                   return;
  149.                }
  150.             case 3:
  151.                return;
  152.             default:
  153.                throw new AppletSecurityException("connect", var1 + "->" + var2);
  154.          }
  155.       }
  156.    }
  157.  
  158.    public synchronized void checkConnect(String var1, String var2) {
  159.       this.checkConnect(var1, var2, Boolean.getBoolean("trustProxy"));
  160.    }
  161.  
  162.    boolean inApplet() {
  163.       return ((SecurityManager)this).inClassLoader();
  164.    }
  165.  
  166.    public synchronized void checkExit(int var1) {
  167.       if (this.inApplet()) {
  168.          throw new AppletSecurityException("exit", String.valueOf(var1));
  169.       }
  170.    }
  171.  
  172.    public void checkDelete(String var1) {
  173.       if (this.inApplet()) {
  174.          throw new AppletSecurityException("file.delete", var1);
  175.       }
  176.    }
  177.  
  178.    public void debug(String var1) {
  179.       if (debug) {
  180.          System.err.println(var1);
  181.       }
  182.  
  183.    }
  184.  
  185.    void parseACL(Vector var1, String var2, String var3) {
  186.       StringTokenizer var4 = new StringTokenizer(var2, System.getProperty("path.separator"));
  187.  
  188.       while(var4.hasMoreTokens()) {
  189.          String var5 = var4.nextToken();
  190.          if (var5.startsWith("~")) {
  191.             var1.addElement(System.getProperty("user.home") + var5.substring(1));
  192.          } else if (var5.equals("+")) {
  193.             if (var3 != null) {
  194.                this.parseACL(var1, var3, (String)null);
  195.             }
  196.          } else {
  197.             var1.addElement(var5);
  198.          }
  199.       }
  200.  
  201.    }
  202.  
  203.    String[] parseACL(String var1, String var2) {
  204.       if (var1 == null) {
  205.          return new String[0];
  206.       } else if (var1.equals("*")) {
  207.          return null;
  208.       } else {
  209.          Vector var3 = new Vector();
  210.          this.parseACL(var3, var1, var2);
  211.          String[] var4 = new String[var3.size()];
  212.          var3.copyInto(var4);
  213.          return var4;
  214.       }
  215.    }
  216.  
  217.    public synchronized void checkFileDialog() {
  218.       if (this.inApplet()) {
  219.          throw new AppletSecurityException("filedialog");
  220.       }
  221.    }
  222.  
  223.    public synchronized void checkSetFactory() {
  224.       throw new SecurityException();
  225.    }
  226.  
  227.    public synchronized boolean checkTopLevelWindow(Object var1) {
  228.       return !((SecurityManager)this).inClassLoader();
  229.    }
  230.  
  231.    public void reset() {
  232.       String var1 = System.getProperty("appletviewer.security.mode");
  233.       if (var1 == null) {
  234.          var1 = "host";
  235.       }
  236.  
  237.       if (var1.equals("unrestricted")) {
  238.          this.networkMode = 3;
  239.       } else if (var1.equals("none")) {
  240.          this.networkMode = 1;
  241.       } else {
  242.          this.networkMode = 2;
  243.       }
  244.  
  245.    }
  246.  
  247.    public synchronized void checkWrite(String var1) {
  248.       if (this.inApplet()) {
  249.          if (!this.initACL) {
  250.             this.initializeACLs();
  251.          }
  252.  
  253.          if (this.writeACL != null) {
  254.             int var2 = this.writeACL.length;
  255.  
  256.             while(var2-- > 0) {
  257.                if (var1.startsWith(this.writeACL[var2])) {
  258.                   return;
  259.                }
  260.             }
  261.  
  262.             throw new AppletSecurityException("file.write", var1);
  263.          }
  264.       }
  265.    }
  266.  
  267.    public synchronized void checkWrite(FileDescriptor var1) {
  268.       if (this.inApplet() && !((SecurityManager)this).inClass("java.net.SocketOutputStream") || !var1.valid()) {
  269.          throw new AppletSecurityException("fd.write");
  270.       }
  271.    }
  272.  
  273.    public synchronized void checkAccept(String var1, int var2) {
  274.       if (this.inApplet()) {
  275.          if (var2 <= 1024 || !"true".equalsIgnoreCase(System.getProperty("com.ms.applet.enable.serversockets"))) {
  276.             throw new AppletSecurityException("socket.accept", var1 + ":" + var2);
  277.          }
  278.  
  279.          this.checkConnect(var1, var2);
  280.       }
  281.  
  282.    }
  283.  
  284.    public synchronized void checkExec(String var1) {
  285.       if (this.inApplet()) {
  286.          throw new AppletSecurityException("exec", var1);
  287.       }
  288.    }
  289.  
  290.    public synchronized void checkRead(String var1) {
  291.       AppletBaseClassLoader var2 = (AppletBaseClassLoader)((SecurityManager)this).currentClassLoader();
  292.       if (var2 != null) {
  293.          this.checkRead(var1, var2.base);
  294.       }
  295.  
  296.    }
  297.  
  298.    public synchronized void checkRead(String var1, URL var2) {
  299.       if (var2 != null) {
  300.          if (!this.initACL) {
  301.             this.initializeACLs();
  302.          }
  303.  
  304.          if (this.readACL != null) {
  305.             int var3 = this.readACL.length;
  306.  
  307.             while(var3-- > 0) {
  308.                if (var1.startsWith(this.readACL[var3])) {
  309.                   return;
  310.                }
  311.             }
  312.  
  313.             if (var2.getProtocol().equals("file")) {
  314.                String var4 = var2.getFile().replace('/', File.separatorChar);
  315.                if (var1.replace('/', File.separatorChar).startsWith(var4)) {
  316.                   return;
  317.                }
  318.             }
  319.  
  320.             throw new AppletSecurityException("file.read", var1);
  321.          }
  322.       }
  323.    }
  324.  
  325.    public void checkRead(String var1, Object var2) {
  326.       this.checkRead(var1);
  327.       if (var2 != null) {
  328.          this.checkRead(var1, (URL)var2);
  329.       }
  330.  
  331.    }
  332.  
  333.    public synchronized void checkRead(FileDescriptor var1) {
  334.       if (this.inApplet() && !((SecurityManager)this).inClass("java.net.SocketInputStream") || !var1.valid()) {
  335.          throw new AppletSecurityException("fd.read");
  336.       }
  337.    }
  338.  
  339.    public synchronized void checkPackageAccess(String var1) {
  340.       for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  341.          String var3 = var1.substring(0, var2);
  342.          if (((SecurityManager)this).inClassLoader() && Boolean.getBoolean("package.restrict.access." + var3)) {
  343.             throw new SecurityException();
  344.          }
  345.       }
  346.  
  347.       if (((SecurityManager)this).inClassLoader() && Boolean.getBoolean("package.restrict.access." + var1)) {
  348.          throw new SecurityException();
  349.       }
  350.    }
  351.  
  352.    public synchronized void checkCreateClassLoader() {
  353.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  354.          throw new AppletSecurityException("classloader");
  355.       }
  356.    }
  357.  
  358.    boolean fromApplet() {
  359.       return ((SecurityManager)this).classLoaderDepth() == 1;
  360.    }
  361.  
  362.    public synchronized void checkPropertiesAccess() {
  363.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  364.          throw new AppletSecurityException("properties");
  365.       }
  366.    }
  367.  
  368.    public synchronized void checkPropertyAccess(String var1) {
  369.       if (((SecurityManager)this).classLoaderDepth() == 2 && !"true".equalsIgnoreCase(System.getProperty(var1 + ".applet"))) {
  370.          throw new AppletSecurityException("properties");
  371.       }
  372.    }
  373.  
  374.    void initializeACLs() {
  375.       this.readACL = this.parseACL(System.getProperty("acl.read"), System.getProperty("acl.read.default"));
  376.       this.writeACL = this.parseACL(System.getProperty("acl.write"), System.getProperty("acl.write.default"));
  377.       this.initACL = true;
  378.    }
  379. }
  380.