home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / security / AccessControlContext.class (.txt) next >
Encoding:
Java Class File  |  1979-12-31  |  5.5 KB  |  345 lines

  1. package java.security;
  2.  
  3. import java.util.Vector;
  4. import sun.security.util.Debug;
  5.  
  6. public final class AccessControlContext {
  7.    private ProtectionDomain[] context;
  8.    private boolean isPrivileged;
  9.    private AccessControlContext privilegedContext;
  10.    private DomainCombiner combiner;
  11.    private static boolean debugInit = false;
  12.    private static Debug debug = null;
  13.  
  14.    static Debug getDebug() {
  15.       if (debugInit) {
  16.          return debug;
  17.       } else {
  18.          if (Policy.isSet()) {
  19.             debug = Debug.getInstance("access");
  20.             debugInit = true;
  21.          }
  22.  
  23.          return debug;
  24.       }
  25.    }
  26.  
  27.    public AccessControlContext(ProtectionDomain[] var1) {
  28.       if (var1.length == 1) {
  29.          this.context = (ProtectionDomain[])var1.clone();
  30.       } else {
  31.          Vector var2 = new Vector(var1.length);
  32.  
  33.          for(int var3 = 0; var3 < var1.length; ++var3) {
  34.             if (var1[var3] != null && !var2.contains(var1[var3])) {
  35.                var2.addElement(var1[var3]);
  36.             }
  37.          }
  38.  
  39.          this.context = new ProtectionDomain[var2.size()];
  40.          var2.copyInto(this.context);
  41.       }
  42.  
  43.    }
  44.  
  45.    public AccessControlContext(AccessControlContext var1, DomainCombiner var2) {
  46.       SecurityManager var3 = System.getSecurityManager();
  47.       if (var3 != null) {
  48.          var3.checkPermission(new SecurityPermission("createAccessControlContext"));
  49.       }
  50.  
  51.       if (var1 != null && var2 != null) {
  52.          this.context = var1.context;
  53.          this.combiner = var2;
  54.       } else {
  55.          throw new NullPointerException("null AccessControlContext or DomainCombiner was provided");
  56.       }
  57.    }
  58.  
  59.    private AccessControlContext(ProtectionDomain[] var1, DomainCombiner var2) {
  60.       this.context = (ProtectionDomain[])var1.clone();
  61.       this.combiner = var2;
  62.    }
  63.  
  64.    AccessControlContext(ProtectionDomain[] var1, boolean var2) {
  65.       this.context = var1;
  66.       this.isPrivileged = var2;
  67.    }
  68.  
  69.    boolean isPrivileged() {
  70.       return this.isPrivileged;
  71.    }
  72.  
  73.    public DomainCombiner getDomainCombiner() {
  74.       SecurityManager var1 = System.getSecurityManager();
  75.       if (var1 != null) {
  76.          var1.checkPermission(new SecurityPermission("getDomainCombiner"));
  77.       }
  78.  
  79.       return this.combiner;
  80.    }
  81.  
  82.    public void checkPermission(Permission var1) throws AccessControlException {
  83.       if (var1 == null) {
  84.          throw new NullPointerException("permission can't be null");
  85.       } else {
  86.          if (getDebug() != null) {
  87.             if (Debug.isOn("stack")) {
  88.                Thread.currentThread();
  89.                Thread.dumpStack();
  90.             }
  91.  
  92.             if (Debug.isOn("domain")) {
  93.                if (this.context == null) {
  94.                   debug.println("domain (context is null)");
  95.                } else {
  96.                   for(int var2 = 0; var2 < this.context.length; ++var2) {
  97.                      debug.println("domain " + var2 + " " + this.context[var2]);
  98.                   }
  99.                }
  100.             }
  101.          }
  102.  
  103.          if (this.context != null) {
  104.             for(int var5 = 0; var5 < this.context.length; ++var5) {
  105.                if (this.context[var5] != null && !this.context[var5].implies(var1)) {
  106.                   if (debug != null) {
  107.                      debug.println("access denied " + var1);
  108.                      if (Debug.isOn("failure")) {
  109.                         Thread.currentThread();
  110.                         Thread.dumpStack();
  111.                         ProtectionDomain var3 = this.context[var5];
  112.                         Debug var4 = debug;
  113.                         AccessController.doPrivileged(new 1(this, var4, var3));
  114.                      }
  115.                   }
  116.  
  117.                   throw new AccessControlException("access denied " + var1, var1);
  118.                }
  119.             }
  120.  
  121.             if (debug != null) {
  122.                debug.println("access allowed " + var1);
  123.             }
  124.  
  125.          }
  126.       }
  127.    }
  128.  
  129.    AccessControlContext combineWithPrivilegedContext() {
  130.       boolean var1 = this.context == null;
  131.       AccessControlContext var2 = this.privilegedContext;
  132.       boolean var3 = var2.context == null;
  133.       if (var3 && var1 && var2.combiner == null) {
  134.          return this;
  135.       } else if (var2.combiner != null) {
  136.          return this.goCombiner(this.context, var2, true);
  137.       } else {
  138.          int var4 = var1 ? 0 : this.context.length;
  139.          if (var3 && var4 <= 2) {
  140.             return this;
  141.          } else {
  142.             int var5 = var3 ? 0 : var2.context.length;
  143.             if (var1 && var5 <= 2) {
  144.                return var2;
  145.             } else if (var4 == 1 && var5 == 1 && this.context[0] == var2.context[0]) {
  146.                return this;
  147.             } else {
  148.                ProtectionDomain[] var6 = new ProtectionDomain[var4 + var5];
  149.                int var9 = 0;
  150.                if (!var1) {
  151.                   for(int var7 = 0; var7 < this.context.length; ++var7) {
  152.                      boolean var10 = true;
  153.  
  154.                      for(int var8 = 0; var8 < var9 && var10; ++var8) {
  155.                         var10 = this.context[var7] != null && this.context[var7] != var6[var8];
  156.                      }
  157.  
  158.                      if (var10) {
  159.                         var6[var9++] = this.context[var7];
  160.                      }
  161.                   }
  162.                }
  163.  
  164.                if (!var3) {
  165.                   for(int var11 = 0; var11 < var2.context.length; ++var11) {
  166.                      boolean var13 = true;
  167.  
  168.                      for(int var12 = 0; var12 < var9 && var13; ++var12) {
  169.                         var13 = var2.context[var11] != null && var2.context[var11] != var6[var12];
  170.                      }
  171.  
  172.                      if (var13) {
  173.                         var6[var9++] = var2.context[var11];
  174.                      }
  175.                   }
  176.                }
  177.  
  178.                if (var9 != var6.length) {
  179.                   if (var9 == 0) {
  180.                      var6 = null;
  181.                   } else {
  182.                      ProtectionDomain[] var14 = new ProtectionDomain[var9];
  183.                      System.arraycopy(var6, 0, var14, 0, var9);
  184.                      var6 = var14;
  185.                   }
  186.                }
  187.  
  188.                return new AccessControlContext(var6, true);
  189.             }
  190.          }
  191.       }
  192.    }
  193.  
  194.    AccessControlContext optimize() {
  195.       boolean var1 = this.context == null;
  196.       boolean var2;
  197.       AccessControlContext var3;
  198.       if (this.isPrivileged) {
  199.          if (this.privilegedContext != null) {
  200.             return this.combineWithPrivilegedContext();
  201.          }
  202.  
  203.          var2 = true;
  204.          var3 = null;
  205.       } else {
  206.          var3 = AccessController.getInheritedAccessControlContext();
  207.          var2 = var3 == null || var3.context == null && var3.combiner == null;
  208.       }
  209.  
  210.       if (var2 && var1) {
  211.          return this;
  212.       } else if (var3 != null && var3.combiner != null) {
  213.          return this.goCombiner(this.context, var3, false);
  214.       } else {
  215.          int var4 = var1 ? 0 : this.context.length;
  216.          if (var2 && var4 <= 2) {
  217.             return this;
  218.          } else {
  219.             int var5 = var2 ? 0 : var3.context.length;
  220.             if (var1 && var5 <= 2) {
  221.                return var3;
  222.             } else if (var4 == 1 && var5 == 1 && this.context[0] == var3.context[0]) {
  223.                return this;
  224.             } else {
  225.                ProtectionDomain[] var6 = new ProtectionDomain[var4 + var5];
  226.                int var9 = 0;
  227.                if (!var1) {
  228.                   for(int var7 = 0; var7 < this.context.length; ++var7) {
  229.                      boolean var10 = true;
  230.  
  231.                      for(int var8 = 0; var8 < var9 && var10; ++var8) {
  232.                         var10 = this.context[var7] != null && this.context[var7] != var6[var8];
  233.                      }
  234.  
  235.                      if (var10) {
  236.                         var6[var9++] = this.context[var7];
  237.                      }
  238.                   }
  239.                }
  240.  
  241.                if (!var2) {
  242.                   for(int var11 = 0; var11 < var3.context.length; ++var11) {
  243.                      boolean var13 = true;
  244.  
  245.                      for(int var12 = 0; var12 < var9 && var13; ++var12) {
  246.                         var13 = var3.context[var11] != null && var3.context[var11] != var6[var12];
  247.                      }
  248.  
  249.                      if (var13) {
  250.                         var6[var9++] = var3.context[var11];
  251.                      }
  252.                   }
  253.                }
  254.  
  255.                if (var9 != var6.length) {
  256.                   if (var9 == 0) {
  257.                      var6 = null;
  258.                   } else {
  259.                      ProtectionDomain[] var14 = new ProtectionDomain[var9];
  260.                      System.arraycopy(var6, 0, var14, 0, var9);
  261.                      var6 = var14;
  262.                   }
  263.                }
  264.  
  265.                return new AccessControlContext(var6, this.isPrivileged);
  266.             }
  267.          }
  268.       }
  269.    }
  270.  
  271.    private AccessControlContext goCombiner(ProtectionDomain[] var1, AccessControlContext var2, boolean var3) {
  272.       if (getDebug() != null) {
  273.          debug.println("AccessControlContext invoking the Combiner");
  274.       }
  275.  
  276.       ProtectionDomain[] var4 = var2.combiner.combine(var1 == null ? null : (ProtectionDomain[])var1.clone(), var2.context == null ? null : (ProtectionDomain[])var2.context.clone());
  277.       return new AccessControlContext(var4, var2.combiner);
  278.    }
  279.  
  280.    public boolean equals(Object var1) {
  281.       if (var1 == this) {
  282.          return true;
  283.       } else if (!(var1 instanceof AccessControlContext)) {
  284.          return false;
  285.       } else {
  286.          AccessControlContext var2 = (AccessControlContext)var1;
  287.          if (this.context == null) {
  288.             return var2.context == null;
  289.          } else if (var2.context == null) {
  290.             return false;
  291.          } else if (this.containsAllPDs(var2) && var2.containsAllPDs(this)) {
  292.             if (this.combiner == null) {
  293.                return var2.combiner == null;
  294.             } else if (var2.combiner == null) {
  295.                return false;
  296.             } else {
  297.                return this.combiner.equals(var2.combiner);
  298.             }
  299.          } else {
  300.             return false;
  301.          }
  302.       }
  303.    }
  304.  
  305.    private boolean containsAllPDs(AccessControlContext var1) {
  306.       boolean var2 = false;
  307.  
  308.       for(int var3 = 0; var3 < this.context.length; ++var3) {
  309.          var2 = false;
  310.          if (this.context[var3] == null) {
  311.             for(int var5 = 0; var5 < var1.context.length && !var2; ++var5) {
  312.                var2 = var1.context[var5] == null;
  313.             }
  314.          } else {
  315.             for(int var4 = 0; var4 < var1.context.length && !var2; ++var4) {
  316.                if (var1.context[var4] != null) {
  317.                   var2 = this.context[var3].getClass() == var1.context[var4].getClass() && this.context[var3].equals(var1.context[var4]);
  318.                }
  319.             }
  320.          }
  321.  
  322.          if (!var2) {
  323.             return false;
  324.          }
  325.       }
  326.  
  327.       return var2;
  328.    }
  329.  
  330.    public int hashCode() {
  331.       int var1 = 0;
  332.       if (this.context == null) {
  333.          return var1;
  334.       } else {
  335.          for(int var2 = 0; var2 < this.context.length; ++var2) {
  336.             if (this.context[var2] != null) {
  337.                var1 ^= this.context[var2].hashCode();
  338.             }
  339.          }
  340.  
  341.          return var1;
  342.       }
  343.    }
  344. }
  345.