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 2017/08/14 08:16:16 UTC
svn commit: r1804952 -
/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/
Author: elecharny
Date: Mon Aug 14 08:16:15 2017
New Revision: 1804952
URL: http://svn.apache.org/viewvc?rev=1804952&view=rev
Log:
o Added a bind ( SaslRequest ) method in the interface
o Added an AbstractSaslRequest which is now inherited from the Sasl classes
Added:
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/AbstractSaslRequest.java
- copied, changed from r1795244, directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java
Modified:
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnection.java
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnectionWrapper.java
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslCramMd5Request.java
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslDigestMd5Request.java
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslGssApiRequest.java
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslPlainRequest.java
directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java
Copied: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/AbstractSaslRequest.java (from r1795244, directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java)
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/AbstractSaslRequest.java?p2=directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/AbstractSaslRequest.java&p1=directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java&r1=1795244&r2=1804952&rev=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/AbstractSaslRequest.java Mon Aug 14 08:16:15 2017
@@ -36,7 +36,7 @@ import org.apache.directory.api.util.Str
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public abstract class SaslRequest
+public abstract class AbstractSaslRequest implements SaslRequest
{
/** The mechanism used to decode user identity */
protected String saslMechanism;
@@ -69,10 +69,9 @@ public abstract class SaslRequest
/**
* Creates a new instance of SaslRequest.
*
- * @param saslMechanism
- * the SASL mechanism
+ * @param saslMechanism the SASL mechanism
*/
- protected SaslRequest( String saslMechanism )
+ protected AbstractSaslRequest( String saslMechanism )
{
this.saslMechanism = saslMechanism;
}
@@ -101,10 +100,9 @@ public abstract class SaslRequest
/**
- * Gets the authorization ID.
- *
- * @return the authorization ID
+ * {@inheritDoc}
*/
+ @Override
public String getAuthorizationId()
{
return authorizationId;
@@ -112,10 +110,9 @@ public abstract class SaslRequest
/**
- * Gets the controls.
- *
- * @return the controls
+ * {@inheritDoc}
*/
+ @Override
public Control[] getControls()
{
return controls.toArray( new Control[0] );
@@ -123,10 +120,9 @@ public abstract class SaslRequest
/**
- * Gets the crendentials
- *
- * @return the credentials
+ * {@inheritDoc}
*/
+ @Override
public byte[] getCredentials()
{
if ( credentials != null )
@@ -141,10 +137,9 @@ public abstract class SaslRequest
/**
- * Gets the quality of protection.
- *
- * @return the quality of protection
+ * {@inheritDoc}
*/
+ @Override
public SaslQoP getQualityOfProtection()
{
return qualityOfProtection;
@@ -152,10 +147,9 @@ public abstract class SaslRequest
/**
- * Gets realm name.
- *
- * @return the realm name
+ * {@inheritDoc}
*/
+ @Override
public String getRealmName()
{
return realmName;
@@ -163,10 +157,9 @@ public abstract class SaslRequest
/**
- * Gets the SASL mechanism.
- *
- * @return the SASL mechanism
+ * {@inheritDoc}
*/
+ @Override
public String getSaslMechanism()
{
return saslMechanism;
@@ -174,10 +167,9 @@ public abstract class SaslRequest
/**
- * Gets the security strength.
- *
- * @return the security strength
+ * {@inheritDoc}
*/
+ @Override
public SaslSecurityStrength getSecurityStrength()
{
return securityStrength;
@@ -185,10 +177,9 @@ public abstract class SaslRequest
/**
- * Gets the username.
- *
- * @return the username
+ * {@inheritDoc}
*/
+ @Override
public String getUsername()
{
return username;
@@ -196,10 +187,9 @@ public abstract class SaslRequest
/**
- * Indicates if mutual authentication is required.
- *
- * @return the flag indicating if mutual authentication is required
+ * {@inheritDoc}
*/
+ @Override
public boolean isMutualAuthentication()
{
return mutualAuthentication;
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnection.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnection.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnection.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnection.java Mon Aug 14 08:16:15 2017
@@ -236,6 +236,16 @@ public interface LdapConnection extends
/**
+ * SASL Bind to the server using a SASL request object.
+ *
+ * @param saslRequest The SASL request object containing all the needed parameters
+ * @return A {@link BindResponse} containing the result
+ * @throws LdapException if some error occurred
+ */
+ BindResponse bind( SaslRequest saslRequest ) throws LdapException;
+
+
+ /**
* Do a search, on the base object, using the given filter and scope. The
* SearchRequest parameters default to
* <ul>
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnectionWrapper.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnectionWrapper.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnectionWrapper.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapConnectionWrapper.java Mon Aug 14 08:16:15 2017
@@ -244,6 +244,16 @@ public class LdapConnectionWrapper imple
* {@inheritDoc}
*/
@Override
+ public BindResponse bind( SaslRequest saslRequest ) throws LdapException
+ {
+ return connection.bind( saslRequest );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public EntryCursor search( Dn baseDn, String filter, SearchScope scope, String... attributes )
throws LdapException
{
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java Mon Aug 14 08:16:15 2017
@@ -1464,6 +1464,64 @@ public class LdapNetworkConnection exten
/**
+ * Bind to the server using a SaslRequest object.
+ *
+ * @param request The SaslRequest POJO containing all the needed parameters
+ * @return A LdapResponse containing the result
+ * @throws LdapException if some error occurred
+ */
+ public BindResponse bind( SaslRequest request ) throws LdapException
+ {
+ if ( request == null )
+ {
+ String msg = "Cannot process a null request";
+ LOG.debug( msg );
+ throw new IllegalArgumentException( msg );
+ }
+
+ BindFuture bindFuture = bindAsync( request );
+
+
+ // Get the result from the future
+ try
+ {
+ // Read the response, waiting for it if not available immediately
+ // Get the response, blocking
+ BindResponse bindResponse = bindFuture.get( timeout, TimeUnit.MILLISECONDS );
+
+ if ( bindResponse == null )
+ {
+ // We didn't received anything : this is an error
+ LOG.error( "Bind failed : timeout occurred" );
+ throw new LdapException( TIME_OUT_ERROR );
+ }
+
+ if ( bindResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS )
+ {
+ authenticated.set( true );
+
+ // Everything is fine, return the response
+ LOG.debug( "Bind successful : {}", bindResponse );
+ }
+ else
+ {
+ // We have had an error
+ LOG.debug( "Bind failed : {}", bindResponse );
+ }
+
+ return bindResponse;
+ }
+ catch ( Exception ie )
+ {
+ // Catch all other exceptions
+ LOG.error( NO_RESPONSE_ERROR, ie );
+
+ throw new LdapException( NO_RESPONSE_ERROR, ie );
+ }
+ }
+
+
+ /**
* Bind to the server using a CramMd5Request object.
*
* @param request The CramMd5Request POJO containing all the needed parameters
@@ -4060,8 +4118,12 @@ public class LdapNetworkConnection exten
* Process the SASL Bind. It's a dialog with the server, we will send a first BindRequest, receive
* a response and the, if this response is a challenge, continue by sending a new BindRequest with
* the requested informations.
+ *
+ * @param saslRequest The SASL request object containing all the needed parameters
+ * @return A {@link BindResponse} containing the result
+ * @throws LdapException if some error occurred
*/
- private BindFuture bindSasl( SaslRequest saslRequest ) throws LdapException
+ public BindFuture bindSasl( SaslRequest saslRequest ) throws LdapException
{
// First switch to anonymous state
authenticated.set( false );
@@ -4073,8 +4135,7 @@ public class LdapNetworkConnection exten
checkSession();
BindRequest bindRequest = createBindRequest( ( String ) null, null,
- saslRequest.getSaslMechanism(), saslRequest
- .getControls() );
+ saslRequest.getSaslMechanism(), saslRequest.getControls() );
// Update the messageId
int newId = messageId.incrementAndGet();
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslCramMd5Request.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslCramMd5Request.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslCramMd5Request.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslCramMd5Request.java Mon Aug 14 08:16:15 2017
@@ -29,7 +29,7 @@ import org.apache.directory.api.ldap.mod
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class SaslCramMd5Request extends SaslRequest
+public class SaslCramMd5Request extends AbstractSaslRequest
{
/**
* Creates a new instance of SaslCramMd5Request.
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslDigestMd5Request.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslDigestMd5Request.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslDigestMd5Request.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslDigestMd5Request.java Mon Aug 14 08:16:15 2017
@@ -29,7 +29,7 @@ import org.apache.directory.api.ldap.mod
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class SaslDigestMd5Request extends SaslRequest
+public class SaslDigestMd5Request extends AbstractSaslRequest
{
/**
* Creates a new instance of SaslDigestMd5Request.
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslGssApiRequest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslGssApiRequest.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslGssApiRequest.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslGssApiRequest.java Mon Aug 14 08:16:15 2017
@@ -31,7 +31,7 @@ import org.apache.directory.api.ldap.mod
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class SaslGssApiRequest extends SaslRequest
+public class SaslGssApiRequest extends AbstractSaslRequest
{
/** The KDC host*/
protected String kdcHost;
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslPlainRequest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslPlainRequest.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslPlainRequest.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslPlainRequest.java Mon Aug 14 08:16:15 2017
@@ -29,7 +29,7 @@ import org.apache.directory.api.ldap.mod
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public class SaslPlainRequest extends SaslRequest
+public class SaslPlainRequest extends AbstractSaslRequest
{
/**
* Creates a new instance of SaslPlainRequest.
Modified: directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java?rev=1804952&r1=1804951&r2=1804952&view=diff
==============================================================================
--- directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java (original)
+++ directory/shared/branches/shared-value/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/SaslRequest.java Mon Aug 14 08:16:15 2017
@@ -17,127 +17,41 @@
* under the License.
*
*/
-
package org.apache.directory.ldap.client.api;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
import org.apache.directory.api.ldap.model.constants.SaslQoP;
import org.apache.directory.api.ldap.model.constants.SaslSecurityStrength;
import org.apache.directory.api.ldap.model.message.Control;
-import org.apache.directory.api.util.Strings;
-
/**
* Holds the data required to complete the SASL operation
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-public abstract class SaslRequest
+public interface SaslRequest
{
- /** The mechanism used to decode user identity */
- protected String saslMechanism;
-
- /** The list of controls */
- protected List<Control> controls = new ArrayList<>();
-
- /** The username */
- protected String username;
-
- /** The credentials */
- protected byte[] credentials;
-
- /** The realm name on the server */
- protected String realmName;
-
- /** The authorization ID of the entity */
- protected String authorizationId;
-
- /** The quality of protection */
- protected SaslQoP qualityOfProtection;
-
- /** The security strength */
- protected SaslSecurityStrength securityStrength;
-
- /** Require mutual authentication */
- protected boolean mutualAuthentication = false;
-
-
- /**
- * Creates a new instance of SaslRequest.
- *
- * @param saslMechanism
- * the SASL mechanism
- */
- protected SaslRequest( String saslMechanism )
- {
- this.saslMechanism = saslMechanism;
- }
-
-
- /**
- * Adds the given controls.
- *
- * @param controls the controls
- */
- public void addAllControls( Control[] controls )
- {
- this.controls.addAll( Arrays.asList( controls ) );
- }
-
-
- /**
- * Adds the given control.
- *
- * @param control the control
- */
- public void addControl( Control control )
- {
- this.controls.add( control );
- }
-
-
/**
* Gets the authorization ID.
*
* @return the authorization ID
*/
- public String getAuthorizationId()
- {
- return authorizationId;
- }
-
+ String getAuthorizationId();
+
/**
* Gets the controls.
*
* @return the controls
*/
- public Control[] getControls()
- {
- return controls.toArray( new Control[0] );
- }
-
+ Control[] getControls();
+
/**
* Gets the crendentials
*
* @return the credentials
*/
- public byte[] getCredentials()
- {
- if ( credentials != null )
- {
- return credentials;
- }
- else
- {
- return Strings.EMPTY_BYTES;
- }
- }
+ byte[] getCredentials();
/**
@@ -145,21 +59,15 @@ public abstract class SaslRequest
*
* @return the quality of protection
*/
- public SaslQoP getQualityOfProtection()
- {
- return qualityOfProtection;
- }
-
-
+ SaslQoP getQualityOfProtection();
+
+
/**
* Gets realm name.
*
* @return the realm name
*/
- public String getRealmName()
- {
- return realmName;
- }
+ String getRealmName();
/**
@@ -167,10 +75,7 @@ public abstract class SaslRequest
*
* @return the SASL mechanism
*/
- public String getSaslMechanism()
- {
- return saslMechanism;
- }
+ String getSaslMechanism();
/**
@@ -178,21 +83,15 @@ public abstract class SaslRequest
*
* @return the security strength
*/
- public SaslSecurityStrength getSecurityStrength()
- {
- return securityStrength;
- }
-
+ SaslSecurityStrength getSecurityStrength();
+
/**
* Gets the username.
*
* @return the username
*/
- public String getUsername()
- {
- return username;
- }
+ String getUsername();
/**
@@ -200,107 +99,5 @@ public abstract class SaslRequest
*
* @return the flag indicating if mutual authentication is required
*/
- public boolean isMutualAuthentication()
- {
- return mutualAuthentication;
- }
-
-
- /**
- * Sets the Authorization ID
- *
- * @param authorizationId The authorization ID
- */
- public void setAuthorizationId( String authorizationId )
- {
- this.authorizationId = authorizationId;
- }
-
-
- /**
- * Sets the credentials.
- *
- * @param credentials the credentials
- */
- public void setCredentials( byte[] credentials )
- {
- this.credentials = credentials;
- }
-
-
- /**
- * Sets the credentials.
- *
- * @param credentials the credentials
- */
- public void setCredentials( String credentials )
- {
- this.credentials = Strings.getBytesUtf8( credentials );
- }
-
-
- /**
- * Sets the flag indicating if mutual authentication is required.
- *
- * @param mutualAuthentication the flag indicating if mutual authentication is required
- */
- public void setMutualAuthentication( boolean mutualAuthentication )
- {
- this.mutualAuthentication = mutualAuthentication;
- }
-
-
- /**
- * Sets the quality of protection.
- *
- * @param qualityOfProtection the quality of protection
- */
- public void setQualityOfProtection( SaslQoP qualityOfProtection )
- {
- this.qualityOfProtection = qualityOfProtection;
- }
-
-
- /**
- * Sets the realm name.
- *
- * @param realmName The realm name
- */
- protected void setRealmName( String realmName )
- {
- this.realmName = realmName;
- }
-
-
- /**
- * Sets the SASL mechanism
- *
- * @param saslMechanism the SASL mechanism
- */
- protected void setSaslMechanism( String saslMechanism )
- {
- this.saslMechanism = saslMechanism;
- }
-
-
- /**
- * Sets the security strength.
- *
- * @param securityStrength the security strength
- */
- public void setSecurityStrength( SaslSecurityStrength securityStrength )
- {
- this.securityStrength = securityStrength;
- }
-
-
- /**
- * Sets the username.
- *
- * @param username the username
- */
- public void setUsername( String username )
- {
- this.username = username;
- }
+ boolean isMutualAuthentication();
}