FELIX-3998 Updating JAAS config leads to registration of duplicate LoginModules
If config gets updated the previous service is unregistered
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1461129 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jaas/src/main/java/org/apache/felix/jaas/internal/JaasConfigFactory.java b/jaas/src/main/java/org/apache/felix/jaas/internal/JaasConfigFactory.java
index 6235afa..143964d 100644
--- a/jaas/src/main/java/org/apache/felix/jaas/internal/JaasConfigFactory.java
+++ b/jaas/src/main/java/org/apache/felix/jaas/internal/JaasConfigFactory.java
@@ -19,10 +19,13 @@
package org.apache.felix.jaas.internal;
-import static org.apache.felix.jaas.internal.Util.trimToNull;
-
-import java.util.*;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import org.apache.felix.jaas.LoginModuleFactory;
import org.apache.felix.scr.annotations.Component;
@@ -37,6 +40,8 @@
import org.osgi.service.cm.ManagedServiceFactory;
import org.osgi.service.log.LogService;
+import static org.apache.felix.jaas.internal.Util.trimToNull;
+
@Component(label = "%jaas.name",
description = "%jaas.description",
metatype = true,
@@ -73,7 +78,7 @@
private final BundleContext context;
- private final Map<String, ServiceRegistration> registrations = new ConcurrentHashMap<String, ServiceRegistration>();
+ private final ConcurrentMap<String, ServiceRegistration> registrations = new ConcurrentHashMap<String, ServiceRegistration>();
public JaasConfigFactory(BundleContext context, LoginModuleCreator factory, Logger log)
{
@@ -126,7 +131,13 @@
ServiceRegistration reg = context.registerService(
LoginModuleFactory.class.getName(), lmf, new Properties());
- registrations.put(pid, reg);
+ ServiceRegistration oldReg = registrations.put(pid, reg);
+
+ //Remove earlier registration if any
+ if(oldReg != null)
+ {
+ oldReg.unregister();
+ }
}
@Override