FELIX-3985 - ConfigSpiOsgi should be registered by default
The ConfigSpi now registers upon activation with default config
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1459226 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java b/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java
index 960e039..adb92b3 100644
--- a/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java
+++ b/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java
@@ -23,12 +23,24 @@
import java.security.NoSuchProviderException;
import java.security.Provider;
import java.security.Security;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.login.*;
+import javax.security.auth.login.AppConfigurationEntry;
+import javax.security.auth.login.Configuration;
+import javax.security.auth.login.ConfigurationSpi;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
import org.apache.felix.jaas.LoginContextFactory;
import org.apache.felix.jaas.LoginModuleFactory;
@@ -115,10 +127,11 @@
private ServiceRegistration spiReg;
- public ConfigSpiOsgi(BundleContext context, Logger log)
- {
+ public ConfigSpiOsgi(BundleContext context, Logger log) throws ConfigurationException {
this.context = context;
this.log = log;
+
+ updated(getDefaultConfig());
this.tracker = new ServiceTracker(context, LoginModuleFactory.class.getName(),
this);
@@ -331,6 +344,21 @@
}
}
+ private Dictionary<String,String> getDefaultConfig() throws ConfigurationException
+ {
+ //Determine default config. Value can still be overridden by BundleContext properties
+ Dictionary<String,String> dict = new Hashtable<String,String>();
+ put(dict,JAAS_DEFAULT_REALM_NAME,DEFAULT_REALM_NAME);
+ put(dict,JAAS_CONFIG_PROVIDER_NAME,DEFAULT_CONFIG_PROVIDER_NAME);
+ put(dict, JAAS_CONFIG_POLICY, GlobalConfigurationPolicy.DEFAULT.name());
+ return dict;
+ }
+
+ private void put(Dictionary<String,String> dict, String key, String defaultValue)
+ {
+ dict.put(key,PropertiesUtil.toString(context.getProperty(key),defaultValue));
+ }
+
// --------------JAAS/JCA/Security ----------------------------------------
private void registerProvider(String providerName)
diff --git a/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithBootClasspath.java b/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithBootClasspath.java
index ab4fe06..d5aba18 100644
--- a/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithBootClasspath.java
+++ b/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithBootClasspath.java
@@ -20,8 +20,6 @@
package org.apache.felix.jaas.integration;
import java.io.File;
-import java.io.IOException;
-import java.util.Properties;
import javax.security.auth.Subject;
import javax.security.auth.callback.CallbackHandler;
@@ -93,7 +91,6 @@
public void testJaasWithBoot() throws Exception
{
String realmName = name.getMethodName();
- createConfigSpiConfig();
createLoginModuleConfig(realmName);
delay();
diff --git a/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithConfigBasedLoginModule.java b/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithConfigBasedLoginModule.java
index 0c37424..c8d9635 100644
--- a/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithConfigBasedLoginModule.java
+++ b/jaas/src/test/java/org/apache/felix/jaas/integration/ITJaasWithConfigBasedLoginModule.java
@@ -19,12 +19,6 @@
package org.apache.felix.jaas.integration;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.fail;
-import static org.ops4j.pax.exam.CoreOptions.composite;
-import static org.ops4j.pax.exam.CoreOptions.streamBundle;
-
import java.util.Arrays;
import java.util.Collections;
import java.util.Dictionary;
@@ -51,6 +45,12 @@
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
+import static org.ops4j.pax.exam.CoreOptions.composite;
+import static org.ops4j.pax.exam.CoreOptions.streamBundle;
+
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class ITJaasWithConfigBasedLoginModule extends JaasTestBase
@@ -78,7 +78,6 @@
@Test
public void testJaasWithTCCL() throws Exception {
String realmName = name.getMethodName();
- createConfigSpiConfig();
createLoginModuleConfig(realmName);
delay();
@@ -105,7 +104,6 @@
public void testJaasWithFactory() throws Exception
{
String realmName = name.getMethodName();
- createConfigSpiConfig();
createLoginModuleConfig(realmName);
delay();
@@ -137,7 +135,6 @@
@Test
public void testJaasConfigPassing() throws Exception {
String realmName = name.getMethodName();
- createConfigSpiConfig();
//1. Create sample config
org.osgi.service.cm.Configuration config =
@@ -184,7 +181,6 @@
@Test
public void testJaasConfigOrderedViaRanking() throws Exception {
String realmName = name.getMethodName();
- createConfigSpiConfig();
List<Integer> ranks = Arrays.asList(1,2,3,4,5,6);
Collections.shuffle(ranks);
@@ -221,7 +217,6 @@
@Test
public void testJaasConfigWithEmptyRealm() throws Exception {
String realmName = name.getMethodName();
- createConfigSpiConfig();
//Scenario 1 - Create a config with no realm name set. So its default name would
//be set to the defaultRealmName setting of ConfigurationSpi. Which defaults to 'other'
diff --git a/jaas/src/test/java/org/apache/felix/jaas/integration/JaasTestBase.java b/jaas/src/test/java/org/apache/felix/jaas/integration/JaasTestBase.java
index 7953c8c..f74431a 100644
--- a/jaas/src/test/java/org/apache/felix/jaas/integration/JaasTestBase.java
+++ b/jaas/src/test/java/org/apache/felix/jaas/integration/JaasTestBase.java
@@ -37,7 +37,6 @@
import org.ops4j.pax.exam.ProbeBuilder;
import org.ops4j.pax.exam.TestProbeBuilder;
import org.ops4j.pax.exam.options.DefaultCompositeOption;
-import org.ops4j.pax.exam.util.PathUtils;
import org.ops4j.pax.tinybundles.core.TinyBundles;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -66,6 +65,7 @@
protected static final String BUNDLE_JAR_DEFAULT = "target/jaas.jar";
// the JVM option to set to enable remote debugging
+ @SuppressWarnings("UnusedDeclaration")
protected static final String DEBUG_VM_OPTION = "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=31313";
// the actual JVM option set, extensions may implement a static
@@ -76,7 +76,6 @@
@Configuration
public Option[] config()
{
- String baseDir = PathUtils.getBaseDir();
final String bundleFileName = System.getProperty(BUNDLE_JAR_SYS_PROP,
BUNDLE_JAR_DEFAULT);
final File bundleFile = new File(bundleFileName);
@@ -130,13 +129,6 @@
.build(withBnd());
}
- protected String createConfigSpiConfig() throws IOException {
- org.osgi.service.cm.Configuration config = ca.getConfiguration("org.apache.felix.jaas.ConfigurationSpi",null);
- Properties p = new Properties();
- config.update(p);
- return config.getPid();
- }
-
protected Option addExtraOptions()
{
return new DefaultCompositeOption();