in src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java [446:558]
List<SDSet> search( Role role, SDSet.SDType type ) throws FinderException
{
List<SDSet> sdList = new ArrayList<>();
LdapConnection ld = null;
String ssdRoot = getSdRoot( role.getContextId() );
String objectClass = SSD_OBJECT_CLASS_NM;
if ( type == SDSet.SDType.DYNAMIC )
{
objectClass = DSD_OBJECT_CLASS_NM;
}
try
{
String roleVal = encodeSafeText( role.getName(), GlobalIds.ROLE_LEN );
StringBuilder filterbuf = new StringBuilder();
filterbuf.append( GlobalIds.FILTER_PREFIX );
filterbuf.append( objectClass );
filterbuf.append( ")(" );
// Include any parents target role may have:
Set<String> roles = RoleUtil.getInstance().getAscendants( role.getName(), role.getContextId() );
if ( CollectionUtils.isNotEmpty( roles ) )
{
filterbuf.append( "|(" );
filterbuf.append( ROLES );
filterbuf.append( "=" );
filterbuf.append( roleVal );
filterbuf.append( ")" );
for ( String uRole : roles )
{
filterbuf.append( "(" );
filterbuf.append( ROLES );
filterbuf.append( "=" );
filterbuf.append( uRole );
filterbuf.append( ")" );
}
filterbuf.append( ")" );
}
else
{
filterbuf.append( ROLES );
filterbuf.append( "=" );
filterbuf.append( roleVal );
filterbuf.append( ")" );
}
filterbuf.append( ")" );
ld = getAdminConnection();
try ( SearchCursor searchResults = search( ld, ssdRoot,
SearchScope.SUBTREE, filterbuf.toString(), SD_SET_ATRS, false, Config.getInstance().getInt(GlobalIds.CONFIG_LDAP_MAX_BATCH_SIZE, GlobalIds.BATCH_SIZE ) ) )
{
long sequence = 0;
while ( searchResults.next() )
{
sdList.add( unloadLdapEntry( searchResults.getEntry(), sequence++ ) );
}
}
catch ( IOException e )
{
String error = "search role [" + role.getName() + "] type [" + type + "] caught IOException="
+ e.getMessage();
int errCode;
if ( type == SDSet.SDType.DYNAMIC )
{
errCode = GlobalErrIds.DSD_SEARCH_FAILED;
}
else
{
errCode = GlobalErrIds.SSD_SEARCH_FAILED;
}
throw new FinderException( errCode, error, e );
}
catch ( CursorException e )
{
String error = "search role [" + role.getName() + "] type [" + type + "] caught CursorException="
+ e.getMessage();
int errCode;
if ( type == SDSet.SDType.DYNAMIC )
{
errCode = GlobalErrIds.DSD_SEARCH_FAILED;
}
else
{
errCode = GlobalErrIds.SSD_SEARCH_FAILED;
}
throw new FinderException( errCode, error, e );
}
}
catch ( LdapException e )
{
String error = "search role [" + role.getName() + "] type [" + type + "] caught LdapException="
+ e;
int errCode;
if ( type == SDSet.SDType.DYNAMIC )
{
errCode = GlobalErrIds.DSD_SEARCH_FAILED;
}
else
{
errCode = GlobalErrIds.SSD_SEARCH_FAILED;
}
throw new FinderException( errCode, error, e );
}
finally
{
closeAdminConnection( ld );
}
return sdList;
}