summaryrefslogtreecommitdiffstats
path: root/pki/base/util/src/netscape/security/acl/GroupImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/util/src/netscape/security/acl/GroupImpl.java')
-rw-r--r--pki/base/util/src/netscape/security/acl/GroupImpl.java173
1 files changed, 0 insertions, 173 deletions
diff --git a/pki/base/util/src/netscape/security/acl/GroupImpl.java b/pki/base/util/src/netscape/security/acl/GroupImpl.java
deleted file mode 100644
index ed087a544..000000000
--- a/pki/base/util/src/netscape/security/acl/GroupImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-// --- BEGIN COPYRIGHT BLOCK ---
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; version 2 of the License.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-//
-// (C) 2007 Red Hat, Inc.
-// All rights reserved.
-// --- END COPYRIGHT BLOCK ---
-package netscape.security.acl;
-
-import java.security.Principal;
-import java.security.acl.Group;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * This class implements a group of principals.
- *
- * @author Satish Dharmaraj
- */
-public class GroupImpl implements Group {
- private Vector<Principal> groupMembers = new Vector<Principal>(50, 100);
- private String group;
-
- /**
- * Constructs a Group object with no members.
- *
- * @param groupName the name of the group
- */
- public GroupImpl(String groupName) {
- this.group = groupName;
- }
-
- /**
- * adds the specified member to the group.
- *
- * @param user The principal to add to the group.
- * @return true if the member was added - false if the
- * member could not be added.
- */
- public boolean addMember(Principal user) {
- if (groupMembers.contains(user))
- return false;
-
- // do not allow groups to be added to itself.
- if (group.equals(user.toString()))
- throw new IllegalArgumentException();
-
- groupMembers.addElement(user);
- return true;
- }
-
- /**
- * removes the specified member from the group.
- *
- * @param user The principal to remove from the group.
- * @param true if the principal was removed false if
- * the principal was not a member
- */
- public boolean removeMember(Principal user) {
- return groupMembers.removeElement(user);
- }
-
- /**
- * returns the enumeration of the members in the group.
- */
- public Enumeration<Principal> members() {
- return groupMembers.elements();
- }
-
- /**
- * This function returns true if the group passed matches
- * the group represented in this interface.
- *
- * @param another The group to compare this group to.
- */
- public boolean equals(Group another) {
- return group.equals(another.toString());
- }
-
- /**
- * Prints a stringified version of the group.
- */
- public String toString() {
- return group;
- }
-
- /**
- * return a hashcode for the principal.
- */
- public int hashCode() {
- return group.hashCode();
- }
-
- /**
- * returns true if the passed principal is a member of the group.
- *
- * @param member The principal whose membership must be checked for.
- * @return true if the principal is a member of this group,
- * false otherwise
- */
- public boolean isMember(Principal member) {
-
- //
- // if the member is part of the group (common case), return true.
- // if not, recursively search depth first in the group looking for the
- // principal.
- //
- if (groupMembers.contains(member)) {
- return true;
- } else {
- Vector<Group> alreadySeen = new Vector<Group>(10);
- return isMemberRecurse(member, alreadySeen);
- }
- }
-
- /**
- * return the name of the principal.
- */
- public String getName() {
- return group;
- }
-
- //
- // This function is the recursive search of groups for this
- // implementation of the Group. The search proceeds building up
- // a vector of already seen groups. Only new groups are considered,
- // thereby avoiding loops.
- //
- boolean isMemberRecurse(Principal member, Vector<Group> alreadySeen) {
- Enumeration<Principal> e = members();
- while (e.hasMoreElements()) {
- boolean mem = false;
- Principal p = e.nextElement();
-
- // if the member is in this collection, return true
- if (p.equals(member)) {
- return true;
- } else if (p instanceof GroupImpl) {
- //
- // if not recurse if the group has not been checked already.
- // Can call method in this package only if the object is an
- // instance of this class. Otherwise call the method defined
- // in the interface. (This can lead to a loop if a mixture of
- // implementations form a loop, but we live with this improbable
- // case rather than clutter the interface by forcing the
- // implementation of this method.)
- //
- GroupImpl g = (GroupImpl) p;
- alreadySeen.addElement(this);
- if (!alreadySeen.contains(g))
- mem = g.isMemberRecurse(member, alreadySeen);
- } else if (p instanceof Group) {
- Group g = (Group) p;
- if (!alreadySeen.contains(g))
- mem = g.isMember(member);
- }
-
- if (mem)
- return mem;
- }
- return false;
- }
-}