home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / security / acl / AclImpl.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  4.3 KB  |  215 lines

  1. package sun.security.acl;
  2.  
  3. import java.security.Principal;
  4. import java.security.acl.Acl;
  5. import java.security.acl.AclEntry;
  6. import java.security.acl.Group;
  7. import java.security.acl.NotOwnerException;
  8. import java.security.acl.Permission;
  9. import java.util.Enumeration;
  10. import java.util.Hashtable;
  11. import java.util.Vector;
  12.  
  13. public class AclImpl extends OwnerImpl implements Acl {
  14.    private Hashtable allowedUsersTable = new Hashtable(23);
  15.    private Hashtable allowedGroupsTable = new Hashtable(23);
  16.    private Hashtable deniedUsersTable = new Hashtable(23);
  17.    private Hashtable deniedGroupsTable = new Hashtable(23);
  18.    private String aclName;
  19.    private Vector zeroSet = new Vector(1, 1);
  20.  
  21.    public AclImpl(Principal var1, String var2) {
  22.       super(var1);
  23.  
  24.       try {
  25.          this.setName(var1, var2);
  26.       } catch (Exception var3) {
  27.       }
  28.    }
  29.  
  30.    public void setName(Principal var1, String var2) throws NotOwnerException {
  31.       if (!((OwnerImpl)this).isOwner(var1)) {
  32.          throw new NotOwnerException();
  33.       } else {
  34.          this.aclName = var2;
  35.       }
  36.    }
  37.  
  38.    public String getName() {
  39.       return this.aclName;
  40.    }
  41.  
  42.    public synchronized boolean addEntry(Principal var1, AclEntry var2) throws NotOwnerException {
  43.       if (!((OwnerImpl)this).isOwner(var1)) {
  44.          throw new NotOwnerException();
  45.       } else {
  46.          Hashtable var3 = this.findTable(var2);
  47.          Principal var4 = var2.getPrincipal();
  48.          if (var3.get(var4) != null) {
  49.             return false;
  50.          } else {
  51.             var3.put(var4, var2);
  52.             return true;
  53.          }
  54.       }
  55.    }
  56.  
  57.    public synchronized boolean removeEntry(Principal var1, AclEntry var2) throws NotOwnerException {
  58.       if (!((OwnerImpl)this).isOwner(var1)) {
  59.          throw new NotOwnerException();
  60.       } else {
  61.          Hashtable var3 = this.findTable(var2);
  62.          Principal var4 = var2.getPrincipal();
  63.          Object var5 = var3.remove(var4);
  64.          return var5 != null;
  65.       }
  66.    }
  67.  
  68.    public synchronized Enumeration getPermissions(Principal var1) {
  69.       Enumeration var4 = this.subtract(this.getGroupPositive(var1), this.getGroupNegative(var1));
  70.       Enumeration var5 = this.subtract(this.getGroupNegative(var1), this.getGroupPositive(var1));
  71.       Enumeration var2 = this.subtract(this.getIndividualPositive(var1), this.getIndividualNegative(var1));
  72.       Enumeration var3 = this.subtract(this.getIndividualNegative(var1), this.getIndividualPositive(var1));
  73.       Enumeration var6 = this.subtract(var4, var3);
  74.       Enumeration var7 = union(var2, var6);
  75.       var2 = this.subtract(this.getIndividualPositive(var1), this.getIndividualNegative(var1));
  76.       var3 = this.subtract(this.getIndividualNegative(var1), this.getIndividualPositive(var1));
  77.       var6 = this.subtract(var5, var2);
  78.       Enumeration var8 = union(var3, var6);
  79.       return this.subtract(var7, var8);
  80.    }
  81.  
  82.    public boolean checkPermission(Principal var1, Permission var2) {
  83.       Enumeration var3 = this.getPermissions(var1);
  84.  
  85.       while(var3.hasMoreElements()) {
  86.          Permission var4 = (Permission)var3.nextElement();
  87.          if (var4.equals(var2)) {
  88.             return true;
  89.          }
  90.       }
  91.  
  92.       return false;
  93.    }
  94.  
  95.    public synchronized Enumeration entries() {
  96.       return new AclEnumerator(this, this.allowedUsersTable, this.allowedGroupsTable, this.deniedUsersTable, this.deniedGroupsTable);
  97.    }
  98.  
  99.    public String toString() {
  100.       StringBuffer var1 = new StringBuffer();
  101.       Enumeration var2 = this.entries();
  102.  
  103.       while(var2.hasMoreElements()) {
  104.          AclEntry var3 = (AclEntry)var2.nextElement();
  105.          var1.append(var3.toString().trim());
  106.          var1.append("\n");
  107.       }
  108.  
  109.       return var1.toString();
  110.    }
  111.  
  112.    private Hashtable findTable(AclEntry var1) {
  113.       Object var2 = null;
  114.       Principal var3 = var1.getPrincipal();
  115.       Hashtable var4;
  116.       if (var3 instanceof Group) {
  117.          if (var1.isNegative()) {
  118.             var4 = this.deniedGroupsTable;
  119.          } else {
  120.             var4 = this.allowedGroupsTable;
  121.          }
  122.       } else if (var1.isNegative()) {
  123.          var4 = this.deniedUsersTable;
  124.       } else {
  125.          var4 = this.allowedUsersTable;
  126.       }
  127.  
  128.       return var4;
  129.    }
  130.  
  131.    private static Enumeration union(Enumeration var0, Enumeration var1) {
  132.       Vector var2 = new Vector(20, 20);
  133.  
  134.       while(var0.hasMoreElements()) {
  135.          var2.addElement(var0.nextElement());
  136.       }
  137.  
  138.       while(var1.hasMoreElements()) {
  139.          Object var3 = var1.nextElement();
  140.          if (!var2.contains(var3)) {
  141.             var2.addElement(var3);
  142.          }
  143.       }
  144.  
  145.       return var2.elements();
  146.    }
  147.  
  148.    private Enumeration subtract(Enumeration var1, Enumeration var2) {
  149.       Vector var3 = new Vector(20, 20);
  150.  
  151.       while(var1.hasMoreElements()) {
  152.          var3.addElement(var1.nextElement());
  153.       }
  154.  
  155.       while(var2.hasMoreElements()) {
  156.          Object var4 = var2.nextElement();
  157.          if (var3.contains(var4)) {
  158.             var3.removeElement(var4);
  159.          }
  160.       }
  161.  
  162.       return var3.elements();
  163.    }
  164.  
  165.    private Enumeration getGroupPositive(Principal var1) {
  166.       Enumeration var2 = this.zeroSet.elements();
  167.       Enumeration var3 = this.allowedGroupsTable.keys();
  168.  
  169.       while(var3.hasMoreElements()) {
  170.          Group var4 = (Group)var3.nextElement();
  171.          if (var4.isMember(var1)) {
  172.             AclEntry var5 = (AclEntry)this.allowedGroupsTable.get(var4);
  173.             var2 = union(var5.permissions(), var2);
  174.          }
  175.       }
  176.  
  177.       return var2;
  178.    }
  179.  
  180.    private Enumeration getGroupNegative(Principal var1) {
  181.       Enumeration var2 = this.zeroSet.elements();
  182.       Enumeration var3 = this.deniedGroupsTable.keys();
  183.  
  184.       while(var3.hasMoreElements()) {
  185.          Group var4 = (Group)var3.nextElement();
  186.          if (var4.isMember(var1)) {
  187.             AclEntry var5 = (AclEntry)this.deniedGroupsTable.get(var4);
  188.             var2 = union(var5.permissions(), var2);
  189.          }
  190.       }
  191.  
  192.       return var2;
  193.    }
  194.  
  195.    private Enumeration getIndividualPositive(Principal var1) {
  196.       Enumeration var2 = this.zeroSet.elements();
  197.       AclEntry var3 = (AclEntry)this.allowedUsersTable.get(var1);
  198.       if (var3 != null) {
  199.          var2 = var3.permissions();
  200.       }
  201.  
  202.       return var2;
  203.    }
  204.  
  205.    private Enumeration getIndividualNegative(Principal var1) {
  206.       Enumeration var2 = this.zeroSet.elements();
  207.       AclEntry var3 = (AclEntry)this.deniedUsersTable.get(var1);
  208.       if (var3 != null) {
  209.          var2 = var3.permissions();
  210.       }
  211.  
  212.       return var2;
  213.    }
  214. }
  215.