in redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/role/DefaultLdapRoleMapper.java [768:835]
public boolean saveRole( String roleName, DirContext context )
throws MappingException
{
if ( hasRole( context, roleName ) )
{
return true;
}
String groupName = findGroupName( roleName );
if ( groupName == null )
{
if ( this.useDefaultRoleName )
{
groupName = roleName;
}
else
{
log.warn( "skip group creation as no mapping for roleName:'{}'", roleName );
return false;
}
}
List<String> allGroups = getAllGroups( context );
if ( allGroups.contains( groupName ) )
{
log.info( "group {} already exists for role.", groupName, roleName );
return false;
}
Attributes attributes = new BasicAttributes( true );
BasicAttribute objectClass = new BasicAttribute( "objectClass" );
objectClass.add( "top" );
objectClass.add( "groupOfUniqueNames" );
attributes.put( objectClass );
attributes.put( this.groupNameAttribute, groupName );
// attribute mandatory when created a group so add admin as default member
BasicAttribute basicAttribute = new BasicAttribute( getLdapGroupMemberAttribute( ) );
basicAttribute.add( this.userIdAttribute + "=admin," + getBaseDn( ) );
attributes.put( basicAttribute );
try
{
String dn = this.groupNameAttribute + "=" + groupName + "," + this.groupsDn;
context.createSubcontext( dn, attributes );
log.info( "created group with dn:'{}", dn );
return true;
}
catch ( NameAlreadyBoundException e )
{
log.info( "skip group '{}' creation as already exists", groupName );
return true;
}
catch ( LdapException e )
{
throw new MappingException( e.getMessage( ), e );
}
catch ( NamingException e )
{
throw new MappingException( e.getMessage( ), e );
}
}