You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2008/10/07 13:27:01 UTC
svn commit: r702434 [4/5] - in /directory: apacheds/trunk/
apacheds/trunk/all/
apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/
apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/state/
apached...
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java Tue Oct 7 04:26:55 2008
@@ -24,7 +24,6 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -287,7 +286,7 @@
}
- public Iterator<String> listSuffixes( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception
+ public Set<String> listSuffixes( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception
{
if ( IS_DEBUG )
{
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java Tue Oct 7 04:26:55 2008
@@ -25,7 +25,6 @@
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -135,11 +134,10 @@
filter.addNode( new EqualityNode<String>( SchemaConstants.OBJECT_CLASS_AT, new ClientStringValue(
SchemaConstants.GROUP_OF_UNIQUE_NAMES_OC ) ) );
- Iterator<String> suffixes = nexus.listSuffixes( null );
+ Set<String> suffixes = nexus.listSuffixes( null );
- while ( suffixes.hasNext() )
+ for ( String suffix:suffixes )
{
- String suffix = suffixes.next();
LdapDN baseDn = new LdapDN( suffix );
SearchControls ctls = new SearchControls();
ctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java Tue Oct 7 04:26:55 2008
@@ -55,9 +55,9 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
@@ -125,11 +125,10 @@
// search all naming contexts for access control subentenries
// generate ACITuple Arrays for each subentry
// add that subentry to the hash
- Iterator<String> suffixes = nexus.listSuffixes( null );
+ Set<String> suffixes = nexus.listSuffixes( null );
- while ( suffixes.hasNext() )
+ for ( String suffix:suffixes )
{
- String suffix = suffixes.next();
LdapDN baseDn = parseNormalized( suffix );
ExprNode filter = new EqualityNode<String>( SchemaConstants.OBJECT_CLASS_AT,
new ClientStringValue( SchemaConstants.ACCESS_CONTROL_SUBENTRY_OC ) );
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java Tue Oct 7 04:26:55 2008
@@ -48,7 +48,7 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import javax.naming.Context;
-import java.util.Iterator;
+import java.util.Set;
/**
@@ -166,7 +166,7 @@
}
- public Iterator<String> listSuffixes ( NextInterceptor next, ListSuffixOperationContext opContext )
+ public Set<String> listSuffixes ( NextInterceptor next, ListSuffixOperationContext opContext )
throws Exception
{
return next.listSuffixes( opContext );
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/Interceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/Interceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/Interceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/Interceptor.java Tue Oct 7 04:26:55 2008
@@ -46,7 +46,7 @@
import org.apache.directory.server.core.partition.PartitionNexus;
import org.apache.directory.shared.ldap.name.LdapDN;
-import java.util.Iterator;
+import java.util.Set;
/**
@@ -104,7 +104,7 @@
* {
* // transform deletion into modification.
* Attribute mark = new AttributeImpl( "entryDeleted", "true" );
- * nextInterceptor.modify( name, DirContext.REPLACE_ATTRIBUTE, mark );
+ * nextInterceptor.modify( name, DirIteratorContext.REPLACE_ATTRIBUTE, mark );
* }
* </pre>
*
@@ -156,7 +156,7 @@
/**
* Filters {@link PartitionNexus#listSuffixes( ListSuffixOperationContext )} call.
*/
- Iterator<String> listSuffixes( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception;
+ Set<String> listSuffixes( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception;
/**
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java Tue Oct 7 04:26:55 2008
@@ -22,9 +22,9 @@
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.directory.server.core.DirectoryService;
import org.apache.directory.server.core.entry.ClonedServerEntry;
@@ -52,6 +52,7 @@
import org.apache.directory.server.core.invocation.InvocationStack;
import org.apache.directory.server.core.partition.ByPassConstants;
import org.apache.directory.server.core.partition.PartitionNexus;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.name.LdapDN;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -118,7 +119,7 @@
}
- public Iterator<String> listSuffixes( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception
+ public Set<String> listSuffixes( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception
{
return nexus.listSuffixes( opContext );
}
@@ -623,7 +624,7 @@
}
- public Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
+ public Set<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
{
Entry entry = getStartingEntry();
Interceptor head = entry.interceptor;
@@ -706,7 +707,7 @@
{
try
{
- opContext.setEntry( opContext.getSession().lookup( opContext.getDn() ) );
+ opContext.setEntry( opContext.getSession().lookup( opContext.getDn(), SchemaConstants.ALL_OPERATIONAL_ATTRIBUTES_ARRAY ) );
}
catch ( Exception e )
{
@@ -1138,7 +1139,7 @@
}
- public Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
+ public Set<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
{
Entry next = getNextEntry();
Interceptor interceptor = next.interceptor;
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/NextInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/NextInterceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/NextInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/NextInterceptor.java Tue Oct 7 04:26:55 2008
@@ -20,7 +20,7 @@
package org.apache.directory.server.core.interceptor;
-import java.util.Iterator;
+import java.util.Set;
import org.apache.directory.server.core.entry.ClonedServerEntry;
import org.apache.directory.server.core.filtering.EntryFilteringCursor;
@@ -84,7 +84,7 @@
/**
* Calls the next interceptor's {@link Interceptor#listSuffixes( NextInterceptor, ListSuffixOperationContext )}.
*/
- Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception;
+ Set<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception;
/**
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AbstractOperationContext.java Tue Oct 7 04:26:55 2008
@@ -64,12 +64,15 @@
protected LdapPrincipal authorizedPrincipal;
+ /** The core session */
protected CoreSession session;
protected OperationContext next;
protected OperationContext previous;
+ /** A flag used to tell if we should consider referrals as standard entries */
+ protected boolean throwReferral;
/**
* Creates a new instance of AbstractOperationContext.
@@ -89,6 +92,10 @@
{
this.dn = dn;
this.session = session;
+
+ // The flag is set to ignore, so that the revert operation can act on
+ // the entries, even if they are referrals.
+ ignoreReferral();
}
@@ -422,4 +429,40 @@
{
return entry;
}
+
+
+ /**
+ * Set the throwReferral flag to true
+ */
+ public void throwReferral()
+ {
+ throwReferral = true;
+ }
+
+
+ /**
+ * @return <code>true</code> if the referrals are thrown
+ */
+ public boolean isReferralThrown()
+ {
+ return throwReferral;
+ }
+
+
+ /**
+ * Set the throwReferral flag to false
+ */
+ public void ignoreReferral()
+ {
+ throwReferral = false;
+ }
+
+
+ /**
+ * @return <code>true</code> if the referrals are ignored
+ */
+ public boolean isReferralIgnored()
+ {
+ return !throwReferral;
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/AddOperationContext.java Tue Oct 7 04:26:55 2008
@@ -26,6 +26,7 @@
import org.apache.directory.server.core.entry.ServerEntry;
import org.apache.directory.shared.ldap.message.AddRequest;
import org.apache.directory.shared.ldap.message.MessageTypeEnum;
+import org.apache.directory.shared.ldap.message.control.ManageDsaITControl;
import org.apache.directory.shared.ldap.name.LdapDN;
@@ -91,10 +92,19 @@
public AddOperationContext( CoreSession session, AddRequest addRequest ) throws Exception
{
super( session );
- this.entry = new ClonedServerEntry(
+ entry = new ClonedServerEntry(
new DefaultServerEntry( session.getDirectoryService().getRegistries(), addRequest.getEntry() ) );
- this.dn = addRequest.getEntry().getDn();
- this.requestControls = addRequest.getControls();
+ dn = addRequest.getEntry().getDn();
+ requestControls = addRequest.getControls();
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/BindOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/BindOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/BindOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/BindOperationContext.java Tue Oct 7 04:26:55 2008
@@ -516,4 +516,40 @@
{
this.entry = entry;
}
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void throwReferral()
+ {
+ throw new NotImplementedException( " The throwReferral method is not implemented for a Bind operation" );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isReferralThrown()
+ {
+ throw new NotImplementedException( " The isReferralThrown method is not implemented for a Bind operation" );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void ignoreReferral()
+ {
+ throw new NotImplementedException( " The ignoreReferral method is not implemented for a Bind operation" );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isReferralIgnored()
+ {
+ throw new NotImplementedException( " The isReferralIgnored method is not implemented for a Bind operation" );
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java Tue Oct 7 04:26:55 2008
@@ -21,8 +21,12 @@
import org.apache.directory.server.core.CoreSession;
+import org.apache.directory.shared.ldap.entry.Value;
+import org.apache.directory.shared.ldap.entry.client.ClientBinaryValue;
+import org.apache.directory.shared.ldap.entry.client.ClientStringValue;
import org.apache.directory.shared.ldap.message.CompareRequest;
import org.apache.directory.shared.ldap.message.MessageTypeEnum;
+import org.apache.directory.shared.ldap.message.control.ManageDsaITControl;
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.util.StringTools;
@@ -40,7 +44,7 @@
private String oid;
/** The value to be compared */
- private Object value;
+ private Value<?> value;
/**
@@ -94,7 +98,7 @@
* Creates a new instance of LookupOperationContext.
*
*/
- public CompareOperationContext( CoreSession session, LdapDN dn, String oid, Object value )
+ public CompareOperationContext( CoreSession session, LdapDN dn, String oid, Value<?> value )
{
super( session, dn );
this.oid = oid;
@@ -108,6 +112,15 @@
this.oid = compareRequest.getAttributeId();
this.value = compareRequest.getAssertionValue();
this.requestControls = compareRequest.getControls();
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
@@ -143,7 +156,7 @@
* Set the value to compare
* @param value The value to compare
*/
- public void setValue( Object value )
+ public void setValue( Value<?> value )
{
this.value = value;
}
@@ -166,10 +179,10 @@
return "CompareContext for DN '" + getDn().getUpName() + "'" +
( ( oid != null ) ? ", oid : <" + oid + ">" : "" ) +
( ( value != null ) ? ", value :'" +
- ( ( value instanceof String ) ?
- value :
- ( ( value instanceof byte[] ) ?
- StringTools.dumpBytes( (byte[])value ) :
+ ( ( value instanceof ClientStringValue ) ?
+ ((ClientStringValue)value).get() :
+ ( ( value instanceof ClientBinaryValue ) ?
+ StringTools.dumpBytes( ((ClientBinaryValue)value).getReference() ) :
"unknown value type" ) )
+ "'"
: "" );
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/DeleteOperationContext.java Tue Oct 7 04:26:55 2008
@@ -24,6 +24,7 @@
import org.apache.directory.server.core.entry.ClonedServerEntry;
import org.apache.directory.shared.ldap.message.DeleteRequest;
import org.apache.directory.shared.ldap.message.MessageTypeEnum;
+import org.apache.directory.shared.ldap.message.control.ManageDsaITControl;
import org.apache.directory.shared.ldap.name.LdapDN;
@@ -66,7 +67,16 @@
public DeleteOperationContext( CoreSession session, DeleteRequest deleteRequest )
{
super( session, deleteRequest.getName() );
- this.requestControls = deleteRequest.getControls();
+ requestControls = deleteRequest.getControls();
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java Tue Oct 7 04:26:55 2008
@@ -36,6 +36,7 @@
import org.apache.directory.shared.ldap.entry.client.ClientModification;
import org.apache.directory.shared.ldap.message.MessageTypeEnum;
import org.apache.directory.shared.ldap.message.ModifyRequest;
+import org.apache.directory.shared.ldap.message.control.ManageDsaITControl;
import org.apache.directory.shared.ldap.name.LdapDN;
@@ -83,10 +84,21 @@
public ModifyOperationContext( CoreSession session, ModifyRequest modifyRequest ) throws Exception
{
super( session, modifyRequest.getName() );
- this.modItems = ServerEntryUtils.toServerModification(
+
+ modItems = ServerEntryUtils.toServerModification(
modifyRequest.getModificationItems().toArray( new ClientModification[0]),
session.getDirectoryService().getRegistries().getAttributeTypeRegistry() );
- this.requestControls = modifyRequest.getControls();
+
+ requestControls = modifyRequest.getControls();
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveAndRenameOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveAndRenameOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveAndRenameOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveAndRenameOperationContext.java Tue Oct 7 04:26:55 2008
@@ -22,6 +22,7 @@
import org.apache.directory.server.core.CoreSession;
import org.apache.directory.shared.ldap.message.ModifyDnRequest;
+import org.apache.directory.shared.ldap.message.control.ManageDsaITControl;
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.name.Rdn;
@@ -75,6 +76,15 @@
{
throw new IllegalStateException( "NewSuperior must not be null: " + modifyDnRequest );
}
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/MoveOperationContext.java Tue Oct 7 04:26:55 2008
@@ -23,6 +23,7 @@
import org.apache.directory.server.core.CoreSession;
import org.apache.directory.shared.ldap.message.MessageTypeEnum;
import org.apache.directory.shared.ldap.message.ModifyDnRequest;
+import org.apache.directory.shared.ldap.message.control.ManageDsaITControl;
import org.apache.directory.shared.ldap.name.LdapDN;
@@ -69,10 +70,20 @@
}
this.requestControls = modifyDnRequest.getControls();
+
if ( modifyDnRequest.getNewRdn() != null )
{
throw new IllegalArgumentException( modifyDnRequest + " represents a move and rename operation." );
}
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/OperationContext.java Tue Oct 7 04:26:55 2008
@@ -324,8 +324,26 @@
boolean hasEntry( LdapDN dn, Collection<String> byPass ) throws Exception;
-// AddOperationContext newAddContext( ServerEntry entry );
+ /**
+ * Set the throwReferral flag to true
+ */
+ void throwReferral();
-// void add( AddOperationContext addContext ) throws Exception;
+ /**
+ * @return <code>true</code> if the referrals are thrown
+ */
+ boolean isReferralThrown();
+
+
+ /**
+ * Set the throwReferral flag to false
+ */
+ void ignoreReferral();
+
+
+ /**
+ * @return <code>true</code> if the referrals are ignored
+ */
+ boolean isReferralIgnored();
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/RenameOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/RenameOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/RenameOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/RenameOperationContext.java Tue Oct 7 04:26:55 2008
@@ -24,6 +24,7 @@
import org.apache.directory.server.core.entry.ClonedServerEntry;
import org.apache.directory.shared.ldap.message.MessageTypeEnum;
import org.apache.directory.shared.ldap.message.ModifyDnRequest;
+import org.apache.directory.shared.ldap.message.control.ManageDsaITControl;
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.name.Rdn;
@@ -88,6 +89,15 @@
this.delOldDn = modifyDnRequest.getDeleteOldRdn();
this.requestControls = modifyDnRequest.getControls();
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/SearchOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/SearchOperationContext.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/SearchOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/SearchOperationContext.java Tue Oct 7 04:26:55 2008
@@ -76,6 +76,15 @@
this.timeLimit = searchRequest.getTimeLimit();
this.noAttributes = searchRequest.getTypesOnly();
setReturningAttributes( searchRequest.getAttributes() );
+
+ if ( requestControls.containsKey( ManageDsaITControl.CONTROL_OID ) )
+ {
+ ignoreReferral();
+ }
+ else
+ {
+ throwReferral();
+ }
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java Tue Oct 7 04:26:55 2008
@@ -312,7 +312,7 @@
{
filterOperationalAttributes( result );
}
- else
+ else if ( ( opContext.getAllOperational() == null ) || ( opContext.getAllOperational() == false ) )
{
filter( opContext, result );
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java Tue Oct 7 04:26:55 2008
@@ -664,6 +664,7 @@
// Update the partition tree
partitionLookupTree.remove( partition );
partitions.remove( key );
+ partition.destroy();
}
@@ -727,9 +728,9 @@
/**
* @see PartitionNexus#listSuffixes( ListSuffixOperationContext )
*/
- public Iterator<String> listSuffixes ( ListSuffixOperationContext emptyContext ) throws Exception
+ public Set<String> listSuffixes( ListSuffixOperationContext emptyContext ) throws Exception
{
- return Collections.unmodifiableSet( partitions.keySet() ).iterator();
+ return Collections.unmodifiableSet( partitions.keySet() );
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexus.java Tue Oct 7 04:26:55 2008
@@ -21,7 +21,6 @@
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -237,7 +236,7 @@
* @return Iteration over ContextPartition suffix names as Names.
* @throws Exception if there are any problems
*/
- public abstract Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception;
+ public abstract Set<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception;
/**
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexusProxy.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexusProxy.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexusProxy.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/partition/PartitionNexusProxy.java Tue Oct 7 04:26:55 2008
@@ -21,7 +21,6 @@
import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -276,13 +275,13 @@
}
- public Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
+ public Set<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
{
return listSuffixes( opContext, null );
}
- public Iterator<String> listSuffixes( ListSuffixOperationContext opContext, Collection<String> byPassed ) throws Exception
+ public Set<String> listSuffixes( ListSuffixOperationContext opContext, Collection<String> byPassed ) throws Exception
{
ensureStarted();
opContext.setByPassed( byPassed );
Added: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java?rev=702434&view=auto
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java (added)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/referral/ReferralInterceptor.java Tue Oct 7 04:26:55 2008
@@ -0,0 +1,439 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.core.referral;
+
+
+
+import org.apache.directory.server.core.DirectoryService;
+import org.apache.directory.server.core.ReferralManager;
+import org.apache.directory.server.core.ReferralManagerImpl;
+import org.apache.directory.server.core.entry.ServerEntry;
+import org.apache.directory.server.core.entry.ServerStringValue;
+import org.apache.directory.server.core.interceptor.BaseInterceptor;
+import org.apache.directory.server.core.interceptor.NextInterceptor;
+import org.apache.directory.server.core.interceptor.context.AddOperationContext;
+import org.apache.directory.server.core.interceptor.context.DeleteOperationContext;
+import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.core.interceptor.context.ModifyOperationContext;
+import org.apache.directory.server.core.partition.PartitionNexus;
+import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
+import org.apache.directory.server.schema.registries.Registries;
+import org.apache.directory.shared.ldap.codec.util.LdapURLEncodingException;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.Value;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.util.LdapURL;
+import org.apache.directory.shared.ldap.util.StringTools;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.SearchControls;
+
+
+/**
+ * An service which is responsible referral handling behavoirs. It manages
+ * referral handling behavoir when the {@link Context#REFERRAL} is implicitly
+ * or explicitly set to "ignore", when set to "throw" and when set to "follow".
+ *
+ * @org.apache.xbean.XBean
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class ReferralInterceptor extends BaseInterceptor
+{
+ private static final Logger LOG = LoggerFactory.getLogger( ReferralInterceptor.class );
+
+ /** The directoryService */
+ private DirectoryService directoryService;
+
+ private PartitionNexus nexus;
+
+ /** The attributeType registry */
+ private AttributeTypeRegistry atRegistry;
+
+ /** The global registries */
+ private Registries registries;
+
+ /** The referralManager */
+ private ReferralManager referralManager;
+
+ /** A normalized form for the SubschemaSubentry DN */
+ private String subschemaSubentryDnNorm;
+
+
+ static private void checkRefAttributeValue( Value<?> value ) throws NamingException, LdapURLEncodingException
+ {
+ ServerStringValue ref = ( ServerStringValue ) value;
+
+ String refVal = ref.get();
+
+ LdapURL ldapUrl = new LdapURL( refVal );
+
+ // We have a LDAP URL, we have to check that :
+ // - we don't have scope specifier
+ // - we don't have filters
+ // - we don't have attribute description list
+ // - we don't have extensions
+ // - the DN is not empty
+
+ if ( ldapUrl.getScope() != SearchControls.OBJECT_SCOPE )
+ {
+ // This is the default value if we don't have any scope
+ // Let's assume that it's incorrect if we get something
+ // else in the LdapURL
+ String message = "An LDAPURL should not contains a scope";
+ LOG.error( message );
+ throw new NamingException( message );
+ }
+
+ if ( !StringTools.isEmpty( ldapUrl.getFilter() ) )
+ {
+ String message = "An LDAPURL should not contains filters";
+ LOG.error( message );
+ throw new NamingException( message );
+ }
+
+ if ( ( ldapUrl.getAttributes() != null ) && ( ldapUrl.getAttributes().size() != 0 ) )
+ {
+ String message = "An LDAPURL should not contains any description attribute list";
+ LOG.error( message );
+ throw new NamingException( message );
+ }
+
+ if ( ( ldapUrl.getExtensions() != null ) && ( ldapUrl.getExtensions().size() != 0 ) )
+ {
+ String message = "An LDAPURL should not contains any extension";
+ LOG.error( message );
+ throw new NamingException( message );
+ }
+
+ if ( ( ldapUrl.getExtensions() != null ) && ( ldapUrl.getExtensions().size() != 0 ) )
+ {
+ String message = "An LDAPURL should not contains any critical extension";
+ LOG.error( message );
+ throw new NamingException( message );
+ }
+
+ LdapDN dn = ldapUrl.getDn();
+
+ if ( ( dn == null ) || dn.isEmpty() )
+ {
+ String message = "An LDAPURL should contains a non-empty DN";
+ LOG.error( message );
+ throw new NamingException( message );
+ }
+ }
+
+
+ static private boolean isReferral( ServerEntry entry ) throws NamingException
+ {
+ EntryAttribute oc = entry.get( SchemaConstants.OBJECT_CLASS_AT );
+
+ if ( oc == null )
+ {
+ LOG.warn( "could not find objectClass attribute in entry: " + entry );
+ return false;
+ }
+
+ if ( !oc.contains( SchemaConstants.REFERRAL_OC ) )
+ {
+ return false;
+ }
+ else
+ {
+ // We have a referral ObjectClass, let's check that the ref is
+ // valid, accordingly to the RFC
+
+ // Get the 'ref' attributeType
+ EntryAttribute refAttr = entry.get( SchemaConstants.REF_AT );
+
+ if ( refAttr == null )
+ {
+ // very unlikely, as we have already checked the entry in SchemaInterceptor
+ String message = "An entry with a 'referral' ObjectClass must contains a 'ref' Attribute";
+ LOG.error( message );
+ throw new NamingException( message );
+ }
+
+ for ( Value<?> value : refAttr )
+ {
+ try
+ {
+ checkRefAttributeValue( value );
+ }
+ catch ( LdapURLEncodingException luee )
+ {
+ // Either the URL is invalid, or it's not a LDAP URL.
+ // we will just ignore this LdapURL.
+ }
+ }
+
+ return true;
+ }
+ }
+
+
+ public void init( DirectoryService directoryService ) throws Exception
+ {
+ nexus = directoryService.getPartitionNexus();
+ registries = directoryService.getRegistries();
+ atRegistry = registries.getAttributeTypeRegistry();
+ this.directoryService = directoryService;
+
+ // Initialize the referralManager
+ referralManager = new ReferralManagerImpl( directoryService );
+ directoryService.setReferralManager( referralManager );
+
+ Value<?> subschemaSubentry = nexus.getRootDSE( null ).get( SchemaConstants.SUBSCHEMA_SUBENTRY_AT ).get();
+ LdapDN subschemaSubentryDn = new LdapDN( ( String ) ( subschemaSubentry.get() ) );
+ subschemaSubentryDn.normalize( atRegistry.getNormalizerMapping() );
+ subschemaSubentryDnNorm = subschemaSubentryDn.getNormName();
+ }
+
+
+ /**
+ * Add an entry into the server. We have 3 cases :
+ * (1) The entry does not have any parent referral and is not a referral itself
+ * (2) The entry does not have any parent referral and is a referral itself
+ * (3) The entry has a parent referral
+ *
+ * Case (1) is easy : we inject the entry into the server and we are done.
+ * Case (2) is the same as case (1), but we have to update the referral manager.
+ * Case (3) is handled by the LdapProcotol handler, as we have to return a
+ * LdapResult containing a list of this entry's parent's referrals URL, if the
+ * ManageDSAIT control is not present, or the parent's entry if the control
+ * is present.
+ *
+ * Of course, if the entry already exists, nothing will be done, as we will get an
+ * entryAlreadyExists error.
+ *
+ */
+ public void add( NextInterceptor next, AddOperationContext opContext ) throws Exception
+ {
+ ServerEntry entry = opContext.getEntry();
+
+ // Check if the entry is a referral itself
+ boolean isReferral = isReferral( entry );
+
+ // We add the entry into the server
+ next.add( opContext );
+
+ // If the addition is successful, we update the referralManager
+ if ( isReferral )
+ {
+ // We have to add it to the referralManager
+ referralManager.lockWrite();
+
+ referralManager.addReferral( entry );
+
+ referralManager.unlock();
+ }
+
+ }
+
+
+ /**
+ * Delete an entry in the server. We have 4 cases :
+ * (1) the entry is not a referral and does not have a parent referral
+ * (2) the entry is not a referral but has a parent referral
+ * (3) the entry is a referral
+ *
+ * Case (1) is handled by removing the entry from the server
+ * In case (2), we return an exception build using the parent referral
+ * For case(3), we remove the entry from the server and remove the referral
+ * from the referral manager.
+ *
+ * If the entry does not exist in the server, we will get a NoSuchObject error
+ */
+ public void delete( NextInterceptor next, DeleteOperationContext opContext ) throws Exception
+ {
+ ServerEntry entry = opContext.getEntry();
+
+ // First delete the entry into the server
+ next.delete( opContext );
+
+ // Check if the entry exists and is a referral itself
+ // If so, we have to update the referralManager
+ if ( ( entry != null ) && isReferral( entry ) )
+ {
+ // We have to remove it from the referralManager
+ referralManager.lockWrite();
+
+ referralManager.removeReferral( entry );
+
+ referralManager.unlock();
+ }
+ }
+
+
+ /*
+ public void move( NextInterceptor next, MoveOperationContext opContext ) throws Exception
+ {
+ LdapDN oldName = opContext.getDn();
+
+ LdapDN newName = ( LdapDN ) opContext.getParent().clone();
+ newName.add( oldName.get( oldName.size() - 1 ) );
+
+ next.move( opContext );
+
+ // Update the referralManager
+ LookupOperationContext lookupContext = new LookupOperationContext( opContext.getSession(), newName );
+
+ ServerEntry newEntry = nexus.lookup( lookupContext );
+
+ referralManager.lockWrite();
+
+ referralManager.addReferral( newEntry );
+ referralManager.removeReferral( opContext.getEntry() );
+
+ referralManager.unlock();
+ }
+
+
+ public void moveAndRename( NextInterceptor next, MoveAndRenameOperationContext opContext ) throws Exception
+ {
+ LdapDN newName = ( LdapDN ) opContext.getParent().clone();
+ newName.add( opContext.getNewRdn() );
+
+ next.moveAndRename( opContext );
+
+ // Update the referralManager
+ LookupOperationContext lookupContext = new LookupOperationContext( opContext.getSession(), newName );
+
+ ServerEntry newEntry = nexus.lookup( lookupContext );
+
+ referralManager.lockWrite();
+
+ referralManager.addReferral( newEntry );
+ referralManager.removeReferral( opContext.getEntry() );
+
+ referralManager.unlock();
+ }
+
+
+ public void rename( NextInterceptor next, RenameOperationContext opContext ) throws Exception
+ {
+ LdapDN oldName = opContext.getDn();
+
+ LdapDN newName = ( LdapDN ) oldName.clone();
+ newName.remove( oldName.size() - 1 );
+
+ newName.add( opContext.getNewRdn() );
+
+ next.rename( opContext );
+
+ // Update the referralManager
+ LookupOperationContext lookupContext = new LookupOperationContext( opContext.getSession(), newName );
+
+ ServerEntry newEntry = nexus.lookup( lookupContext );
+
+ referralManager.lockWrite();
+
+ referralManager.addReferral( newEntry );
+ referralManager.removeReferral( opContext.getEntry() );
+
+ referralManager.unlock();
+ }
+ */
+
+ /**
+ * Modify an entry in the server.
+ */
+ public void modify( NextInterceptor next, ModifyOperationContext opContext ) throws Exception
+ {
+ LdapDN name = opContext.getDn();
+
+ // handle a normal modify without following referrals
+ next.modify( opContext );
+
+ // Check if we are trying to modify the schema or the rootDSE,
+ // if so, we don't modify the referralManager
+ if ( ( name == LdapDN.EMPTY_LDAPDN ) || ( subschemaSubentryDnNorm.equals( name.getNormName() ) ) )
+ {
+ // Do nothing
+ return;
+ }
+
+ // Update the referralManager. We have to read the entry again
+ // as it has been modified, before updating the ReferralManager
+ // TODO: this can be spare, as we build the entry later.
+ // But we will have to store the modified entry into the opContext
+ LookupOperationContext lookupContext = new LookupOperationContext( opContext.getSession(), name );
+
+ ServerEntry newEntry = nexus.lookup( lookupContext );
+
+ // Check that we have the entry, just in case
+ // TODO : entries should be locked until the operation is done on it.
+ if ( newEntry != null )
+ {
+ referralManager.lockWrite();
+
+ if ( referralManager.isReferral( newEntry.getDn() ) )
+ {
+ referralManager.removeReferral( opContext.getEntry() );
+ referralManager.addReferral( newEntry );
+ }
+
+ referralManager.unlock();
+ }
+ }
+
+
+ /**
+ * When adding a new context partition, we have to update the referralManager
+ * by injecting all the new referrals into it. This is done using the init()
+ * method of the referralManager.
+ *
+ public void addContextPartition( NextInterceptor next, AddContextPartitionOperationContext opContext )
+ throws Exception
+ {
+ // First, inject the partition
+ next.addContextPartition( opContext );
+
+ Partition partition = opContext.getPartition();
+ LdapDN suffix = partition.getSuffixDn();
+
+ // add referrals immediately after adding the new partition
+ referralManager.init( directoryService, new String[]{ suffix.getNormName() } );
+ }
+
+
+ /**
+ * Remove a partion's referrals from the server. We have to first
+ * clear the referrals manager from all of this partition's referrals,
+ * then we can delete the partition.
+ *
+ public void removeContextPartition( NextInterceptor next, RemoveContextPartitionOperationContext opContext )
+ throws Exception
+ {
+ // get the partition suffix
+ LdapDN suffix = opContext.getDn();
+
+ // remove referrals immediately before removing the partition
+ referralManager.remove( directoryService, suffix );
+
+ // And remove the partition from the server
+ next.removeContextPartition( opContext );
+ }*/
+}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java Tue Oct 7 04:26:55 2008
@@ -21,8 +21,8 @@
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import javax.naming.NamingException;
@@ -183,13 +183,13 @@
// TODO - why is this an operation???? Why can't we just list these damn things
// who went stupid crazy making everything into a damn operation !!!! grrrr
- Iterator<String> suffixes =
+ Set<String> suffixes =
directoryService.getPartitionNexus().listSuffixes(
new ListSuffixOperationContext( directoryService.getAdminSession() ) );
- while ( suffixes.hasNext() )
+ for ( String suffix:suffixes )
{
- LdapDN dn = new LdapDN( suffixes.next() );
+ LdapDN dn = new LdapDN( suffix );
dn.normalize( directoryService.getRegistries().getAttributeTypeRegistry().getNormalizerMapping() );
namingContexts.add( dn );
}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java Tue Oct 7 04:26:55 2008
@@ -84,6 +84,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
@@ -157,7 +158,7 @@
evaluator = new SubtreeEvaluator( oidRegistry, atRegistry );
// prepare to find all subentries in all namingContexts
- Iterator<String> suffixes = this.nexus.listSuffixes( null );
+ Set<String> suffixes = this.nexus.listSuffixes( null );
ExprNode filter = new EqualityNode<String>( SchemaConstants.OBJECT_CLASS_AT, new ClientStringValue(
SchemaConstants.SUBENTRY_OC ) );
SearchControls controls = new SearchControls();
@@ -166,11 +167,10 @@
{ SchemaConstants.SUBTREE_SPECIFICATION_AT, SchemaConstants.OBJECT_CLASS_AT } );
// search each namingContext for subentries
- while ( suffixes.hasNext() )
+ for ( String suffix:suffixes )
{
- LdapDN suffix = new LdapDN( suffixes.next() );
- //suffix = LdapDN.normalize( suffix, registry.getNormalizerMapping() );
- suffix.normalize( atRegistry.getNormalizerMapping() );
+ LdapDN suffixDn = new LdapDN( suffix );
+ suffixDn.normalize( atRegistry.getNormalizerMapping() );
LdapDN adminDn = new LdapDN( ServerDNConstants.ADMIN_SYSTEM_DN_NORMALIZED );
adminDn.normalize( registries.getAttributeTypeRegistry().getNormalizerMapping() );
@@ -178,7 +178,7 @@
new LdapPrincipal( adminDn, AuthenticationLevel.STRONG ), directoryService );
EntryFilteringCursor subentries = nexus.search( new SearchOperationContext( adminSession,
- suffix, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) );
+ suffixDn, AliasDerefMode.NEVER_DEREF_ALIASES, filter, controls ) );
while ( subentries.next() )
{
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java Tue Oct 7 04:26:55 2008
@@ -55,9 +55,9 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
@@ -110,11 +110,10 @@
// search all naming contexts for trigger subentenries
// generate TriggerSpecification arrays for each subentry
// add that subentry to the hash
- Iterator<String> suffixes = nexus.listSuffixes( null );
+ Set<String> suffixes = nexus.listSuffixes( null );
- while ( suffixes.hasNext() )
+ for ( String suffix:suffixes )
{
- String suffix = suffixes.next();
LdapDN baseDn = new LdapDN( suffix );
ExprNode filter = new EqualityNode<String>( SchemaConstants.OBJECT_CLASS_AT,
new ClientStringValue( ApacheSchemaConstants.TRIGGER_EXECUTION_SUBENTRY_OC ) );
Modified: directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java (original)
+++ directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java Tue Oct 7 04:26:55 2008
@@ -437,6 +437,28 @@
public void setEntry( ClonedServerEntry entry )
{
}
+
+
+ public void throwReferral()
+ {
+ }
+
+
+ public boolean isReferralThrown()
+ {
+ return false;
+ }
+
+
+ public void ignoreReferral()
+ {
+ }
+
+
+ public boolean isReferralIgnored()
+ {
+ return false;
+ }
}
class MockDirectoryService implements DirectoryService
@@ -506,6 +528,11 @@
}
+ public void setReferralManager( ReferralManager referralManager )
+ {
+ }
+
+
public void setRegistries( Registries registries )
{
}
@@ -845,7 +872,7 @@
return null;
}
- public Iterator<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
+ public Set<String> listSuffixes( ListSuffixOperationContext opContext ) throws Exception
{
return null;
}
Modified: directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java (original)
+++ directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java Tue Oct 7 04:26:55 2008
@@ -306,6 +306,11 @@
}
+ public void setReferralManager( ReferralManager referralManager )
+ {
+ }
+
+
public Registries getRegistries()
{
return null;
Modified: directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/MockInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/MockInterceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/MockInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/interceptor/MockInterceptor.java Tue Oct 7 04:26:55 2008
@@ -45,7 +45,7 @@
import org.apache.directory.shared.ldap.name.LdapDN;
import javax.naming.NamingException;
-import java.util.Iterator;
+import java.util.Set;
public class MockInterceptor implements Interceptor
@@ -104,7 +104,7 @@
}
- public Iterator<String> listSuffixes ( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception
+ public Set<String> listSuffixes ( NextInterceptor next, ListSuffixOperationContext opContext ) throws Exception
{
test.interceptors.add( this );
return next.listSuffixes( opContext );
Modified: directory/apacheds/trunk/interceptor-kerberos/src/main/java/org/apache/directory/server/core/kerberos/KeyDerivationInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/interceptor-kerberos/src/main/java/org/apache/directory/server/core/kerberos/KeyDerivationInterceptor.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/interceptor-kerberos/src/main/java/org/apache/directory/server/core/kerberos/KeyDerivationInterceptor.java (original)
+++ directory/apacheds/trunk/interceptor-kerberos/src/main/java/org/apache/directory/server/core/kerberos/KeyDerivationInterceptor.java Tue Oct 7 04:26:55 2008
@@ -42,6 +42,7 @@
import org.apache.directory.server.core.authz.DefaultAuthorizationInterceptor;
import org.apache.directory.server.core.exception.ExceptionInterceptor;
import org.apache.directory.server.core.operational.OperationalAttributeInterceptor;
+import org.apache.directory.server.core.referral.ReferralInterceptor;
import org.apache.directory.server.core.schema.SchemaInterceptor;
import org.apache.directory.server.core.subtree.SubentryInterceptor;
import org.apache.directory.server.core.collective.CollectiveAttributeInterceptor;
@@ -103,6 +104,7 @@
Set<String> c = new HashSet<String>();
c.add( NormalizationInterceptor.class.getName() );
c.add( AuthenticationInterceptor.class.getName() );
+ c.add( ReferralInterceptor.class.getName() );
c.add( AciAuthorizationInterceptor.class.getName() );
c.add( DefaultAuthorizationInterceptor.class.getName() );
c.add( ExceptionInterceptor.class.getName() );
Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java Tue Oct 7 04:26:55 2008
@@ -384,7 +384,7 @@
/**
- * Close the parttion : we have to close all the userIndices and the master table.
+ * Close the partition : we have to close all the userIndices and the master table.
*
* @throws Exception lazily thrown on any closer failures to avoid leaving
* open files
Modified: directory/apacheds/trunk/pom.xml
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/pom.xml?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/pom.xml (original)
+++ directory/apacheds/trunk/pom.xml Tue Oct 7 04:26:55 2008
@@ -66,12 +66,6 @@
</dependency>
<dependency>
- <groupId>org.apache.directory.shared</groupId>
- <artifactId>shared-bouncycastle-reduced</artifactId>
- <version>${org.apache.directory.shared.version}</version>
- </dependency>
-
- <dependency>
<groupId>org.apache.directory.daemon</groupId>
<artifactId>daemon-bootstrappers</artifactId>
<version>1.1.6-SNAPSHOT</version>
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/AddHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/AddHandler.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/AddHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/AddHandler.java Tue Oct 7 04:26:55 2008
@@ -20,12 +20,11 @@
package org.apache.directory.server.ldap.handlers;
-import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.CoreSession;
import org.apache.directory.server.ldap.LdapSession;
import org.apache.directory.shared.ldap.message.AddRequest;
import org.apache.directory.shared.ldap.message.LdapResult;
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.name.LdapDN;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,26 +36,25 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
-public class AddHandler extends ReferralAwareRequestHandler<AddRequest>
+public class AddHandler extends LdapRequestHandler<AddRequest>
{
/** The logger for this class */
private static final Logger LOG = LoggerFactory.getLogger( AddHandler.class );
/**
- * @see ReferralAwareRequestHandler#handleIgnoringReferrals(LdapSession, LdapDN, ClonedServerEntry,
- * org.apache.directory.shared.ldap.message.SingleReplyRequest)
+ * {@inheritDoc}
*/
- public void handleIgnoringReferrals( LdapSession session, LdapDN reqTargetDn,
- ClonedServerEntry entry, AddRequest req )
+ public void handle( LdapSession session, AddRequest req )
{
- LOG.debug( "Handling add request while ignoring referrals: {}", req );
+ LOG.debug( "Handling request: {}", req );
LdapResult result = req.getResultResponse().getLdapResult();
try
{
// Call the underlying layer to inject the new entry
- session.getCoreSession().add( req );
+ CoreSession coreSession = session.getCoreSession();
+ coreSession.add( req );
// If success, here now, otherwise, we would have an exception.
result.setResultCode( ResultCodeEnum.SUCCESS );
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/CompareHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/CompareHandler.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/CompareHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/CompareHandler.java Tue Oct 7 04:26:55 2008
@@ -20,7 +20,6 @@
package org.apache.directory.server.ldap.handlers;
-import org.apache.directory.server.core.entry.ClonedServerEntry;
import org.apache.directory.server.ldap.LdapSession;
import org.apache.directory.shared.ldap.message.CompareRequest;
import org.apache.directory.shared.ldap.message.LdapResult;
@@ -37,7 +36,7 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev: 664302 $
*/
-public class CompareHandler extends ReferralAwareRequestHandler<CompareRequest>
+public class CompareHandler extends LdapRequestHandler<CompareRequest>
{
private static final Logger LOG = LoggerFactory.getLogger( CompareHandler.class );
@@ -48,8 +47,7 @@
* org.apache.directory.shared.ldap.message.SingleReplyRequest)
*/
@Override
- public void handleIgnoringReferrals( LdapSession session, LdapDN reqTargetDn,
- ClonedServerEntry entry, CompareRequest req )
+ public void handle( LdapSession session, CompareRequest req )
{
LOG.debug( "Handling compare request while ignoring referrals: {}", req );
LdapResult result = req.getResultResponse().getLdapResult();
@@ -65,7 +63,7 @@
result.setResultCode( ResultCodeEnum.COMPARE_FALSE );
}
- result.setMatchedDn( reqTargetDn );
+ result.setMatchedDn( req.getName() );
session.getIoSession().write( req.getResultResponse() );
}
catch ( Exception e )
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/DeleteHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/DeleteHandler.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/DeleteHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/DeleteHandler.java Tue Oct 7 04:26:55 2008
@@ -20,12 +20,11 @@
package org.apache.directory.server.ldap.handlers;
-import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.CoreSession;
import org.apache.directory.server.ldap.LdapSession;
import org.apache.directory.shared.ldap.message.DeleteRequest;
import org.apache.directory.shared.ldap.message.LdapResult;
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.name.LdapDN;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,21 +36,29 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev: 664302 $
*/
-public class DeleteHandler extends ReferralAwareRequestHandler<DeleteRequest>
+public class DeleteHandler extends LdapRequestHandler<DeleteRequest>
{
private static final Logger LOG = LoggerFactory.getLogger( DeleteHandler.class );
- public void handleIgnoringReferrals( LdapSession session, LdapDN reqTargetDn,
- ClonedServerEntry entry, DeleteRequest req )
+ /**
+ * {@inheritDoc}
+ */
+ public void handle( LdapSession session, DeleteRequest req )
{
- LOG.debug( "Handling request while ignoring referrals: {}", req );
+ LOG.debug( "Handling request: {}", req );
LdapResult result = req.getResultResponse().getLdapResult();
try
{
- session.getCoreSession().delete( req );
+ // Call the underlying layer to delete the entry
+ CoreSession coreSession = session.getCoreSession();
+ coreSession.delete( req );
+
+ // If success, here now, otherwise, we would have an exception.
result.setResultCode( ResultCodeEnum.SUCCESS );
+
+ // Write the DeleteResponse message
session.getIoSession().write( req.getResultResponse() );
}
catch ( Exception e )
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/LdapRequestHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/LdapRequestHandler.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/LdapRequestHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/LdapRequestHandler.java Tue Oct 7 04:26:55 2008
@@ -20,21 +20,31 @@
package org.apache.directory.server.ldap.handlers;
+import javax.naming.NamingException;
+
import org.apache.directory.server.core.CoreSession;
import org.apache.directory.server.ldap.LdapService;
import org.apache.directory.server.ldap.LdapSession;
import org.apache.directory.server.ldap.handlers.extended.StartTlsHandler;
+import org.apache.directory.shared.ldap.exception.LdapException;
+import org.apache.directory.shared.ldap.exception.LdapReferralException;
import org.apache.directory.shared.ldap.message.AbandonRequest;
import org.apache.directory.shared.ldap.message.BindRequest;
import org.apache.directory.shared.ldap.message.ExtendedRequest;
import org.apache.directory.shared.ldap.message.LdapResult;
+import org.apache.directory.shared.ldap.message.Referral;
+import org.apache.directory.shared.ldap.message.ReferralImpl;
import org.apache.directory.shared.ldap.message.Request;
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
import org.apache.directory.shared.ldap.message.ResultResponse;
import org.apache.directory.shared.ldap.message.ResultResponseRequest;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.util.ExceptionUtils;
import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoSession;
import org.apache.mina.handler.demux.MessageHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -45,7 +55,10 @@
*/
public abstract class LdapRequestHandler<T extends Request> implements MessageHandler<T>
{
- /** The reference on the Ldap server instance */
+ /** The logger for this class */
+ private static final Logger LOG = LoggerFactory.getLogger( LdapRequestHandler.class );
+
+ /** The reference on the Ldap server instance */
protected LdapService ldapService;
@@ -194,4 +207,78 @@
* @throws Exception If there is an error during the processing of this message
*/
public abstract void handle( LdapSession session, T message ) throws Exception;
+
+
+ /**
+ * Handles processing with referrals without ManageDsaIT control.
+ */
+ public void handleException( LdapSession session, ResultResponseRequest req, Exception e )
+ {
+ LdapResult result = req.getResultResponse().getLdapResult();
+
+ /*
+ * Set the result code or guess the best option.
+ */
+ ResultCodeEnum code;
+ if ( e instanceof LdapException )
+ {
+ code = ( ( LdapException ) e ).getResultCode();
+ }
+ else
+ {
+ code = ResultCodeEnum.getBestEstimate( e, req.getType() );
+ }
+
+ result.setResultCode( code );
+
+ /*
+ * Setup the error message to put into the request and put entire
+ * exception into the message if we are in debug mode. Note we
+ * embed the result code name into the message.
+ */
+ String msg = code.toString() + ": failed for " + req + ": " + e.getMessage();
+
+ if ( LOG.isDebugEnabled() )
+ {
+ LOG.debug( msg, e );
+
+ msg += ":\n" + ExceptionUtils.getStackTrace( e );
+ }
+
+ result.setErrorMessage( msg );
+
+ if ( e instanceof NamingException )
+ {
+ NamingException ne = ( NamingException ) e;
+
+ // Add the matchedDN if necessary
+ boolean setMatchedDn =
+ code == ResultCodeEnum.NO_SUCH_OBJECT ||
+ code == ResultCodeEnum.ALIAS_PROBLEM ||
+ code == ResultCodeEnum.INVALID_DN_SYNTAX ||
+ code == ResultCodeEnum.ALIAS_DEREFERENCING_PROBLEM;
+
+ if ( ( ne.getResolvedName() != null ) && setMatchedDn )
+ {
+ result.setMatchedDn( ( LdapDN ) ne.getResolvedName() );
+ }
+
+ // Add the referrals if necessary
+ if ( e instanceof LdapReferralException )
+ {
+ Referral referrals = new ReferralImpl();
+
+ do
+ {
+ String ref = ((LdapReferralException)e).getReferralInfo();
+ referrals.addLdapUrl( ref );
+ }
+ while ( ((LdapReferralException)e).skipReferral() );
+
+ result.setReferral( referrals );
+ }
+ }
+
+ session.getIoSession().write( req.getResultResponse() );
+ }
}
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyDnHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyDnHandler.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyDnHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyDnHandler.java Tue Oct 7 04:26:55 2008
@@ -20,7 +20,7 @@
package org.apache.directory.server.ldap.handlers;
-import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.CoreSession;
import org.apache.directory.server.ldap.LdapSession;
import org.apache.directory.shared.ldap.message.LdapResult;
import org.apache.directory.shared.ldap.message.ModifyDnRequest;
@@ -37,7 +37,7 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev: 664302 $
*/
-public class ModifyDnHandler extends ReferralAwareRequestHandler<ModifyDnRequest>
+public class ModifyDnHandler extends LdapRequestHandler<ModifyDnRequest>
{
private static final Logger LOG = LoggerFactory.getLogger( ModifyDnHandler.class );
@@ -58,8 +58,7 @@
* - newSuperior : this is a move operation. The entry is removed from its
* current location, and created in the new one.
*/
- public void handleIgnoringReferrals( LdapSession session, LdapDN reqTargetDn,
- ClonedServerEntry entry, ModifyDnRequest req )
+ public void handle( LdapSession session, ModifyDnRequest req )
{
LdapResult result = req.getResultResponse().getLdapResult();
LOG.debug( "Handling modify dn request while ignoring referrals: {}", req );
@@ -87,21 +86,23 @@
boolean rdnChanged = req.getNewRdn() != null &&
! newRdn.getNormName().equals( oldRdn.getNormName() );
+ CoreSession coreSession = session.getCoreSession();
+
if ( rdnChanged )
{
if ( req.getNewSuperior() != null )
{
- session.getCoreSession().moveAndRename( req );
+ coreSession.moveAndRename( req );
}
else
{
- session.getCoreSession().rename( req );
+ coreSession.rename( req );
}
}
else if ( req.getNewSuperior() != null )
{
req.setNewRdn( null );
- session.getCoreSession().move( req );
+ coreSession.move( req );
}
else
{
Modified: directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyHandler.java?rev=702434&r1=702433&r2=702434&view=diff
==============================================================================
--- directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyHandler.java (original)
+++ directory/apacheds/trunk/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/ModifyHandler.java Tue Oct 7 04:26:55 2008
@@ -20,12 +20,11 @@
package org.apache.directory.server.ldap.handlers;
-import org.apache.directory.server.core.entry.ClonedServerEntry;
+import org.apache.directory.server.core.CoreSession;
import org.apache.directory.server.ldap.LdapSession;
import org.apache.directory.shared.ldap.message.LdapResult;
import org.apache.directory.shared.ldap.message.ModifyRequest;
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.name.LdapDN;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,26 +36,29 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev: 664302 $
*/
-public class ModifyHandler extends ReferralAwareRequestHandler<ModifyRequest>
+public class ModifyHandler extends LdapRequestHandler<ModifyRequest>
{
private static final Logger LOG = LoggerFactory.getLogger( ModifyHandler.class );
/**
- * @see ReferralAwareRequestHandler#handleIgnoringReferrals(LdapSession, LdapDN, ClonedServerEntry,
- * org.apache.directory.shared.ldap.message.SingleReplyRequest)
+ * {@inheritDoc}
*/
- @Override
- public void handleIgnoringReferrals( LdapSession session, LdapDN reqTargetDn,
- ClonedServerEntry entry, ModifyRequest req )
+ public void handle( LdapSession session, ModifyRequest req )
{
- LOG.debug( "Handling modify request while ignoring referrals: {}", req );
+ LOG.debug( "Handling request : {}", req );
LdapResult result = req.getResultResponse().getLdapResult();
try
{
- session.getCoreSession().modify( req );
+ // Call the underlying layer to delete the entry
+ CoreSession coreSession = session.getCoreSession();
+ coreSession.modify( req );
+
+ // If success, here now, otherwise, we would have an exception.
result.setResultCode( ResultCodeEnum.SUCCESS );
+
+ // Write the DeleteResponse message
session.getIoSession().write( req.getResultResponse() );
}
catch ( Exception e )