/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.authentication.jaas; import java.io.File; import java.util.HashMap; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; import javax.naming.Context; import javax.security.auth.login.AppConfigurationEntry; import javax.security.auth.login.Configuration; import javax.security.auth.login.LoginContext; import org.jboss.security.auth.callback.AppCallbackHandler; import org.jboss.security.auth.spi.LdapLoginModule; import org.jboss.security.util.MBeanServerLocator; import org.jboss.test.security.ldap.OpenDSUnitTestCase; /** * SECURITY-426: DecodeAction is not using JaasSecurityDomain MBean * @author Anil.Saldhana@redhat.com */ public class LdapLoginModuleDecodeActionUnitTestCase extends OpenDSUnitTestCase { private String oname = "jboss.test:service=jaasSecurityDomain"; public LdapLoginModuleDecodeActionUnitTestCase(String name) { super(name); } @SuppressWarnings("deprecation") @Override protected void setUp() throws Exception { super.setUp(); //load it up with example1.ldif String fileName = targetDir + "ldap" + fs + "example1.ldif"; boolean op = util.addLDIF(serverHost, port, adminDN, adminPW, new File(fileName).toURL()); assertTrue(op); //Setup a configuration Configuration.setConfiguration(new Configuration() { @SuppressWarnings("unchecked") @Override public AppConfigurationEntry[] getAppConfigurationEntry(String cname) { String name = LdapLoginModule.class.getName(); HashMap options = new HashMap(); options.put("java.naming.factory.initial", ldapCtxFactory); options.put("java.naming.provider.url","ldap://localhost:10389/"); options.put("java.naming.security.authentication","simple"); options.put("principalDNPrefix","uid="); options.put("uidAttributeID","userid"); options.put("roleAttributeID","roleName"); options.put("principalDNSuffix",",ou=People,dc=jboss,dc=org"); options.put("rolesCtxDN","cn=JBossSX Tests,ou=Roles,dc=jboss,dc=org"); options.put(Context.SECURITY_CREDENTIALS, "somecrazyencryptedstring"); options.put("jaasSecurityDomain", oname); AppConfigurationEntry ace = new AppConfigurationEntry(name, AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, options); AppConfigurationEntry[] entry = {ace}; return entry; } @Override public void refresh() { } }); //Setup MBeanServer MBeanServer jbossMBeanServer = MBeanServerFactory.createMBeanServer("jboss"); MBeanServerLocator.setJBoss(jbossMBeanServer); try { Test test = new Test(); jbossMBeanServer.registerMBean(test, new ObjectName(oname)); } catch(Exception e) { e.printStackTrace(); } } public void testLDAPAddDelete() throws Exception { //Ignore } public void testLDAPDecodeAction() throws Exception { LoginContext lc = new LoginContext("test", new AppCallbackHandler("jduke","theduke".toCharArray())); lc.login(); } //We create a MBean that has just one operation for testing purposes public interface TestMBean { byte[] decode64(String secret) throws Exception; } public class Test implements TestMBean { public Test() { } //In JBoss environment, the JaasSecurityDomain mbean will perform the decoding public byte[] decode64(String secret) throws Exception { return "theduke".getBytes(); } } }