Author: iocanel
Date: Fri Sep 3 13:06:39 2010
New Revision: 992286
URL: http://svn.apache.org/viewvc?rev=992286&view=rev
Log:
Added KarafAbstractLoginModule which handles RolePolicies. Added 2
RolePolicies(prefixed and grouped).
Added:
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/GroupPrincipal.java
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/RolePolicy.java
Modified:
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
Added:
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java?rev=992286&view=auto
==============================================================================
---
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
(added)
+++
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
Fri Sep 3 13:06:39 2010
@@ -0,0 +1,62 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.apache.karaf.jaas.modules;
+
+import java.security.Principal;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+
+
+/**
+ *
+ * @author iocanel
+ */
+public abstract class AbstractKarafLoginModule implements LoginModule {
+
+ protected Set<Principal> principals = new HashSet<Principal>();
+ protected Subject subject;
+ protected String user;
+ protected CallbackHandler callbackHandler;
+ protected boolean debug;
+ protected Map<String, ?> options;
+
+ protected String rolePolicy;
+ protected String roleDiscriminator;
+
+ public boolean commit() throws LoginException {
+ RolePolicy policy = RolePolicy.getPolicy(rolePolicy);
+ if(policy != null && roleDiscriminator != null) {
+ policy.handleRoles(subject, principals, roleDiscriminator);
+ } else subject.getPrincipals().addAll(principals);
+ return true;
+ }
+
+ protected void clear() {
+ user = null;
+ }
+
+ public void initialize(Subject sub, CallbackHandler handler, Map options) {
+ this.subject = sub;
+ this.callbackHandler = handler;
+ rolePolicy = (String) options.get("rolePolicy");
+ roleDiscriminator = (String) options.get("roleDisciriminator");
+ debug = "true".equalsIgnoreCase((String) options.get("debug"));
+ }
+}
Added:
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/GroupPrincipal.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/GroupPrincipal.java?rev=992286&view=auto
==============================================================================
---
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/GroupPrincipal.java
(added)
+++
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/GroupPrincipal.java
Fri Sep 3 13:06:39 2010
@@ -0,0 +1,57 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.apache.karaf.jaas.modules;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+/**
+ *
+ * @author iocanel
+ */
+public class GroupPrincipal implements Group {
+
+ private String name;
+ private Hashtable<String,Principal> members = new Hashtable<String,
Principal>();
+
+ public GroupPrincipal(String name) {
+ this.name = name;
+ }
+
+ public boolean addMember(Principal user) {
+ members.put(user.getName(), user);
+ return true;
+ }
+
+ public boolean removeMember(Principal user) {
+ members.remove(user.getName());
+ return true;
+ }
+
+ public boolean isMember(Principal member) {
+ return members.contains(member.getName());
+ }
+
+ public Enumeration<? extends Principal> members() {
+ return members.elements();
+ }
+
+ public String getName() {
+ return name;
+ }
+}
Added:
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/RolePolicy.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/RolePolicy.java?rev=992286&view=auto
==============================================================================
---
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/RolePolicy.java
(added)
+++
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/RolePolicy.java
Fri Sep 3 13:06:39 2010
@@ -0,0 +1,80 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.apache.karaf.jaas.modules;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import javax.security.auth.Subject;
+
+/**
+ *
+ * @author iocanel
+ */
+public enum RolePolicy {
+
+ PREFIXED_ROLES("prefix") {
+ public void handleRoles(Subject subject,Set<Principal>
principals,String discriminator) {
+ for(Principal p:principals) {
+ if(p instanceof RolePrincipal){
+ RolePrincipal rolePrincipal = new
RolePrincipal(discriminator+p.getName());
+ subject.getPrincipals().add(rolePrincipal);
+ } else {
+ subject.getPrincipals().add(p);
+ }
+ }
+ }
+ },
+ GROUP_ROLES("group") {
+ public void handleRoles(Subject subject,Set<Principal>
principals,String discriminator) {
+ Group group = new GroupPrincipal(discriminator);
+ for(Principal p:principals) {
+ if(p instanceof RolePrincipal) {
+ group.addMember(p);
+ } else {
+ subject.getPrincipals().add(p);
+ }
+ }
+ subject.getPrincipals().add(group);
+ }
+ };
+
+ private String value;
+
+ private static final Map<String, RolePolicy> policies = new
HashMap<String, RolePolicy>();
+
+ static {
+ for (RolePolicy s : EnumSet.allOf(RolePolicy.class)) {
+ policies.put(s.getValue(), s);
+ }
+ }
+
+ private RolePolicy(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+ public static RolePolicy getPolicy(String code) {
+ return policies.get(code);
+ }
+
+ public abstract void handleRoles(Subject subject,Set<Principal>
principals,String discriminator);
+}
Modified:
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java?rev=992286&r1=992285&r2=992286&view=diff
==============================================================================
---
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java
(original)
+++
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/osgi/OsgiConfigLoginModule.java
Fri Sep 3 13:06:39 2010
@@ -31,27 +31,19 @@ import javax.security.auth.callback.Pass
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.FailedLoginException;
import javax.security.auth.login.LoginException;
-import javax.security.auth.spi.LoginModule;
+import org.apache.karaf.jaas.modules.AbstractKarafLoginModule;
import org.apache.karaf.jaas.modules.RolePrincipal;
import org.apache.karaf.jaas.modules.UserPrincipal;
import org.osgi.service.cm.Configuration;
-public class OsgiConfigLoginModule implements LoginModule {
+public class OsgiConfigLoginModule extends AbstractKarafLoginModule {
public static final String PID = "pid";
public static final String USER_PREFIX = "user.";
- private Subject subject;
- private CallbackHandler callbackHandler;
- private Map<String, ?> options;
-
- private Set<Principal> principals;
-
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map<String, ?> sharedState, Map<String, ?> options) {
- this.subject = subject;
- this.callbackHandler = callbackHandler;
- this.options = options;
+ super.initialize(subject, callbackHandler, options);
}
public boolean login() throws LoginException {
@@ -103,10 +95,6 @@ public class OsgiConfigLoginModule imple
}
}
- public boolean commit() throws LoginException {
- subject.getPrincipals().addAll(principals);
- return true;
- }
public boolean abort() throws LoginException {
subject = null;
Modified:
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java?rev=992286&r1=992285&r2=992286&view=diff
==============================================================================
---
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
(original)
+++
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
Fri Sep 3 13:06:39 2010
@@ -22,7 +22,6 @@ import java.security.Principal;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
-import java.util.Set;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
@@ -32,10 +31,10 @@ import javax.security.auth.callback.Pass
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.FailedLoginException;
import javax.security.auth.login.LoginException;
-import javax.security.auth.spi.LoginModule;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.karaf.jaas.modules.AbstractKarafLoginModule;
import org.apache.karaf.jaas.modules.RolePrincipal;
import org.apache.karaf.jaas.modules.UserPrincipal;
@@ -43,23 +42,17 @@ import org.apache.karaf.jaas.modules.Use
* JAAS Login module for user / password, based on two properties files.
*
*/
-public class PropertiesLoginModule implements LoginModule {
+public class PropertiesLoginModule extends AbstractKarafLoginModule {
private static final String USER_FILE = "users";
private static final Log LOG =
LogFactory.getLog(PropertiesLoginModule.class);
- private Subject subject;
- private CallbackHandler callbackHandler;
- private boolean debug;
+
private String usersFile;
- private String user;
- private Set principals = new HashSet();
+ @Override
public void initialize(Subject sub, CallbackHandler handler, Map
sharedState, Map options) {
- this.subject = sub;
- this.callbackHandler = handler;
-
- debug = "true".equalsIgnoreCase((String) options.get("debug"));
+ super.initialize(sub,handler,options);
usersFile = (String) options.get(USER_FILE) + "";
if (debug) {
@@ -122,15 +115,6 @@ public class PropertiesLoginModule imple
return true;
}
- public boolean commit() throws LoginException {
- subject.getPrincipals().addAll(principals);
- clear();
- if (debug) {
- LOG.debug("commit");
- }
- return true;
- }
-
public boolean abort() throws LoginException {
clear();
if (debug) {
@@ -147,8 +131,4 @@ public class PropertiesLoginModule imple
}
return true;
}
-
- private void clear() {
- user = null;
- }
}