Repository: karaf Updated Branches: refs/heads/karaf-2.x fc67178e7 -> c8912afb4
[KARAF-3061] Problems with jaas:realms / jaas:manage commands when using multiple realms of the same name Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/c8912afb Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/c8912afb Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/c8912afb Branch: refs/heads/karaf-2.x Commit: c8912afb4ddf73161a5f8363bbfba5f26fcd1110 Parents: fc67178 Author: Guillaume Nodet <[email protected]> Authored: Fri Jun 20 15:55:15 2014 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Fri Jun 20 15:55:15 2014 +0200 ---------------------------------------------------------------------- .../karaf/jaas/command/JaasCommandSupport.java | 22 +++++++++++- .../karaf/jaas/command/ListRealmsCommand.java | 6 +++- .../karaf/jaas/command/ManageRealmCommand.java | 38 +++++++++++--------- 3 files changed, 47 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/c8912afb/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java ---------------------------------------------------------------------- diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java index 5706f21..1ec7713 100644 --- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java +++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java @@ -21,8 +21,13 @@ import org.apache.karaf.jaas.modules.BackingEngineService; import org.apache.karaf.shell.console.OsgiCommandSupport; import javax.security.auth.login.AppConfigurationEntry; + +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Queue; +import java.util.TreeMap; public abstract class JaasCommandSupport extends OsgiCommandSupport { @@ -58,7 +63,22 @@ public abstract class JaasCommandSupport extends OsgiCommandSupport { } public List<JaasRealm> getRealms() { - return realms; + return getRealms(false); + } + + public List<JaasRealm> getRealms(boolean hidden) { + if (hidden) { + return realms; + } else { + Map<String, JaasRealm> map = new TreeMap<String, JaasRealm>(); + for (JaasRealm realm : realms) { + if (!map.containsKey(realm.getName()) + || realm.getRank() > map.get(realm.getName()).getRank()) { + map.put(realm.getName(), realm); + } + } + return new ArrayList<JaasRealm>(map.values()); + } } public void setRealms(List<JaasRealm> realms) { http://git-wip-us.apache.org/repos/asf/karaf/blob/c8912afb/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java ---------------------------------------------------------------------- diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java index 904f47b..0209025 100644 --- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java +++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java @@ -19,6 +19,7 @@ import java.util.List; import javax.security.auth.login.AppConfigurationEntry; import org.apache.felix.gogo.commands.Command; +import org.apache.felix.gogo.commands.Option; import org.apache.karaf.jaas.boot.ProxyLoginModule; import org.apache.karaf.jaas.config.JaasRealm; import org.apache.karaf.jaas.modules.BackingEngine; @@ -28,13 +29,16 @@ public class ListRealmsCommand extends JaasCommandSupport { private static final String REALM_LIST_FORMAT = "%5s %-20s %-80s"; + @Option(name = "-h", aliases = {"--hidden"}, description = "Show hidden realms", required = false, multiValued = false) + boolean hidden; + @Override protected Object doExecute(BackingEngine engine) throws Exception { return null; } protected Object doExecute() throws Exception { - List<JaasRealm> realms = getRealms(); + List<JaasRealm> realms = getRealms(hidden); if (realms != null && realms.size() > 0) { System.out.println(String.format(REALM_LIST_FORMAT, "Index","Realm", "Module Class")); int index = 1; http://git-wip-us.apache.org/repos/asf/karaf/blob/c8912afb/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java ---------------------------------------------------------------------- diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java index 1262290..61ddd34 100644 --- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java +++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java @@ -41,6 +41,9 @@ public class ManageRealmCommand extends JaasCommandSupport { @Option(name = "-f", aliases = {"--force"}, description = "Force the management of this realm, even if another one was under management", required = false, multiValued = false) boolean force; + @Option(name = "-h", aliases = {"--hidden"}, description = "Manage hidden realms", required = false, multiValued = false) + boolean hidden; + @Override protected Object doExecute() throws Exception { if (realmName == null && index <= 0) { @@ -61,7 +64,7 @@ public class ManageRealmCommand extends JaasCommandSupport { if (index > 0) { // user provided the index, get the realm AND entry from the index - List<JaasRealm> realms = getRealms(); + List<JaasRealm> realms = getRealms(hidden); if (realms != null && realms.size() > 0) { int i = 1; realms_loop: for (JaasRealm r : realms) { @@ -85,22 +88,23 @@ public class ManageRealmCommand extends JaasCommandSupport { for (JaasRealm r : realms) { if (r.getName().equals(realmName)) { realm = r; - break; - } - } - - } - AppConfigurationEntry[] entries = realm.getEntries(); - if (entries != null) { - for (AppConfigurationEntry e : entries) { - String moduleClass = (String) e.getOptions().get(ProxyLoginModule.PROPERTY_MODULE); - if (moduleName == null) { - entry = e; - break; - } else { - if (moduleName.equals(e.getLoginModuleName()) || moduleName.equals(moduleClass)) { - entry = e; - break; + AppConfigurationEntry[] entries = realm.getEntries(); + if (entries != null) { + for (AppConfigurationEntry e : entries) { + String moduleClass = (String) e.getOptions().get(ProxyLoginModule.PROPERTY_MODULE); + if (moduleName == null) { + entry = e; + break; + } else { + if (moduleName.equals(e.getLoginModuleName()) || moduleName.equals(moduleClass)) { + entry = e; + break; + } + } + } + if (entry != null) { + break; + } } } }
