home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / Notes.jar / lotus / notes / AgentSecurityManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-15  |  7.0 KB  |  399 lines

  1. package lotus.notes;
  2.  
  3. import java.io.FileDescriptor;
  4. import java.net.InetAddress;
  5. import java.util.Hashtable;
  6.  
  7. public class AgentSecurityManager extends SecurityManager {
  8.    private Hashtable ctx = new Hashtable();
  9.    private Hashtable propkeys;
  10.    private ThreadGroup utg;
  11.  
  12.    public AgentSecurityManager() {
  13.       this.fillPropKeys();
  14.       this.utg = Thread.currentThread().getThreadGroup();
  15.       System.setSecurityManager(this);
  16.       new AgentSecurityContext(this.utg, false);
  17.       new AgentSecurityContext(this.utg.getParent(), false);
  18.    }
  19.  
  20.    public void checkAccept(String var1, int var2) {
  21.       if (((SecurityManager)this).inClassLoader()) {
  22.          AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
  23.          if (var3 == null) {
  24.             throw new SecurityException(var1 + "," + var2);
  25.          }
  26.  
  27.          if (!var3.netAllowed()) {
  28.             throw new SecurityException(var1 + "," + var2);
  29.          }
  30.       }
  31.  
  32.    }
  33.  
  34.    public void checkAccess(Thread var1) {
  35.       if (((SecurityManager)this).classLoaderDepth() == 3) {
  36.          if (var1 != null) {
  37.             ThreadGroup var2 = var1.getThreadGroup();
  38.             this.checkRelatedThreadGroup(var2);
  39.          } else {
  40.             throw new NullPointerException();
  41.          }
  42.       }
  43.    }
  44.  
  45.    public void checkAccess(ThreadGroup var1) {
  46.       if (((SecurityManager)this).classLoaderDepth() == 3) {
  47.          this.checkRelatedThreadGroup(var1);
  48.       }
  49.  
  50.    }
  51.  
  52.    public void checkAwtEventQueueAccess() {
  53.    }
  54.  
  55.    public void checkConnect(String var1, int var2) {
  56.       if (((SecurityManager)this).inClassLoader()) {
  57.          AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
  58.          if (var3 == null) {
  59.             throw new SecurityException(var1 + "," + var2);
  60.          }
  61.  
  62.          if (!var3.netAllowed()) {
  63.             throw new SecurityException(var1 + "," + var2);
  64.          }
  65.       }
  66.  
  67.    }
  68.  
  69.    public void checkConnect(String var1, int var2, Object var3) {
  70.       AgentSecurityContext var4 = null;
  71.       if (((SecurityManager)this).inClassLoader()) {
  72.          try {
  73.             var4 = (AgentSecurityContext)var3;
  74.          } catch (ClassCastException var5) {
  75.          }
  76.  
  77.          if (var4 == null) {
  78.             throw new SecurityException(var1 + "," + var2 + "," + var3.toString());
  79.          }
  80.  
  81.          if (!var4.netAllowed()) {
  82.             throw new SecurityException(var1 + "," + var2 + "," + var3.toString());
  83.          }
  84.       }
  85.  
  86.    }
  87.  
  88.    public void checkCreateClassLoader() {
  89.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  90.          AgentSecurityContext var1 = (AgentSecurityContext)this.getSecurityContext();
  91.          if (var1 == null) {
  92.             throw new SecurityException();
  93.          }
  94.  
  95.          if (!var1.classLoaderAllowed()) {
  96.             throw new SecurityException();
  97.          }
  98.       }
  99.  
  100.    }
  101.  
  102.    public void checkDelete(String var1) {
  103.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  104.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  105.          if (var2 == null) {
  106.             throw new SecurityException(var1);
  107.          }
  108.  
  109.          if (!var2.writeAllowed()) {
  110.             throw new SecurityException(var1);
  111.          }
  112.       }
  113.  
  114.    }
  115.  
  116.    public void checkExec(String var1) {
  117.       int var2 = ((SecurityManager)this).classLoaderDepth();
  118.       if (var2 == 2 || var2 == 3) {
  119.          AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
  120.          if (var3 == null) {
  121.             throw new SecurityException(var1);
  122.          }
  123.  
  124.          if (!var3.execAllowed()) {
  125.             throw new SecurityException(var1);
  126.          }
  127.       }
  128.  
  129.    }
  130.  
  131.    public void checkExit(int var1) {
  132.       throw new SecurityException();
  133.    }
  134.  
  135.    public void checkLink(String var1) {
  136.       switch (((SecurityManager)this).classLoaderDepth()) {
  137.          case 2:
  138.          case 3:
  139.             AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  140.             if (var2 == null) {
  141.                throw new SecurityException(var1);
  142.             } else if (!var2.linkAllowed()) {
  143.                throw new SecurityException(var1);
  144.             }
  145.          default:
  146.       }
  147.    }
  148.  
  149.    public void checkListen(int var1) {
  150.       if (((SecurityManager)this).inClassLoader()) {
  151.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  152.          if (var2 == null) {
  153.             throw new SecurityException(String.valueOf(var1));
  154.          }
  155.  
  156.          if (!var2.netAllowed()) {
  157.             throw new SecurityException(String.valueOf(var1));
  158.          }
  159.       }
  160.  
  161.    }
  162.  
  163.    public void checkMemberAccess(Class var1, int var2) {
  164.       if (var2 != 0) {
  165.          ClassLoader var3 = ((SecurityManager)this).currentClassLoader();
  166.          if (var3 != null && ((SecurityManager)this).classLoaderDepth() <= 3 && var3 != var1.getClassLoader()) {
  167.             throw new SecurityException(var1.toString());
  168.          }
  169.       }
  170.  
  171.    }
  172.  
  173.    public void checkMulticast(InetAddress var1) {
  174.       if (((SecurityManager)this).inClassLoader()) {
  175.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  176.          if (var2 == null) {
  177.             throw new SecurityException(var1.toString());
  178.          }
  179.  
  180.          if (!var2.netAllowed()) {
  181.             throw new SecurityException(var1.toString());
  182.          }
  183.       }
  184.  
  185.    }
  186.  
  187.    public void checkMulticast(InetAddress var1, byte var2) {
  188.       if (((SecurityManager)this).inClassLoader()) {
  189.          AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
  190.          if (var3 == null) {
  191.             throw new SecurityException();
  192.          }
  193.  
  194.          if (!var3.netAllowed()) {
  195.             throw new SecurityException();
  196.          }
  197.       }
  198.  
  199.    }
  200.  
  201.    public void checkPackageAccess(String var1) {
  202.    }
  203.  
  204.    public void checkPackageDefinition(String var1) {
  205.       if (var1.startsWith("lotus.notes")) {
  206.          throw new SecurityException();
  207.       }
  208.    }
  209.  
  210.    public void checkPrintJobAccess() {
  211.    }
  212.  
  213.    public void checkPropertiesAccess() {
  214.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  215.          throw new SecurityException();
  216.       }
  217.    }
  218.  
  219.    public void checkPropertyAccess(String var1) {
  220.       if (((SecurityManager)this).classLoaderDepth() == 2) {
  221.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  222.          if (var2 == null) {
  223.             throw new SecurityException(var1);
  224.          }
  225.  
  226.          if (!var2.propAllowed() && this.propkeys.get(var1) == null) {
  227.             throw new SecurityException(var1);
  228.          }
  229.       }
  230.  
  231.    }
  232.  
  233.    public void checkRead(FileDescriptor var1) {
  234.       if (((SecurityManager)this).inClassLoader()) {
  235.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  236.          if (var2 == null) {
  237.             throw new SecurityException();
  238.          }
  239.  
  240.          if (!var2.readAllowed() && !((SecurityManager)this).inClass("java.net.SocketInputStream")) {
  241.             throw new SecurityException(var1.toString());
  242.          }
  243.       }
  244.  
  245.    }
  246.  
  247.    public void checkRead(String var1) {
  248.       if (((SecurityManager)this).inClassLoader()) {
  249.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  250.          if (var2 == null) {
  251.             throw new SecurityException(var1);
  252.          }
  253.  
  254.          if (!var2.readAllowed()) {
  255.             throw new SecurityException(var1);
  256.          }
  257.       }
  258.  
  259.    }
  260.  
  261.    public void checkRead(String var1, Object var2) {
  262.       if (((SecurityManager)this).inClassLoader()) {
  263.          AgentSecurityContext var3 = (AgentSecurityContext)this.getSecurityContext();
  264.          if (var3 == null) {
  265.             throw new SecurityException(var1);
  266.          }
  267.  
  268.          if (!var3.readAllowed()) {
  269.             throw new SecurityException(var1);
  270.          }
  271.       }
  272.  
  273.    }
  274.  
  275.    public void checkSecurityAccess(String var1) {
  276.    }
  277.  
  278.    public void checkSetFactory() {
  279.       AgentSecurityContext var1 = (AgentSecurityContext)this.getSecurityContext();
  280.       if (var1 != null) {
  281.          if (!var1.netAllowed()) {
  282.             throw new SecurityException();
  283.          }
  284.       } else {
  285.          throw new SecurityException();
  286.       }
  287.    }
  288.  
  289.    public void checkSystemClipboardAccess() {
  290.    }
  291.  
  292.    public boolean checkTopLevelWindow(Object var1) {
  293.       return false;
  294.    }
  295.  
  296.    public void checkWrite(FileDescriptor var1) {
  297.       if (((SecurityManager)this).inClassLoader()) {
  298.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  299.          if (var2 == null) {
  300.             throw new SecurityException(var1.toString());
  301.          }
  302.  
  303.          if (!var2.writeAllowed() && !((SecurityManager)this).inClass("java.net.SocketInputStream")) {
  304.             throw new SecurityException(var1.toString());
  305.          }
  306.       }
  307.  
  308.    }
  309.  
  310.    public void checkWrite(String var1) {
  311.       if (((SecurityManager)this).inClassLoader()) {
  312.          AgentSecurityContext var2 = (AgentSecurityContext)this.getSecurityContext();
  313.          if (var2 == null) {
  314.             throw new SecurityException(var1);
  315.          }
  316.  
  317.          if (!var2.writeAllowed()) {
  318.             throw new SecurityException(var1);
  319.          }
  320.       }
  321.  
  322.    }
  323.  
  324.    public ThreadGroup getThreadGroup() {
  325.       return Thread.currentThread().getThreadGroup();
  326.    }
  327.  
  328.    public Object getSecurityContext() {
  329.       Object var1 = null;
  330.       ThreadGroup var2 = this.getAgentThreadGroup();
  331.       AgentSecurityContext var3 = (AgentSecurityContext)this.ctx.get(var2);
  332.       if (var3 == null) {
  333.          throw new SecurityContextException(var2);
  334.       } else {
  335.          return var3;
  336.       }
  337.    }
  338.  
  339.    private ThreadGroup getAgentThreadGroup() {
  340.       return this.getAgentThreadGroup(Thread.currentThread().getThreadGroup());
  341.    }
  342.  
  343.    private ThreadGroup getAgentThreadGroup(ThreadGroup var1) {
  344.       if (var1 == null) {
  345.          throw new NullPointerException();
  346.       } else {
  347.          while(var1.getParent() != null && !(var1 instanceof AgentThreadGroup)) {
  348.             var1 = var1.getParent();
  349.          }
  350.  
  351.          if (this.ctx.get(var1) == null) {
  352.             throw new SecurityContextException(var1);
  353.          } else {
  354.             return var1;
  355.          }
  356.       }
  357.    }
  358.  
  359.    private void checkRelatedThreadGroup(ThreadGroup var1) {
  360.       if (var1 == null) {
  361.          throw new NullPointerException();
  362.       } else {
  363.          ThreadGroup var2 = this.getAgentThreadGroup();
  364.          ThreadGroup var3 = this.getAgentThreadGroup(var1);
  365.          if (!var2.getName().equals("system") && (var3 != var2 || var3 == var1)) {
  366.             throw new SecurityException();
  367.          }
  368.       }
  369.    }
  370.  
  371.    protected void newSecurityContext(AgentSecurityContext var1, ThreadGroup var2) {
  372.       AgentSecurityContext var3 = (AgentSecurityContext)this.ctx.get(var2);
  373.       if (var3 == null) {
  374.          this.ctx.put(var2, var1);
  375.       } else {
  376.          throw new SecurityException(JavaString.resource.getString("security_exists"));
  377.       }
  378.    }
  379.  
  380.    private void fillPropKeys() {
  381.       this.propkeys = new Hashtable();
  382.       String var1 = "dummy";
  383.       this.propkeys.put("awt.toolkit", var1);
  384.       this.propkeys.put("file.encoding", var1);
  385.       this.propkeys.put("file.encoding.pkg", var1);
  386.       this.propkeys.put("java.class.version", var1);
  387.       this.propkeys.put("java.vendor", var1);
  388.       this.propkeys.put("java.vendor.url", var1);
  389.       this.propkeys.put("java.version", var1);
  390.       this.propkeys.put("os.arch", var1);
  391.       this.propkeys.put("os.name", var1);
  392.       this.propkeys.put("os.version", var1);
  393.       this.propkeys.put("user.language", var1);
  394.       this.propkeys.put("user.timezone", var1);
  395.       this.propkeys.put("user.region", var1);
  396.       this.propkeys.put("lotus.notes.nativecreated", var1);
  397.    }
  398. }
  399.