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