jdk/src/jdk.snmp/share/classes/com/sun/jmx/snmp/IPAcl/AclEntryImpl.java
changeset 25859 3317bb8137f4
parent 5506 202f599c92aa
equal deleted inserted replaced
25858:836adbf7a2cd 25859:3317bb8137f4
       
     1 /*
       
     2  * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Oracle designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Oracle in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22  * or visit www.oracle.com if you need additional information or have any
       
    23  * questions.
       
    24  */
       
    25 
       
    26 
       
    27 package com.sun.jmx.snmp.IPAcl;
       
    28 
       
    29 
       
    30 
       
    31 import java.security.acl.Permission;
       
    32 import java.util.Vector;
       
    33 import java.util.Enumeration;
       
    34 import java.io.Serializable;
       
    35 import java.net.UnknownHostException;
       
    36 
       
    37 import java.security.Principal;
       
    38 import java.security.acl.AclEntry;
       
    39 
       
    40 
       
    41 /**
       
    42  * Represent one entry in the Access Control List (ACL).
       
    43  * This ACL entry object contains a permission associated with a particular principal.
       
    44  * (A principal represents an entity such as an individual machine or a group).
       
    45  *
       
    46  * @see java.security.acl.AclEntry
       
    47  */
       
    48 
       
    49 class AclEntryImpl implements AclEntry, Serializable {
       
    50   private static final long serialVersionUID = -5047185131260073216L;
       
    51 
       
    52   private AclEntryImpl (AclEntryImpl i) throws UnknownHostException {
       
    53         setPrincipal(i.getPrincipal());
       
    54         permList = new Vector<Permission>();
       
    55         commList = new Vector<String>();
       
    56 
       
    57         for (Enumeration<String> en = i.communities(); en.hasMoreElements();){
       
    58           addCommunity(en.nextElement());
       
    59         }
       
    60 
       
    61         for (Enumeration<Permission> en = i.permissions(); en.hasMoreElements();){
       
    62           addPermission(en.nextElement());
       
    63         }
       
    64         if (i.isNegative()) setNegativePermissions();
       
    65   }
       
    66 
       
    67   /**
       
    68    * Contructs an empty ACL entry.
       
    69    */
       
    70   public AclEntryImpl (){
       
    71         princ = null;
       
    72         permList = new Vector<Permission>();
       
    73         commList = new Vector<String>();
       
    74   }
       
    75 
       
    76   /**
       
    77    * Constructs an ACL entry with a specified principal.
       
    78    *
       
    79    * @param p the principal to be set for this entry.
       
    80    */
       
    81   public AclEntryImpl (Principal p) throws UnknownHostException {
       
    82         princ = p;
       
    83         permList = new Vector<Permission>();
       
    84         commList = new Vector<String>();
       
    85   }
       
    86 
       
    87   /**
       
    88    * Clones this ACL entry.
       
    89    *
       
    90    * @return a clone of this ACL entry.
       
    91    */
       
    92   public Object clone() {
       
    93         AclEntryImpl i;
       
    94         try {
       
    95           i = new AclEntryImpl(this);
       
    96         }catch (UnknownHostException e) {
       
    97           i = null;
       
    98         }
       
    99         return (Object) i;
       
   100   }
       
   101 
       
   102   /**
       
   103    * Returns true if this is a negative ACL entry (one denying the associated principal
       
   104    * the set of permissions in the entry), false otherwise.
       
   105    *
       
   106    * @return true if this is a negative ACL entry, false if it's not.
       
   107    */
       
   108   public boolean isNegative(){
       
   109         return neg;
       
   110   }
       
   111 
       
   112   /**
       
   113    * Adds the specified permission to this ACL entry. Note: An entry can
       
   114    * have multiple permissions.
       
   115    *
       
   116    * @param perm the permission to be associated with the principal in this
       
   117    *        entry
       
   118    * @return true if the permission is removed, false if the permission was
       
   119    *         not part of this entry's permission set.
       
   120    *
       
   121    */
       
   122   public boolean addPermission(java.security.acl.Permission perm){
       
   123         if (permList.contains(perm)) return false;
       
   124         permList.addElement(perm);
       
   125         return true;
       
   126   }
       
   127 
       
   128   /**
       
   129    * Removes the specified permission from this ACL entry.
       
   130    *
       
   131    * @param perm the permission to be removed from this entry.
       
   132    * @return true if the permission is removed, false if the permission
       
   133    *         was not part of this entry's permission set.
       
   134    */
       
   135   public boolean removePermission(java.security.acl.Permission perm){
       
   136         if (!permList.contains(perm)) return false;
       
   137         permList.removeElement(perm);
       
   138         return true;
       
   139   }
       
   140 
       
   141   /**
       
   142    * Checks if the specified permission is part of the permission set in
       
   143    * this entry.
       
   144    *
       
   145    * @param perm the permission to be checked for.
       
   146    * @return true if the permission is part of the permission set in this
       
   147    *         entry, false otherwise.
       
   148    */
       
   149 
       
   150   public boolean checkPermission(java.security.acl.Permission perm){
       
   151         return (permList.contains(perm));
       
   152   }
       
   153 
       
   154   /**
       
   155    * Returns an enumeration of the permissions in this ACL entry.
       
   156    *
       
   157    * @return an enumeration of the permissions in this ACL entry.
       
   158    */
       
   159   public Enumeration<Permission> permissions(){
       
   160         return permList.elements();
       
   161   }
       
   162 
       
   163   /**
       
   164    * Sets this ACL entry to be a negative one. That is, the associated principal
       
   165    * (e.g., a user or a group) will be denied the permission set specified in the
       
   166    * entry. Note: ACL entries are by default positive. An entry becomes a negative
       
   167    * entry only if this setNegativePermissions method is called on it.
       
   168    *
       
   169    * Not Implemented.
       
   170    */
       
   171   public void setNegativePermissions(){
       
   172         neg = true;
       
   173   }
       
   174 
       
   175   /**
       
   176    * Returns the principal for which permissions are granted or denied by this ACL
       
   177    * entry. Returns null if there is no principal set for this entry yet.
       
   178    *
       
   179    * @return the principal associated with this entry.
       
   180    */
       
   181   public Principal getPrincipal(){
       
   182         return princ;
       
   183   }
       
   184 
       
   185   /**
       
   186    * Specifies the principal for which permissions are granted or denied by
       
   187    * this ACL entry. If a principal was already set for this ACL entry,
       
   188    * false is returned, otherwise true is returned.
       
   189    *
       
   190    * @param p the principal to be set for this entry.
       
   191    * @return true if the principal is set, false if there was already a
       
   192    *         principal set for this entry.
       
   193    */
       
   194   public boolean setPrincipal(Principal p) {
       
   195         if (princ != null )
       
   196           return false;
       
   197         princ = p;
       
   198         return true;
       
   199   }
       
   200 
       
   201   /**
       
   202    * Returns a string representation of the contents of this ACL entry.
       
   203    *
       
   204    * @return a string representation of the contents.
       
   205    */
       
   206   public String toString(){
       
   207         return "AclEntry:"+princ.toString();
       
   208   }
       
   209 
       
   210   /**
       
   211    * Returns an enumeration of the communities in this ACL entry.
       
   212    *
       
   213    * @return an enumeration of the communities in this ACL entry.
       
   214    */
       
   215   public Enumeration<String> communities(){
       
   216         return commList.elements();
       
   217   }
       
   218 
       
   219   /**
       
   220    * Adds the specified community to this ACL entry. Note: An entry can
       
   221    * have multiple communities.
       
   222    *
       
   223    * @param comm the community to be associated with the principal
       
   224    *        in this entry.
       
   225    * @return true if the community was added, false if the community was
       
   226    *         already part of this entry's community set.
       
   227    */
       
   228   public boolean addCommunity(String comm){
       
   229         if (commList.contains(comm)) return false;
       
   230         commList.addElement(comm);
       
   231         return true;
       
   232   }
       
   233 
       
   234   /**
       
   235    * Removes the specified community from this ACL entry.
       
   236    *
       
   237    * @param comm the community  to be removed from this entry.
       
   238    * @return true if the community is removed, false if the community was
       
   239    *         not part of this entry's community set.
       
   240    */
       
   241   public boolean removeCommunity(String comm){
       
   242         if (!commList.contains(comm)) return false;
       
   243         commList.removeElement(comm);
       
   244         return true;
       
   245   }
       
   246 
       
   247   /**
       
   248    * Checks if the specified community is part of the community set in this
       
   249    * entry.
       
   250    *
       
   251    * @param  comm the community to be checked for.
       
   252    * @return true if the community is part of the community set in this
       
   253    *         entry, false otherwise.
       
   254    */
       
   255   public boolean checkCommunity(String comm){
       
   256         return (commList.contains(comm));
       
   257   }
       
   258 
       
   259   private Principal princ = null;
       
   260   private boolean neg     = false;
       
   261   private Vector<Permission> permList = null;
       
   262   private Vector<String> commList = null;
       
   263 }