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";

Reply via email to