{
if ( aliasDn.equals( normalizedAliasTargetDn ) )
{
String msg = I18n.err( I18n.ERR_223 );
ResultCodeEnum rc = ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM;
LdapNamingException e = new LdapNamingException( msg, rc );
e.setResolvedName( aliasDn );
throw e;
}
String msg = I18n.err( I18n.ERR_224, aliasTarget, aliasDn );
ResultCodeEnum rc = ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM;
LdapNamingException e = new LdapNamingException( msg, rc );
e.setResolvedName( aliasDn );
throw e;
}
/*
* Check For Aliases External To Naming Context
*
* id may be null but the alias may be to a valid entry in
* another namingContext. Such aliases are not allowed and we
* need to point it out to the user instead of saying the target
* does not exist when it potentially could outside of this upSuffix.
*/
if ( !normalizedAliasTargetDn.startsWith( normSuffix ) )
{
String msg = I18n.err( I18n.ERR_225, upSuffix.getName() );
ResultCodeEnum rc = ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM;
LdapNamingException e = new LdapNamingException( msg, rc );
e.setResolvedName( aliasDn );
throw e;
}
// L O O K U P T A R G E T I D
targetId = ndnIdx.forwardLookup( normalizedAliasTargetDn.toNormName() );
/*
* Check For Target Existence
*
* We do not allow the creation of inconsistent aliases. Aliases should
* not be broken links. If the target does not exist we start screaming
*/
if ( null == targetId )
{
// Complain about target not existing
String msg = I18n.err( I18n.ERR_581, aliasDn.getName(), aliasTarget );
ResultCodeEnum rc = ResultCodeEnum.ALIAS_PROBLEM;
LdapNamingException e = new LdapNamingException( msg, rc );
e.setResolvedName( aliasDn );
throw e;
}
/*
* Detect Direct Alias Chain Creation
*
* Rather than resusitate the target to test if it is an alias and fail
* due to chaing creation we use the alias index to determine if the
* target is an alias. Hence if the alias we are about to create points
* to another alias as its target in the aliasedObjectName attribute,
* then we have a situation where an alias chain is being created.
* Alias chaining is not allowed so we throw and exception.
*/
if ( null != aliasIdx.reverseLookup( targetId ) )
{
String msg = I18n.err( I18n.ERR_227 );
ResultCodeEnum rc = ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM;
LdapNamingException e = new LdapNamingException( msg, rc );
e.setResolvedName( aliasDn );
throw e;
}
// Add the alias to the simple alias index
aliasIdx.add( normalizedAliasTargetDn.getNormName(), aliasId );