[jboss-cvs] JBossAS SVN: r71026 - branches/JBPAPP_4_2_0_GA_CP/security/src/main/org/jboss/security/auth/spi.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Mar 19 15:44:25 EDT 2008


Author: mmoyses
Date: 2008-03-19 15:44:24 -0400 (Wed, 19 Mar 2008)
New Revision: 71026

Modified:
   branches/JBPAPP_4_2_0_GA_CP/security/src/main/org/jboss/security/auth/spi/LdapExtLoginModule.java
Log:
JBPAPP-607
Merged differences in LdapExtLoginModule

Modified: branches/JBPAPP_4_2_0_GA_CP/security/src/main/org/jboss/security/auth/spi/LdapExtLoginModule.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/security/src/main/org/jboss/security/auth/spi/LdapExtLoginModule.java	2008-03-19 19:39:26 UTC (rev 71025)
+++ branches/JBPAPP_4_2_0_GA_CP/security/src/main/org/jboss/security/auth/spi/LdapExtLoginModule.java	2008-03-19 19:44:24 UTC (rev 71026)
@@ -24,6 +24,7 @@
 import java.security.Principal;
 import java.security.acl.Group;
 import java.util.Iterator;
+import java.util.StringTokenizer;
 import java.util.Map.Entry;
 import java.util.Properties;
 import javax.naming.Context;
@@ -140,6 +141,7 @@
    private static final String ROLE_ATTRIBUTE_ID_OPT = "roleAttributeID";
    private static final String ROLE_ATTRIBUTE_IS_DN_OPT = "roleAttributeIsDN";
    private static final String ROLE_NAME_ATTRIBUTE_ID_OPT = "roleNameAttributeID";
+   private static final String PARSE_ROLE_NAME_FROM_DN_OPT = "parseRoleNameFromDN";
 
    private static final String BIND_DN = "bindDN";
    private static final String BIND_CREDENTIAL = "bindCredential";
@@ -161,6 +163,7 @@
    protected String roleAttributeID;
    protected String roleNameAttributeID;
    protected boolean roleAttributeIsDN;
+   protected boolean parseRoleNameFromDN;
    protected int recursion = 0;
    protected int searchTimeLimit = 10000;
    protected int searchScope = SearchControls.SUBTREE_SCOPE;
@@ -293,6 +296,11 @@
       roleNameAttributeID = (String) options.get(ROLE_NAME_ATTRIBUTE_ID_OPT);
       if (roleNameAttributeID == null)
          roleNameAttributeID = "name";
+      
+      //JBAS-4619:Parse Role Name from DN
+      String parseRoleNameFromDNOption = (String) options.get(PARSE_ROLE_NAME_FROM_DN_OPT);
+      parseRoleNameFromDN = Boolean.valueOf(parseRoleNameFromDNOption).booleanValue();
+      
       rolesCtxDN = (String) options.get(ROLES_CTX_DN_OPT);
       String strRecursion = (String) options.get(ROLE_RECURSION);
       try
@@ -419,17 +427,24 @@
 	         String dn = canonicalize(sr.getName());
             if( nesting == 0 && roleAttributeIsDN && roleNameAttributeID != null )
             {
-               // Check the top context for role names
-               String[] attrNames = {roleNameAttributeID};
-               Attributes result2 = ctx.getAttributes(dn, attrNames);
-               Attribute roles2 = result2.get(roleNameAttributeID);
-               if( roles2 != null )
+               if(parseRoleNameFromDN)
                {
-                  for(int m = 0; m < roles2.size(); m ++)
+                  parseRole(dn);
+               }
+               else
+               { 
+                  // Check the top context for role names
+                  String[] attrNames = {roleNameAttributeID};
+                  Attributes result2 = ctx.getAttributes(dn, attrNames);
+                  Attribute roles2 = result2.get(roleNameAttributeID);
+                  if( roles2 != null )
                   {
-                     String roleName = (String) roles2.get(m);
-                     addRole(roleName);
-                  }
+                     for(int m = 0; m < roles2.size(); m ++)
+                     {
+                        String roleName = (String) roles2.get(m);
+                        addRole(roleName);
+                     }
+                  }  
                }
             }
 
@@ -442,6 +457,11 @@
 	            for (int n = 0; n < roles.size(); n ++)
 	            {
 	               String roleName = (String) roles.get(n);
+	               if(roleAttributeIsDN && parseRoleNameFromDN)
+	               { 
+	            	   parseRole(roleName); 
+	               }
+	               else
                   if (roleAttributeIsDN)
                   {
                      // Query the roleDN location for the value of roleNameAttributeID
@@ -572,4 +592,19 @@
          }
       }
    }
+   
+   private void parseRole(String dn)
+   {
+      StringTokenizer st = new StringTokenizer(dn, ",");
+      while(st != null && st.hasMoreTokens())
+      {
+         String keyVal = st.nextToken();
+         if(keyVal.indexOf(roleNameAttributeID) > -1)
+         { 
+            StringTokenizer kst = new StringTokenizer(keyVal,"=");
+            kst.nextToken();
+            addRole(kst.nextToken());
+         } 
+      }
+   }
 }




More information about the jboss-cvs-commits mailing list