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;
+                                }
                             }
                         }
                     }

Reply via email to