You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2012/01/20 15:28:26 UTC
svn commit: r1233925 [1/3] - in /directory/shared/trunk:
dsml/engine/src/main/java/org/apache/directory/shared/dsmlv2/engine/
dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/request/
dsml/parser/src/test/java/org/apache/directory/shared/ds...
Author: pamarcelot
Date: Fri Jan 20 14:28:25 2012
New Revision: 1233925
URL: http://svn.apache.org/viewvc?rev=1233925&view=rev
Log:
Fix for DIRAPI-68 (Unable to bind on an Active Directory server using 'domain\userid').
Modified:
directory/shared/trunk/dsml/engine/src/main/java/org/apache/directory/shared/dsmlv2/engine/Dsmlv2Engine.java
directory/shared/trunk/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/request/BindRequestDsml.java
directory/shared/trunk/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/request/Dsmlv2Grammar.java
directory/shared/trunk/dsml/parser/src/test/java/org/apache/directory/shared/dsmlv2/authRequest/AuthRequestTest.java
directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/actions/bindRequest/InitSaslBind.java
directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/actions/bindRequest/StoreName.java
directory/shared/trunk/ldap/codec/core/src/main/java/org/apache/directory/shared/ldap/codec/decorators/BindRequestDecorator.java
directory/shared/trunk/ldap/codec/core/src/test/java/org/apache/directory/shared/ldap/codec/bind/BindRequestPerfTest.java
directory/shared/trunk/ldap/codec/core/src/test/java/org/apache/directory/shared/ldap/codec/bind/BindRequestTest.java
directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/BindRequest.java
directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/BindRequestImpl.java
directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/message/BindRequestImplTest.java
Modified: directory/shared/trunk/dsml/engine/src/main/java/org/apache/directory/shared/dsmlv2/engine/Dsmlv2Engine.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/dsml/engine/src/main/java/org/apache/directory/shared/dsmlv2/engine/Dsmlv2Engine.java?rev=1233925&r1=1233924&r2=1233925&view=diff
==============================================================================
--- directory/shared/trunk/dsml/engine/src/main/java/org/apache/directory/shared/dsmlv2/engine/Dsmlv2Engine.java (original)
+++ directory/shared/trunk/dsml/engine/src/main/java/org/apache/directory/shared/dsmlv2/engine/Dsmlv2Engine.java Fri Jan 20 14:28:25 2012
@@ -83,7 +83,6 @@ import org.apache.directory.shared.ldap.
import org.apache.directory.shared.ldap.model.message.SearchResultDone;
import org.apache.directory.shared.ldap.model.message.SearchResultEntry;
import org.apache.directory.shared.ldap.model.message.SearchResultReference;
-import org.apache.directory.shared.ldap.model.name.Dn;
import org.apache.directory.shared.util.Strings;
import org.dom4j.Element;
import org.dom4j.Namespace;
@@ -123,7 +122,7 @@ public class Dsmlv2Engine
/** The batch response. */
protected BatchResponseDsml batchResponse = new BatchResponseDsml();
-
+
protected Dsmlv2Grammar grammar = new Dsmlv2Grammar();
/** flag to indicate to generate the response in a SOAP envelope */
@@ -131,6 +130,7 @@ public class Dsmlv2Engine
private static final Logger LOG = LoggerFactory.getLogger( Dsmlv2Engine.class );
+
/**
* Creates a new instance of Dsmlv2Engine.
*
@@ -164,7 +164,7 @@ public class Dsmlv2Engine
this.connection = connection;
}
-
+
/**
* Processes the file given and return the result of the operations
*
@@ -215,7 +215,7 @@ public class Dsmlv2Engine
*/
public void processDSMLFile( File file, OutputStream respStream ) throws Exception
{
- parser = new Dsmlv2Parser(grammar);
+ parser = new Dsmlv2Parser( grammar );
parser.setInputFile( file.getAbsolutePath() );
processDSML( respStream );
@@ -244,12 +244,12 @@ public class Dsmlv2Engine
*/
public void processDSML( InputStream inputStream, String inputEncoding, OutputStream out ) throws Exception
{
- parser = new Dsmlv2Parser(grammar);
+ parser = new Dsmlv2Parser( grammar );
parser.setInput( inputStream, inputEncoding );
processDSML( out );
}
-
+
/**
* Processes the Request document
*
@@ -263,11 +263,11 @@ public class Dsmlv2Engine
processDSML( byteOut );
return new String( byteOut.toByteArray(), "UTF-8" );
}
- catch( IOException e )
+ catch ( IOException e )
{
LOG.error( "Failed to process the DSML", e );
}
-
+
return null;
}
@@ -282,7 +282,7 @@ public class Dsmlv2Engine
protected void processDSML( OutputStream outStream ) throws IOException
{
BufferedWriter respWriter = null;
-
+
if ( outStream != null )
{
respWriter = new BufferedWriter( new OutputStreamWriter( outStream ) );
@@ -290,25 +290,25 @@ public class Dsmlv2Engine
if ( generateSoapResp )
{
respWriter.write( "<Envelope " );
-
+
Namespace soapNs = new Namespace( null, "http://www.w3.org/2001/12/soap-envelope" );
soapNs.write( respWriter );
respWriter.write( "><Body>" );
}
-
+
respWriter.write( "<batchResponse " );
-
+
ParserUtils.DSML_NAMESPACE.write( respWriter );
-
+
respWriter.write( " " ); // a space to separate the namespace declarations
-
+
ParserUtils.XSD_NAMESPACE.write( respWriter );
-
+
respWriter.write( " " ); // a space to separate the namespace declarations
-
+
ParserUtils.XSI_NAMESPACE.write( respWriter );
-
+
respWriter.write( '>' ); // the end tag
}
@@ -320,7 +320,7 @@ public class Dsmlv2Engine
catch ( Exception e )
{
LOG.warn( "Failed to bind", e );
-
+
// Unable to connect to server
// We create a new ErrorResponse and return the XML response.
ErrorResponse errorResponse = new ErrorResponse( 0, ErrorResponseType.COULD_NOT_CONNECT, e
@@ -334,7 +334,7 @@ public class Dsmlv2Engine
{
batchResponse.addResponse( errorResponse );
}
-
+
return;
}
@@ -360,7 +360,7 @@ public class Dsmlv2Engine
{
batchResponse.addResponse( errorResponse );
}
-
+
return;
}
@@ -379,9 +379,9 @@ public class Dsmlv2Engine
catch ( XmlPullParserException e )
{
LOG.warn( "Failed while getting next request", e );
-
+
int reqId = 0;
-
+
// We create a new ErrorResponse and return the XML response.
ErrorResponse errorResponse = new ErrorResponse( reqId, ErrorResponseType.MALFORMED_REQUEST, I18n.err(
I18n.ERR_03001, e.getLocalizedMessage(), e.getLineNumber(), e.getColumnNumber() ) );
@@ -394,7 +394,7 @@ public class Dsmlv2Engine
{
batchResponse.addResponse( errorResponse );
}
-
+
return;
}
@@ -417,7 +417,7 @@ public class Dsmlv2Engine
{
batchResponse.addResponse( errorResponse );
}
-
+
break;
}
@@ -428,10 +428,11 @@ public class Dsmlv2Engine
catch ( Exception e )
{
LOG.warn( "Failed to process request", e );
-
+
// We create a new ErrorResponse and return the XML response.
- ErrorResponse errorResponse = new ErrorResponse( request.getDecorated().getMessageId(), ErrorResponseType.GATEWAY_INTERNAL_ERROR, I18n.err(
- I18n.ERR_03003, e.getMessage() ) );
+ ErrorResponse errorResponse = new ErrorResponse( request.getDecorated().getMessageId(),
+ ErrorResponseType.GATEWAY_INTERNAL_ERROR, I18n.err(
+ I18n.ERR_03003, e.getMessage() ) );
if ( respWriter != null )
{
writeResponse( respWriter, errorResponse );
@@ -440,7 +441,7 @@ public class Dsmlv2Engine
{
batchResponse.addResponse( errorResponse );
}
-
+
break;
}
@@ -468,7 +469,7 @@ public class Dsmlv2Engine
{
batchResponse.addResponse( errorResponse );
}
-
+
break;
}
}
@@ -476,7 +477,7 @@ public class Dsmlv2Engine
if ( respWriter != null )
{
respWriter.write( "</batchResponse>" );
-
+
if ( generateSoapResp )
{
respWriter.write( "</Body>" );
@@ -486,8 +487,8 @@ public class Dsmlv2Engine
respWriter.flush();
}
}
-
-
+
+
/**
* write the response to the writer of the underlying output stream
* @param respWriter
@@ -496,13 +497,13 @@ public class Dsmlv2Engine
*/
protected void writeResponse( BufferedWriter respWriter, DsmlDecorator respDsml ) throws IOException
{
- if( respWriter != null )
+ if ( respWriter != null )
{
Element xml = respDsml.toDsml( null );
xml.write( respWriter );
}
}
-
+
/**
* @return the generateSoapResp
@@ -521,7 +522,7 @@ public class Dsmlv2Engine
this.generateSoapResp = generateSoapResp;
}
-
+
/**
* @return the batchResponse
*/
@@ -530,7 +531,7 @@ public class Dsmlv2Engine
return batchResponse;
}
-
+
/**
* @return the connection
*/
@@ -539,13 +540,14 @@ public class Dsmlv2Engine
return connection;
}
-
+
/**
* Processes a single request
*
* @param request the request to process
*/
- protected void processRequest( DsmlDecorator<? extends Request> request, BufferedWriter respWriter ) throws Exception
+ protected void processRequest( DsmlDecorator<? extends Request> request, BufferedWriter respWriter )
+ throws Exception
{
ResultCodeEnum resultCode = null;
@@ -574,7 +576,8 @@ public class Dsmlv2Engine
case COMPARE_REQUEST:
CompareResponse compareResponse = connection.compare( ( CompareRequest ) request );
resultCode = compareResponse.getLdapResult().getResultCode();
- CompareResponseDsml compareResponseDsml = new CompareResponseDsml( connection.getCodecService(), compareResponse );
+ CompareResponseDsml compareResponseDsml = new CompareResponseDsml( connection.getCodecService(),
+ compareResponse );
writeResponse( respWriter, compareResponseDsml );
break;
@@ -590,7 +593,8 @@ public class Dsmlv2Engine
case EXTENDED_REQUEST:
ExtendedResponse extendedResponse = connection.extended( ( ExtendedRequest<?> ) request );
resultCode = extendedResponse.getLdapResult().getResultCode();
- ExtendedResponseDsml extendedResponseDsml = new ExtendedResponseDsml( connection.getCodecService(), extendedResponse );
+ ExtendedResponseDsml extendedResponseDsml = new ExtendedResponseDsml( connection.getCodecService(),
+ extendedResponse );
writeResponse( respWriter, extendedResponseDsml );
break;
@@ -598,41 +602,43 @@ public class Dsmlv2Engine
case MODIFY_REQUEST:
ModifyResponse modifyResponse = connection.modify( ( ModifyRequest ) request );
resultCode = modifyResponse.getLdapResult().getResultCode();
- ModifyResponseDsml modifyResponseDsml = new ModifyResponseDsml( connection.getCodecService(), modifyResponse );
+ ModifyResponseDsml modifyResponseDsml = new ModifyResponseDsml( connection.getCodecService(),
+ modifyResponse );
writeResponse( respWriter, modifyResponseDsml );
-
+
break;
case MODIFYDN_REQUEST:
ModifyDnResponse modifyDnResponse = connection.modifyDn( ( ModifyDnRequest ) request );
resultCode = modifyDnResponse.getLdapResult().getResultCode();
- ModDNResponseDsml modDNResponseDsml = new ModDNResponseDsml( connection.getCodecService(), modifyDnResponse );
+ ModDNResponseDsml modDNResponseDsml = new ModDNResponseDsml( connection.getCodecService(),
+ modifyDnResponse );
writeResponse( respWriter, modDNResponseDsml );
-
+
break;
case SEARCH_REQUEST:
SearchCursor searchResponses = connection.search( ( SearchRequest ) request );
-
+
SearchResponseDsml searchResponseDsml = new SearchResponseDsml( connection.getCodecService() );
-
+
if ( respWriter != null )
{
StringBuilder sb = new StringBuilder();
sb.append( "<searchResponse" );
-
+
if ( request.getDecorated().getMessageId() > 0 )
{
sb.append( " requestID=\"" );
sb.append( request.getDecorated().getMessageId() );
sb.append( '"' );
}
-
+
sb.append( '>' );
-
+
respWriter.write( sb.toString() );
}
-
+
while ( searchResponses.next() )
{
Response searchResponse = searchResponses.get();
@@ -643,7 +649,8 @@ public class Dsmlv2Engine
SearchResultEntryDsml searchResultEntryDsml = new SearchResultEntryDsml(
connection.getCodecService(), searchResultEntry );
- searchResponseDsml = new SearchResponseDsml( connection.getCodecService(), searchResultEntryDsml );
+ searchResponseDsml = new SearchResponseDsml( connection.getCodecService(),
+ searchResultEntryDsml );
if ( respWriter != null )
{
@@ -660,7 +667,8 @@ public class Dsmlv2Engine
SearchResultReferenceDsml searchResultReferenceDsml = new SearchResultReferenceDsml(
connection.getCodecService(), searchResultReference );
- searchResponseDsml = new SearchResponseDsml( connection.getCodecService(), searchResultReferenceDsml );
+ searchResponseDsml = new SearchResponseDsml( connection.getCodecService(),
+ searchResultReferenceDsml );
if ( respWriter != null )
{
@@ -678,12 +686,12 @@ public class Dsmlv2Engine
if ( srDone != null )
{
resultCode = srDone.getLdapResult().getResultCode();
-
+
SearchResultDoneDsml srdDsml = new SearchResultDoneDsml( connection.getCodecService(), srDone );
-
+
if ( respWriter != null )
{
- writeResponse( respWriter, srdDsml);
+ writeResponse( respWriter, srdDsml );
respWriter.write( "</searchResponse>" );
}
else
@@ -692,7 +700,7 @@ public class Dsmlv2Engine
batchResponse.addResponse( searchResponseDsml );
}
}
-
+
break;
case UNBIND_REQUEST:
@@ -764,16 +772,16 @@ public class Dsmlv2Engine
{
return;
}
-
+
if ( connection == null )
{
throw new IOException( I18n.err( I18n.ERR_03101_MISSING_CONNECTION_TO ) );
}
-
+
BindRequest bindRequest = new BindRequestImpl();
bindRequest.setSimple( true );
- bindRequest.setCredentials( Strings.getBytesUtf8(password) );
- bindRequest.setName( new Dn( user ) );
+ bindRequest.setCredentials( Strings.getBytesUtf8( password ) );
+ bindRequest.setName( user );
bindRequest.setVersion3( true );
bindRequest.setMessageId( messageId );
Modified: directory/shared/trunk/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/request/BindRequestDsml.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/request/BindRequestDsml.java?rev=1233925&r1=1233924&r2=1233925&view=diff
==============================================================================
--- directory/shared/trunk/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/request/BindRequestDsml.java (original)
+++ directory/shared/trunk/dsml/parser/src/main/java/org/apache/directory/shared/dsmlv2/request/BindRequestDsml.java Fri Jan 20 14:28:25 2012
@@ -78,10 +78,21 @@ public class BindRequestDsml
BindRequest request = ( BindRequest ) getDecorated();
- // AbandonID
- String name = request.getName().getName();
- if ( ( name != null ) && ( !"".equals( name ) ) )
+ // Principal
+ Dn dn = request.getDn();
+
+ if ( !Dn.isNullOrEmpty( dn ) )
+ {
+ // A DN has been provided
+
+ element.addAttribute( "principal", dn.getName() );
+ }
+ else
{
+ // No DN has been provided, let's use the name as a string instead
+
+ String name = request.getName();
+
element.addAttribute( "principal", name );
}
@@ -161,7 +172,7 @@ public class BindRequestDsml
/**
* {@inheritDoc}
*/
- public Dn getName()
+ public String getName()
{
return getDecorated().getName();
}
@@ -170,7 +181,7 @@ public class BindRequestDsml
/**
* {@inheritDoc}
*/
- public BindRequest setName( Dn name )
+ public BindRequest setName( String name )
{
getDecorated().setName( name );
@@ -181,6 +192,26 @@ public class BindRequestDsml
/**
* {@inheritDoc}
*/
+ public Dn getDn()
+ {
+ return getDecorated().getDn();
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public BindRequest setDn( Dn dn )
+ {
+ getDecorated().setDn( dn );
+
+ return this;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
public boolean isVersion3()
{
return getDecorated().isVersion3();