home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 January / PCO0198.ISO / browser / net_linx / java40.jar / netscape / security / AppletSecurity.class (.txt) next >
Encoding:
Java Class File  |  1997-11-03  |  17.0 KB  |  854 lines

  1. package netscape.security;
  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.util.Hashtable;
  10. import netscape.applet.CastanetChannelInfo;
  11.  
  12. public class AppletSecurity extends SecurityManager {
  13.    private static final boolean MARIMBA_ENABLED = true;
  14.    private static boolean debug;
  15.    static final int NETWORK_NONE = 1;
  16.    static final int NETWORK_HOST = 2;
  17.    static final int NETWORK_UNRESTRICTED = 3;
  18.    private static final int PRIVELEGED_PORT = 1024;
  19.    int networkMode;
  20.    private static Hashtable resourceExtTable = new Hashtable();
  21.    private static Target UniversalThreadAccessTarget;
  22.    private static Target UniversalThreadGroupAccessTarget;
  23.    private static Target UniversalExitAccessTarget;
  24.    private static Target UniversalExecAccessTarget;
  25.    private static Target UniversalLinkAccessTarget;
  26.    private static Target UniversalPropertyWriteTarget;
  27.    private static Target UniversalPropertyReadTarget;
  28.    private static Target UniversalFileReadTarget;
  29.    private static Target ParamFileReadTarget;
  30.    private static Target UniversalFileWriteTarget;
  31.    private static Target UniversalFileDeleteTarget;
  32.    private static Target ParamFileWriteTarget;
  33.    private static Target UniversalFdReadTarget;
  34.    private static Target UniversalFdWriteTarget;
  35.    private static Target UniversalListenTarget;
  36.    private static Target UniversalAcceptTarget;
  37.    private static Target UniversalConnectTarget;
  38.    private static Target UniversalMulticastTarget;
  39.    private static Target UniversalTopLevelWindowTarget;
  40.    private static Target UniversalPackageAccessTarget;
  41.    private static Target UniversalPackageDefinitionTarget;
  42.    private static Target UniversalSetFactoryTarget;
  43.    private static Target UniversalMemberAccessTarget;
  44.    private static Target UniversalPrintJobAccessTarget;
  45.    private static Target UniversalSystemClipboardAccessTarget;
  46.    private static Target UniversalAwtEventQueueAccessTarget;
  47.    private static Target UniversalSecurityProviderTarget;
  48.    private static Target CreateSecurityManagerTarget;
  49.    private static Target SuperUserTarget;
  50.    private static PrivilegeManager privMgr;
  51.    private static Class atg;
  52.  
  53.    public AppletSecurity() {
  54.       this.reset();
  55.       this.initTargets();
  56.       UserTarget.createAwtDialog();
  57.       loadResourceExtTable();
  58.    }
  59.  
  60.    void reset() {
  61.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  62.       String var1 = System.getProperty("appletviewer.security.mode");
  63.       if (var1 == null) {
  64.          var1 = "host";
  65.       }
  66.  
  67.       if (var1.equals("unrestricted")) {
  68.          this.networkMode = 3;
  69.       } else if (var1.equals("none")) {
  70.          this.networkMode = 1;
  71.       } else {
  72.          this.networkMode = 2;
  73.       }
  74.    }
  75.  
  76.    private void initTargets() {
  77.       UniversalThreadAccessTarget = Target.findTarget("UniversalThreadAccess");
  78.       UniversalThreadGroupAccessTarget = Target.findTarget("UniversalThreadGroupAccess");
  79.       UniversalExitAccessTarget = Target.findTarget("UniversalExitAccess");
  80.       UniversalExecAccessTarget = Target.findTarget("UniversalExecAccess");
  81.       UniversalLinkAccessTarget = Target.findTarget("UniversalLinkAccess");
  82.       UniversalPropertyWriteTarget = Target.findTarget("UniversalPropertyWrite");
  83.       UniversalPropertyReadTarget = Target.findTarget("UniversalPropertyRead");
  84.       UniversalFileReadTarget = Target.findTarget("UniversalFileRead");
  85.       ParamFileReadTarget = Target.findTarget("FileRead");
  86.       UniversalFileWriteTarget = Target.findTarget("UniversalFileWrite");
  87.       UniversalFileDeleteTarget = Target.findTarget("UniversalFileDelete");
  88.       ParamFileWriteTarget = Target.findTarget("FileWrite");
  89.       UniversalFdReadTarget = Target.findTarget("UniversalFdRead");
  90.       UniversalFdWriteTarget = Target.findTarget("UniversalFdWrite");
  91.       UniversalListenTarget = Target.findTarget("UniversalListen");
  92.       UniversalAcceptTarget = Target.findTarget("UniversalAccept");
  93.       UniversalConnectTarget = Target.findTarget("UniversalConnect");
  94.       UniversalMulticastTarget = Target.findTarget("UniversalMulticast");
  95.       UniversalTopLevelWindowTarget = Target.findTarget("UniversalTopLevelWindow");
  96.       UniversalPackageAccessTarget = Target.findTarget("UniversalPackageAccess");
  97.       UniversalPackageDefinitionTarget = Target.findTarget("UniversalPackageDefinition");
  98.       UniversalSetFactoryTarget = Target.findTarget("UniversalSetFactory");
  99.       UniversalMemberAccessTarget = Target.findTarget("UniversalMemberAccess");
  100.       UniversalPrintJobAccessTarget = Target.findTarget("UniversalPrintJobAccess");
  101.       UniversalSystemClipboardAccessTarget = Target.findTarget("UniversalSystemClipboardAccess");
  102.       UniversalAwtEventQueueAccessTarget = Target.findTarget("UniversalAwtEventQueueAccess");
  103.       UniversalSecurityProviderTarget = Target.findTarget("UniversalSecurityProvider");
  104.       CreateSecurityManagerTarget = Target.findTarget("CreateSecurityManager");
  105.       SuperUserTarget = Target.findTarget("SuperUser");
  106.    }
  107.  
  108.    boolean fromApplet() {
  109.       return ((SecurityManager)this).checkClassLoader(1);
  110.    }
  111.  
  112.    boolean inApplet() {
  113.       return ((SecurityManager)this).inClassLoader();
  114.    }
  115.  
  116.    public Object getSecurityContext() {
  117.       ClassLoader var1 = ((SecurityManager)this).currentClassLoader();
  118.       return var1 == null ? null : var1.getCodeBase();
  119.    }
  120.  
  121.    public static void setPrivilegeManager(PrivilegeManager var0) {
  122.       if (privMgr != null) {
  123.          throw new SecurityException("PrivilegeManager already set");
  124.       } else {
  125.          privMgr = var0;
  126.       }
  127.    }
  128.  
  129.    public static PrivilegeManager getPrivilegeManager() {
  130.       return privMgr;
  131.    }
  132.  
  133.    public static void enablePrivilege(String var0) {
  134.       privMgr.enablePrivilege(var0, 1);
  135.    }
  136.  
  137.    protected void checkCreateClassLoader(int var1) {
  138.       if (privMgr != null) {
  139.          Target var2 = Target.findTarget("MarimbaInternalTarget");
  140.          if (!privMgr.isPrivilegeEnabled(var2, var1 + 1)) {
  141.             if (((SecurityManager)this).checkClassLoader(var1 + 1)) {
  142.                throw new AppletSecurityException("checkcreateclassloader");
  143.             }
  144.          }
  145.       }
  146.    }
  147.  
  148.    private boolean isAppletThreadGroup(ThreadGroup var1) {
  149.       if (atg == null) {
  150.          try {
  151.             atg = Class.forName("netscape.applet.AppletThreadGroup");
  152.          } catch (ClassNotFoundException var3) {
  153.             return false;
  154.          }
  155.       }
  156.  
  157.       if (var1 == null) {
  158.          return false;
  159.       } else {
  160.          for(Class var2 = var1.getClass(); var2 != null; var2 = var2.getSuperclass()) {
  161.             if (var2 == atg) {
  162.                return true;
  163.             }
  164.          }
  165.  
  166.          return false;
  167.       }
  168.    }
  169.  
  170.    protected void checkAccess(Thread var1, int var2) {
  171.       if (privMgr != null) {
  172.          if (this.isAppletThreadGroup(var1.getThreadGroup())) {
  173.             return;
  174.          }
  175.  
  176.          if (!privMgr.isPrivilegeEnabled(UniversalThreadAccessTarget, var2 + 1)) {
  177.             if (this.marimbaCheckThreadGroup(var1.getThreadGroup())) {
  178.                return;
  179.             }
  180.  
  181.             throw new AppletSecurityException(UniversalThreadAccessTarget, "thread");
  182.          }
  183.       }
  184.  
  185.    }
  186.  
  187.    protected void checkAccess(Thread var1, Throwable var2, int var3) {
  188.       if (privMgr != null) {
  189.          if (var2 instanceof ThreadDeath) {
  190.             return;
  191.          }
  192.  
  193.          if (!privMgr.isPrivilegeEnabled(UniversalThreadAccessTarget, var3 + 1)) {
  194.             throw new AppletSecurityException(UniversalThreadAccessTarget, "thread can't send exception");
  195.          }
  196.       }
  197.  
  198.    }
  199.  
  200.    public void checkAccess(ThreadGroup var1, int var2) {
  201.       if (privMgr != null) {
  202.          if (this.isAppletThreadGroup(var1)) {
  203.             return;
  204.          }
  205.  
  206.          if (!privMgr.isPrivilegeEnabled(UniversalThreadGroupAccessTarget, var2 + 1)) {
  207.             if (this.marimbaCheckThreadGroup(var1)) {
  208.                return;
  209.             }
  210.  
  211.             throw new AppletSecurityException(UniversalThreadGroupAccessTarget, "threadgroup", var1.toString());
  212.          }
  213.       }
  214.  
  215.    }
  216.  
  217.    protected void checkExit(int var1, int var2) {
  218.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalExitAccessTarget, var2 + 1)) {
  219.          throw new AppletSecurityException(UniversalExitAccessTarget, "checkexit", String.valueOf(var1));
  220.       }
  221.    }
  222.  
  223.    protected void checkExec(String var1, int var2) {
  224.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalExecAccessTarget, var2 + 1)) {
  225.          throw new AppletSecurityException(UniversalExecAccessTarget, "checkexec", var1);
  226.       }
  227.    }
  228.  
  229.    protected void checkLink(String var1, int var2) {
  230.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalLinkAccessTarget, var2 + 1)) {
  231.          throw new AppletSecurityException(UniversalLinkAccessTarget, "checklink", var1);
  232.       }
  233.    }
  234.  
  235.    protected void checkPropertiesAccess(int var1) {
  236.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPropertyWriteTarget, var1 + 1)) {
  237.          throw new AppletSecurityException(UniversalPropertyWriteTarget, "checkpropsaccess");
  238.       }
  239.    }
  240.  
  241.    protected void checkPropertyAccess(String var1, int var2) {
  242.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPropertyReadTarget, var2 + 1)) {
  243.          throw new AppletSecurityException(UniversalPropertyReadTarget, "checkpropsaccess.key");
  244.       }
  245.    }
  246.  
  247.    protected void checkRead(String var1, int var2) {
  248.       ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
  249.       if (var3 != null) {
  250.          this.checkRead(var1, var3.getCodeBase(), var2 + 1);
  251.       } else {
  252.          this.checkRead(var1, (URL)null, var2 + 1);
  253.       }
  254.    }
  255.  
  256.    private static boolean directoryContainsFile(String var0, String var1) {
  257.       SecurityManager.enablePrivilege("UniversalFileRead");
  258.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  259.  
  260.       try {
  261.          var1 = (new File(var1)).getCanonicalPath();
  262.          var0 = (new File(var0)).getCanonicalPath();
  263.       } catch (IOException var3) {
  264.          return false;
  265.       }
  266.  
  267.       if (var1.equals(var0)) {
  268.          return true;
  269.       } else if (!var1.startsWith(var0)) {
  270.          return false;
  271.       } else {
  272.          int var2 = var0.length();
  273.          if (var1.charAt(var2) == File.separatorChar) {
  274.             return true;
  275.          } else {
  276.             return var2 > 0 && var0.charAt(var2 - 1) == File.separatorChar;
  277.          }
  278.       }
  279.    }
  280.  
  281.    private static String unEscapeFileSpecificChars(String var0) {
  282.       String var1 = var0;
  283.       int var4 = 0;
  284.  
  285.       int var2;
  286.       while((var2 = var1.indexOf(37, var4)) >= 0) {
  287.          var4 = var2 + 1;
  288.          Object var6 = null;
  289.          int var3 = var2 + 3;
  290.          if (var3 <= var1.length()) {
  291.             String var5 = var1.substring(var2 + 1, var3);
  292.  
  293.             try {
  294.                var8 = (new Character((char)Integer.parseInt(var5, 16))).toString();
  295.             } catch (NumberFormatException var7) {
  296.                continue;
  297.             }
  298.  
  299.             if (":/.\\|".indexOf(var8) != -1) {
  300.                var1 = var1.substring(0, var2) + var8 + var1.substring(var3);
  301.             }
  302.          }
  303.       }
  304.  
  305.       if (File.separatorChar == '\\') {
  306.          if (var1.charAt(0) == '/' && (var1.charAt(2) == '|' || var1.charAt(2) == ':')) {
  307.             var1 = var1.substring(1);
  308.          }
  309.  
  310.          if (var1.charAt(1) == '|') {
  311.             var1 = var1.substring(0, 1) + ":" + var1.substring(2);
  312.          }
  313.  
  314.          var1 = var1.replace('/', '\\');
  315.       }
  316.  
  317.       return var1;
  318.    }
  319.  
  320.    protected void checkRead(String var1, URL var2, int var3) {
  321.       if (privMgr != null) {
  322.          if (!privMgr.isPrivilegeEnabled(UniversalFileReadTarget, var3 + 1)) {
  323.             Target[] var4 = new Target[]{ParamFileReadTarget};
  324.             if (!privMgr.isPrivilegeEnabled(var4, var3 + 1, var1)) {
  325.                String var5 = null;
  326.                if (var2 != null && var2.getProtocol().equals("file")) {
  327.                   var5 = unEscapeFileSpecificChars(var2.getFile());
  328.                   if (directoryContainsFile(var5, var1)) {
  329.                      return;
  330.                   }
  331.                }
  332.  
  333.                if (!this.marimbaCheckAccess(var1, true)) {
  334.                   if (var5 != null) {
  335.                      throw new AppletSecurityException(UniversalFileReadTarget, "checkread", "Codebase '" + var5 + "' does not include '" + var1 + "'");
  336.                   } else {
  337.                      throw new AppletSecurityException(UniversalFileReadTarget, "checkread", "Read of '" + var1 + "' not permitted");
  338.                   }
  339.                }
  340.             }
  341.          }
  342.       }
  343.    }
  344.  
  345.    protected void checkRead(String var1, Object var2, int var3) {
  346.       ((SecurityManager)this).checkRead(var1);
  347.       if (var2 != null) {
  348.          this.checkRead(var1, (URL)var2, var3 + 1);
  349.       }
  350.  
  351.    }
  352.  
  353.    protected void checkWrite(String var1, int var2) {
  354.       if (privMgr != null) {
  355.          if (!privMgr.isPrivilegeEnabled(UniversalFileWriteTarget, var2 + 1)) {
  356.             Target[] var3 = new Target[]{ParamFileWriteTarget};
  357.             if (!privMgr.isPrivilegeEnabled(var3, var2 + 1, var1)) {
  358.                if (!this.marimbaCheckAccess(var1, false)) {
  359.                   throw new AppletSecurityException(UniversalFileWriteTarget, "checkwrite", var1);
  360.                }
  361.             }
  362.          }
  363.       }
  364.    }
  365.  
  366.    protected void checkRead(FileDescriptor var1, int var2) {
  367.       if (!var1.valid()) {
  368.          throw new AppletSecurityException("checkread", "invalid file descriptor");
  369.       } else if (privMgr != null) {
  370.          if (!privMgr.isPrivilegeEnabled(UniversalFdReadTarget, var2 + 1)) {
  371.             throw new AppletSecurityException(UniversalFdReadTarget, "checkread");
  372.          }
  373.       }
  374.    }
  375.  
  376.    protected void checkWrite(FileDescriptor var1, int var2) {
  377.       if (!var1.valid()) {
  378.          throw new AppletSecurityException("checkwrite.fd", "invalid file descriptor");
  379.       } else if (privMgr != null) {
  380.          if (!privMgr.isPrivilegeEnabled(UniversalFdWriteTarget, var2 + 1)) {
  381.             throw new AppletSecurityException(UniversalFdWriteTarget, "fd.write");
  382.          }
  383.       }
  384.    }
  385.  
  386.    protected void checkDelete(String var1, int var2) {
  387.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalFileDeleteTarget, var2 + 1)) {
  388.          if (!this.marimbaCheckAccess(var1, false)) {
  389.             throw new AppletSecurityException(UniversalFileDeleteTarget, "checkdelete", var1);
  390.          }
  391.       }
  392.    }
  393.  
  394.    protected void checkListen(int var1, int var2) {
  395.       if (privMgr != null) {
  396.          if (!privMgr.isPrivilegeEnabled(UniversalListenTarget, var2 + 1)) {
  397.             if (var1 > 0 && var1 < 1024) {
  398.                throw new AppletSecurityException(UniversalListenTarget, "checklisten", String.valueOf(var1));
  399.             }
  400.          }
  401.       }
  402.    }
  403.  
  404.    protected void checkAccept(String var1, int var2, int var3) {
  405.       if (privMgr != null) {
  406.          if (!privMgr.isPrivilegeEnabled(UniversalAcceptTarget, var3 + 1)) {
  407.             if (var2 > 0 && var2 < 1024) {
  408.                throw new AppletSecurityException(UniversalAcceptTarget, "checkaccept", var1, String.valueOf(var2));
  409.             } else {
  410.                this.checkConnect(var1, var2, var3 + 1);
  411.             }
  412.          }
  413.       }
  414.    }
  415.  
  416.    protected void checkConnect(String var1, int var2, int var3) {
  417.       ClassLoader var4 = ((SecurityManager)this).currentClassLoader();
  418.       if (var4 == null) {
  419.          if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var3 + 1)) {
  420.             if (!privMgr.getBoolPref("signed.applets.low_security_for_local_classes")) {
  421.                throw new AppletSecurityException(UniversalConnectTarget, connectErrorString("local-classpath-classes", var1));
  422.             }
  423.          }
  424.       } else {
  425.          String var5 = CastanetChannelInfo.marimbaGetHost(var4);
  426.          if (var5 == null) {
  427.             var5 = var4.getCodeBase().getHost();
  428.          }
  429.  
  430.          this.checkConnect(var5, var1, var3 + 1);
  431.       }
  432.    }
  433.  
  434.    protected void checkConnect(String var1, int var2, Object var3, int var4) {
  435.       this.checkConnect(var1, var2, var4 + 1);
  436.       if (var3 != null) {
  437.          this.checkConnect(((URL)var3).getHost(), var1, var4 + 1);
  438.       }
  439.  
  440.    }
  441.  
  442.    private static String connectErrorString(String var0, String var1) {
  443.       return "Couldn't connect to '" + var1 + "' with origin from '" + var0 + "'.";
  444.    }
  445.  
  446.    protected void checkConnect(String var1, String var2, boolean var3, int var4) {
  447.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var4 + 1)) {
  448.          if (var1 == null) {
  449.             throw new AppletSecurityException(UniversalConnectTarget, connectErrorString("unspecified-host", var2));
  450.          } else {
  451.             String var5 = null;
  452.             switch (this.networkMode) {
  453.                case 1:
  454.                   throw new AppletSecurityException(UniversalConnectTarget, connectErrorString(var1, var2));
  455.                case 2:
  456.                   SecurityManager.enablePrivilege("UniversalConnect");
  457.  
  458.                   try {
  459.                      if (var1.equals(var2)) {
  460.                         try {
  461.                            InetAddress var16 = InetAddress.getByName(var2);
  462.                            return;
  463.                         } catch (UnknownHostException var14) {
  464.                            if (!var3 && !privMgr.getBoolPref("security.lower_java_network_security_by_trusting_proxies")) {
  465.                               var5 = "Could not resolve IP for host " + var2 + ". See the trustProxy property.";
  466.                               break;
  467.                            }
  468.  
  469.                            return;
  470.                         }
  471.                      }
  472.  
  473.                      try {
  474.                         InetAddress var8 = InetAddress.getByName(var2);
  475.                         InetAddress var9 = InetAddress.getByName(var1);
  476.                         if (!var9.equals(var8)) {
  477.                            var5 = connectErrorString(var1, var2);
  478.                            break;
  479.                         }
  480.                      } catch (UnknownHostException var13) {
  481.                         var5 = "Couldn't resolve IP for host " + var2 + " or for " + var1 + ".";
  482.                         break;
  483.                      }
  484.                   } finally {
  485.                      SecurityManager.revertPrivilege();
  486.                   }
  487.  
  488.                   return;
  489.                case 3:
  490.                   return;
  491.             }
  492.  
  493.             throw new AppletSecurityException(UniversalConnectTarget, var5);
  494.          }
  495.       }
  496.    }
  497.  
  498.    protected void checkConnect(String var1, String var2, int var3) {
  499.       this.checkConnect(var1, var2, Boolean.getBoolean("trustProxy"), var3 + 1);
  500.    }
  501.  
  502.    protected void checkURLConnect(URL var1, int var2) {
  503.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var2 + 1)) {
  504.          ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
  505.          if (var3 == null) {
  506.             if (!privMgr.getBoolPref("signed.applets.low_security_for_local_classes")) {
  507.                throw new AppletSecurityException(UniversalConnectTarget, "class from local disk trying to access url", var1.toExternalForm());
  508.             }
  509.          } else {
  510.             this.checkURLConnectHelper(var3.getCodeBase(), var1, var2 + 1);
  511.          }
  512.       }
  513.    }
  514.  
  515.    protected void checkURLConnect(URL var1, URL var2, int var3) {
  516.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var3 + 1)) {
  517.          this.checkURLConnectHelper(var1, var2, var3 + 1);
  518.       }
  519.    }
  520.  
  521.    private void checkURLConnectHelper(URL var1, URL var2, int var3) {
  522.       String var4 = var2.getProtocol();
  523.       String var5 = null;
  524.       ClassLoader var6 = ((SecurityManager)this).currentClassLoader();
  525.       if (var6 != null) {
  526.          var5 = CastanetChannelInfo.marimbaGetHost(var6);
  527.       }
  528.  
  529.       if (var5 == null) {
  530.          var5 = var1.getHost();
  531.       }
  532.  
  533.       this.checkConnect(var5, var2.getHost(), var3 + 1);
  534.       String var7 = var1.getProtocol();
  535.       if (!var4.equals("http") && !var4.equals("https") && !var4.equals("tuner") && !var4.equals("ftp") && !var4.equals("gopher")) {
  536.          if (var4.equals("file") && var7.equals("file")) {
  537.             String var8 = unEscapeFileSpecificChars(var2.getFile());
  538.             this.checkRead(var8, var1, var3 + 1);
  539.          } else {
  540.             throw new AppletSecurityException("protocol", var4);
  541.          }
  542.       } else if (!var7.equals("http") && !var7.equals("https") && !var7.equals("tuner")) {
  543.          throw new AppletSecurityException("protocol", "Cannot access '" + var4 + "' from a codebase protocol of '" + var7 + "'");
  544.       }
  545.    }
  546.  
  547.    protected void checkMulticast(InetAddress var1, int var2) {
  548.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalMulticastTarget, var2 + 1)) {
  549.          throw new AppletSecurityException(UniversalMulticastTarget, "can not access IP multicast");
  550.       }
  551.    }
  552.  
  553.    protected void checkMulticast(InetAddress var1, byte var2, int var3) {
  554.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalMulticastTarget, var3 + 1)) {
  555.          throw new AppletSecurityException(UniversalMulticastTarget, "can not access IP multicast");
  556.       }
  557.    }
  558.  
  559.    public boolean checkTopLevelWindow(Object var1) {
  560.       this.marimbaCheckTopLevelWindow(var1);
  561.       return privMgr == null || privMgr.isPrivilegeEnabled(UniversalTopLevelWindowTarget, 2);
  562.    }
  563.  
  564.    public void checkPackageAccess(String var1) {
  565.       if (((SecurityManager)this).inClassLoader()) {
  566.          if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPackageAccessTarget, 2)) {
  567.             for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  568.                String var3 = var1.substring(0, var2);
  569.                if (Boolean.getBoolean("package.restrict.access." + var3)) {
  570.                   throw new AppletSecurityException(UniversalPackageAccessTarget, "checkpackageaccess", var1);
  571.                }
  572.             }
  573.  
  574.          }
  575.       }
  576.    }
  577.  
  578.    public void checkPackageDefinition(String var1) {
  579.       if (((SecurityManager)this).inClassLoader()) {
  580.          if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPackageDefinitionTarget, 2)) {
  581.             for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  582.                String var3 = var1.substring(0, var2);
  583.                if (Boolean.getBoolean("package.restrict.definition." + var3)) {
  584.                   throw new AppletSecurityException(UniversalPackageDefinitionTarget, "cannot define package:" + var1);
  585.                }
  586.             }
  587.  
  588.          }
  589.       }
  590.    }
  591.  
  592.    public void checkSetFactory() {
  593.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalSetFactoryTarget, 2)) {
  594.          throw new AppletSecurityException(UniversalSetFactoryTarget, "cannot set factory");
  595.       }
  596.    }
  597.  
  598.    public void checkMemberAccess(Class var1, int var2) {
  599.       this.checkMemberAccess(var1, var2, 2);
  600.    }
  601.  
  602.    protected void checkMemberAccess(Class var1, int var2, int var3) {
  603.       if (var2 != 0) {
  604.          if (privMgr != null) {
  605.             if (!privMgr.isPrivilegeEnabled(UniversalMemberAccessTarget, var3 + 1)) {
  606.                throw new AppletSecurityException(UniversalMemberAccessTarget, "member access");
  607.             }
  608.          }
  609.       }
  610.    }
  611.  
  612.    public void checkPrintJobAccess() {
  613.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPrintJobAccessTarget, 2)) {
  614.          throw new AppletSecurityException(UniversalPrintJobAccessTarget, "checkgetprintjob");
  615.       }
  616.    }
  617.  
  618.    public void checkSystemClipboardAccess() {
  619.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalSystemClipboardAccessTarget, 2)) {
  620.          throw new AppletSecurityException(UniversalSystemClipboardAccessTarget, "checksystemclipboardaccess");
  621.       }
  622.    }
  623.  
  624.    public void checkAwtEventQueueAccess() {
  625.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalAwtEventQueueAccessTarget, 2)) {
  626.          throw new AppletSecurityException(UniversalAwtEventQueueAccessTarget, "checkawteventqueueaccess");
  627.       }
  628.    }
  629.  
  630.    public void checkSecurityAccess(String var1) {
  631.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalSecurityProviderTarget, 2)) {
  632.          throw new AppletSecurityException(UniversalSecurityProviderTarget, "security operation: " + var1);
  633.       }
  634.    }
  635.  
  636.    protected void checkCreateSecurityManagerAccess(int var1) {
  637.       if (privMgr != null && !privMgr.isPrivilegeEnabled(CreateSecurityManagerTarget, var1 + 1)) {
  638.          throw new AppletSecurityException(CreateSecurityManagerTarget, "can't create SecurityManager");
  639.       }
  640.    }
  641.  
  642.    protected void checkResourceAccess(String var1, int var2) {
  643.       int var3 = var1.lastIndexOf(".");
  644.       if (var3 >= 0) {
  645.          String var4 = var1.substring(var3);
  646.          if (resourceExtTable.get(var4) != null) {
  647.             return;
  648.          }
  649.       }
  650.  
  651.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPropertyReadTarget, var2 + 1)) {
  652.          throw new AppletSecurityException(UniversalPropertyReadTarget, "checkResourceAccess");
  653.       }
  654.    }
  655.  
  656.    public static void addToResourceExtensionTable(String var0) {
  657.       if (resourceExtTable.get(var0) == null) {
  658.          if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPropertyWriteTarget, 1)) {
  659.             throw new AppletSecurityException(UniversalPropertyWriteTarget, "checkResourceAccess");
  660.          } else {
  661.             resourceExtTable.put(var0, Boolean.TRUE);
  662.          }
  663.       }
  664.    }
  665.  
  666.    private static void loadResourceExtTable() {
  667.       Boolean var0 = Boolean.TRUE;
  668.       resourceExtTable.put(".txt", var0);
  669.       resourceExtTable.put(".text", var0);
  670.       resourceExtTable.put(".html", var0);
  671.       resourceExtTable.put(".htm", var0);
  672.       resourceExtTable.put(".rtf", var0);
  673.       resourceExtTable.put(".pdf", var0);
  674.       resourceExtTable.put(".tex", var0);
  675.       resourceExtTable.put(".latex", var0);
  676.       resourceExtTable.put(".dvi", var0);
  677.       resourceExtTable.put(".texi", var0);
  678.       resourceExtTable.put(".texi", var0);
  679.       resourceExtTable.put(".vcf", var0);
  680.       resourceExtTable.put(".gif", var0);
  681.       resourceExtTable.put(".jpeg", var0);
  682.       resourceExtTable.put(".jpg", var0);
  683.       resourceExtTable.put(".jpe", var0);
  684.       resourceExtTable.put(".jfif", var0);
  685.       resourceExtTable.put(".pjpeg", var0);
  686.       resourceExtTable.put(".pjp", var0);
  687.       resourceExtTable.put(".tiff", var0);
  688.       resourceExtTable.put(".tif", var0);
  689.       resourceExtTable.put(".ras", var0);
  690.       resourceExtTable.put(".xbm", var0);
  691.       resourceExtTable.put(".xpm", var0);
  692.       resourceExtTable.put(".xwd", var0);
  693.       resourceExtTable.put(".pnm", var0);
  694.       resourceExtTable.put(".pbm", var0);
  695.       resourceExtTable.put(".pgm", var0);
  696.       resourceExtTable.put(".ppm", var0);
  697.       resourceExtTable.put(".rgb", var0);
  698.       resourceExtTable.put(".bmp", var0);
  699.       resourceExtTable.put(".pcd", var0);
  700.       resourceExtTable.put(".png", var0);
  701.       resourceExtTable.put(".ief", var0);
  702.       resourceExtTable.put(".fif", var0);
  703.       resourceExtTable.put(".au", var0);
  704.       resourceExtTable.put(".snd", var0);
  705.       resourceExtTable.put(".aif", var0);
  706.       resourceExtTable.put(".aiff", var0);
  707.       resourceExtTable.put(".aifc", var0);
  708.       resourceExtTable.put(".wav", var0);
  709.       resourceExtTable.put(".mp2", var0);
  710.       resourceExtTable.put(".mpa", var0);
  711.       resourceExtTable.put(".abs", var0);
  712.       resourceExtTable.put(".mpega", var0);
  713.       resourceExtTable.put(".ra", var0);
  714.       resourceExtTable.put(".ram", var0);
  715.       resourceExtTable.put(".mpeg", var0);
  716.       resourceExtTable.put(".mpg", var0);
  717.       resourceExtTable.put(".mpe", var0);
  718.       resourceExtTable.put(".mpv", var0);
  719.       resourceExtTable.put(".vbs", var0);
  720.       resourceExtTable.put(".mpegv", var0);
  721.       resourceExtTable.put(".mpv2", var0);
  722.       resourceExtTable.put(".mpv2v", var0);
  723.       resourceExtTable.put(".qt", var0);
  724.       resourceExtTable.put(".mov", var0);
  725.       resourceExtTable.put(".moov", var0);
  726.       resourceExtTable.put(".avi", var0);
  727.       resourceExtTable.put(".hqx", var0);
  728.       resourceExtTable.put(".sit", var0);
  729.       resourceExtTable.put(".ai", var0);
  730.       resourceExtTable.put(".eps", var0);
  731.       resourceExtTable.put(".ps", var0);
  732.       resourceExtTable.put(".pac", var0);
  733.       resourceExtTable.put(".jsc", var0);
  734.       resourceExtTable.put(".doc", var0);
  735.       resourceExtTable.put(".dot", var0);
  736.       resourceExtTable.put(".xls", var0);
  737.       resourceExtTable.put(".xlt", var0);
  738.       resourceExtTable.put(".xlm", var0);
  739.       resourceExtTable.put(".xld", var0);
  740.       resourceExtTable.put(".xla", var0);
  741.       resourceExtTable.put(".xlc", var0);
  742.       resourceExtTable.put(".xlw", var0);
  743.       resourceExtTable.put(".xll", var0);
  744.       resourceExtTable.put(".mdb", var0);
  745.       resourceExtTable.put(".mda", var0);
  746.       resourceExtTable.put(".mde", var0);
  747.       resourceExtTable.put(".ppt", var0);
  748.       resourceExtTable.put(".pot", var0);
  749.       resourceExtTable.put(".ppa", var0);
  750.       resourceExtTable.put(".pps", var0);
  751.       resourceExtTable.put(".pwz", var0);
  752.       resourceExtTable.put(".scd", var0);
  753.       resourceExtTable.put(".sch", var0);
  754.       resourceExtTable.put(".sc2", var0);
  755.       resourceExtTable.put(".lwp", var0);
  756.       resourceExtTable.put(".sam", var0);
  757.       resourceExtTable.put(".123", var0);
  758.       resourceExtTable.put(".wk4", var0);
  759.       resourceExtTable.put(".wk3", var0);
  760.       resourceExtTable.put(".wk1", var0);
  761.       resourceExtTable.put(".apr", var0);
  762.       resourceExtTable.put(".vew", var0);
  763.       resourceExtTable.put(".prz", var0);
  764.       resourceExtTable.put(".pre", var0);
  765.       resourceExtTable.put(".or3", var0);
  766.       resourceExtTable.put(".or2", var0);
  767.       resourceExtTable.put(".org", var0);
  768.       resourceExtTable.put(".scm", var0);
  769.       resourceExtTable.put(".wpd", var0);
  770.       resourceExtTable.put(".wp6", var0);
  771.       resourceExtTable.put(".t", var0);
  772.       resourceExtTable.put(".tr", var0);
  773.       resourceExtTable.put(".roff", var0);
  774.       resourceExtTable.put(".me", var0);
  775.       resourceExtTable.put(".ms", var0);
  776.       resourceExtTable.put(".man", var0);
  777.       resourceExtTable.put(".movie", var0);
  778.       resourceExtTable.put(".properties", var0);
  779.    }
  780.  
  781.    protected void unknownLoaderException(String var1) {
  782.       throw new SecurityException("unknown class loader type.unable to check for " + var1);
  783.    }
  784.  
  785.    public void debug(String var1) {
  786.       if (debug) {
  787.          System.err.println(var1);
  788.       }
  789.  
  790.    }
  791.  
  792.    protected boolean isPrivilegeEnabled(String var1, int var2) {
  793.       if (privMgr != null) {
  794.          Target var3 = Target.findTarget(var1);
  795.          return var3 == null ? false : privMgr.isPrivilegeEnabled(var3, var2 + 1);
  796.       } else {
  797.          return true;
  798.       }
  799.    }
  800.  
  801.    protected boolean securityCheckScopePermission(int var1) {
  802.       return privMgr != null ? privMgr.isPrivilegeEnabled(SuperUserTarget, var1 + 1) : true;
  803.    }
  804.  
  805.    protected Object securitySetScopePermission(int var1) {
  806.       return privMgr != null ? privMgr.setScopePrivilegeAssistant(var1 + 1) : null;
  807.    }
  808.  
  809.    protected Object securitySetScopePermission(int var1, String var2) {
  810.       return privMgr != null ? privMgr.setScopePrivilegeAssistant(var1 + 1, var2) : null;
  811.    }
  812.  
  813.    public boolean checkMatchPrincipalAlways(int var1) {
  814.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  815.       return var2 == null ? true : var2.checkMatchPrincipalAlways(var1 + 1);
  816.    }
  817.  
  818.    private boolean marimbaCheckThreadGroup(ThreadGroup var1) {
  819.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  820.       return var2 == null ? false : CastanetChannelInfo.checkThreadGroup(var2, var1);
  821.    }
  822.  
  823.    private void marimbaCheckTopLevelWindow(Object var1) {
  824.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  825.       CastanetChannelInfo.checkTopLevelWindow(var2, var1);
  826.    }
  827.  
  828.    private boolean marimbaCheckAccess(String var1, boolean var2) {
  829.       boolean var3 = false;
  830.       PrivilegeManager var4 = PrivilegeManager.getPrivilegeManager();
  831.       if (var4 != null) {
  832.          try {
  833.             Target var5 = Target.findTarget("MarimbaAppContextTarget");
  834.             if (var5 != null) {
  835.                var4.checkPrivilegeEnabled(var5);
  836.                var3 = true;
  837.             }
  838.          } catch (ForbiddenTargetException var6) {
  839.             var3 = false;
  840.          }
  841.       }
  842.  
  843.       ClassLoader var7 = ((SecurityManager)this).currentClassLoader();
  844.       return !var3 && var7 == null ? false : CastanetChannelInfo.marimbaCheckAccess(var1, var7, var2, var3);
  845.    }
  846.  
  847.    public ClassLoader getCurrentClassLoader() {
  848.       PrivilegeManager var1 = PrivilegeManager.getPrivilegeManager();
  849.       Target var2 = Target.findTarget("MarimbaAppContextTarget");
  850.       var1.checkPrivilegeEnabled(var2);
  851.       return ((SecurityManager)this).currentClassLoader();
  852.    }
  853. }
  854.