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