User: stark
Date: 01/02/12 01:29:39
Added: security/src/main/org/jboss/test/security/test
AppCallbackHandler.java Main.java Main2.java
NamespacePermission.java
NamespacePermissionCollection.java
PermissionName.java ProjRepositoryMain.java
StatelessSessionClient.java
TstNamespacePermissions.java TstSRPLogin.java
TstTimedCache.java
Log:
Tests of the security proxy layer and custom JAAS security
Revision Changes Path
1.1
contrib/security/src/main/org/jboss/test/security/test/AppCallbackHandler.java
Index: AppCallbackHandler.java
===================================================================
package org.jboss.test.security.test;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
/**
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class AppCallbackHandler implements CallbackHandler
{
private String username;
private char[] password;
public AppCallbackHandler(String username, char[] password)
{
this.username = username;
this.password = password;
}
public void handle(Callback[] callbacks) throws
IOException, UnsupportedCallbackException
{
for(int i = 0; i < callbacks.length; i++)
{
if (callbacks[i] instanceof NameCallback)
{
NameCallback nc = (NameCallback) callbacks[i];
nc.setName(username);
}
else if(callbacks[i] instanceof PasswordCallback)
{
PasswordCallback pc = (PasswordCallback) callbacks[i];
pc.setPassword(password);
}
else
{
throw new UnsupportedCallbackException(callbacks[i], "Unrecognized
Callback");
}
}
}
}
1.1 contrib/security/src/main/org/jboss/test/security/test/Main.java
Index: Main.java
===================================================================
package org.jboss.test.security.test;
import java.io.FilePermission;
import java.net.URL;
import java.security.CodeSource;
import java.security.Permission;
import java.security.PermissionCollection;
import javax.security.auth.Subject;
import org.jboss.security.SimplePrincipal;
import org.jboss.security.SecurityPolicy;
import org.jboss.security.SecurityPolicyParser;
/** Simple test of the SecurityPolicyParser class.
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class Main
{
static void tstParser()
{
try
{
String policyName = "tst-policy.xml";
URL policyURL = Main2.class.getClassLoader().getResource(policyName);
System.out.println("policyName "+policyName+" -> "+policyURL);
SecurityPolicyParser policyStore = new SecurityPolicyParser(policyURL);
SecurityPolicy policy = new SecurityPolicy(policyStore);
policy.refresh();
Subject subject = new Subject();
subject.getPrincipals().add(new SimplePrincipal("starksm"));
CodeSource cs = new CodeSource(null, null);
PermissionCollection perms = policy.getPermissions(subject, cs);
System.out.println(perms);
Permission p = new FilePermission("D:\\Scott", "read");
boolean implied = perms.implies(p);
System.out.println("Granted: "+p+" -> "+implied);
p = new FilePermission("D:\\Scott\\", "read");
System.out.println("Granted: "+p+" -> "+perms.implies(p));
p = new FilePermission("/Scott/.bashrc", "read");
System.out.println("Granted: "+p+" -> "+perms.implies(p));
p = new FilePermission("/Scott/.bashrc", "read,write");
System.out.println("Granted: "+p+" -> "+perms.implies(p));
p = new FilePermission("/Scott/.bashrc", "delete");
System.out.println("Granted: "+p+" -> "+perms.implies(p));
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[])
{
tstParser();
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/Main2.java
Index: Main2.java
===================================================================
package org.jboss.test.security.test;
import java.net.URL;
import java.util.Map;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.CodeSource;
import java.security.Permission;
import java.security.PermissionCollection;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
import java.util.PropertyPermission;
import javax.security.auth.Policy;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.login.Configuration;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;
import org.jboss.security.SimplePrincipal;
import org.jboss.security.SecurityPolicy;
import org.jboss.security.SecurityPolicyParser;
/** Tests of the SecurityPolicy custom Policy and Configuration behavior
as well as some performance tests.
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class Main2
{
static final int N = 10000;
public static void main(String args[])
{
try
{
System.setErr(System.out);
init(args[0]);
if( args.length == 2 && args[1].equals("-t") )
{
timing1();
timing2();
timing3();
timing4();
}
else
{
run();
}
}
catch(Exception e)
{
e.printStackTrace(System.out);
}
}
static void init(String policyName) throws Exception
{
// Create a subject security policy
System.out.println("java.class.path =
"+System.getProperty("java.class.path"));
URL policyURL = Main2.class.getClassLoader().getResource(policyName);
System.out.println("policyName "+policyName+" -> "+policyURL);
SecurityPolicyParser policyStore = new SecurityPolicyParser(policyURL);
SecurityPolicy policy = new SecurityPolicy(policyStore);
policy.refresh();
Policy.setPolicy(policy);
Configuration.setConfiguration(policy.getLoginConfiguration());
}
static void run() throws Exception
{
LoginContext lc = new LoginContext("test-domain");
lc.login();
Subject subject = lc.getSubject();
System.out.println("Subject="+subject);
SecurityPolicy.setActiveApp("test-domain");
CodeSource cs = new CodeSource(null, null);
System.out.println(Policy.getPolicy().getPermissions(subject, cs));
ProtectionDomain pd = Main2.class.getProtectionDomain();
cs = pd.getCodeSource();
System.out.println(Policy.getPolicy().getPermissions(subject, cs));
Subject.doAsPrivileged(subject, new PrivilegedAction()
{
public Object run()
{
SecurityDelegate.accessProject("Project1", "r---");
SecurityDelegate.accessProject("Project1", "rw--");
SecurityDelegate.accessProject("Project1", "rw-d");
SecurityDelegate.accessProject("Project1/Documents/Private",
"rwxd");
SecurityDelegate.accessProject("Project1/Documents/Public",
"r---");
SecurityDelegate.accessProject("Project1/Documents/Public/readme.html", "r---");
SecurityDelegate.accessProject("Project1/Documents/Public/readme.html", "rw--");
return null;
}
},
null
);
}
/** The code that executes the custom permission check needs to be in a
separate class so that we can jar it up to create a codesource separate
from the codesource in which tstCustomPolicy2.main comes.
*/
static class SecurityDelegate
{
static void accessProject(String path, String action)
{
System.out.println("+++ Begin SecurityDelegate.accessProject path:
"+path+" action: "+action);
Permission p = new NamespacePermission(path, action);
try
{
System.out.println("--- checkPermission: "+p);
AccessController.checkPermission(p);
System.out.println("Allowed access to: "+path+" for: "+action);
}
catch(SecurityException e)
{
System.out.println("Denied access to: "+path+" for: "+action);
}
try
{ // Try a Java2 permission check that should fail for everyone
p = new PropertyPermission("java.class.path", "write");
AccessController.checkPermission(p);
System.out.println("--- IllegalState, access allowed for: "+p);
}
catch(SecurityException e)
{
}
System.out.println("+++ End SecurityDelegate.accessProject");
}
}
static final void accessProject(String path, String action, boolean
checkPermission, boolean customPerm)
{
Permission p = null;
if( customPerm )
p = new NamespacePermission(path, action);
else
p = new RuntimePermission("exitVM");
if( checkPermission )
{
//System.out.println("+++ accessProject path: "+path+" action:
"+action);
try
{
//System.out.println("--- checkPermission: "+p);
AccessController.checkPermission(p);
//System.out.println("Allowed access to: "+path+" for: "+action);
}
catch(SecurityException e)
{
//System.out.println("Denied access to: "+path+" for: "+action);
}
}
}
static void timing1()
{
long start = System.currentTimeMillis();
for(int n = 0; n < N; n ++)
accessProject("Project1", "rw-d", false, false);
long end = System.currentTimeMillis();
System.out.println("timing1: No permissions, time="+(end - start));
}
static void timing2()
{
long start = System.currentTimeMillis();
for(int n = 0; n < N; n ++)
accessProject("Project1", "rw-d", true, false);
long end = System.currentTimeMillis();
System.out.println("timing2: Java2 permissions, time="+(end - start));
}
static void timing3() throws LoginException
{
LoginContext lc = new LoginContext("test");
long start = System.currentTimeMillis();
for(int n = 0; n < N; n ++)
{
lc.login();
Subject subject = lc.getSubject();
Subject.doAsPrivileged(subject, new PrivilegedAction()
{
public Object run()
{
accessProject("Project1", "rw-d", true, true);
return null;
}
},
null
);
lc.logout();
}
long end = System.currentTimeMillis();
System.out.println("timing3: JAAS permissions, time="+(end - start));
}
static void timing4() throws LoginException
{
LoginContext lc = new LoginContext("test");
long start = System.currentTimeMillis();
lc.login();
Subject subject = lc.getSubject();
for(int n = 0; n < N; n ++)
{
Subject.doAsPrivileged(subject, new PrivilegedAction()
{
public Object run()
{
accessProject("Project1", "rw-d", true, true);
return null;
}
},
null
);
}
lc.logout();
long end = System.currentTimeMillis();
System.out.println("timing4: JAAS permissions, time="+(end - start));
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/NamespacePermission.java
Index: NamespacePermission.java
===================================================================
package org.jboss.test.security.test;
import java.security.BasicPermission;
import java.security.Permission;
import java.security.PermissionCollection;
import javax.naming.Name;
/**
*
* @author [EMAIL PROTECTED]
* @version
*/
public class NamespacePermission extends BasicPermission
{
private PermissionName fullName;
private String actions;
/** Creates new NamespacePermission */
public NamespacePermission(String name, String actions)
{
super(name, actions);
this.actions = actions;
fullName = new PermissionName(name);
}
public NamespacePermission(Name name, String actions)
{
super(name.toString(), actions);
this.actions = actions;
fullName = new PermissionName(name);
}
public String getActions()
{
return actions;
}
public PermissionName getFullName()
{
return fullName;
}
public boolean implies(Permission p)
{
String pactions = p.getActions();
boolean implied = true;
for(int n = 0; n < actions.length(); n ++)
{
char a = actions.charAt(n);
char pa = pactions.charAt(n);
if( (a != '-' && pa != '-' && pa != a) )
{
implied = false;
break;
}
else if( a == '-' && pa != '-' )
{
implied = false;
break;
}
}
return implied;
}
public PermissionCollection newPermissionCollection()
{
return new NamespacePermissionCollection();
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/NamespacePermissionCollection.java
Index: NamespacePermissionCollection.java
===================================================================
package org.jboss.test.security.test;
import java.security.Permission;
import java.security.PermissionCollection;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
/** The PermissionCollection object for NamespacePermissions.
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class NamespacePermissionCollection extends PermissionCollection
{
private TreeMap namespacePerms = new TreeMap();
private TreeMap namespaceKeys = new TreeMap(new
PermissionName.NameLengthComparator());
/** Creates new NamespacePermission */
public NamespacePermissionCollection()
{
}
public void add(Permission permission)
{
if( this.isReadOnly() )
throw new SecurityException("Cannot add permission to read-only
collection");
if( (permission instanceof NamespacePermission) == false )
throw new IllegalArgumentException("Only NamespacePermission can be
added, invalid="+permission);
NamespacePermission np = (NamespacePermission) permission;
PermissionName key = np.getFullName();
ArrayList tmp = (ArrayList) namespacePerms.get(key);
if( tmp == null )
{
tmp = new ArrayList();
namespacePerms.put(key, tmp);
namespaceKeys.put(key, key);
}
tmp.add(np);
}
/** Locate the closest permissions assigned to the namespace. This is based
*on the viewing the permission name as a heirarchical PermissionName and
*/
public boolean implies(Permission permission)
{
boolean implies = false;
if( namespacePerms.isEmpty() == true )
return false;
NamespacePermission np = (NamespacePermission) permission;
// See if there is an exact permission for the name
PermissionName key = np.getFullName();
ArrayList tmp = (ArrayList) namespacePerms.get(key);
if( tmp == null )
{ // Find the closest parent position.
SortedMap headMap = namespacePerms.headMap(key);
try
{
PermissionName lastKey = (PermissionName) headMap.lastKey();
if( lastKey.isParent(key) == true )
tmp = (ArrayList) namespacePerms.get(lastKey);
else
{
Iterator keys = headMap.keySet().iterator();
while( keys.hasNext() )
{
lastKey = (PermissionName) keys.next();
if( lastKey.isParent(key) == true )
{
tmp = (ArrayList) namespacePerms.get(lastKey);
break;
}
}
}
}
catch(NoSuchElementException e)
{ // Assign the first permission
Object firstKey = namespacePerms.firstKey();
tmp = (ArrayList) namespacePerms.get(firstKey);
}
}
// See if the permission is implied by any we found
if( tmp != null )
implies = isImplied(tmp, np);
//System.out.println("NPC["+this+"].implies("+np+") -> "+implies);
return implies;
}
public Enumeration elements()
{
Set s = namespaceKeys.keySet();
final Iterator iter = s.iterator();
Enumeration elements = new Enumeration()
{
ArrayList activeEntry;
int index;
public boolean hasMoreElements()
{
boolean hasMoreElements = true;
if( activeEntry == null || index >= activeEntry.size() )
{
hasMoreElements = iter.hasNext();
activeEntry = null;
}
return hasMoreElements;
}
public Object nextElement()
{
Object next = null;
if( activeEntry == null )
{
Object key = iter.next();
activeEntry = (ArrayList) namespacePerms.get(key);
index = 0;
next = activeEntry.get(index ++);
}
else
{
next = activeEntry.get(index ++);
}
return next;
}
};
return elements;
}
private boolean isImplied(ArrayList permissions, NamespacePermission np)
{
boolean isImplied = false;
for(int p = 0; p < permissions.size(); p ++)
{
Permission perm = (Permission) permissions.get(p);
isImplied |= perm.implies(np);
if( isImplied == true )
break;
}
return isImplied;
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/PermissionName.java
Index: PermissionName.java
===================================================================
package org.jboss.test.security.test;
import java.io.Serializable;
import java.security.BasicPermission;
import java.util.Comparator;
import java.util.Properties;
import javax.naming.CompoundName;
import javax.naming.Name;
import javax.naming.NamingException;
/** A javax.naming.Name based key class used as the name attribute
by NamespacePermissions.
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class PermissionName implements Comparable, Serializable
{
/** The Properties used for the project directory heirarchical names */
static Name emptyName;
static Properties nameSyntax = new Properties();
static
{
nameSyntax.put("jndi.syntax.direction", "left_to_right");
nameSyntax.put("jndi.syntax.separator", "/");
try
{
emptyName = new CompoundName("", nameSyntax);
}
catch(NamingException e)
{
}
}
private Name name;
/** An alternate PermissionName comparator that first orders names by
length(longer names before shorter names) to ensure that the most
precise names are seen first.
*/
public static class NameLengthComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
PermissionName p1 = (PermissionName) o1;
PermissionName p2 = (PermissionName) o2;
// if p1 is longer than p2, its < p2 -> < 0
int compare = p2.size() - p1.size();
if( compare == 0 )
compare = p1.compareTo(p2);
return compare;
}
}
/** Creates new NamespacePermission */
public PermissionName(String name) throws IllegalArgumentException
{
try
{
this.name = new CompoundName(name, nameSyntax);
}
catch(NamingException e)
{
throw new IllegalArgumentException(e.toString(true));
}
}
public PermissionName(Name name)
{
this.name = name;
}
public int compareTo(Object obj)
{
PermissionName pn = (PermissionName) obj;
/* Each level must be compared. The first level to not be equals
determines the ordering of the names.
*/
int compare = 0;
int length = Math.min(name.size(), pn.name.size());
for(int n = 0; compare == 0 && n < length; n ++)
{
String atom0 = name.get(n);
String atom1 = pn.name.get(n);
compare = atom0.compareTo(atom1);
}
// If compare is still 0, order shorter name before longer ones
if( compare == 0 )
compare = name.size() - pn.name.size();
return compare;
}
public boolean equals(Object obj)
{
return compareTo(obj) == 0;
}
public int hashCode()
{
return name.hashCode();
}
public int size()
{
return name.size();
}
public boolean isParent(PermissionName childName)
{
boolean isParent = childName.name.startsWith(name);
return isParent;
}
public String toString()
{
return name.toString();
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/ProjRepositoryMain.java
Index: ProjRepositoryMain.java
===================================================================
package org.jboss.test.security.test;
import java.rmi.RemoteException;
import javax.naming.InitialContext;
import javax.naming.directory.Attributes;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.transaction.TransactionRolledbackException;
import org.jboss.security.SimplePrincipal;
import org.jboss.test.security.test.ejbs.project.interfaces.ProjRepository;
import org.jboss.test.security.test.ejbs.project.interfaces.ProjRepositoryHome;
import org.jboss.test.security.test.ejbs.project.support.DefaultName;
/** The client driver for testing secure access to the ProjRepository bean.
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class ProjRepositoryMain
{
static void runAs(String username, char[] password)
{
LoginContext lc = null;
try
{
AppCallbackHandler handler = new AppCallbackHandler(username, password);
lc = new LoginContext("ProjRepositoryMain", handler);
System.out.println("Created LoginContext, username="+username);
lc.login();
}
catch(LoginException le)
{
System.out.println("Login failed");
le.printStackTrace();
return;
}
System.out.println("Login complete");
try
{
InitialContext iniCtx = new InitialContext();
ProjRepositoryHome home = (ProjRepositoryHome)
iniCtx.lookup("ProjRepository");
System.out.println("Found ProjRepositoryHome");
DefaultName projectName = new DefaultName("Project1");
ProjRepository bean = home.create(projectName);
System.out.println("Created ProjRepository");
String[] paths = {
"Project1/Drawings/view1.jpg",
/*"Project1/readme.html",
"Project1/Documents/Private/passwords",
"Project1/Documents/Public/readme.txt",
"Project1/Documents/Public/starksm/.bashrc", */
};
System.out.println("Test of getItem()");
for(int p = 0; p < paths.length; p ++)
{
DefaultName name = new DefaultName(paths[p]);
try
{
Attributes attrs = bean.getItem(name);
System.out.println("getItem("+name+") -> "+attrs);
}
catch(RemoteException e)
{
printException(e);
return;
}
}
System.out.println("Test of deleteItem()");
// Try to delete an item
try
{
DefaultName name = new
DefaultName("Project1/Documents/Public/readme.txt");
bean.deleteItem(name);
System.out.println("deleteItem("+name+") succeeded");
name = new DefaultName("Project1/Documents/Public/starksm/.bashrc");
bean.deleteItem(name);
System.out.println("deleteItem("+name+") succeeded");
}
catch(RemoteException e)
{
printException(e);
}
lc.logout();
System.out.println("User logged out");
}
catch(Throwable e)
{
System.out.println("Unexpected error");
e.printStackTrace();
}
}
public static void main(String args[])
{
try
{
System.setErr(System.out);
if( args.length == 1 && args[0].equals("-mt") )
{
System.out.println("Running multi-threaded with simultaneous
logins");
// ...
}
else
{
System.out.println("Running single-threaded with sequential logins");
String[] user = {"scott", "starksm", "guest", "nobody"};
String[] pass = {"stark", "scott_stark", "guest", "badpass"};
for(int n = 0; n < user.length; n ++)
{
System.out.println("Running as user: "+user[n]);
runAs(user[n], pass[n].toCharArray());
}
}
}
catch(Throwable t)
{
t.printStackTrace();
}
}
static void printException(RemoteException e)
{
Throwable d = e.detail;
if( d instanceof TransactionRolledbackException )
{
TransactionRolledbackException tre = (TransactionRolledbackException) d;
d = tre.detail;
}
if( d instanceof RemoteException )
{
RemoteException re = (RemoteException) d;
d = re.detail;
}
if( d instanceof SecurityException )
System.out.println("Security Failure: "+e.getMessage());
else
d.printStackTrace();
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/StatelessSessionClient.java
Index: StatelessSessionClient.java
===================================================================
package org.jboss.test.security.test;
import java.io.IOException;
import javax.naming.InitialContext;
import javax.security.auth.callback.*;
import javax.security.auth.login.*;
import org.jboss.test.security.test.ejbs.StatelessSession;
import org.jboss.test.security.test.ejbs.StatelessSessionHome;
/** Run with -Djava.security.auth.login.config=url_to_jaas_login_conf
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class StatelessSessionClient
{
static void runMT()
{
Thread t0 = new Thread()
{
public void run()
{
runAs("scott", "echoman".toCharArray());
}
};
Thread t1 = new Thread()
{
public void run()
{
runAs("stark", "javaman".toCharArray());
}
};
t0.start();
t1.start();
}
static void runAs(String username, char[] password)
{
LoginContext lc = null;
try
{
AppCallbackHandler handler = new AppCallbackHandler(username, password);
lc = new LoginContext("StatelessSessionClient", handler);
System.out.println("Created LoginContext, username="+username);
lc.login();
}
catch(LoginException le)
{
System.out.println("Login failed");
le.printStackTrace();
return;
}
try
{
InitialContext jndiContext = new InitialContext();
StatelessSessionHome home = (StatelessSessionHome)
jndiContext.lookup("StatelessSession2");
System.out.println("Found StatelessSessionHome");
StatelessSession bean = home.create();
System.out.println("Created StatelessSession");
System.out.println("Bean.echo('Hello') -> "+bean.echo("Hello"));
lc.logout();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[]) throws Exception
{
if( args.length == 1 && args[0].equals("-mt") )
{
System.out.println("Running multi-threaded with simultaneous logins");
runMT();
}
else
{
System.out.println("Running single-threaded with sequential logins");
runAs("scott", "echoman".toCharArray());
runAs("stark", "javaman".toCharArray());
}
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/TstNamespacePermissions.java
Index: TstNamespacePermissions.java
===================================================================
package org.jboss.test.security.test;
import java.io.FilePermission;
import java.net.URL;
import java.security.CodeSource;
import java.security.Permission;
import java.security.PermissionCollection;
import java.security.Policy;
/** Tests of the NamespacePermissions.
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class TstNamespacePermissions
{
/**
* @param args the command line arguments
*/
public static void main(String args[])
{
System.setErr(System.out);
PermissionCollection pc = new NamespacePermissionCollection();
NamespacePermission p = new NamespacePermission("starksm/Project1", "r---");
pc.add(p);
p = new NamespacePermission("starksm/Project1/Documents/readme.html",
"rw--");
pc.add(p);
p = new NamespacePermission("starksm/Project1/Documents/Public", "rw--");
pc.add(p);
p = new NamespacePermission("starksm/Project1/Documents/Public/Private",
"----");
pc.add(p);
p = new NamespacePermission("Project1/Documents/Public", "r---");
pc.add(p);
System.out.println(pc);
p = new NamespacePermission("Project1/Drawings/view1.jpg", "r---");
boolean implied = pc.implies(p);
System.out.println("IsImplied[false]: "+p+" -> "+implied);
p = new NamespacePermission("Project1/Documents/view1.jpg", "r---");
implied = pc.implies(p);
System.out.println("IsImplied[false]: "+p+" -> "+implied);
p = new NamespacePermission("Project1/Documents/Public/view1.jpg", "r---");
implied = pc.implies(p);
System.out.println("IsImplied[true]: "+p+" -> "+implied);
p = new NamespacePermission("starksm/Project1", "r---");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents/Folder1", "r---");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents/readme.html",
"r---");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents/readme.html",
"rw--");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents/readme.html",
"-w--");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents/readme.html",
"rw-d");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents", "rw--");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents/Public/readme.html",
"r---");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new NamespacePermission("starksm/Project1/Documents/Public/readme.html",
"rw--");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new
NamespacePermission("starksm/Project1/Documents/Public/Private/readme.html", "r---");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
p = new
NamespacePermission("starksm/Project1/Documents/Public/Private/readme.html", "rw--");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
PermissionName n0 = new
PermissionName("starksm/Project1/Documents/readme.html");
PermissionName n1 = new
PermissionName("starksm/Project1/Documents/Folder1/readme.html");
System.out.println(n0+"compareTo"+n1+" -> "+n0.compareTo(n1));
p = new
NamespacePermission("starksm/Project1/Documents/Folder1/readme.html", "rw--");
System.out.println("IsImplied: "+p+" -> "+pc.implies(p));
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/TstSRPLogin.java
Index: TstSRPLogin.java
===================================================================
package org.jboss.test.security.test;
import java.net.URL;
import javax.security.auth.Policy;
import javax.security.auth.Subject;
import javax.security.auth.login.Configuration;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import org.jboss.security.SimplePrincipal;
import org.jboss.security.SecurityPolicy;
import org.jboss.security.SecurityPolicyParser;
/** A test of the SRPLogin module
@see security.srp.protocol.jaas.SRPLoginModule
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class TstSRPLogin
{
public static void main(String args[])
{
try
{
System.setErr(System.out);
init(args[0]);
run();
}
catch(Exception e)
{
e.printStackTrace(System.out);
}
}
/** Create a SecurityPolicy from a xml policy file and install it as the
JAAS Policy and Configuration implementations.
*/
static void init(String policyName) throws Exception
{
// Create a subject security policy
URL policyURL = Main2.class.getClassLoader().getResource(policyName);
System.out.println("policyName "+policyName+" -> "+policyURL);
SecurityPolicyParser policyStore = new SecurityPolicyParser(policyURL);
SecurityPolicy policy = new SecurityPolicy(policyStore);
policy.refresh();
Policy.setPolicy(policy);
Configuration.setConfiguration(policy.getLoginConfiguration());
}
static void run() throws Exception
{
AppCallbackHandler handler = new AppCallbackHandler("scott",
"stark".toCharArray());
LoginContext lc = new LoginContext("srp-login", handler);
lc.login();
Subject subject = lc.getSubject();
System.out.println("Subject="+subject);
}
}
1.1
contrib/security/src/main/org/jboss/test/security/test/TstTimedCache.java
Index: TstTimedCache.java
===================================================================
package org.jboss.test.security.test;
import java.io.FilePermission;
import java.net.URL;
import java.security.CodeSource;
import java.security.Permission;
import java.security.PermissionCollection;
import java.security.Policy;
import org.jboss.util.TimedCachePolicy;
/** Tests of the TimedCachePolicy class.
@see org.jboss.util.TimedCachePolicy
@author [EMAIL PROTECTED]
@version $Revision: 1.1 $
*/
public class TstTimedCache
{
static class Refreshable implements TimedCachePolicy.TimedEntry
{
int refreshes;
long expirationTime;
Object value;
Refreshable(long lifetime, Object value, int refreshes)
{
this.expirationTime = 1000 * lifetime;
this.value = value;
this.refreshes = refreshes;
}
public void init(long now)
{
expirationTime += now;
System.out.println(value+".init("+now+"),
expirationTime="+expirationTime);
}
public boolean isCurrent(long now)
{
System.out.println(value+".isCurrent("+now+") = "+(expirationTime >
now));
return expirationTime > now;
}
public boolean refresh()
{
refreshes --;
System.out.println(value+".refresh() = "+(refreshes > 0));
return refreshes > 0;
}
public Object getValue()
{
return value;
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[])
{
TimedCachePolicy cache = new TimedCachePolicy(20, false, 1);
cache.init();
cache.start();
cache.insert("1", new Refreshable(5, "value1", 4));
cache.insert("2", new Refreshable(3, "value2", 10));
cache.insert("3", "value3");
long start = System.currentTimeMillis();
// Loop until the longest lived value is gone
while( cache.peek("2") != null )
{
long now = System.currentTimeMillis();
System.out.println("Elapsed: "+(now - start) / 1000);
System.out.println("get(1) -> "+cache.get("1"));
System.out.println("get(2) -> "+cache.get("2"));
System.out.println("get(3) -> "+cache.get("3"));
try
{
Thread.currentThread().sleep(3*1000);
}
catch(InterruptedException e)
{
}
}
long now = System.currentTimeMillis();
System.out.println("End, elapsed: "+(now - start) / 1000);
System.out.println("get(1) -> "+cache.get("1"));
System.out.println("get(2) -> "+cache.get("2"));
System.out.println("get(3) -> "+cache.get("3"));
}
}