Repository: archiva-redback-core Updated Branches: refs/heads/master 2d60bfe26 -> 694e1be55
Work with users defined in LDAP posixGroups. Add a configuration key LDAP_DN_ATTRIBUTE Project: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/repo Commit: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/commit/1e5c5675 Tree: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/tree/1e5c5675 Diff: http://git-wip-us.apache.org/repos/asf/archiva-redback-core/diff/1e5c5675 Branch: refs/heads/master Commit: 1e5c5675a71314af2fdd9e6d7fd0c70b321fc9c4 Parents: 2d60bfe Author: Jeroen Hoek <[email protected]> Authored: Tue Oct 7 13:18:41 2014 +0200 Committer: Jeroen Hoek <[email protected]> Committed: Tue Oct 7 13:18:41 2014 +0200 ---------------------------------------------------------------------- .../common/ldap/role/DefaultLdapRoleMapper.java | 36 ++++++++++++++------ .../common/ldap/user/LdapUserMapper.java | 2 ++ .../configuration/UserConfigurationKeys.java | 2 ++ 3 files changed, 30 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/1e5c5675/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapper.java ---------------------------------------------------------------------- diff --git a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapper.java b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapper.java index af616be..c63695b 100644 --- a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapper.java +++ b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapper.java @@ -97,6 +97,8 @@ public class DefaultLdapRoleMapper private boolean useDefaultRoleName = false; + private String dnAttr = "dn"; + /** * possible to user cn=beer or uid=beer or sn=beer etc * so make it configurable @@ -123,6 +125,8 @@ public class DefaultLdapRoleMapper this.userIdAttribute = userConf.getString( UserConfigurationKeys.LDAP_USER_ID_ATTRIBUTE, this.userIdAttribute ); this.ldapGroupMember = userConf.getString( UserConfigurationKeys.LDAP_GROUPS_MEMBER, this.ldapGroupMember ); + + this.dnAttr = userConf.getString( UserConfigurationKeys.LDAP_DN_ATTRIBUTE, this.dnAttr ); } public List<String> getAllGroups( DirContext context ) @@ -346,7 +350,7 @@ public class DefaultLdapRoleMapper searchControls.setDerefLinkFlag( true ); searchControls.setSearchScope( SearchControls.SUBTREE_SCOPE ); - String dn = null; + String groupEntry = null; try { //try to look the user up @@ -354,10 +358,10 @@ public class DefaultLdapRoleMapper if ( user instanceof LdapUser ) { LdapUser ldapUser = LdapUser.class.cast( user ); - Attribute dnAttribute = ldapUser.getOriginalAttributes().get( "distinguishedName" ); + Attribute dnAttribute = ldapUser.getOriginalAttributes().get( getLdapDnAttribute() ); if ( dnAttribute != null ) { - dn = String.class.cast( dnAttribute.get() ); + groupEntry = String.class.cast( dnAttribute.get() ); } } @@ -370,17 +374,25 @@ public class DefaultLdapRoleMapper { log.warn( "Failed to look up user {}. Computing distinguished name manually", username, e ); } - if ( dn == null ) + if ( groupEntry == null ) { - //failed to look up the user directly + //failed to look up the user's groupEntry directly StringBuilder builder = new StringBuilder(); - builder.append( this.userIdAttribute ).append( "=" ).append( username ).append( "," ).append( - getBaseDn() ); - dn = builder.toString(); + String posixGroup = "posixGroup"; + if (posixGroup.equals(getLdapGroupClass())) + { + builder.append( username ); + } + else + { + builder.append( this.userIdAttribute ).append( "=" ).append( username ).append( "," ).append( + getBaseDn() ); + } + groupEntry = builder.toString(); } String filter = new StringBuilder().append( "(&" ).append( "(objectClass=" + getLdapGroupClass() + ")" ).append( - "(" ).append( getLdapGroupMember() ).append( "=" ).append( dn ).append( ")" ).append( + "(" ).append( getLdapGroupMember() ).append( "=" ).append( groupEntry ).append( ")" ).append( ")" ).toString(); log.debug( "filter: {}", filter ); @@ -420,7 +432,7 @@ public class DefaultLdapRoleMapper userGroups.add( groupName ); } - else if ( allMembers.contains( dn ) ) + else if ( allMembers.contains( groupEntry ) ) { String groupName = searchResult.getName(); // cn=blabla we only want bla bla @@ -500,6 +512,10 @@ public class DefaultLdapRoleMapper return this.ldapGroupClass; } + public String getLdapDnAttribute() + { + return this.dnAttr; + } public boolean saveRole( String roleName, DirContext context ) throws MappingException http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/1e5c5675/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java ---------------------------------------------------------------------- diff --git a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java index 13ed451..fb7c05f 100644 --- a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java +++ b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java @@ -78,6 +78,8 @@ public class LdapUserMapper userConf.getString( UserConfigurationKeys.LDAP_MAPPER_USER_ATTRIBUTE_OBJECT_CLASS, userObjectClass ); userFilter = userConf.getConcatenatedList( UserConfigurationKeys.LDAP_MAPPER_USER_ATTRIBUTE_FILTER, userFilter ); maxResultCount = userConf.getInt( UserConfigurationKeys.LDAP_MAX_RESULT_COUNT, maxResultCount ); + + distinguishedNameAttribute = userConf.getString( UserConfigurationKeys.LDAP_DN_ATTRIBUTE, distinguishedNameAttribute ); } public Attributes getCreationAttributes( User user, boolean encodePasswordIfChanged ) http://git-wip-us.apache.org/repos/asf/archiva-redback-core/blob/1e5c5675/redback-configuration/src/main/java/org/apache/archiva/redback/configuration/UserConfigurationKeys.java ---------------------------------------------------------------------- diff --git a/redback-configuration/src/main/java/org/apache/archiva/redback/configuration/UserConfigurationKeys.java b/redback-configuration/src/main/java/org/apache/archiva/redback/configuration/UserConfigurationKeys.java index bd36592..e4541dd 100644 --- a/redback-configuration/src/main/java/org/apache/archiva/redback/configuration/UserConfigurationKeys.java +++ b/redback-configuration/src/main/java/org/apache/archiva/redback/configuration/UserConfigurationKeys.java @@ -74,6 +74,8 @@ public interface UserConfigurationKeys String LDAP_AUTHENTICATION_METHOD = "ldap.config.authentication.method"; + String LDAP_DN_ATTRIBUTE = "ldap.config.dn"; + String LDAP_BASEDN = "ldap.config.base.dn"; String LDAP_BINDDN = "ldap.config.bind.dn";
