home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / applet / AppletSecurity.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  9.6 KB  |  475 lines

  1. package sun.applet;
  2.  
  3. import java.io.File;
  4. import java.io.FileDescriptor;
  5. import java.io.IOException;
  6. import java.net.InetAddress;
  7. import java.net.URL;
  8. import java.net.UnknownHostException;
  9. import java.security.IdentityScope;
  10. import java.util.Hashtable;
  11. import java.util.StringTokenizer;
  12. import java.util.Vector;
  13. import sun.security.provider.IdentityDatabase;
  14. import sun.security.provider.SystemIdentity;
  15. import sun.security.provider.SystemSigner;
  16.  
  17. public class AppletSecurity extends SecurityManager {
  18.    private static boolean debug;
  19.    static final int NETWORK_NONE = 1;
  20.    static final int NETWORK_HOST = 2;
  21.    static final int NETWORK_UNRESTRICTED = 3;
  22.    private static final int PRIVELEGED_PORT = 1024;
  23.    boolean initACL;
  24.    String[] readACL;
  25.    String[] writeACL;
  26.    int networkMode;
  27.    IdentityScope scope;
  28.    Hashtable loadedClasses;
  29.  
  30.    public AppletSecurity() {
  31.       this.reset();
  32.    }
  33.  
  34.    public void reset() {
  35.       String var1 = System.getProperty("appletviewer.security.mode");
  36.       if (var1 == null) {
  37.          var1 = "host";
  38.       }
  39.  
  40.       if (var1.equals("unrestricted")) {
  41.          this.networkMode = 3;
  42.       } else if (var1.equals("none")) {
  43.          this.networkMode = 1;
  44.       } else {
  45.          this.networkMode = 2;
  46.       }
  47.  
  48.       IdentityScope var2 = IdentityScope.getSystemScope();
  49.       if (var2 instanceof IdentityDatabase) {
  50.          this.scope = (IdentityDatabase)var2;
  51.          this.debug("installing " + var2 + " as the scope for signers.");
  52.       } else {
  53.          this.debug("no signer scope found.");
  54.       }
  55.  
  56.       this.loadedClasses = new Hashtable();
  57.    }
  58.  
  59.    boolean fromApplet() {
  60.       return ((SecurityManager)this).classLoaderDepth() == 1;
  61.    }
  62.  
  63.    protected boolean assessTrust(Object[] var1) {
  64.       for(int var2 = 0; var2 < var1.length; ++var2) {
  65.          if (var1[var2] instanceof SystemIdentity) {
  66.             SystemIdentity var3 = (SystemIdentity)var1[var2];
  67.             if (var3.isTrusted()) {
  68.                return true;
  69.             }
  70.          } else if (var1[var2] instanceof SystemSigner) {
  71.             SystemSigner var4 = (SystemSigner)var1[var2];
  72.             if (var4.isTrusted()) {
  73.                return true;
  74.             }
  75.          }
  76.       }
  77.  
  78.       return false;
  79.    }
  80.  
  81.    boolean inApplet() {
  82.       return ((SecurityManager)this).inClassLoader();
  83.    }
  84.  
  85.    public Object getSecurityContext() {
  86.       ClassLoader var1 = ((SecurityManager)this).currentClassLoader();
  87.       if (var1 == null) {
  88.          return null;
  89.       } else if (var1 instanceof AppletClassLoader) {
  90.          AppletClassLoader var2 = (AppletClassLoader)var1;
  91.          return var2.base;
  92.       } else {
  93.          throw new AppletSecurityException("getsecuritycontext.unknown");
  94.       }
  95.    }
  96.  
  97.    public synchronized void checkCreateClassLoader() {
  98.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  99.          throw new AppletSecurityException("checkcreateclassloader");
  100.       }
  101.    }
  102.  
  103.    protected boolean inThreadGroup(ThreadGroup var1) {
  104.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  105.       if (var2 instanceof AppletClassLoader) {
  106.          AppletClassLoader var3 = (AppletClassLoader)var2;
  107.          ThreadGroup var4 = var3.getThreadGroup();
  108.          return var4.parentOf(var1);
  109.       } else {
  110.          return false;
  111.       }
  112.    }
  113.  
  114.    protected boolean inThreadGroup(Thread var1) {
  115.       return this.inThreadGroup(var1.getThreadGroup());
  116.    }
  117.  
  118.    public synchronized void checkAccess(Thread var1) {
  119.       if (((SecurityManager)this).classLoaderDepth() == 3 && !this.inThreadGroup(var1)) {
  120.          throw new AppletSecurityException("checkaccess.thread");
  121.       }
  122.    }
  123.  
  124.    public synchronized void checkAccess(ThreadGroup var1) {
  125.       if (((SecurityManager)this).classLoaderDepth() == 4 && !this.inThreadGroup(var1)) {
  126.          throw new AppletSecurityException("checkaccess.threadgroup", var1.toString());
  127.       }
  128.    }
  129.  
  130.    public synchronized void checkExit(int var1) {
  131.       if (this.inApplet()) {
  132.          throw new AppletSecurityException("checkexit", String.valueOf(var1));
  133.       }
  134.    }
  135.  
  136.    public synchronized void checkExec(String var1) {
  137.       if (this.inApplet()) {
  138.          throw new AppletSecurityException("checkexec", var1);
  139.       }
  140.    }
  141.  
  142.    public synchronized void checkLink(String var1) {
  143.       switch (((SecurityManager)this).classLoaderDepth()) {
  144.          case 2:
  145.          case 3:
  146.             throw new AppletSecurityException("checklink", var1);
  147.          default:
  148.       }
  149.    }
  150.  
  151.    public synchronized void checkPropertiesAccess() {
  152.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  153.          throw new AppletSecurityException("checkpropsaccess");
  154.       }
  155.    }
  156.  
  157.    public synchronized void checkPropertyAccess(String var1) {
  158.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  159.          String var2 = System.getProperty(var1 + ".applet");
  160.          boolean var3 = new Boolean(var2);
  161.          if (!var3) {
  162.             throw new AppletSecurityException("checkpropsaccess.key", var2);
  163.          }
  164.       }
  165.    }
  166.  
  167.    void parseACL(Vector var1, String var2, String var3) {
  168.       String var4 = System.getProperty("path.separator");
  169.       StringTokenizer var5 = new StringTokenizer(var2, var4);
  170.  
  171.       while(var5.hasMoreTokens()) {
  172.          String var6 = var5.nextToken();
  173.          if (var6.startsWith("~")) {
  174.             var1.addElement(System.getProperty("user.home") + var6.substring(1));
  175.          } else if (var6.equals("+")) {
  176.             if (var3 != null) {
  177.                this.parseACL(var1, var3, (String)null);
  178.             }
  179.          } else {
  180.             var1.addElement(var6);
  181.          }
  182.       }
  183.  
  184.    }
  185.  
  186.    String[] parseACL(String var1, String var2) {
  187.       if (var1 == null) {
  188.          return new String[0];
  189.       } else if (var1.equals("*")) {
  190.          return null;
  191.       } else {
  192.          Vector var3 = new Vector();
  193.          this.parseACL(var3, var1, var2);
  194.          String[] var4 = new String[var3.size()];
  195.          var3.copyInto(var4);
  196.          return var4;
  197.       }
  198.    }
  199.  
  200.    void initializeACLs() {
  201.       this.readACL = this.parseACL(System.getProperty("acl.read"), System.getProperty("acl.read.default"));
  202.       this.writeACL = this.parseACL(System.getProperty("acl.write"), System.getProperty("acl.write.default"));
  203.       this.initACL = true;
  204.    }
  205.  
  206.    public synchronized void checkRead(String var1) {
  207.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  208.       if (var2 != null) {
  209.          if (!(var2 instanceof AppletClassLoader)) {
  210.             throw new AppletSecurityException("checkread.unknown", var1);
  211.          } else {
  212.             AppletClassLoader var3 = (AppletClassLoader)var2;
  213.             this.checkRead(var1, var3.base);
  214.          }
  215.       }
  216.    }
  217.  
  218.    public synchronized void checkRead(String var1, URL var2) {
  219.       if (var2 != null) {
  220.          if (!this.initACL) {
  221.             this.initializeACLs();
  222.          }
  223.  
  224.          if (this.readACL != null) {
  225.             Object var3 = null;
  226.  
  227.             try {
  228.                var9 = (new File(var1)).getCanonicalPath();
  229.             } catch (IOException var8) {
  230.                throw new AppletSecurityException("checkread.exception1", ((Throwable)var8).getMessage(), var1);
  231.             }
  232.  
  233.             int var4 = this.readACL.length;
  234.  
  235.             while(var4-- > 0) {
  236.                if (var9.startsWith(this.readACL[var4])) {
  237.                   return;
  238.                }
  239.             }
  240.  
  241.             if (var2.getProtocol().equals("file")) {
  242.                Object var5 = null;
  243.  
  244.                try {
  245.                   var10 = (new File(var2.getFile())).getCanonicalPath();
  246.                } catch (IOException var7) {
  247.                   throw new AppletSecurityException("checkread.exception2", ((Throwable)var7).toString());
  248.                }
  249.  
  250.                if (var9.startsWith(var10)) {
  251.                   return;
  252.                }
  253.             }
  254.  
  255.             throw new AppletSecurityException("checkread", var1, var9);
  256.          }
  257.       }
  258.    }
  259.  
  260.    public void checkRead(String var1, Object var2) {
  261.       this.checkRead(var1);
  262.       if (var2 != null) {
  263.          this.checkRead(var1, (URL)var2);
  264.       }
  265.  
  266.    }
  267.  
  268.    public synchronized void checkWrite(String var1) {
  269.       if (this.inApplet()) {
  270.          if (!this.initACL) {
  271.             this.initializeACLs();
  272.          }
  273.  
  274.          if (this.writeACL != null) {
  275.             Object var2 = null;
  276.  
  277.             try {
  278.                var5 = (new File(var1)).getCanonicalPath();
  279.             } catch (IOException var4) {
  280.                throw new AppletSecurityException("checkwrite.exception", ((Throwable)var4).getMessage(), var1);
  281.             }
  282.  
  283.             int var3 = this.writeACL.length;
  284.  
  285.             while(var3-- > 0) {
  286.                if (var5.startsWith(this.writeACL[var3])) {
  287.                   return;
  288.                }
  289.             }
  290.  
  291.             throw new AppletSecurityException("checkwrite", var1, var5);
  292.          }
  293.       }
  294.    }
  295.  
  296.    public synchronized void checkRead(FileDescriptor var1) {
  297.       if (this.inApplet() && !((SecurityManager)this).inClass("java.net.SocketInputStream") || !var1.valid()) {
  298.          throw new AppletSecurityException("checkread.fd");
  299.       }
  300.    }
  301.  
  302.    public synchronized void checkWrite(FileDescriptor var1) {
  303.       if (this.inApplet() && !((SecurityManager)this).inClass("java.net.SocketOutputStream") || !var1.valid()) {
  304.          throw new AppletSecurityException("checkwrite.fd");
  305.       }
  306.    }
  307.  
  308.    public synchronized void checkListen(int var1) {
  309.       if (this.inApplet() && var1 > 0 && var1 < 1024) {
  310.          throw new AppletSecurityException("checklisten", String.valueOf(var1));
  311.       }
  312.    }
  313.  
  314.    public synchronized void checkAccept(String var1, int var2) {
  315.       if (this.inApplet() && var2 < 1024) {
  316.          throw new AppletSecurityException("checkaccept", var1, String.valueOf(var2));
  317.       } else {
  318.          this.checkConnect(var1, var2);
  319.       }
  320.    }
  321.  
  322.    public synchronized void checkConnect(String var1, int var2) {
  323.       ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
  324.       if (var3 != null) {
  325.          int var4 = ((SecurityManager)this).classDepth("sun.net.www.http.HttpClient");
  326.          if (var4 <= 1) {
  327.             if (var3 instanceof AppletClassLoader) {
  328.                AppletClassLoader var5 = (AppletClassLoader)var3;
  329.                this.checkConnect(var5.base.getHost(), var1);
  330.             } else {
  331.                throw new AppletSecurityException("checkconnect.unknown");
  332.             }
  333.          }
  334.       }
  335.    }
  336.  
  337.    public void checkConnect(String var1, int var2, Object var3) {
  338.       this.checkConnect(var1, var2);
  339.       if (var3 != null) {
  340.          this.checkConnect(((URL)var3).getHost(), var1);
  341.       }
  342.  
  343.    }
  344.  
  345.    public synchronized void checkConnect(String var1, String var2, boolean var3) {
  346.       if (var1 != null) {
  347.          switch (this.networkMode) {
  348.             case 1:
  349.                throw new AppletSecurityException("checkconnect.networknone", var1, var2);
  350.             case 2:
  351.                try {
  352.                   super.inCheck = true;
  353.                   if (var1.equals(var2)) {
  354.                      try {
  355.                         InetAddress var14 = InetAddress.getByName(var2);
  356.                         return;
  357.                      } catch (UnknownHostException var12) {
  358.                         if (!var3) {
  359.                            throw new AppletSecurityException("checkconnect.networkhost3", var2);
  360.                         }
  361.  
  362.                         return;
  363.                      }
  364.                   }
  365.  
  366.                   try {
  367.                      InetAddress var6 = InetAddress.getByName(var2);
  368.                      InetAddress var7 = InetAddress.getByName(var1);
  369.                      if (!var7.equals(var6)) {
  370.                         throw new AppletSecurityException("checkconnect.networkhost1", var2, var1);
  371.                      }
  372.                   } catch (UnknownHostException var11) {
  373.                      throw new AppletSecurityException("checkconnect.networkhost2", var2, var1);
  374.                   }
  375.                } finally {
  376.                   super.inCheck = false;
  377.                }
  378.  
  379.                return;
  380.             case 3:
  381.                return;
  382.             default:
  383.                throw new AppletSecurityException("checkconnect", var1, var2);
  384.          }
  385.       }
  386.    }
  387.  
  388.    public synchronized void checkConnect(String var1, String var2) {
  389.       this.checkConnect(var1, var2, Boolean.getBoolean("trustProxy"));
  390.    }
  391.  
  392.    public synchronized boolean checkTopLevelWindow(Object var1) {
  393.       return !((SecurityManager)this).inClassLoader();
  394.    }
  395.  
  396.    public synchronized void checkPackageAccess(String var1) {
  397.       if (((SecurityManager)this).inClassLoader()) {
  398.          for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  399.             String var3 = var1.substring(0, var2);
  400.             if (Boolean.getBoolean("package.restrict.access." + var3)) {
  401.                throw new AppletSecurityException("checkpackageaccess", var1);
  402.             }
  403.          }
  404.  
  405.       }
  406.    }
  407.  
  408.    public synchronized void checkPackageDefinition(String var1) {
  409.       if (((SecurityManager)this).inClassLoader()) {
  410.          for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  411.             String var3 = var1.substring(0, var2);
  412.             if (Boolean.getBoolean("package.restrict.definition." + var3)) {
  413.                throw new AppletSecurityException("checkpackagedefinition", var1);
  414.             }
  415.          }
  416.  
  417.       }
  418.    }
  419.  
  420.    public synchronized void checkSetFactory() {
  421.       if (this.inApplet()) {
  422.          throw new AppletSecurityException("cannotsetfactory");
  423.       }
  424.    }
  425.  
  426.    public void checkMemberAccess(Class var1, int var2) {
  427.       if (var2 != 0) {
  428.          ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
  429.          if (var3 != null && ((SecurityManager)this).classLoaderDepth() <= 3 && var3 != var1.getClassLoader()) {
  430.             throw new AppletSecurityException("checkmemberaccess");
  431.          }
  432.       }
  433.  
  434.    }
  435.  
  436.    public void checkPrintJobAccess() {
  437.       if (this.inApplet()) {
  438.          throw new AppletSecurityException("checkgetprintjob");
  439.       }
  440.    }
  441.  
  442.    public void checkSystemClipboardAccess() {
  443.       if (this.inApplet()) {
  444.          throw new AppletSecurityException("checksystemclipboardaccess");
  445.       }
  446.    }
  447.  
  448.    public void checkAwtEventQueueAccess() {
  449.       throw new AppletSecurityException("checkawteventqueueaccess");
  450.    }
  451.  
  452.    public void checkSecurityAccess(String var1) {
  453.       if (this.inApplet()) {
  454.          throw new AppletSecurityException("checksecurityaccess", var1);
  455.       }
  456.    }
  457.  
  458.    public ThreadGroup getThreadGroup() {
  459.       ClassLoader var1 = ((SecurityManager)this).currentClassLoader();
  460.       if (var1 != null && var1 instanceof AppletClassLoader) {
  461.          AppletClassLoader var2 = (AppletClassLoader)var1;
  462.          return var2.getThreadGroup();
  463.       } else {
  464.          return super.getThreadGroup();
  465.       }
  466.    }
  467.  
  468.    public void debug(String var1) {
  469.       if (debug) {
  470.          System.err.println(var1);
  471.       }
  472.  
  473.    }
  474. }
  475.