home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 November / PCO1197.ISO / FilesBBS / WIN95 / NET_COM / N32E403.EXE / nav40l.z / java40.jar / netscape / security / AppletSecurity.class (.txt) next >
Encoding:
Java Class File  |  1997-09-04  |  14.2 KB  |  712 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 netscape.applet.CastanetChannelInfo;
  10.  
  11. public class AppletSecurity extends SecurityManager {
  12.    private static final boolean MARIMBA_ENABLED = true;
  13.    private static boolean debug;
  14.    static final int NETWORK_NONE = 1;
  15.    static final int NETWORK_HOST = 2;
  16.    static final int NETWORK_UNRESTRICTED = 3;
  17.    private static final int PRIVELEGED_PORT = 1024;
  18.    int networkMode;
  19.    private static Target UniversalThreadAccessTarget;
  20.    private static Target UniversalThreadGroupAccessTarget;
  21.    private static Target UniversalExitAccessTarget;
  22.    private static Target UniversalExecAccessTarget;
  23.    private static Target UniversalLinkAccessTarget;
  24.    private static Target UniversalPropertyWriteTarget;
  25.    private static Target UniversalPropertyReadTarget;
  26.    private static Target UniversalFileReadTarget;
  27.    private static Target ParamFileReadTarget;
  28.    private static Target UniversalFileWriteTarget;
  29.    private static Target UniversalFileDeleteTarget;
  30.    private static Target ParamFileWriteTarget;
  31.    private static Target UniversalFdReadTarget;
  32.    private static Target UniversalFdWriteTarget;
  33.    private static Target UniversalListenTarget;
  34.    private static Target UniversalAcceptTarget;
  35.    private static Target UniversalConnectTarget;
  36.    private static Target UniversalMulticastTarget;
  37.    private static Target UniversalTopLevelWindowTarget;
  38.    private static Target UniversalPackageAccessTarget;
  39.    private static Target UniversalPackageDefinitionTarget;
  40.    private static Target UniversalSetFactoryTarget;
  41.    private static Target UniversalMemberAccessTarget;
  42.    private static Target UniversalPrintJobAccessTarget;
  43.    private static Target UniversalSystemClipboardAccessTarget;
  44.    private static Target UniversalAwtEventQueueAccessTarget;
  45.    private static Target UniversalSecurityProviderTarget;
  46.    private static Target CreateSecurityManagerTarget;
  47.    private static Target SuperUserTarget;
  48.    private static PrivilegeManager privMgr;
  49.    private static Class atg;
  50.  
  51.    public AppletSecurity() {
  52.       this.reset();
  53.       this.initTargets();
  54.       UserTarget.createAwtDialog();
  55.    }
  56.  
  57.    void reset() {
  58.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  59.       String var1 = System.getProperty("appletviewer.security.mode");
  60.       if (var1 == null) {
  61.          var1 = "host";
  62.       }
  63.  
  64.       if (var1.equals("unrestricted")) {
  65.          this.networkMode = 3;
  66.       } else if (var1.equals("none")) {
  67.          this.networkMode = 1;
  68.       } else {
  69.          this.networkMode = 2;
  70.       }
  71.    }
  72.  
  73.    private void initTargets() {
  74.       UniversalThreadAccessTarget = Target.findTarget("UniversalThreadAccess");
  75.       UniversalThreadGroupAccessTarget = Target.findTarget("UniversalThreadGroupAccess");
  76.       UniversalExitAccessTarget = Target.findTarget("UniversalExitAccess");
  77.       UniversalExecAccessTarget = Target.findTarget("UniversalExecAccess");
  78.       UniversalLinkAccessTarget = Target.findTarget("UniversalLinkAccess");
  79.       UniversalPropertyWriteTarget = Target.findTarget("UniversalPropertyWrite");
  80.       UniversalPropertyReadTarget = Target.findTarget("UniversalPropertyRead");
  81.       UniversalFileReadTarget = Target.findTarget("UniversalFileRead");
  82.       ParamFileReadTarget = Target.findTarget("FileRead");
  83.       UniversalFileWriteTarget = Target.findTarget("UniversalFileWrite");
  84.       UniversalFileDeleteTarget = Target.findTarget("UniversalFileDelete");
  85.       ParamFileWriteTarget = Target.findTarget("FileWrite");
  86.       UniversalFdReadTarget = Target.findTarget("UniversalFdRead");
  87.       UniversalFdWriteTarget = Target.findTarget("UniversalFdWrite");
  88.       UniversalListenTarget = Target.findTarget("UniversalListen");
  89.       UniversalAcceptTarget = Target.findTarget("UniversalAccept");
  90.       UniversalConnectTarget = Target.findTarget("UniversalConnect");
  91.       UniversalMulticastTarget = Target.findTarget("UniversalMulticast");
  92.       UniversalTopLevelWindowTarget = Target.findTarget("UniversalTopLevelWindow");
  93.       UniversalPackageAccessTarget = Target.findTarget("UniversalPackageAccess");
  94.       UniversalPackageDefinitionTarget = Target.findTarget("UniversalPackageDefinition");
  95.       UniversalSetFactoryTarget = Target.findTarget("UniversalSetFactory");
  96.       UniversalMemberAccessTarget = Target.findTarget("UniversalMemberAccess");
  97.       UniversalPrintJobAccessTarget = Target.findTarget("UniversalPrintJobAccess");
  98.       UniversalSystemClipboardAccessTarget = Target.findTarget("UniversalSystemClipboardAccess");
  99.       UniversalAwtEventQueueAccessTarget = Target.findTarget("UniversalAwtEventQueueAccess");
  100.       UniversalSecurityProviderTarget = Target.findTarget("UniversalSecurityProvider");
  101.       CreateSecurityManagerTarget = Target.findTarget("CreateSecurityManager");
  102.       SuperUserTarget = Target.findTarget("SuperUser");
  103.    }
  104.  
  105.    boolean fromApplet() {
  106.       return ((SecurityManager)this).checkClassLoader(1);
  107.    }
  108.  
  109.    boolean inApplet() {
  110.       return ((SecurityManager)this).inClassLoader();
  111.    }
  112.  
  113.    public Object getSecurityContext() {
  114.       ClassLoader var1 = ((SecurityManager)this).currentClassLoader();
  115.       return var1 == null ? null : var1.getCodeBase();
  116.    }
  117.  
  118.    public static void setPrivilegeManager(PrivilegeManager var0) {
  119.       if (privMgr != null) {
  120.          throw new SecurityException("PrivilegeManager already set");
  121.       } else {
  122.          privMgr = var0;
  123.       }
  124.    }
  125.  
  126.    public static PrivilegeManager getPrivilegeManager() {
  127.       return privMgr;
  128.    }
  129.  
  130.    public static void enablePrivilege(String var0) {
  131.       privMgr.enablePrivilege(var0, 1);
  132.    }
  133.  
  134.    protected synchronized void checkCreateClassLoader(int var1) {
  135.       if (privMgr != null) {
  136.          Target var2 = Target.findTarget("MarimbaInternalTarget");
  137.          if (!privMgr.isPrivilegeEnabled(var2, var1 + 1)) {
  138.             if (((SecurityManager)this).checkClassLoader(var1 + 1)) {
  139.                throw new AppletSecurityException("checkcreateclassloader");
  140.             }
  141.          }
  142.       }
  143.    }
  144.  
  145.    private boolean isAppletThreadGroup(ThreadGroup var1) {
  146.       if (atg == null) {
  147.          try {
  148.             atg = Class.forName("netscape.applet.AppletThreadGroup");
  149.          } catch (ClassNotFoundException var3) {
  150.             return false;
  151.          }
  152.       }
  153.  
  154.       if (var1 == null) {
  155.          return false;
  156.       } else {
  157.          for(Class var2 = var1.getClass(); var2 != null; var2 = var2.getSuperclass()) {
  158.             if (var2 == atg) {
  159.                return true;
  160.             }
  161.          }
  162.  
  163.          return false;
  164.       }
  165.    }
  166.  
  167.    protected synchronized void checkAccess(Thread var1, int var2) {
  168.       if (privMgr != null) {
  169.          if (this.isAppletThreadGroup(var1.getThreadGroup())) {
  170.             return;
  171.          }
  172.  
  173.          if (!privMgr.isPrivilegeEnabled(UniversalThreadAccessTarget, var2 + 1)) {
  174.             if (this.marimbaCheckThreadGroup(var1.getThreadGroup())) {
  175.                return;
  176.             }
  177.  
  178.             throw new AppletSecurityException(UniversalThreadAccessTarget, "thread");
  179.          }
  180.       }
  181.  
  182.    }
  183.  
  184.    protected synchronized void checkAccess(Thread var1, Throwable var2, int var3) {
  185.       if (privMgr != null) {
  186.          if (var2 instanceof ThreadDeath) {
  187.             return;
  188.          }
  189.  
  190.          if (!privMgr.isPrivilegeEnabled(UniversalThreadAccessTarget, var3 + 1)) {
  191.             throw new AppletSecurityException(UniversalThreadAccessTarget, "thread can't send exception");
  192.          }
  193.       }
  194.  
  195.    }
  196.  
  197.    public synchronized void checkAccess(ThreadGroup var1, int var2) {
  198.       if (privMgr != null) {
  199.          if (this.isAppletThreadGroup(var1)) {
  200.             return;
  201.          }
  202.  
  203.          if (!privMgr.isPrivilegeEnabled(UniversalThreadGroupAccessTarget, var2 + 1)) {
  204.             if (this.marimbaCheckThreadGroup(var1)) {
  205.                return;
  206.             }
  207.  
  208.             throw new AppletSecurityException(UniversalThreadGroupAccessTarget, "threadgroup", var1.toString());
  209.          }
  210.       }
  211.  
  212.    }
  213.  
  214.    protected synchronized void checkExit(int var1, int var2) {
  215.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalExitAccessTarget, var2 + 1)) {
  216.          throw new AppletSecurityException(UniversalExitAccessTarget, "checkexit", String.valueOf(var1));
  217.       }
  218.    }
  219.  
  220.    protected synchronized void checkExec(String var1, int var2) {
  221.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalExecAccessTarget, var2 + 1)) {
  222.          throw new AppletSecurityException(UniversalExecAccessTarget, "checkexec", var1);
  223.       }
  224.    }
  225.  
  226.    protected synchronized void checkLink(String var1, int var2) {
  227.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalLinkAccessTarget, var2 + 1)) {
  228.          throw new AppletSecurityException(UniversalLinkAccessTarget, "checklink", var1);
  229.       }
  230.    }
  231.  
  232.    protected synchronized void checkPropertiesAccess(int var1) {
  233.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPropertyWriteTarget, var1 + 1)) {
  234.          throw new AppletSecurityException(UniversalPropertyWriteTarget, "checkpropsaccess");
  235.       }
  236.    }
  237.  
  238.    protected synchronized void checkPropertyAccess(String var1, int var2) {
  239.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPropertyReadTarget, var2 + 1)) {
  240.          throw new AppletSecurityException(UniversalPropertyReadTarget, "checkpropsaccess.key");
  241.       }
  242.    }
  243.  
  244.    protected synchronized void checkRead(String var1, int var2) {
  245.       ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
  246.       if (var3 != null) {
  247.          this.checkRead(var1, var3.getCodeBase(), var2 + 1);
  248.       } else {
  249.          this.checkRead(var1, (URL)null, var2 + 1);
  250.       }
  251.    }
  252.  
  253.    private static boolean directoryContainsFile(String var0, String var1) {
  254.       SecurityManager.enablePrivilege("UniversalFileRead");
  255.       SecurityManager.enablePrivilege("UniversalPropertyRead");
  256.  
  257.       try {
  258.          var1 = (new File(var1)).getCanonicalPath();
  259.          var0 = (new File(var0)).getCanonicalPath();
  260.       } catch (IOException var3) {
  261.          return false;
  262.       }
  263.  
  264.       if (var1.equals(var0)) {
  265.          return true;
  266.       } else if (!var1.startsWith(var0)) {
  267.          return false;
  268.       } else {
  269.          int var2 = var0.length();
  270.          if (var1.charAt(var2) == File.separatorChar) {
  271.             return true;
  272.          } else {
  273.             return var2 > 0 && var0.charAt(var2 - 1) == File.separatorChar;
  274.          }
  275.       }
  276.    }
  277.  
  278.    private static String unEscapeFileSpecificChars(String var0) {
  279.       String var1 = var0;
  280.       int var4 = 0;
  281.  
  282.       int var2;
  283.       while((var2 = var1.indexOf(37, var4)) >= 0) {
  284.          var4 = var2 + 1;
  285.          Object var6 = null;
  286.          int var3 = var2 + 3;
  287.          if (var3 <= var1.length()) {
  288.             String var5 = var1.substring(var2 + 1, var3);
  289.  
  290.             try {
  291.                var8 = (new Character((char)Integer.parseInt(var5, 16))).toString();
  292.             } catch (NumberFormatException var7) {
  293.                continue;
  294.             }
  295.  
  296.             if (":/.\\|".indexOf(var8) != -1) {
  297.                var1 = var1.substring(0, var2) + var8 + var1.substring(var3);
  298.             }
  299.          }
  300.       }
  301.  
  302.       if (File.separatorChar == '\\') {
  303.          if (var1.charAt(0) == '/' && (var1.charAt(2) == '|' || var1.charAt(2) == ':')) {
  304.             var1 = var1.substring(1);
  305.          }
  306.  
  307.          if (var1.charAt(1) == '|') {
  308.             var1 = var1.substring(0, 1) + ":" + var1.substring(2);
  309.          }
  310.  
  311.          var1 = var1.replace('/', '\\');
  312.       }
  313.  
  314.       return var1;
  315.    }
  316.  
  317.    protected synchronized void checkRead(String var1, URL var2, int var3) {
  318.       if (privMgr != null) {
  319.          if (!privMgr.isPrivilegeEnabled(UniversalFileReadTarget, var3 + 1)) {
  320.             Target[] var4 = new Target[]{ParamFileReadTarget};
  321.             if (!privMgr.isPrivilegeEnabled(var4, var3 + 1, var1)) {
  322.                String var5 = null;
  323.                if (var2 != null && var2.getProtocol().equals("file")) {
  324.                   var5 = unEscapeFileSpecificChars(var2.getFile());
  325.                   if (directoryContainsFile(var5, var1)) {
  326.                      return;
  327.                   }
  328.                }
  329.  
  330.                if (!this.marimbaCheckAccess(var1, true)) {
  331.                   if (var5 != null) {
  332.                      throw new AppletSecurityException(UniversalFileReadTarget, "checkread", "Codebase '" + var5 + "' does not include '" + var1 + "'");
  333.                   } else {
  334.                      throw new AppletSecurityException(UniversalFileReadTarget, "checkread", "Read of '" + var1 + "' not permitted");
  335.                   }
  336.                }
  337.             }
  338.          }
  339.       }
  340.    }
  341.  
  342.    protected void checkRead(String var1, Object var2, int var3) {
  343.       ((SecurityManager)this).checkRead(var1);
  344.       if (var2 != null) {
  345.          this.checkRead(var1, (URL)var2, var3 + 1);
  346.       }
  347.  
  348.    }
  349.  
  350.    protected synchronized void checkWrite(String var1, int var2) {
  351.       if (privMgr != null) {
  352.          if (!privMgr.isPrivilegeEnabled(UniversalFileWriteTarget, var2 + 1)) {
  353.             Target[] var3 = new Target[]{ParamFileWriteTarget};
  354.             if (!privMgr.isPrivilegeEnabled(var3, var2 + 1, var1)) {
  355.                if (!this.marimbaCheckAccess(var1, false)) {
  356.                   throw new AppletSecurityException(UniversalFileWriteTarget, "checkwrite", var1);
  357.                }
  358.             }
  359.          }
  360.       }
  361.    }
  362.  
  363.    protected synchronized void checkRead(FileDescriptor var1, int var2) {
  364.       if (!var1.valid()) {
  365.          throw new AppletSecurityException("checkread", "invalid file descriptor");
  366.       } else if (privMgr != null) {
  367.          if (!privMgr.isPrivilegeEnabled(UniversalFdReadTarget, var2 + 1)) {
  368.             throw new AppletSecurityException(UniversalFdReadTarget, "checkread");
  369.          }
  370.       }
  371.    }
  372.  
  373.    protected synchronized void checkWrite(FileDescriptor var1, int var2) {
  374.       if (!var1.valid()) {
  375.          throw new AppletSecurityException("checkwrite.fd", "invalid file descriptor");
  376.       } else if (privMgr != null) {
  377.          if (!privMgr.isPrivilegeEnabled(UniversalFdWriteTarget, var2 + 1)) {
  378.             throw new AppletSecurityException(UniversalFdWriteTarget, "fd.write");
  379.          }
  380.       }
  381.    }
  382.  
  383.    protected synchronized void checkDelete(String var1, int var2) {
  384.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalFileDeleteTarget, var2 + 1)) {
  385.          if (!this.marimbaCheckAccess(var1, false)) {
  386.             throw new AppletSecurityException(UniversalFileDeleteTarget, "checkdelete", var1);
  387.          }
  388.       }
  389.    }
  390.  
  391.    protected synchronized void checkListen(int var1, int var2) {
  392.       if (privMgr != null) {
  393.          if (!privMgr.isPrivilegeEnabled(UniversalListenTarget, var2 + 1)) {
  394.             if (var1 > 0 && var1 < 1024) {
  395.                throw new AppletSecurityException(UniversalListenTarget, "checklisten", String.valueOf(var1));
  396.             }
  397.          }
  398.       }
  399.    }
  400.  
  401.    protected synchronized void checkAccept(String var1, int var2, int var3) {
  402.       if (privMgr != null) {
  403.          if (!privMgr.isPrivilegeEnabled(UniversalAcceptTarget, var3 + 1)) {
  404.             if (var2 > 0 && var2 < 1024) {
  405.                throw new AppletSecurityException(UniversalAcceptTarget, "checkaccept", var1, String.valueOf(var2));
  406.             } else {
  407.                this.checkConnect(var1, var2, var3 + 1);
  408.             }
  409.          }
  410.       }
  411.    }
  412.  
  413.    protected synchronized void checkConnect(String var1, int var2, int var3) {
  414.       ClassLoader var4 = ((SecurityManager)this).currentClassLoader();
  415.       if (var4 == null) {
  416.          if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var3 + 1)) {
  417.             if (!privMgr.getBoolPref("signed.applets.low_security_for_local_classes")) {
  418.                throw new AppletSecurityException(UniversalConnectTarget, connectErrorString("local-classpath-classes", var1));
  419.             }
  420.          }
  421.       } else {
  422.          String var5 = CastanetChannelInfo.marimbaGetHost(var4);
  423.          if (var5 == null) {
  424.             var5 = var4.getCodeBase().getHost();
  425.          }
  426.  
  427.          this.checkConnect(var5, var1, var3 + 1);
  428.       }
  429.    }
  430.  
  431.    protected void checkConnect(String var1, int var2, Object var3, int var4) {
  432.       this.checkConnect(var1, var2, var4 + 1);
  433.       if (var3 != null) {
  434.          this.checkConnect(((URL)var3).getHost(), var1, var4 + 1);
  435.       }
  436.  
  437.    }
  438.  
  439.    private static String connectErrorString(String var0, String var1) {
  440.       return "Couldn't connect to '" + var1 + "' with origin from '" + var0 + "'.";
  441.    }
  442.  
  443.    protected synchronized void checkConnect(String var1, String var2, boolean var3, int var4) {
  444.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var4 + 1)) {
  445.          if (var1 == null) {
  446.             throw new AppletSecurityException(UniversalConnectTarget, connectErrorString("unspecified-host", var2));
  447.          } else {
  448.             String var5 = null;
  449.             switch (this.networkMode) {
  450.                case 1:
  451.                   throw new AppletSecurityException(UniversalConnectTarget, connectErrorString(var1, var2));
  452.                case 2:
  453.                   SecurityManager.enablePrivilege("UniversalConnect");
  454.  
  455.                   try {
  456.                      if (var1.equals(var2)) {
  457.                         try {
  458.                            InetAddress var16 = InetAddress.getByName(var2);
  459.                            return;
  460.                         } catch (UnknownHostException var14) {
  461.                            if (!var3 && !privMgr.getBoolPref("security.lower_java_network_security_by_trusting_proxies")) {
  462.                               var5 = "Could not resolve IP for host " + var2 + ". See the trustProxy property.";
  463.                               break;
  464.                            }
  465.  
  466.                            return;
  467.                         }
  468.                      }
  469.  
  470.                      try {
  471.                         InetAddress var8 = InetAddress.getByName(var2);
  472.                         InetAddress var9 = InetAddress.getByName(var1);
  473.                         if (!var9.equals(var8)) {
  474.                            var5 = connectErrorString(var1, var2);
  475.                            break;
  476.                         }
  477.                      } catch (UnknownHostException var13) {
  478.                         var5 = "Couldn't resolve IP for host " + var2 + " or for " + var1 + ".";
  479.                         break;
  480.                      }
  481.                   } finally {
  482.                      SecurityManager.revertPrivilege();
  483.                   }
  484.  
  485.                   return;
  486.                case 3:
  487.                   return;
  488.             }
  489.  
  490.             throw new AppletSecurityException(UniversalConnectTarget, var5);
  491.          }
  492.       }
  493.    }
  494.  
  495.    protected synchronized void checkConnect(String var1, String var2, int var3) {
  496.       this.checkConnect(var1, var2, Boolean.getBoolean("trustProxy"), var3 + 1);
  497.    }
  498.  
  499.    protected synchronized void checkURLConnect(URL var1, int var2) {
  500.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var2 + 1)) {
  501.          ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
  502.          if (var3 == null) {
  503.             if (!privMgr.getBoolPref("signed.applets.low_security_for_local_classes")) {
  504.                throw new AppletSecurityException(UniversalConnectTarget, "class from local disk trying to access url", var1.toExternalForm());
  505.             }
  506.          } else {
  507.             this.checkURLConnectHelper(var3.getCodeBase(), var1, var2 + 1);
  508.          }
  509.       }
  510.    }
  511.  
  512.    protected synchronized void checkURLConnect(URL var1, URL var2, int var3) {
  513.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalConnectTarget, var3 + 1)) {
  514.          this.checkURLConnectHelper(var1, var2, var3 + 1);
  515.       }
  516.    }
  517.  
  518.    private synchronized void checkURLConnectHelper(URL var1, URL var2, int var3) {
  519.       String var4 = var2.getProtocol();
  520.       String var5 = null;
  521.       ClassLoader var6 = ((SecurityManager)this).currentClassLoader();
  522.       if (var6 != null) {
  523.          var5 = CastanetChannelInfo.marimbaGetHost(var6);
  524.       }
  525.  
  526.       if (var5 == null) {
  527.          var5 = var1.getHost();
  528.       }
  529.  
  530.       this.checkConnect(var5, var2.getHost(), var3 + 1);
  531.       String var7 = var1.getProtocol();
  532.       if (!var4.equals("http") && !var4.equals("https") && !var4.equals("tuner") && !var4.equals("ftp") && !var4.equals("gopher")) {
  533.          if (var4.equals("file") && var7.equals("file")) {
  534.             String var8 = unEscapeFileSpecificChars(var2.getFile());
  535.             this.checkRead(var8, var1, var3 + 1);
  536.          } else {
  537.             throw new AppletSecurityException("protocol", var4);
  538.          }
  539.       } else if (!var7.equals("http") && !var7.equals("https") && !var7.equals("tuner")) {
  540.          throw new AppletSecurityException("protocol", "Cannot access '" + var4 + "' from a codebase protocol of '" + var7 + "'");
  541.       }
  542.    }
  543.  
  544.    protected void checkMulticast(InetAddress var1, int var2) {
  545.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalMulticastTarget, var2 + 1)) {
  546.          throw new AppletSecurityException(UniversalMulticastTarget, "can not access IP multicast");
  547.       }
  548.    }
  549.  
  550.    protected void checkMulticast(InetAddress var1, byte var2, int var3) {
  551.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalMulticastTarget, var3 + 1)) {
  552.          throw new AppletSecurityException(UniversalMulticastTarget, "can not access IP multicast");
  553.       }
  554.    }
  555.  
  556.    public synchronized boolean checkTopLevelWindow(Object var1) {
  557.       this.marimbaCheckTopLevelWindow(var1);
  558.       return privMgr == null || privMgr.isPrivilegeEnabled(UniversalTopLevelWindowTarget, 2);
  559.    }
  560.  
  561.    public synchronized void checkPackageAccess(String var1) {
  562.       if (((SecurityManager)this).inClassLoader()) {
  563.          if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPackageAccessTarget, 2)) {
  564.             for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  565.                String var3 = var1.substring(0, var2);
  566.                if (Boolean.getBoolean("package.restrict.access." + var3)) {
  567.                   throw new AppletSecurityException(UniversalPackageAccessTarget, "checkpackageaccess", var1);
  568.                }
  569.             }
  570.  
  571.          }
  572.       }
  573.    }
  574.  
  575.    public synchronized void checkPackageDefinition(String var1) {
  576.       if (((SecurityManager)this).inClassLoader()) {
  577.          if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPackageDefinitionTarget, 2)) {
  578.             for(int var2 = var1.indexOf(46); var2 > 0; var2 = var1.indexOf(46, var2 + 1)) {
  579.                String var3 = var1.substring(0, var2);
  580.                if (Boolean.getBoolean("package.restrict.definition." + var3)) {
  581.                   throw new AppletSecurityException(UniversalPackageDefinitionTarget, "cannot define package:" + var1);
  582.                }
  583.             }
  584.  
  585.          }
  586.       }
  587.    }
  588.  
  589.    public synchronized void checkSetFactory() {
  590.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalSetFactoryTarget, 2)) {
  591.          throw new AppletSecurityException(UniversalSetFactoryTarget, "cannot set factory");
  592.       }
  593.    }
  594.  
  595.    public void checkMemberAccess(Class var1, int var2) {
  596.       this.checkMemberAccess(var1, var2, 2);
  597.    }
  598.  
  599.    protected void checkMemberAccess(Class var1, int var2, int var3) {
  600.       if (var2 != 0) {
  601.          if (privMgr != null) {
  602.             if (!privMgr.isPrivilegeEnabled(UniversalMemberAccessTarget, var3 + 1)) {
  603.                throw new AppletSecurityException(UniversalMemberAccessTarget, "member access");
  604.             }
  605.          }
  606.       }
  607.    }
  608.  
  609.    public void checkPrintJobAccess() {
  610.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalPrintJobAccessTarget, 2)) {
  611.          throw new AppletSecurityException(UniversalPrintJobAccessTarget, "checkgetprintjob");
  612.       }
  613.    }
  614.  
  615.    public void checkSystemClipboardAccess() {
  616.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalSystemClipboardAccessTarget, 2)) {
  617.          throw new AppletSecurityException(UniversalSystemClipboardAccessTarget, "checksystemclipboardaccess");
  618.       }
  619.    }
  620.  
  621.    public void checkAwtEventQueueAccess() {
  622.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalAwtEventQueueAccessTarget, 2)) {
  623.          throw new AppletSecurityException(UniversalAwtEventQueueAccessTarget, "checkawteventqueueaccess");
  624.       }
  625.    }
  626.  
  627.    public void checkSecurityAccess(String var1) {
  628.       if (privMgr != null && !privMgr.isPrivilegeEnabled(UniversalSecurityProviderTarget, 2)) {
  629.          throw new AppletSecurityException(UniversalSecurityProviderTarget, "security operation: " + var1);
  630.       }
  631.    }
  632.  
  633.    protected void checkCreateSecurityManagerAccess(int var1) {
  634.       if (privMgr != null && !privMgr.isPrivilegeEnabled(CreateSecurityManagerTarget, var1 + 1)) {
  635.          throw new AppletSecurityException(CreateSecurityManagerTarget, "can't create SecurityManager");
  636.       }
  637.    }
  638.  
  639.    protected void unknownLoaderException(String var1) {
  640.       throw new SecurityException("unknown class loader type.unable to check for " + var1);
  641.    }
  642.  
  643.    public void debug(String var1) {
  644.       if (debug) {
  645.          System.err.println(var1);
  646.       }
  647.  
  648.    }
  649.  
  650.    protected boolean isPrivilegeEnabled(String var1, int var2) {
  651.       if (privMgr != null) {
  652.          Target var3 = Target.findTarget(var1);
  653.          return var3 == null ? false : privMgr.isPrivilegeEnabled(var3, var2 + 1);
  654.       } else {
  655.          return true;
  656.       }
  657.    }
  658.  
  659.    protected boolean securityCheckScopePermission(int var1) {
  660.       return privMgr != null ? privMgr.isPrivilegeEnabled(SuperUserTarget, var1 + 1) : true;
  661.    }
  662.  
  663.    protected Object securitySetScopePermission(int var1) {
  664.       return privMgr != null ? privMgr.setScopePrivilegeAssistant(var1 + 1) : null;
  665.    }
  666.  
  667.    protected Object securitySetScopePermission(int var1, String var2) {
  668.       return privMgr != null ? privMgr.setScopePrivilegeAssistant(var1 + 1, var2) : null;
  669.    }
  670.  
  671.    public boolean checkMatchPrincipalAlways(int var1) {
  672.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  673.       return var2 == null ? true : var2.checkMatchPrincipalAlways(var1 + 1);
  674.    }
  675.  
  676.    private boolean marimbaCheckThreadGroup(ThreadGroup var1) {
  677.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  678.       return var2 == null ? false : CastanetChannelInfo.checkThreadGroup(var2, var1);
  679.    }
  680.  
  681.    private void marimbaCheckTopLevelWindow(Object var1) {
  682.       ClassLoader var2 = ((SecurityManager)this).currentClassLoader();
  683.       CastanetChannelInfo.checkTopLevelWindow(var2, var1);
  684.    }
  685.  
  686.    private boolean marimbaCheckAccess(String var1, boolean var2) {
  687.       boolean var3 = false;
  688.       PrivilegeManager var4 = PrivilegeManager.getPrivilegeManager();
  689.       if (var4 != null) {
  690.          try {
  691.             Target var5 = Target.findTarget("MarimbaAppContextTarget");
  692.             if (var5 != null) {
  693.                var4.checkPrivilegeEnabled(var5);
  694.                var3 = true;
  695.             }
  696.          } catch (ForbiddenTargetException var6) {
  697.             var3 = false;
  698.          }
  699.       }
  700.  
  701.       ClassLoader var7 = ((SecurityManager)this).currentClassLoader();
  702.       return !var3 && var7 == null ? false : CastanetChannelInfo.marimbaCheckAccess(var1, var7, var2, var3);
  703.    }
  704.  
  705.    public ClassLoader getCurrentClassLoader() {
  706.       PrivilegeManager var1 = PrivilegeManager.getPrivilegeManager();
  707.       Target var2 = Target.findTarget("MarimbaAppContextTarget");
  708.       var1.checkPrivilegeEnabled(var2);
  709.       return ((SecurityManager)this).currentClassLoader();
  710.    }
  711. }
  712.