[user3@centos54 tmp]$ pwd
/home/user3/tmp
[user3@centos54 tmp]$ ls
ctldapmodule.tar.gz
[user3@centos54 tmp]$ mkdir ctldapmodule
[user3@centos54 tmp]$ cd ctldapmodule
[user3@centos54 ctldapmodule]$ tar zxf ../ctldapmodule.tar.gz
[user3@centos54 ctldapmodule]$ ls
build.xml examples README src
[user3@centos54 ctldapmodule]$ echo $JETTY_HOME
/home/user3/ctier/pkgs/jetty-6.1.14
[user3@centos54 ctldapmodule]$ . $CTL_BASE/etc/profile
[user3@centos54 ctldapmodule]$ $ANT_HOME/bin/ant
Buildfile: build.xml
init:
[mkdir] Created dir: /home/user3/tmp/ctldapmodule/build
compile:
[javac] Compiling 1 source file to /home/user3/tmp/ctldapmodule/build
dist:
[mkdir] Created dir: /home/user3/tmp/ctldapmodule/dist/lib
[jar] Building jar: /home/user3/tmp/ctldapmodule/dist/lib/ctsec-20100507.jar
BUILD SUCCESSFUL
Total time: 7 seconds
[user3@centos54 ctldapmodule]$ cp dist/lib/ctsec-20100507.jar $JETTY_HOME/lib
[user3@centos54 etc]$ diff ldap-loginModule.conf ldap-loginModule.conf.orig
2c2
< org.controltier.security.authorization.ControlTierLdapLoginModule required
---
> org.mortbay.jetty.plus.jaas.spi.LdapLoginModule required
20,22d19
< rolePrefix=""
< cacheDurationMillis="10000"
< reportStatistics="true";
[user3@centos54 etc]$ cat ldap-loginModule.conf
ldaploginmodule {
org.controltier.security.authorization.ControlTierLdapLoginModule required
debug="true"
contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
hostname="localhost"
port="389"
bindDn="cn=Manager,dc=controltier,dc=com"
bindPassword="secret"
authenticationMethod="simple"
forceBindingLogin="false"
userBaseDn="ou=users,dc=controltier,dc=com"
userRdnAttribute="cn"
userIdAttribute="cn"
userPasswordAttribute="userPassword"
userObjectClass="person"
roleBaseDn="ou=roles,dc=controltier,dc=com"
roleNameAttribute="cn"
roleMemberAttribute="uniqueMember"
roleObjectClass="groupOfUniqueNames"
rolePrefix=""
cacheDurationMillis="10000"
reportStatistics="true";
};
2010-05-07 10:16:22.269::WARN: No CallbackHandler configured: using DefaultCallbackHandler
2010-05-07 10:16:22.299::INFO: Login attempts: 1, Hits: 0, Ratio: 0%.
... the last line confirms that we hit the custom login module ... sweet!
[anthony@centos54 tmp]$ ldapdelete -c -x -H ldap://localhost:389/ -D "cn=Manager,dc=controltier,dc=com" -w secret "cn=architect, ou=roles,dc=controltier,dc=com"
[anthony@centos54 tmp]$ ldapdelete -c -x -H ldap://localhost:389/ -D "cn=Manager,dc=controltier,dc=com" -w secret "cn=admin, ou=roles,dc=controltier,dc=com"
[anthony@centos54 tmp]$ ldapdelete -c -x -H ldap://localhost:389/ -D "cn=Manager,dc=controltier,dc=com" -w secret "cn=user, ou=roles,dc=controltier,dc=com"
[anthony@centos54 tmp]$ ldapdelete -c -x -H ldap://localhost:389/ -D "cn=Manager,dc=controltier,dc=com" -w secret "cn=build, ou=roles,dc=controltier,dc=com"
[anthony@centos54 tmp]$ ldapdelete -c -x -H ldap://localhost:389/ -D "cn=Manager,dc=controltier,dc=com" -w secret "cn=deploy, ou=roles,dc=controltier,dc=com"
[anthony@centos54 tmp]$ ldapadd -c -x -H ldap://localhost:389/ -D "cn=Manager,dc=controltier,dc=com" -w secret -f prefix.ldif
adding new entry "dc=controltier,dc=com"
ldapadd: Already exists (68)
adding new entry "ou=users,dc=controltier,dc=com"
ldapadd: Already exists (68)
adding new entry "cn=default, ou=users,dc=controltier,dc=com"
ldapadd: Already exists (68)
adding new entry "cn=build, ou=users,dc=controltier,dc=com"
ldapadd: Already exists (68)
adding new entry "cn=deploy, ou=users,dc=controltier,dc=com"
ldapadd: Already exists (68)
adding new entry "ou=roles, dc=controltier,dc=com"
ldapadd: Already exists (68)
adding new entry "cn=ctier.architect, ou=roles,dc=controltier,dc=com"
adding new entry "cn=ctier.admin, ou=roles,dc=controltier,dc=com"
adding new entry "cn=ctier.user, ou=roles,dc=controltier,dc=com"
adding new entry "cn=ctier.build, ou=roles,dc=controltier,dc=com"
adding new entry "cn=ctier.deploy, ou=roles,dc=controltier,dc=com"
[user3@centos54 etc]$ diff ldap-loginModule.conf ldap-loginModule.conf.orig
2c2
< org.controltier.security.authorization.ControlTierLdapLoginModule required
---
> org.mortbay.jetty.plus.jaas.spi.LdapLoginModule required
19,22c19
< roleObjectClass="groupOfUniqueNames"
< rolePrefix="ctier."
< cacheDurationMillis="10000"
< reportStatistics="true";
---
> roleObjectClass="groupOfUniqueNames";
2010-05-07 10:57:47.104::WARN: No CallbackHandler configured: using DefaultCallbackHandler
2010-05-07 10:57:47.223::INFO: Login attempts: 3, Hits: 0, Ratio: 0%.
2010-05-07 10:57:47.234::INFO: Role for default: ctier.architect
2010-05-07 10:57:47.235::INFO: Role for default: ctier.admin
2010-05-07 10:57:47.235::INFO: Role for default: ctier.user
2010-05-07 10:57:47.235::INFO: Role for default: ctier.build
2010-05-07 10:57:47.235::INFO: Role for default: ctier.deploy
... (I'd put in a little logging to confirm which roles are configured for the user).
[user3@centos54 ctldapmodule]$ diff src/java/org/controltier/security/authorization/ControlTierLdapLoginModule.java src/java/org/controltier/security/authorization/ControlTierLdapLoginModule.java.orig
232a233,244
> if (_rolePrefix != null && !"".equalsIgnoreCase(_rolePrefix)) {
> List<String> newRoles = new ArrayList<String>();
>
> for (Object roleObj : roles) {
> String role = (String) roleObj;
> Log.info("Role for user " + username + ": " + role);
> newRoles.add(role.replace(_rolePrefix, ""));
> }
>
> roles.addAll(newRoles);
> }
>
375,382c387
< if (_rolePrefix != null && !"".equalsIgnoreCase(_rolePrefix)) {
< String role = (String) roles.next();
< Log.info("Role for user " + userDn + ": " + role);
< roleList.add(role.replace(_rolePrefix, ""));
< }
< else {
< roleList.add(roles.next());
< }
---
> roleList.add(roles.next());