/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.test; import java.lang.reflect.Method; import java.security.acl.Group; import java.util.HashMap; import java.util.Set; import javax.security.auth.Subject; import javax.security.auth.login.AppConfigurationEntry; import javax.security.auth.login.Configuration; import javax.security.auth.login.LoginContext; import junit.framework.TestCase; import junit.framework.TestSuite; import org.jboss.security.SimplePrincipal; import org.jboss.security.auth.callback.UsernamePasswordHandler; /** Tests of the LoginModule classes. @author Scott.Stark@jboss.org @version $Revision: 1.7.6.2 $ */ public class LoginModulesTestCase extends TestCase { static { try { Configuration.setConfiguration(new TestConfig()); System.out.println("Installed TestConfig as JAAS Configuration"); } catch(Exception e) { e.printStackTrace(); } } /** Hard coded login configurations for the test cases. The configuration name corresponds to the unit test function that uses the configuration. */ static class TestConfig extends Configuration { public void refresh() { } public AppConfigurationEntry[] getAppConfigurationEntry(String name) { AppConfigurationEntry[] entry = null; try { Class[] parameterTypes = {}; Method m = getClass().getDeclaredMethod(name, parameterTypes); Object[] args = {}; entry = (AppConfigurationEntry[]) m.invoke(this, args); } catch(Exception e) { } return entry; } AppConfigurationEntry[] testLdapLoginModule() { String name = "org.jboss.security.auth.spi.LdapLoginModule"; HashMap options = new HashMap(); options.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory"); options.put("java.naming.provider.url", "ldap://192.168.1.53/"); options.put("java.naming.security.authentication", "simple"); options.put("principalDNPrefix", "uid="); options.put("principalDNSuffix", ",cn=users,dc=laboratorio,dc=local"); options.put("rolesCtxDN", "cn=roles,dc=laboratorio,dc=local"); options.put("uidAttributeID", "member"); options.put("matchOnUserDN", "true"); options.put("roleAttributeID", "cn"); options.put("roleAttributeIsDN", "false"); AppConfigurationEntry ace = new AppConfigurationEntry(name, AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, options); AppConfigurationEntry[] entry = {ace}; return entry; } AppConfigurationEntry[] testLdapExtLoginModule() { String name = "org.jboss.security.auth.spi.LdapExtLoginModule"; HashMap options = new HashMap(); options.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory"); options.put("java.naming.provider.url", "ldap://192.168.1.53/"); options.put("java.naming.security.authentication", "simple"); options.put("bindDN", "uid=admin,cn=users,dc=laboratorio,dc=local"); options.put("bindCredential", "rtq3cbm1"); options.put("baseCtxDN", "cn=users,dc=laboratorio,dc=local"); options.put("baseFilter", "(cn={0})"); options.put("rolesCtxDN", "cn=roles,dc=laboratorio,dc=local"); options.put("roleFilter", "(member={1})"); options.put("roleAttributeID", "cn"); options.put("roleRecursion", "3"); AppConfigurationEntry ace = new AppConfigurationEntry(name, AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, options); AppConfigurationEntry[] entry = {ace}; return entry; } } public LoginModulesTestCase(String testName) { super(testName); } public void testLdapLoginModule() throws Exception { //System.out.println("testLdapLoginModule"); System.out.println("testLdapExtLoginModule"); UsernamePasswordHandler handler = new UsernamePasswordHandler("admin", "rtq3cbm1".toCharArray()); LoginContext lc = new LoginContext("testLdapExtLoginModule", handler); lc.login(); Subject subject = lc.getSubject(); System.out.println("Subject: "+subject); Set groups = subject.getPrincipals(Group.class); assertTrue("Principals contains admin", subject.getPrincipals().contains(new SimplePrincipal("admin"))); assertTrue("Principals contains Roles", groups.contains(new SimplePrincipal("Roles"))); //Role Group roles = (Group) groups.iterator().next(); assertTrue("administrador is a role", roles.isMember(new SimplePrincipal("admin"))); lc.logout(); } public static void main(java.lang.String[] args) { System.setErr(System.out); TestSuite suite = new TestSuite(LoginModulesTestCase.class); junit.textui.TestRunner.run(suite); } }