[prev in list] [next in list] [prev in thread] [next in thread]
List: jboss-cvs-commits
Subject: [jboss-cvs] jbosssx/src/main/javax/security/auth Subject.java
From: Scott M Stark <starksm () users ! sourceforge ! net>
Date: 2003-02-28 20:20:54
[Download RAW message or body]
User: starksm
Date: 03/02/28 12:20:53
Added: src/main/javax/security/auth Subject.java
Log:
Restore the JBoss versions of the JAAS subject, configuration and login
context after their removal from the cvs repository
Revision Changes Path
1.1 jbosssx/src/main/javax/security/auth/Subject.java
Index: Subject.java
===================================================================
/*
* JBoss, the OpenSource WebOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package javax.security.auth;
import java.io.Serializable;
import java.security.AccessControlContext;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.security.Permission;
import java.security.Principal;
import java.util.AbstractSet;
import java.util.Iterator;
import java.util.HashSet;
import java.util.Set;
/** An alternate implementation of the JAAS 1.0 Configuration class that deals
* with ClassLoader shortcomings that were fixed in the JAAS included with
* JDK1.4 and latter. This version allows LoginModules to be loaded from the
* Thread context ClassLoader and uses an XML based configuration by default.
*
* @author Scott.Stark@jboss.org
* @version $Revision: 1.1 $
*/
public final class Subject implements Serializable
{
private static final long serialVersionUID = -8308522755600156056L;
private static AuthPermission SET_READ_ONLY_PERM = new \
AuthPermission("setReadOnly");
private static AuthPermission MOD_PRINCIPALS_PERM = new \
AuthPermission("modifyPrincipals");
private static AuthPermission MOD_PUBLIC_CREDS_PERM = new \
AuthPermission("modifyPublicCredentials");
private static AuthPermission MOD_PRIVATE_CREDS_PERM = new \
AuthPermission("modifyPrivateCredentials");
private boolean readOnly;
private Set principals;
private Set publicCredentials;
private Set privateCredentials;
public static Subject getSubject(AccessControlContext acc)
{
throw new UnsupportedOperationException("getSubject is not supported by"
+ " this version of JAAS 1.0, use the JDK 1.4 version");
}
public static Object doAs(Subject subject, PrivilegedAction action)
{
throw new UnsupportedOperationException("doAs is not supported by this"
+ " version of JAAS 1.0, use the JDK 1.4 version");
}
public static Object doAs(Subject subject, PrivilegedExceptionAction action)
throws PrivilegedActionException
{
throw new UnsupportedOperationException("doAs is not supported by this"
+ " version of JAAS 1.0, use the JDK 1.4 version");
}
public static Object doAsPrivileged(Subject subject, PrivilegedAction action,
AccessControlContext acc)
{
throw new UnsupportedOperationException("doAsPrivileged is not supported"
+ " by this version of JAAS 1.0, use the JDK 1.4 version");
}
public static Object doAsPrivileged(Subject subject, PrivilegedExceptionAction \
action, AccessControlContext acc)
throws PrivilegedActionException
{
throw new UnsupportedOperationException("doAsPrivileged is not supported"
+ " by this version of JAAS 1.0, use the JDK 1.4 version");
}
public Subject()
{
this(false, null, null, null);
}
public Subject(boolean readOnly, Set principals,
Set pubCredentials, Set privCredentials)
{
this.readOnly = readOnly;
this.principals = new ProtectedSet(this, principals, MOD_PRINCIPALS_PERM);
this.publicCredentials = new ProtectedSet(this, pubCredentials, \
MOD_PUBLIC_CREDS_PERM);
this.privateCredentials = new ProtectedSet(this, privCredentials, \
MOD_PRIVATE_CREDS_PERM); }
public boolean equals(Object obj)
{
if( obj == null )
return false;
if( obj == this )
return true;
if( (obj instanceof Subject) == false )
return false;
Subject subj = (Subject) obj;
boolean equals = getPrincipals().equals(subj.getPrincipals());
if( equals )
equals = getPublicCredentials().equals(subj.getPublicCredentials());
if( equals )
equals = getPrivateCredentials().equals(subj.getPrivateCredentials());
return equals;
}
public int hashCode()
{
int hashCode = 0;
Iterator iter = getPrincipals().iterator();
while( iter.hasNext() )
{
Object next = iter.next();
hashCode ^= next.hashCode();
}
iter = getPublicCredentials().iterator();
while( iter.hasNext() )
{
Object next = iter.next();
hashCode ^= next.hashCode();
}
iter = getPrivateCredentials().iterator();
while( iter.hasNext() )
{
Object next = iter.next();
hashCode ^= next.hashCode();
}
return hashCode;
}
public boolean isReadOnly()
{
return readOnly;
}
public void setReadOnly()
{
SecurityManager sm = System.getSecurityManager();
if( sm != null )
{
sm.checkPermission(SET_READ_ONLY_PERM);
}
readOnly = true;
}
public Set getPrincipals()
{
return principals;
}
public Set getPrincipals(Class c)
{
Set copy = new ProtectedSet(this, principals, MOD_PRINCIPALS_PERM, c);
return copy;
}
public Set getPublicCredentials()
{
return publicCredentials;
}
public Set getPublicCredentials(Class c)
{
Set copy = new ProtectedSet(this, publicCredentials, MOD_PUBLIC_CREDS_PERM, \
c); return copy;
}
public Set getPrivateCredentials()
{
return privateCredentials;
}
public Set getPrivateCredentials(Class c)
{
Set copy = new ProtectedSet(this, privateCredentials, MOD_PRIVATE_CREDS_PERM, \
c); return copy;
}
public String toString()
{
StringBuffer tmp = new StringBuffer("Subject(");
tmp.append("Principals{");
Iterator iter = principals.iterator();
while( iter.hasNext() )
{
Object next = iter.next();
tmp.append(next);
if( iter.hasNext() )
tmp.append(',');
}
tmp.append('}');
tmp.append("PublicCredentials{");
iter = publicCredentials.iterator();
while( iter.hasNext() )
{
Object next = iter.next();
tmp.append(next);
if( iter.hasNext() )
tmp.append(',');
}
tmp.append('}');
tmp.append("PrivateCredentials{count=");
tmp.append(privateCredentials.size());
tmp.append('}');
tmp.append(')');
return tmp.toString();
}
private static class ProtectedSet extends AbstractSet implements Serializable
{
private HashSet content;
private Permission modifyPerm;
private Subject subject;
private ProtectedSet(Subject subject, Set s, Permission modifyPerm)
{
this(subject, s, modifyPerm, null);
}
private ProtectedSet(Subject subject, Set s, Permission modifyPerm, Class \
filterClass) {
this.subject = subject;
this.modifyPerm = modifyPerm;
if( s != null )
{
if( filterClass != null )
{
this.content = new HashSet();
Iterator iter = s.iterator();
while( iter.hasNext() )
{
Object next = iter.next();
if( filterClass.isInstance(next) )
this.content.add(next);
}
}
else
{
this.content = new HashSet(s);
}
}
else
{
this.content = new HashSet(3);
}
}
public synchronized boolean add(Object obj)
{
if( subject.isReadOnly() == true )
throw new IllegalStateException("Subject is read-only");
SecurityManager sm = System.getSecurityManager();
if( sm != null )
{
sm.checkPermission(modifyPerm);
}
// Only Principals may be added to the principals set
if( modifyPerm == MOD_PRINCIPALS_PERM )
{
if( (obj instanceof Principal) == false )
throw new IllegalArgumentException("Only Principals may be added to \
the PrinpalsSet"); }
return content.add(obj);
}
public synchronized boolean remove(Object obj)
{
if( subject.isReadOnly() == true )
throw new IllegalStateException("Subject is read-only");
SecurityManager sm = System.getSecurityManager();
if( sm != null )
{
sm.checkPermission(modifyPerm);
}
return content.remove(obj);
}
public Iterator iterator()
{
final Iterator iterator = content.iterator();
return new Iterator()
{
public boolean hasNext()
{
return iterator.hasNext();
}
public Object next()
{
Object next = iterator.next();
// If this is the private credentials set check permissions
SecurityManager sm = System.getSecurityManager();
if( sm != null && modifyPerm == MOD_PRIVATE_CREDS_PERM )
{
String name = next.getClass().getName() + " * *";
PrivateCredentialPermission pcp = new \
PrivateCredentialPermission(name, "read"); sm.checkPermission(pcp);
}
return next;
}
public void remove()
{
SecurityManager sm = System.getSecurityManager();
if( sm != null )
{
sm.checkPermission(modifyPerm);
}
iterator.remove();
}
};
}
public int size()
{
return content.size();
}
}
}
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
jboss-cvs-commits mailing list
jboss-cvs-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-cvs-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic