Hi Team,

Please find the attached svn diffs created to resolve issue [1] and [2].
Please review and commit them.

[1] - https://wso2.org/jira/browse/IDENTITY-5551
[2] - https://wso2.org/jira/browse/IDENTITY-3457

Thanks,
Thanuja

-- 
*Thanuja Lakmal*
Senior Software Engineer
WSO2 Inc. http://wso2.com/
*lean.enterprise.middleware*
Mobile: +94715979891 +94758009992
Index: 
src/main/java/org/wso2/carbon/core/services/loggeduserinfo/LoggedUserInfoAdmin.java
===================================================================
--- 
src/main/java/org/wso2/carbon/core/services/loggeduserinfo/LoggedUserInfoAdmin.java
 (revision 219330)
+++ 
src/main/java/org/wso2/carbon/core/services/loggeduserinfo/LoggedUserInfoAdmin.java
 (working copy)
@@ -20,6 +20,7 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.CarbonConstants;
 import org.wso2.carbon.context.PrivilegedCarbonContext;
 import org.wso2.carbon.core.AbstractAdmin;
 import org.wso2.carbon.core.common.LoggedUserInfo;
@@ -48,13 +49,13 @@
             String userName = (String) request.getSession().getAttribute(
                     ServerConstants.USER_LOGGED_IN);
 
-            int index = userName.indexOf("/");
+            int index = userName.indexOf(CarbonConstants.DOMAIN_SEPARATOR);
             if (index < 0) {
                 String domainName = (String) request.getSession().getAttribute(
                         CarbonAuthenticationUtil.LOGGED_IN_DOMAIN);
 
                 if (domainName != null) {
-                    userName = domainName + "/" + userName;
+                    userName = domainName + CarbonConstants.DOMAIN_SEPARATOR + 
userName;
                 }
             }
             LoggedUserInfo loggedUserInfo = new LoggedUserInfo();
Index: src/main/java/org/wso2/carbon/user/core/UserCoreConstants.java
===================================================================
--- src/main/java/org/wso2/carbon/user/core/UserCoreConstants.java      
(revision 219323)
+++ src/main/java/org/wso2/carbon/user/core/UserCoreConstants.java      
(working copy)
@@ -17,6 +17,9 @@
 */
 package org.wso2.carbon.user.core;
 
+import org.apache.commons.lang.StringUtils;
+import org.wso2.carbon.base.ServerConfiguration;
+
 public class UserCoreConstants {
 
     public static final String DATA_SOURCE = "um.datasource";
@@ -62,8 +65,17 @@
 
     public static final String IS_USER_IN_ROLE_CACHE_IDENTIFIER = 
"@__isUserHasTheRole__@";
 
-    public static final String DOMAIN_SEPARATOR = "/";
+    public static final String DOMAIN_SEPARATOR;
 
+    static {
+        String userDomainSeparator = 
ServerConfiguration.getInstance().getFirstProperty("UserDomainSeparator");
+        if (!StringUtils.isEmpty(userDomainSeparator)) {
+            DOMAIN_SEPARATOR = userDomainSeparator.trim();
+        } else {
+            DOMAIN_SEPARATOR = "/";
+        }
+    }
+
     public static final String PRINCIPAL_USERNAME_SEPARATOR = "_";
 
     public static final String SHARED_ROLE_TENANT_SEPERATOR = 
"@SharedRoleSeperator@";
Index: 
src/main/java/org/wso2/carbon/user/core/ldap/ReadOnlyLDAPUserStoreManager.java
===================================================================
--- 
src/main/java/org/wso2/carbon/user/core/ldap/ReadOnlyLDAPUserStoreManager.java  
    (revision 219323)
+++ 
src/main/java/org/wso2/carbon/user/core/ldap/ReadOnlyLDAPUserStoreManager.java  
    (working copy)
@@ -41,7 +41,9 @@
 import org.wso2.carbon.user.core.util.UserCoreUtil;
 
 import javax.naming.AuthenticationException;
+import javax.naming.CompositeName;
 import javax.naming.InvalidNameException;
+import javax.naming.Name;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.PartialResultException;
@@ -1639,8 +1641,8 @@
                 Attributes userAttributes;
                 try {
                     // '\' and '"' characters need another level of escaping 
before searching
-                    userAttributes = 
dirContext.getAttributes(user.replace("\\\\", "\\\\\\")
-                            .replace("\\\"", "\\\\\""), returnedAttributes);
+                    userAttributes = dirContext.getAttributes(new 
CompositeName().add(user.replace("\\\\", "\\\\\\")
+                            .replace("\\\"", "\\\\\"")), returnedAttributes);
 
                     String displayName = null;
                     String userName = null;
@@ -2787,7 +2789,8 @@
                 if (debug) {
                     log.debug("Using DN: " + group);
                 }
-                Attributes groupAttributes = dirContext.getAttributes(group, 
returnedAttributes);
+                Attributes groupAttributes = dirContext.getAttributes(new 
CompositeName().add(group),
+                        returnedAttributes);
                 if (groupAttributes != null) {
                     Attribute groupAttribute = 
groupAttributes.get(groupNameAttribute);
                     if (groupAttribute != null) {
@@ -3079,10 +3082,12 @@
     /**
      * This method performs the additional level escaping for ldap search. In 
ldap search / and " characters
      * have to be escaped again
-     * @param dn
-     * @return
+     * @param dn DN
+     * @return composite name
+     * @throws InvalidNameException failed to build composite name
      */
-    private String escapeDNForSearch(String dn){
+    private Name escapeDNForSearch(String dn) throws InvalidNameException {
+
         boolean replaceEscapeCharacters = true;
 
         String replaceEscapeCharactersAtUserLoginString = realmConfig
@@ -3097,9 +3102,8 @@
             }
         }
         if (replaceEscapeCharacters) {
-            return dn.replace("\\\\", "\\\\\\").replace("\\\"", "\\\\\"");
-        } else {
-            return dn;
+            dn = dn.replace("\\\\", "\\\\\\").replace("\\\"", "\\\\\"");
         }
+        return new CompositeName().add(dn);
     }
 }
Index: 
src/main/java/org/wso2/carbon/user/core/ldap/ReadWriteLDAPUserStoreManager.java
===================================================================
--- 
src/main/java/org/wso2/carbon/user/core/ldap/ReadWriteLDAPUserStoreManager.java 
    (revision 219323)
+++ 
src/main/java/org/wso2/carbon/user/core/ldap/ReadWriteLDAPUserStoreManager.java 
    (working copy)
@@ -39,6 +39,8 @@
 import org.wso2.carbon.user.core.util.JNDIUtil;
 import org.wso2.carbon.user.core.util.UserCoreUtil;
 
+import javax.naming.CompositeName;
+import javax.naming.InvalidNameException;
 import javax.naming.Name;
 import javax.naming.NameParser;
 import javax.naming.NamingEnumeration;
@@ -523,8 +525,8 @@
                     searchFilter = ((LDAPRoleContext) 
context).getSearchFilter();
                     role = context.getRoleName();
 
-                    if (role.indexOf("/") > -1) {
-                        role = (role.split("/"))[1];
+                    if (role.indexOf(CarbonConstants.DOMAIN_SEPARATOR) > -1) {
+                        role = 
(role.split(CarbonConstants.DOMAIN_SEPARATOR))[1];
                     }
                     String grpSearchFilter = searchFilter.replace("?", 
escapeSpecialCharactersForFilter(role));
                     groupResults =
@@ -2242,10 +2244,11 @@
     /**
      * This method performs the additional level escaping for ldap search. In 
ldap search / and " characters
      * have to be escaped again
-     * @param dn
-     * @return
+     * @param dn DN
+     * @return composite name
+     * @throws InvalidNameException failed to build composite name
      */
-    private String escapeDNForSearch(String dn){
+    private Name escapeDNForSearch(String dn) throws InvalidNameException {
         boolean replaceEscapeCharacters = true;
 
         String replaceEscapeCharactersAtUserLoginString = realmConfig
@@ -2260,9 +2263,9 @@
             }
         }
         if (replaceEscapeCharacters) {
-            return dn.replace("\\\\", "\\\\\\").replace("\\\"", "\\\\\"");
-        } else {
-            return dn;
+            dn = dn.replace("\\\\", "\\\\\\").replace("\\\"", "\\\\\"");
         }
+
+        return new CompositeName().add(dn);
     }
 }
Index: src/main/java/org/wso2/carbon/CarbonConstants.java
===================================================================
--- src/main/java/org/wso2/carbon/CarbonConstants.java  (revision 219323)
+++ src/main/java/org/wso2/carbon/CarbonConstants.java  (working copy)
@@ -15,8 +15,10 @@
  */
 package org.wso2.carbon;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.base.ServerConfiguration;
 import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
 
 import java.io.File;
@@ -373,8 +375,17 @@
     public static final String LOGGED_USER = "logged-user";
 
     /*Constants used in handling multiple user store operations*/
-    public static final String DOMAIN_SEPARATOR = "/";
+    public static final String DOMAIN_SEPARATOR;
 
+    static {
+        String userDomainSeparator = 
ServerConfiguration.getInstance().getFirstProperty("UserDomainSeparator");
+        if (!StringUtils.isEmpty(userDomainSeparator)) {
+            DOMAIN_SEPARATOR = userDomainSeparator.trim();
+        } else {
+            DOMAIN_SEPARATOR = "/";
+        }
+    }
+
     public static final String NAME_COMBINER = "|";
 
     /*Constants used in handling shared group operations. There must be a 
separator to separate role name and tenant domain*/
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to