Author: bdaw
Date: 2007-07-24 13:27:37 -0400 (Tue, 24 Jul 2007)
New Revision: 7834
Added:
branches/JBoss_Portal_Branch_2_6/identity/src/resources/example/portal-sample-local3.ldif
Modified:
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/helper/LDAPTools.java
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/IdentityTest.java
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/db/DBIdentityTestCase.java
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/ldap/LDAPIdentityTestCase.java
Log:
handle special character in userNames in LDAP
Modified:
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java 2007-07-22
13:31:58 UTC (rev 7833)
+++
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/LDAPUserModuleImpl.java 2007-07-24
17:27:37 UTC (rev 7834)
@@ -26,6 +26,7 @@
import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.NoSuchUserException;
import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.ldap.helper.LDAPTools;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
@@ -176,8 +177,11 @@
attrs.put(getPasswordAttributeId(), password);
- String dn = getUidAttributeID().concat("=").concat(userName);
+ String validUserName = LDAPTools.parseRfc2253Name(userName);
+
+ String dn = getUidAttributeID().concat("=").concat(validUserName);
+
log.debug("creating ldap entry for: " + dn + "; " + attrs);
ctx.createSubcontext(dn, attrs);
}
Modified:
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/helper/LDAPTools.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/helper/LDAPTools.java 2007-07-22
13:31:58 UTC (rev 7833)
+++
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/identity/ldap/helper/LDAPTools.java 2007-07-24
17:27:37 UTC (rev 7834)
@@ -55,4 +55,25 @@
return parts[1];
}
+
+ /**
+ * Simple encoding to make a name rfc 2253 compiliant. For now it just escapes the
special chars listed in rfc
+ * with backslash.
+ * @param name
+ * @return
+ */
+ public static String parseRfc2253Name(String name)
+ {
+ //TODO: fully cover 2253 encoding
+
+ //TODO: backslash
+ //name = name.replaceAll("\\","");
+ name = name.replaceAll(",","\\\\\\,");
+ name = name.replaceAll("\\+","\\\\\\+");
+ name = name.replaceAll("\"","\\\"");
+ name = name.replaceAll("<","\\\\\\<");
+ name = name.replaceAll(">","\\\\\\>");
+ name = name.replaceAll(";","\\\\\\;");
+ return name;
+ }
}
Modified:
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/IdentityTest.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/IdentityTest.java 2007-07-22
13:31:58 UTC (rev 7833)
+++
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/IdentityTest.java 2007-07-24
17:27:37 UTC (rev 7834)
@@ -397,6 +397,55 @@
ctx.commit();
}
+ public void testNonStandardUserNames() throws Exception
+ {
+ ctx.begin();
+
+ Role role = roleModule.createRole("TestRole", "DisplayName");
+
+ Set users = new HashSet();
+
+ User user = userModule.createUser("user, Test", "password");
+ users.add(user);
+ user = userModule.createUser("user1, Test", "password");
+ users.add(user);
+ user = userModule.createUser("user2, Test", "password");
+ users.add(user);
+
+ membershipModule.assignUsers(role, users);
+
+ //create names with RFC 2253 exceptions
+ userModule.createUser("test ++", "password");
+ userModule.createUser("test \"", "password");
+ //userModule.createUser("test \\", "password");
+ userModule.createUser("test <", "password");
+ userModule.createUser("test >", "password");
+ userModule.createUser("test ;", "password");
+
+ ctx.commit();
+
+ ctx.begin();
+
+ role = roleModule.findRoleByName("TestRole");
+
+ users = membershipModule.getUsers(role);
+
+ assertEquals(3, users.size());
+
+ assertNotNull(userModule.findUserByUserName("user, Test"));
+ assertNotNull(userModule.findUserByUserName("user1, Test"));
+ assertNotNull(userModule.findUserByUserName("user2, Test"));
+
+ assertNotNull(userModule.findUserByUserName("test ++"));
+ assertNotNull(userModule.findUserByUserName("test \""));
+ //assertNotNull(userModule.findUserByUserName("test \\"));
+ assertNotNull(userModule.findUserByUserName("test <"));
+ assertNotNull(userModule.findUserByUserName("test >"));
+ assertNotNull(userModule.findUserByUserName("test ;"));
+
+ ctx.commit();
+ }
+
public void testDynamicProperty() throws Exception
{
ctx.begin();
Modified:
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/db/DBIdentityTestCase.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/db/DBIdentityTestCase.java 2007-07-22
13:31:58 UTC (rev 7833)
+++
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/db/DBIdentityTestCase.java 2007-07-24
17:27:37 UTC (rev 7834)
@@ -127,6 +127,11 @@
utc.testFindUsers2();
}
+ public void testNonStandardUserNames() throws Exception
+ {
+ utc.testNonStandardUserNames();
+ }
+
public void testCreateUser() throws Exception
{
utc.testCreateUser();
Modified:
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/ldap/LDAPIdentityTestCase.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/ldap/LDAPIdentityTestCase.java 2007-07-22
13:31:58 UTC (rev 7833)
+++
branches/JBoss_Portal_Branch_2_6/identity/src/main/org/jboss/portal/test/identity/ldap/LDAPIdentityTestCase.java 2007-07-24
17:27:37 UTC (rev 7834)
@@ -122,6 +122,11 @@
utc.testFindUsers2();
}
+ public void testNonStandardUserNames() throws Exception
+ {
+ utc.testNonStandardUserNames();
+ }
+
public void testCreateUser() throws Exception
{
utc.testCreateUser();
Added:
branches/JBoss_Portal_Branch_2_6/identity/src/resources/example/portal-sample-local3.ldif
===================================================================
---
branches/JBoss_Portal_Branch_2_6/identity/src/resources/example/portal-sample-local3.ldif
(rev 0)
+++
branches/JBoss_Portal_Branch_2_6/identity/src/resources/example/portal-sample-local3.ldif 2007-07-24
17:27:37 UTC (rev 7834)
@@ -0,0 +1,157 @@
+dn: dc=example,dc=com
+objectclass: top
+objectclass: dcObject
+objectclass: organization
+dc: example
+o: example
+
+dn: dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: dcObject
+objectclass: organization
+o: portal
+dc: portal
+
+dn: o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organization
+o: test
+
+dn: ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: People
+
+
+dn: uid=admin,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: admin
+cn: Java Duke
+sn: Duke
+userPassword: admin
+mail: email(a)email.com
+
+dn: uid=user,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: user
+cn: user
+sn: Portal User
+userPassword: user
+mail: email(a)email.com
+
+dn: uid=jduke\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke, Duke
+cn: Java Duke
+sn: Duke
+userPassword: theduke
+mail: email(a)email.com
+
+dn: uid=jduke1\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke1, Duke
+cn: Java Duke1
+sn: Duke1
+userPassword: theduke
+mail: email(a)email.com
+
+
+dn: uid=jduke2\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke2, Duke
+cn: Java Duke2
+sn: Duke2
+userPassword: theduke
+mail: email(a)email.com
+
+dn: uid=jduke3\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke3, Duke
+cn: Java Duke3
+sn: Duke3
+userPassword: theduke
+mail: email(a)email.com
+
+dn: uid=jduke4\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: inetOrgPerson
+objectclass: person
+uid: jduke4, Duke
+cn: Java Duke4
+sn: Duke4
+userPassword: theduke
+mail: email(a)email.com
+
+dn: ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectclass: top
+objectclass: organizationalUnit
+ou: Roles
+
+dn: cn=Admin,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: Admin
+description: Portal admin role
+member: uid=admin,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=User,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: User
+description: Portal user role
+member: uid=admin,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=user,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke1\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke2\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke3\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke4\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=The\, Dukes,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: The, Dukes
+description: Portal user role
+member: uid=admin,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=user,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke1\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke2\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke3\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke4\, Duke,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=Echo,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: Echo
+description: the JBossAdmin group
+member: uid=jduke1,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke3,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke4,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=Echo1,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: top
+objectClass: groupOfNames
+cn: Echo1
+description: the JBossAdmin group 2
+member: uid=jduke2,ou=People,o=test,dc=portal,dc=example,dc=com
+member: uid=jduke3,ou=People,o=test,dc=portal,dc=example,dc=com
+
+dn: cn=TheDuke,ou=Roles,o=test,dc=portal,dc=example,dc=com
+objectClass: groupOfNames
+objectClass: top
+cn: TheDuke
+description: TheDuke role context
+member: uid=jduke,ou=People,o=test,dc=portal,dc=example,dc=com