Author: david.lloyd(a)jboss.com
Date: 2008-03-27 01:50:00 -0400 (Thu, 27 Mar 2008)
New Revision: 3795
Modified:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CommonKeys.java
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java
Log:
JBREM-907 - authentication retry counter
Modified: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CommonKeys.java
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CommonKeys.java 2008-03-27
05:09:50 UTC (rev 3794)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/CommonKeys.java 2008-03-27
05:50:00 UTC (rev 3795)
@@ -42,6 +42,10 @@
* the local endpoint is anonymous, defaults to {@code null}.
*/
public static final AttributeKey<String> AUTHORIZATION_ID =
key("AUTHORIZATION_ID");
+ /**
+ * The maximum number of times to retry authentication before giving up and failing.
+ */
+ public static final AttributeKey<Integer> AUTH_MAX_RETRIES =
key("AUTH_MAX_RETRIES");
// TODO: add keys for SSL/TLS
Modified:
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java
===================================================================
---
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java 2008-03-27
05:09:50 UTC (rev 3794)
+++
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java 2008-03-27
05:50:00 UTC (rev 3795)
@@ -94,6 +94,8 @@
private final Set<RequestIdentifier> liveRequestSet =
CollectionUtil.synchronizedSet(new WeakHashSet<RequestIdentifier>());
private final Set<ServiceIdentifier> liveServiceSet =
CollectionUtil.synchronizedSet(new WeakHashSet<ServiceIdentifier>());
+ private int authRetriesLeft = 2;
+
/**
* The negotiated protocol version. Value is set to {@code min(PROTOCOL_VERSION,
remote PROTOCOL_VERSION)}.
*/
@@ -139,6 +141,14 @@
public JrppConnection(final AttributeMap attributeMap) {
this.attributeMap = attributeMap;
+ final Integer retries = attributeMap.get(CommonKeys.AUTH_MAX_RETRIES);
+ if (retries != null) {
+ final int actualRetries = retries.intValue();
+ if (actualRetries < 0) {
+ throw new IllegalArgumentException("Value of AUTH_MAX_RETRIES
attribute must be greater than or equal to zero");
+ }
+ authRetriesLeft = actualRetries;
+ }
ioHandler = new IoHandlerImpl();
protocolHandler = new RemotingProtocolHandler();
}
@@ -403,6 +413,8 @@
if (state.transitionExclusive(State.FAILED)) {
failureReason = reason;
state.releaseExclusive();
+ ioSession.close();
+ protocolContext.closeSession();
}
}
@@ -792,6 +804,10 @@
write(output, MessageType.AUTH_FAILED);
output.writeUTF("Unable to initiate SASL
authentication: " + ex.getMessage());
output.commit();
+ if (authRetriesLeft == 0) {
+ close();
+ }
+ authRetriesLeft--;
}
return;
}
@@ -849,6 +865,11 @@
log.debug("JRPP client failed to authenticate: %s",
reason);
final SaslClientFilter oldClientFilter =
getSaslClientFilter();
oldClientFilter.destroy();
+ if (authRetriesLeft == 0) {
+ close();
+ return;
+ }
+ authRetriesLeft--;
final CallbackHandler callbackHandler =
getClientCallbackHandler(attributeMap);
final Map<String, ?> saslProps =
getSaslProperties(attributeMap);
final String[] clientMechs =
getClientMechanisms(attributeMap);
@@ -856,7 +877,6 @@
final SaslClient saslClient =
Sasl.createSaslClient(clientMechs, authorizationId, "jrpp", remoteName,
saslProps, callbackHandler);
final SaslClientFilter saslClientFilter =
getSaslClientFilter();
saslClientFilter.setSaslClient(ioSession, saslClient);
- // todo - retry counter - JBREM-907
sendAuthRequest();
return;
}
Show replies by date