You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by sz...@apache.org on 2005/12/05 23:20:56 UTC
svn commit: r354207 -
/directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/support/ModifyDnHandler.java
Author: szoerner
Date: Mon Dec 5 14:20:52 2005
New Revision: 354207
URL: http://svn.apache.org/viewcvs?rev=354207&view=rev
Log:
Add a test for empty names in order to prevent clients to rename Root DSE. This is due to DIREVE-307.
Modified:
directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/support/ModifyDnHandler.java
Modified: directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/support/ModifyDnHandler.java
URL: http://svn.apache.org/viewcvs/directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/support/ModifyDnHandler.java?rev=354207&r1=354206&r2=354207&view=diff
==============================================================================
--- directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/support/ModifyDnHandler.java (original)
+++ directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/support/ModifyDnHandler.java Mon Dec 5 14:20:52 2005
@@ -16,11 +16,11 @@
*/
package org.apache.ldap.server.protocol.support;
-
import javax.naming.NamingException;
import javax.naming.ldap.LdapContext;
import org.apache.ldap.common.exception.LdapException;
+import org.apache.ldap.common.message.LdapResult;
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ModifyDnRequest;
import org.apache.ldap.common.message.ModifyDnResponse;
@@ -34,10 +34,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
/**
- * A single reply handler for {@link org.apache.ldap.common.message.ModifyDnRequest}s.
- *
+ * A single reply handler for
+ * {@link org.apache.ldap.common.message.ModifyDnRequest}s.
+ *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
@@ -45,79 +45,92 @@
{
private static final Logger LOG = LoggerFactory.getLogger( ModifyDnHandler.class );
- public void messageReceived( IoSession session, Object request )
+ public void messageReceived(IoSession session, Object request)
{
- ModifyDnRequest req = ( ModifyDnRequest ) request;
+ ModifyDnRequest req = (ModifyDnRequest) request;
ModifyDnResponse resp = new ModifyDnResponseImpl( req.getMessageId() );
resp.setLdapResult( new LdapResultImpl( resp ) );
- try
+ System.out.println("req.getName() == [" + req.getName() +"]");
+ if (req.getName() == null || req.getName().length() == 0)
{
- LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
- String deleteRDN = String.valueOf( req.getDeleteOldRdn() );
- ctx.addToEnvironment( "java.naming.ldap.deleteRDN", deleteRDN );
+ // it is not allowed to modify the name of the Root DSE
+
+ String msg = "Modify DN is not allowed on Root DSE.";
- if ( req.isMove() )
+ LdapResult result = resp.getLdapResult();
+ result.setResultCode( ResultCodeEnum.PROTOCOLERROR );
+ result.setErrorMessage( msg );
+ session.write( resp );
+ }
+ else
+ {
+ try
{
- LdapName oldDn = new LdapName( req.getName() );
- LdapName newDn = new LdapName( req.getNewSuperior() );
+ LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
+ String deleteRDN = String.valueOf( req.getDeleteOldRdn() );
+ ctx.addToEnvironment( "java.naming.ldap.deleteRDN", deleteRDN );
- if ( req.getNewRdn() != null )
+ if (req.isMove())
{
- newDn.add( req.getNewRdn() );
+ LdapName oldDn = new LdapName( req.getName() );
+ LdapName newDn = new LdapName( req.getNewSuperior() );
+
+ if (req.getNewRdn() != null)
+ {
+ newDn.add( req.getNewRdn() );
+ }
+ else
+ {
+ newDn.add( oldDn.getRdn() );
+ }
+
+ ctx.rename( new LdapName( req.getName() ), newDn );
}
else
{
- newDn.add( oldDn.getRdn() );
+ LdapName newDn = new LdapName( req.getName() );
+ newDn.remove( newDn.size() - 1 );
+ newDn.add( req.getNewRdn() );
+ ctx.rename( new LdapName( req.getName() ), newDn );
}
-
- ctx.rename( new LdapName( req.getName() ), newDn );
}
- else
+ catch ( NamingException e )
{
- LdapName newDn = new LdapName( req.getName() );
- newDn.remove( newDn.size() - 1 );
- newDn.add( req.getNewRdn() );
- ctx.rename( new LdapName( req.getName() ), newDn );
- }
- }
- catch ( NamingException e )
- {
- String msg = "failed to modify DN of entry " + req.getName();
+ String msg = "failed to modify DN of entry " + req.getName();
- if ( LOG.isDebugEnabled() )
- {
- msg += ":\n" + ExceptionUtils.getStackTrace( e );
- }
+ if (LOG.isDebugEnabled())
+ {
+ msg += ":\n" + ExceptionUtils.getStackTrace( e );
+ }
- ResultCodeEnum code;
-
- if ( e instanceof LdapException )
- {
- code = ( ( LdapException ) e ).getResultCode() ;
- }
- else
- {
- code = ResultCodeEnum.getBestEstimate( e, req.getType() );
- }
+ ResultCodeEnum code;
- resp.getLdapResult().setResultCode( code );
- resp.getLdapResult().setErrorMessage( msg );
+ if (e instanceof LdapException)
+ {
+ code = ((LdapException) e).getResultCode();
+ }
+ else
+ {
+ code = ResultCodeEnum.getBestEstimate( e, req.getType() );
+ }
- if ( ( e.getResolvedName() != null ) &&
- ( ( code == ResultCodeEnum.NOSUCHOBJECT ) ||
- ( code == ResultCodeEnum.ALIASPROBLEM ) ||
- ( code == ResultCodeEnum.INVALIDDNSYNTAX ) ||
- ( code == ResultCodeEnum.ALIASDEREFERENCINGPROBLEM ) ) )
- {
- resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
+ resp.getLdapResult().setResultCode( code );
+ resp.getLdapResult().setErrorMessage( msg );
+
+ if ((e.getResolvedName() != null)
+ && ((code == ResultCodeEnum.NOSUCHOBJECT) || (code == ResultCodeEnum.ALIASPROBLEM)
+ || (code == ResultCodeEnum.INVALIDDNSYNTAX) || (code == ResultCodeEnum.ALIASDEREFERENCINGPROBLEM)))
+ {
+ resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
+ }
+
+ session.write( resp );
+ return;
}
+ resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
session.write( resp );
- return;
}
-
- resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
- session.write( resp );
}
}