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